PDA

View Full Version : Puttering around with Automation



Fezzik Buttercup
March 12th, 2022, 03:40
So I'm playing around with various other extension, and I'm a little confused by the audio extension (originally overseer) and I can't figure out where

library_recordtype_label_audio

is actually called. It's in the strings and it labels the sidebar button, but no where in the extension is it mentioned again, nor can I find it in GURPS or CoreRPG files.

Fezzik Buttercup
March 12th, 2022, 03:44
So if you were going to automate, would you


use something like AudioOverseer in the Options with (Hit location, Criticals, Hit Location and Criticals)
use a table [sidebar[ (I'm not sure how to call that type of table from a script)
screw it all, and put everything automated in script tables
combination of the above somehow
I've already done this, let me send it to you you poor soul :)

ronnke
March 12th, 2022, 05:13
So I'm playing around with various other extension, and I'm a little confused by the audio extension (originally overseer) and I can't figure out where

library_recordtype_label_audio

is actually called. It's in the strings and it labels the sidebar button, but no where in the extension is it mentioned again, nor can I find it in GURPS or CoreRPG files.

I'm not familiar with the extension, but maybe that extension includes another one where the label is used? I'm just speculating. I know you can build ruleset on top of other rulesets, but I'm not sure if the same could can be done with extensions.


So if you were going to automate, would you


use something like AudioOverseer in the Options with (Hit location, Criticals, Hit Location and Criticals)
use a table [sidebar[ (I'm not sure how to call that type of table from a script)
screw it all, and put everything automated in script tables
combination of the above somehow
I've already done this, let me send it to you you poor soul :)


That's a very open question. It really depends on what you are trying to automate. If AudioOverseer does what you want, then use that as the starting point.

Fezzik Buttercup
March 12th, 2022, 06:33
I haven't found anything in the files of the extension; I doubt it's somewhere in FGU hardcode (that seems a bit silly unless they're planning on using it in the future).

I looked at GURPS 4E table rolls (I don't think it's really around); that could be a start point too, but the code is a bit scattered and its not really compatable with FGU as it is.

Mostly i was thinking if new people were playing, automating combat rolls (hit locations, criticals) would be easier and make combat quicker until they got the hang of things (and would make the GM with 40 monsters faster too)


This is my algorithm in very rough: (not sure what options might be the most robust)


1 need to check to see how much automation might be wanted (both have to observe chat to some extent)
A) in options -- probably all done in code
B) OR do it similar to audio overseer (set up what is triggered) 2 run appropriate scripts :) -- this would require either looking at Tables (sidebar) or tables in code

A and B) NPC's yes/no; PC's how much automation?
1) PC complete automation
- choose maneuver and just roll the die; random hit location, criticals and damage automatically calculated
2) PC partial automation
- player can choose some or all of:
Hit location
criticals
damage
3) PC "Stay away from my dice, I wanna roll!"
- no automation requested

ronnke
March 12th, 2022, 10:05
For me personally, I don't care either way for automation. I play face to face games without automation and enjoy the games just fine. However, my experience is not the same for everyone and there are many who desire automation, so to cater for as many people as possible it should be included. We are all aware that SJG has been explicit in their online policy on the topic of automation of their game mechanics. The good news...I have been granted permission to automate some things, such as damage calculators. The bad news, time is a limited resource. So, while I am working on it, it can only happen when time permits and I feel motivated to do something, those two things don't always coincide.

YAKO SOMEDAKY
March 12th, 2022, 11:48
I've been regular here on the GURPS forums, but over time I've learned that Ronnke does things at his time and the only thing I want is for what is listed in the first topic to be accomplished, the rest is all very good.
Body parts, damage type, Damage Resistance, Distance modifier on grid map, size modifier, health bar...but one day it comes out and I will be super happy and happier if one day I see material from GURPS being sold.

damned
March 12th, 2022, 12:34
library_recordtype_label_audio

is a tring resource that is used to label the sidebar button that launches the extension interface

Fezzik Buttercup
March 12th, 2022, 18:42
I would LOVE to waste money on original in game material for GURPS! I would also love for them to take up Ronnke's hard work and make it official!

I'm a rank newbie with this scripting; I miss BASIC on my Commadore 64 (Yes, I'm that old!) :)

Thanks Damned; what I can't fitgure out is where it's being called to actually make the label; the only reference is the one <string name =" ....> in the original extension file and I can't fine anywhere in any of the other files that says "hey, this is the label for this button!". If I use Overseer as a starting point, I'll need to change that name so it doesn't conflict with the Audio if I use it (which I assume it would and cause a mess :) )

