So you have sorted it out and not getting the error anymore?
Printable View
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.
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 :) )
Code: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|NoCombatTriggers", values = "HitCriticals|HitLocationOn|CriticalsOn|NoCombatTriggers", 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
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.
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 ... @#$@#$ :)
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)
CallingCode: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|NoCombatTriggers", values = "HitCriticals|HitLocationOn|CriticalsOn|NoCombatTriggers", 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)
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
Code:<windowclass name="ActionMelee" merge="join" >
<script merge = "delete" />
<script file="scripts/manager_action_melee.lua" />
</windowclass>
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?
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/forum...Dice-(DM-only)
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 :) ).