I'm only doing this because I want to putter around; you guys have all done a ton of work. I think mostly I'm making up for not actually having a game to play in at the moment.

damned
March 12th, 2022, 23:45
Ok - I think you should first ask Celestian if you wish to reuse his code.

You create a string resource like this:


<string name="library_recordtype_label_mc_world">World Builder</string>

and you see the bit that says mc_world well that goes somewhere like this:


<windowclass name="mc_world">
....
</windowclass>

and


function onInit()

LibraryData.aRecords["mc_world"] = {
bExport = true,
aDataMap = { "mc_world", "reference.mc_world" },
aDisplayIcon = { "sidebar", "sidebar_down" },
sRecordDisplayClass = "mc_world",
}

end

it is not very obvious...

Fezzik Buttercup
March 13th, 2022, 01:24
Thanks Damned! I saw something with one of the other library_blah_blah _blah that looked just like that and it sort of clued a little bit but I was still like "what the smurf is that? that's not intuitive!" :)

I'll ask Celestian too; I don't think it will look much like his in the long run (I don't think I even need a sidebar button with my current train of thought; I'm just snatching the chat monitoring bit and the options)

I'm not sure I'll need the sidebar or the window; hopefully it will be helpful in the future for anything else.

Fezzik Buttercup
March 27th, 2022, 21:53
Ronnke and Damned

Is it bad (not good practice) for an extension to modify/replace an manager_actions_xxx.lua? I'm wondering because it would be best (I think, to call for a critical roll directly from those files instead of sniffing the chat until the appropriate message pops up). I'm not sure on this though. I'll post the extension (which is still raw (not RAW, but somewhat sloppy and uncooked) but working) shortly if anyone wants to have a gander. Currently it is registering melee/ranged criticals (success and failure); unarmed critical failure; spell critical failure; and head hit critical success (if the hit location is skull or face).

Mostly I want to get an idea from people that have more experience is I should keep it as it is 'observing' chat, or roll it from one of the combat/spell etc actions (which is scary in my mind but would only change a few lines basically calling the process).

Thanks!

bmos
March 27th, 2022, 22:35
Ronnke and Damned

Is it bad (not good practice) for an extension to modify/replace an manager_actions_xxx.lua? I'm wondering because it would be best (I think, to call for a critical roll directly from those files instead of sniffing the chat until the appropriate message pops up). I'm not sure on this though. I'll post the extension (which is still raw (not RAW, but somewhat sloppy and uncooked) but working) shortly if anyone wants to have a gander. Currently it is registering melee/ranged criticals (success and failure); unarmed critical failure; spell critical failure; and head hit critical success (if the hit location is skull or face).

Mostly I want to get an idea from people that have more experience is I should keep it as it is 'observing' chat, or roll it from one of the combat/spell etc actions (which is scary in my mind but would only change a few lines basically calling the process).

Thanks!You can replace specific functions in those named lua scripts, no need to replace them all. You can even do your stuff and then call the original function.
See the onInit function here: https://github.com/bmos/FG-PFRPG-Spell-Failure/blob/main/scripts/spell_failure.lua

Fezzik Buttercup
March 27th, 2022, 22:58
Thanks Bmos; I figured I could, just not sure if I SHOULD :) I'll putter around and see if it's worth it; I suspect it might be better, but I have to look at them again (I only scanned them trying to learn all this stuff).

Fezzik Buttercup
March 27th, 2022, 23:12
I need to do a lot of editing to remove some of the stuff that isn't used or was used once, then reconfigured (I've started and abandoned this as I grew better skills with lua and extensions; I have to say I'm probably at the peak of that first learning curve when I think I know a lot, but I actually don't -- I know I don't know a lot, but I don't know what I don't know :) ).

ronnke
March 27th, 2022, 23:57
Thanks Bmos; I figured I could, just not sure if I SHOULD :) I'll putter around and see if it's worth it; I suspect it might be better, but I have to look at them again (I only scanned them trying to learn all this stuff).

I don't think there is necessarily a right or wrong way to do it, but you should try and layer your extension as much as possible so any new changes to the ruleset won't break your extension. Doing what Bmos suggested is how I would handle it.

Fezzik Buttercup
March 28th, 2022, 03:16
I should have mentioned that gm rolls currently need to be on (and there is a little combat automation choice in options that has to be turned on). I'm not sure why gm rolls have to be on, but it's for whatever reason the audiooverseer also needs to... maybe the chat callback?

I'm looking into Bmos' suggestion :)

Fezzik Buttercup
March 28th, 2022, 19:37
If I have this right in my head now (it'll take me some time to really parse it to make sense to me fully) I have to roll the critical (if there is one, and they have the options turned on) in the _melee or _ranged (or spell, once I find that file :) ) and just after


rMessage.diemodifier = (bAddMod and rRoll.nMod or 0);

Comm.deliverChatMessage(rMessage);

in those two files. I think hit locations could be done then too if I wanted to try them?

I'm 99 44/100% sure that I can't do this in the GamesSystem.rollResult(#, #) because that only contains if it's critical and nothing else (it could return a critical for a skill roll, and I don't want to be rolling on a table since that function only gets passed #, not a roll. Side note I think I'm slowing understanding the DB functions a bit too (not sure what sMode is, but I'm suspecting it might be cut/imp/pi etc; I haven't done a search but I notice it isn't actually used in the _melee and _ranged, but it's declared)

(most of the time when I ask a question it's like thinking out loud)

seycyrus
March 28th, 2022, 22:00
I need to do a lot of editing to remove some of the stuff that isn't used or was used once, then reconfigured (I've started and abandoned this as I grew better skills with lua and extensions; I have to say I'm probably at the peak of that first learning curve when I think I know a lot, but I actually don't -- I know I don't know a lot, but I don't know what I don't know :) ).

What does Gurps Criticals rough.ext do? I loaded it up and I didn't see any difference.

Fezzik Buttercup
March 28th, 2022, 22:27
What does Gurps Criticals rough.ext do? I loaded it up and I didn't see any difference.

Make sure you go into options (little gear thingy) and make sure that 'combat automation' is not none (default) or locations only (doesn't work in that itteration). Currently I'm reworking it. And gm rolls have to be on

Then roll melee, ranged, spell, unarmed (can't be the skill, has to be punch, kick bite, etc -- I may be missing some unarmed techniques though) or spell



if Ronnke or someone else with brains (ie. anyone by me :) ) is looking, I seem to get an error (nil value) when I try to use GameSystem.rollResult... I basically cut and pasted the _melee file and all the other GameSystem results work; for now I've copied the rollResult into the 'new' _melee that I'm making and it works fine in there. So I'm not sure why it's being grumpy.

Fezzik Buttercup
March 28th, 2022, 22:42
Me for an hour and a half: Why isn't it picking up the fact that the spell is a critical failure! :confused:
Me an hour and half later: .... because you're using _melee.... :hurt:

ronnke
March 28th, 2022, 23:52
Me for an hour and a half: Why isn't it picking up the fact that the spell is a critical failure! :confused:
Me an hour and half later: .... because you're using _melee.... :hurt:

So you have sorted it out and not getting the error anymore?

Fezzik Buttercup
March 29th, 2022, 00:29
Sort of; I'm not sure where spells are done just yet, but ranged aren't triggered with the melee either, which makes perfect sense, since it's not melee :D

Now I'm just trying to figure out how to do both melee and ranged without them mucking one another up (you can't have two action handlers in the same file I think?).

I'm having masochistic fun; as long as I get little bits of success once in a while, I'll keep going.

Fezzik Buttercup
March 29th, 2022, 02:58
I have melee and ranged working (I think; seems to be). I like the idea of it doing it from the _melee and _ranged better than observing the chat, but I'm not completely sure I grasped bmos' suggestion -- I'm still basically adding script into those files and duplicating the code; so it'll only work well as long as the GURPS code isn't changed much? I'm not sure how to do it in another way that just uses the base scripts and call the critical -- the rMessage has to be 'given' to the critical and the only way it can do that is from inside, right? Anyway, the basics are below; ranged isn't different at all, and I think _ability will be the same (for Spells). (I think _ability rolls spells? it's in ability type data anyway so that's my guess :) )




local onMelee_old
function onInit()
--ActionsManager.registerModHandler("melee", modRoll);
ActionsManager.registerResultHandler("melee", onMelee_new);
onMelee_old = ActionMelee.onMelee
ActionMelee.onMelee = onMelee_new

--ActionsManager.registerResultHandler("criticals", onRoll)

-- OptionsManager.registerOption2("criticals", false, "option_header_client", "option_label_CombatAutomation", "option_entry_cycler",
-- { labels = "HitCriticals|HitLocationOn|CriticalsOn|NoCombatTri ggers", values = "HitCriticals|HitLocationOn|CriticalsOn|NoCombatTri ggers", baselabel = "NoCombatTriggers", baseval = "NoCombatTriggers", default = "NoCombatTriggers" })
--
-- OptionsManager.registerOption2("criticals_Source", false, "option_header_client", "option_label_CombatAutomation_Source", "option_entry_cycler",
-- { labels = "SubLocationsOn|SubLocationsOff", values = "SubLocationsOn|SubLocationsOff", baselabel = "SubLocationsOff", baseval = "SubLocationsOff", default = "SubLocationsOff" })

end

function onClose() ActionMelee.onMelee = onMelee_old end


function onMelee_new(rSource, rTarget, rRoll)

--Debug.chat("onMelee_new")
local rMessage = ActionsManager.createActionMessage(rSource, rRoll);
local nTotal = ActionsManager2.total(rRoll);

local bAddMod = false;
if GameSystem.actions[rRoll.sType] then
bAddMod = GameSystem.actions[rRoll.sType].bAddMod;
end

local node = DB.findNode(rRoll.sNode);
local sWeapon = DB.getValue(node.getParent().getParent(), "name", "");
local sMode = DB.getValue(node, "name", "");

-- Send the chat message
local bShowMsg = true;
if not rSource then
bShowMsg = false;
end

if bShowMsg then
local sTargetDesc = DB.getValue(node, "name", "");
local nTarget = DB.getValue(node, "level", 0);

rMessage.text = string.format("%s\n%s%s%s %s(%d):%s",
(string.format("%s%s",(rTarget and string.format("%s || ",rTarget.sName) or ""), rMessage.text)),
sWeapon,
((sWeapon and sWeapon ~= '' and sTargetDesc and sTargetDesc ~= '') and "\n" or ""),
sTargetDesc,
(rRoll.nMod ~= 0 and string.format("(%d%s%d)=", nTarget, (rRoll.nMod > 0 and "+" or ""), rRoll.nMod) or ""),
nTarget + rRoll.nMod,
--rollResult(nTotal, nTarget + rRoll.nMod)
Criticals.rollResult(nTotal, nTarget + rRoll.nMod)
);

rMessage.diemodifier = (bAddMod and rRoll.nMod or 0);



-- added script for critical check
if (TableRolls.criticalsTriggersOn(rMessage.text)) then
--Debug.chat("criticals on on melee")
local sAllTriggers = CombatOptions.OptionsManager.isOption("criticals","HitCriticals")
local sCriticalsOn = CombatOptions.OptionsManager.isOption("criticals","CriticalsOn")
local sLocationsOn = CombatOptions.OptionsManager.isOption("criticals","HitLocationOn")
local hitLocation
local bHeadBlow
if sAllTriggers then
sCriticalsOn = true
sLocationsOn = true
end
rMsg = rMessage
local sText = rMessage.text
--Debug.chat(sText)
if TableRolls.criticalCombatNeeded(sText) then
-- process critical hit/fial roll Roll -
--processRoll()
Criticals.processRoll(rMsg)
end
end -- added script end


Comm.deliverChatMessage(rMessage);

end
end

Fezzik Buttercup
March 29th, 2022, 03:57
For tweaking now (that I have spells working too!) I need to work on it saying the persons name instead of the GM in the critical for who did it (I think that should be easy?).

Then maybe work on hit locations.... I still have to think about how to do that AND handle criticals with this methodology.

And to use a table table (sidebar) instead of a script table.

Fezzik Buttercup
March 29th, 2022, 04:14
Getting a weird error though; seem to have stepped on someones toes. campaign/scripts/campaign_rollable.lua 120 attempt to call field 'performRoll (nil value) when I try to drag down an attack to the quick bar (it shows the level, in her case 15, instead of [MELEE]). I had some other melee's loaded while I was testing, so it was something that I did I think, but I didn't touch that; guess I need to find out whats calls it.

edit: also perform skill roll, so I'm thinking ... @#$@#$ :)

Fezzik Buttercup
March 29th, 2022, 17:57
Not figured out so far but I'm sure it has to do with the first bits in the onInit of the manager_action_(rolltype); I'm not getting something, or what I'm trying isn't going to work.

If I change it to this, it still gives me that problem (I pick up a number instead of a die roll -- double clicking gives that same message type)

local onMelee_old
function onInit()
--ActionsManager.registerModHandler("melee", modRoll);
ActionsManager.registerResultHandler("melee", onMelee);
onMelee_old = ActionMelee.onMelee
ActionMelee.onMelee = onMelee

--ActionsManager.registerResultHandler("criticals", onRoll)

-- OptionsManager.registerOption2("criticals", false, "option_header_client", "option_label_CombatAutomation", "option_entry_cycler",
-- { labels = "HitCriticals|HitLocationOn|CriticalsOn|NoCombatTri ggers", values = "HitCriticals|HitLocationOn|CriticalsOn|NoCombatTri ggers", baselabel = "NoCombatTriggers", baseval = "NoCombatTriggers", default = "NoCombatTriggers" })
--
-- OptionsManager.registerOption2("criticals_Source", false, "option_header_client", "option_label_CombatAutomation_Source", "option_entry_cycler",
-- { labels = "SubLocationsOn|SubLocationsOff", values = "SubLocationsOn|SubLocationsOff", baselabel = "SubLocationsOff", baseval = "SubLocationsOff", default = "SubLocationsOff" })

end

function onClose() ActionMelee.onMelee = onMelee_old end

--function onMelee (rSource, rTarget, rRoll)
--onMelee_new(rSource, rTarget, rRoll)
--end

function onMelee(rSource, rTarget, rRoll)


Calling
ActionsManager.registerResultHandler("melee", onMelee);

whether onMelee is as is or onMelee_new is the problem; keeping the next two lines doesn't affect anything except not any call to onMelee (new or normal) in the file

back to fishing.

edit edit:
I think I need to merge/join or replace in the xml
edit x3: not sure how to accomplish this. So far as it stands, I can roll criticals OR allow rolls to be dropped off the sheet, but not both... I'm sure it's about replace

<windowclass name="ActionMelee" merge="join" >
<script merge = "delete" />
<script file="scripts/manager_action_melee.lua" />
</windowclass>

seycyrus
March 30th, 2022, 02:12
Make sure you go into options (little gear thingy) and make sure that 'combat automation' is not none (default) or locations only (doesn't work in that itteration). Currently I'm reworking it. And gm rolls have to be on...

Not trying to be funny here... but this is meant to automatically roll on the critical hit table, when a critical hit is rolled? Or do I need to some additional coding myself?

Fezzik Buttercup
March 30th, 2022, 03:19
When you're testing it are you spamming out the rolls? I've noticed that if you roll attacks to quickly that they interfer with the critical results; if you give the dice just enough time to stop moving before you roll again you're usually ok. Keep in mind that the ext that I put out is in a very very rough form (but it does seem to be working at least when I try it); I'm trying a different method now that (hopefully) won't require watching the chat as the one you're using does.

(see image -- top roll I rolled the next too fast and it screwed up the next roll... that +3 was a modifier I put in to make her skill over 16 to make crit hunting easier -- the last one worked properly)

Everything seems to be fine on your end otherwise I think from the pictures; do you have any other extensions on that I can look at if that didn't help?

seycyrus
March 30th, 2022, 03:59
...
Everything seems to be fine on your end otherwise I think from the pictures; do you have any other extensions on that I can look at if that didn't help?

Hello. The issue stemmed from a conflicting extension (one that is not currently operational - the author is promising to look into it). It is, https://www.fantasygrounds.com/forums/showthread.php?43751-CoreRPG-based-On-Demand-Manual-Dice-(DM-only)

Fezzik Buttercup
March 30th, 2022, 18:00
The one your using right now Seycrus was actually inspired off Celestian's AudioOverseer. There are still a lot of functions in there that are not needed; as I said it was very rough -- if it works well for you and others though I'll see about trimming it down IF the more elegant version that is supposed to replace (modify) the GURPS melee, ability, and ranged action managers (currently they work, but only if you put the melee/ranged/ability(spell) in the quickbar and THEN restart FGU (if you try to use the values off the character sheet it doesn't like it... which is kinda useless and bad :) ).

Fezzik Buttercup
March 30th, 2022, 22:14
I think i get bmos' extension better now but I can't seem to get the simple
ActionsManager.registerResultHandler("meleecrit", onRoll);
onMelee_old = ActionMelee.onMelee
ActionMelee.onMelee = onMelee_new to recognize onMelee_new; it is just rolling the normal onMelee I think. (it's a normal roll, which is good, but it isn't even looking into _new (debug doesn't show it is).
I may have to go back to the other version and clean that one up and call that good enough because this is version is starting to make me sad :).

seycyrus
March 30th, 2022, 22:58
The one your using right now Seycrus was actually inspired off Celestian's AudioOverseer...

Re-reading my post made me realize that I might have been confusing. Celestian is going to look at fixing HIS extension. He has no idea about the conflict between his extension and yours.

Fezzik Buttercup
March 31st, 2022, 02:24
Nope, you were clear; I was just making a comment in fun that that critical ext. you are using was using Overseer as an inspiration (which was made by him)

Edit:
Also, I think it's rolling twice; I didn't test it with a PC in the campaign (just using the host ie. gm). I'm trying to fix it. When I get it looking better, rolling right, and maybe rolling off a module table instead of a script table I'll try to repost it. I might start a new thread too.

edit edit: I can't seem to reliably reproduce it; I think it might be just rolling a smidge too fast or something else; it occasionally spits out two rolls, but only one proper critical message. Let me know if it happens

edit edit edit!
(omg!)
Ok, apparently the see GM rolls doesn't have to be on for this to work (AudioOverseer did, but this doesn't; must be something else that caused it); it still rolls a gm roll, but the players doesn't show the gm roll
52235
52236
If anyone gets a chance to test this with more than one person, lemme know! (I can run and be a player once with ultimate)

editx4 : maybe the gm rolls do have to be off... puttering around to see if I can get hitlocations working on the chat version without continually rolling hit locations and overflowing the buffer.

YAKO SOMEDAKY
April 1st, 2022, 00:44
Fezzik just for you to be aware, your extension is working wonderfully, I did a simulated combat and there were some critical (hit and miss) and the rolls happened magically.

Fezzik Buttercup
April 1st, 2022, 01:32
Thanks Yako,
Let me know if you see any bugs like the gm seeing 2 rolls and the player only seeing one. I'm not even sure why that is happening, or where to look for it. I'd REALLY rather it wasn't looking at chat and I could use the onMelee function but I've had no luck getting that version to function (so to speak) properly without something messing up. I might have to dig deeper into the Gamesystem to see if I can figure out why it will call [MELEE] on the hotbar but blows a gasket when you use the character sheet directly.

YAKO SOMEDAKY
April 1st, 2022, 02:40
I did the tests on the same machine, but I'll test on a different PC and then I'll give you a feedback.

Fezzik Buttercup
April 1st, 2022, 02:45
Check the GM, and multiple players; players may see two rolls, but the GM's may remain hidden. I only have one PC so I can only test a GM and a player (I think). The GM may see two rolls with the GM roll being just a roll with no information.
There is a chance that I did something to the code while I was editing other things that caused it; I'm semi smart and copied the code before I started manipulating it again. :)
I'm not as good a boy as I should be an writting down all the changes as I make them, so that's probably not helping me at all

YAKO SOMEDAKY
April 1st, 2022, 04:51
I need to put a disk in my other PC, but in theory it would be a PC (GM) and 2 Mac's (Players).

YAKO SOMEDAKY
April 2nd, 2022, 03:01
Fezzik, in fact the move is doubled, I wouldn't say doubled, but when a critical hit (hit or miss) it rolls to the NPC and to the players in the combat tracker, I'll test as soon as the notes are ready if this roll happens for everyone the connected ones or if it happens for those who are in the combat tracker.

Fezzik Buttercup
April 2nd, 2022, 04:53
D'oh. I thought maybe if I switched it to addChatMessage from deliverChatMessage it would solve the problem, but now the GM sees one critical message and the player sees a different one

And they both see different hit locations.... * cries, sobs and curls up in a ball *

I'll see if using deliver for both solves some of it.

YAKO SOMEDAKY
April 2nd, 2022, 04:54
Fezzik, confirmed
When a crit happens (Miss or Hit) there is a roll for each person connected to the table.
I did the test with 2 Notebooks and 1 PC as a GM and with another open FG as a player, that is, after a critical came out, there were 4 rolls (1 for the GM and 1 for each player) I removed them from the combat tracker and repeated the roll, it was the same amount, I was disconnecting and the scrolls decreased as I disconnected from the table.
And yes, each one with their roll, as if 1 critical was worth for everyone to roll the table.

Fezzik Buttercup
April 2nd, 2022, 05:02
* sigh * Thanks Yako. I'll see if I can figure out how to do it just once; I assumed that if it was delivered to the chat it was just once and not once to each person (which is what must be going on).

I added hit locations in it too, and with two connected it displays the hit location twice -- with addChatMessage it is random to each output; with deliverChatMessage it spits out the same messages to everyone. I think I'm going to have to try to find some way to keep the output to one.

I was soooooo close :)