View Full Version : Ruleset Wizard - The new Ruleset development environment
Varsuuk
June 21st, 2023, 17:07
Is there a suggestion thread here or through the RW website?
One thing I find myself adding a lot in "Custom Properties" popup are textres for "static" and "tooltip" now there already exist ways to add a label and tooltip as a first-class citizen on the properties page - as long as you do it explicitly, which is not the best way if you want to be able to change many instances at once and of course - for internationalization.
I know it is all too easy to code-bloat a UI by adding too many functions and I am not the best judge yet for this app, but from what I've been doing, it comes up for many if not most controls. I'd love alongside "tooltip" property, if there were "tooltip-res" or whatever you call it. Same for the label if that's an option on the type of control.
Nothing big or earthshattering but it's a nice quality of life improvement - I think ;)
Varsuuk
June 21st, 2023, 17:18
Just tested one thing on 0.8.8 - the comment. Which is cool :)
I added it to the wrong control. Each time I start RW, I need to resize it down since it doesn't reset to "last position/size". I resized it too small and I confused a control since I apply an "advanced template" most times and therefore blank the "frame" or it would override my template. Long story short, I backspaced over the comment and went to add it elsewhere, before I did that I regenerated to see it "poof" and it did... but it left:
<percentile_abilityfield name="cha_reaction_mod" source="abilities.charisma.reactionmod">
<!---->
<anchored to="cha_morale_mod" />
<tooltip textres="charsheet_main_cha_reaction_mod_Tooltip" />
<tooltip textres="char_charisma_reactionmod_tooltip"></tooltip>
</percentile_abilityfield>
Then I tried just clicking the combo arrow on Developer Comment but NOT typing anything and sure enough when I regenned, I see:
<number_abilityfield name="cha_morale_mod" source="abilities.charisma.moralmod">
<!---->
<anchored to="cha_max_henchmen" />
<tooltip textres="char_charisma_moralemod_tooltip"></tooltip>
</number_abilityfield>
And thank you for this, since I stumbled across my typo of "moralmod" vs "moralemod" the former is a different type of game altogether ;)
EDIT: A fast vi edit of the 2 .rwp files to change the:
{"Name":"DevelopmentComments","Value":{"@xsi:type":"xsd:string"}},
back to:
{"Name":"DevelopmentComments"},
Took care of no longer generating the blanks. Maybe next update you can check for "empty" comments and not generate those. Minor issue, resolves itself eventually.
Varsuuk
June 21st, 2023, 18:52
Another small easily worked around issue is with copy/paste for controls with "custom anchoring"
I find it copies all the settings but always seems to not copy the "position" setting in the anchoring. I always get caught by that forgetting to reset it to "aboveleft" in new controls ;) and then I see the result and feel silly for constatly falling for it:
<label_combatvalues name="combat_move_rate_label">
<anchored to="combat_move_rate" position="aboveleft" offset="-8,-3" width="45" />
<static textres="char_movement_rate_label"></static>
<tooltip textres="char_movement_rate_tooltip"></tooltip>
<readonly />
</label_combatvalues>
The bold part poofs if you copy/paste the label control in the GUI.
greybeardgunner70
June 24th, 2023, 17:29
Is there an example (in one of Damned's many videos perhaps) of a checkbox being scripted with a function? I would like to create one where if the box is checked (when the PC is mounted), their encumbrance value is halved. Is it simply onValueChanged? How do I reference the checkbox as either selected or not selected?
bayne7400
June 24th, 2023, 19:02
onValueChanged
use a debug to get its value and you will see how it is referenced.
greybeardgunner70
June 25th, 2023, 14:30
I would like to setup a CS with multiple loadouts for the PC, based on the situation (Street, CQB, Field, and Other). See image.
57947
I have charsheet_inventory with 4 SubWindows. Is it possible to have a different instance of "inventoryframe" on each subwindow, so that I capture the functions of .inventorylist on each, while making them separate lists? I imagine I would have to add a script creating inventoryframe1, inventoryframe2, etc. along with similarly named instances of encumbrance_label and encumbranceload.
Is this possible without breaking CoreRPG? What might the script look like?
damned
June 26th, 2023, 00:21
Set up the various inventory tabs the same way you setup the character sheet tabs.
Moon Wizard
June 26th, 2023, 01:17
I usually recommend against more than one inventorylist, because it causes a "lot" more work to integrate with all the various default systems (party sheet, item transfer, parcels, etc.).
If you really want to show more limited information, you can create lists that are filtered by specific fields (such as "type" == "Weapon")
Regards,
JPG
damned
June 26th, 2023, 01:51
Im assuming that he will be using a filter to do this for those reasons. The filter might be on a new "field" to match his "situation".
greybeardgunner70
June 26th, 2023, 12:56
Thanks, I thought it would probably be more complicated (and possibly limiting) to be worth the effort. Really the only function I am looking for was the automatic calculation of the weight. Don't really need the party sheet automation even. This is for a homebrew modern set and so will never see publication (a mishmash of scavenged rules from multiple published rulesets). I will go with simply creating separate windowlists for each subtab and have the player add up the total weight for each.
Varsuuk
July 3rd, 2023, 05:53
How does one get the following to appear using the "custom anchoring" property?
<bottom parent="" offset="-30" />
If I put quotes like that, it attempts to escape them:
<bottom parent="""" offset="-30" />
greybeardgunner70
August 4th, 2023, 14:30
I am having an inventory issue. When the inventory tab is opened, everything looks as it should (see image)
58411
However, as soon as a player attempts to scroll through the inventory (when the number of items extends outside the window, of course), it creates a space between items (see image)
58412
Any thoughts on why this might be happening?
Elawyn
August 23rd, 2023, 07:48
Hi all, after the last update, all my roll are outdated... :(
I use this kind of code to manage rolls trough the CT:
function InitHandler(rSource, rTarget, rRoll)
local rMessage = ActionsManager.createActionMessage(rSource, rRoll);
Comm.deliverChatMessage(rMessage);
if rSource then
local nTotal = ActionsManager.total(rRoll);
local nodeChar = rSource.sCreatureNode;
rCreature = DB.findNode(rSource.sCTNode);
DB.setValue(nodeChar, "initresult", "number", nTotal);
end
end
"initresult" is a cross-linked field, to bring the rollresult in CT from the NPC/ Charsheet, what isnt working anymore. After the update, FG doesn`t finde "rSource" anymore, so the rolls wouldn`t trigger. Do anyone knows a workaround, I have to use to change my rollfunctions???
psicodelix
August 23rd, 2023, 08:05
Hi all, after the last update, all my roll are outdated... :(
I use this kind of code to manage rolls trough the CT:
function InitHandler(rSource, rTarget, rRoll)
local rMessage = ActionsManager.createActionMessage(rSource, rRoll);
Comm.deliverChatMessage(rMessage);
if rSource then
local nTotal = ActionsManager.total(rRoll);
local nodeChar = rSource.sCreatureNode;
rCreature = DB.findNode(rSource.sCTNode);
DB.setValue(nodeChar, "initresult", "number", nTotal);
end
end
"initresult" is a cross-linked field, to bring the rollresult in CT from the NPC/ Charsheet, what isnt working anymore. After the update, FG doesn`t finde "rSource" anymore, so the rolls wouldn`t trigger. Do anyone knows a workaround, I have to use to change my rollfunctions???
Hi Elawyn,
Do you mean the 0.8.9 update? I haven't noticed any rSource related problems in the handler functions.
Can you provide some more information to try to find out the cause of the problem?
Elawyn
August 23rd, 2023, 08:39
Hi psicodelix, yes, 0.8.9.
here is the error code:
58610
i tried to give a screenshot.
As you can see, there is only my RW extension loaded. I use different kinds of RollHandlers (I leared from your tutorials and damned`s videos). After the update no roll will work. it doesnt trigger the initial "if"..(rSource) / rTarget function.
second example:
function AbwehrHandler(rSource, rTarget, rRoll)
local rMessage = ActionsManager.createActionMessage(rSource, rRoll);
rMessage.text = rMessage.text;
if rTarget then
rMessage.text = rMessage.text .. " gegen " .. rTarget.sName;
end
Comm.deliverChatMessage(rMessage);
rCreature = DB.findNode(rSource.sCTNode);
if rTarget then
local rMessageResult = ChatManager.createBaseMessage(rSource, rRoll.sUser);
rMessageResult.text = rMessage.text;
local rTarget = DB.findNode(rTarget.sCTNode);
local nTotal = ActionsManager.total(rRoll);
local nAngriff = rTarget.getChild("angriff").getValue();
local nSchaden = rTarget.getChild("sfresult").getValue();
local nDiff = nAngriff - nTotal;
local nAP = nAngriff - 20;
local nTotalschwer = nTotal - 9;
local nAngriffschwer = nAngriff - 9;
local nodeChar = rSource.sCreatureNode;
local nSchwer = math.ceil(nSchaden*nDiff);
if nSchwer < 0 then
rCreature.getChild("differenz").setValue(0);
DB.setValue(nodeChar .. ".differenz", "number", 0);
elseif nSchwer >= 0 then
DB.setValue(nodeChar .. ".differenz", "number", nSchwer);
end
rCreature.getChild("apschaden").setValue(nAP);
DB.setValue(nodeChar .. ".apschaden", "number", nAP);
local nResult = rRoll.aDice[1].result;
if nResult == 20 and nTotalschwer > nAngriff and nAngriff >= 20 then
rMessageResult.text = "[KRITISCH] Du hast dem Angriff kritisch erfolgreich abgewehrt, der Angriff hat Dich nicht einmal gestreift und Du hast sogar einen Stellungsvorteil! Leichter Schaden: " .. nAP .. " AP";
DB.setValue(nodeChar .. ".stellung_number", "number", (2));
elseif nResult == 20 and nAngriff >= 20 then
rMessageResult.text = "[KRITISCH] Du hast den Angriff kritisch erfolgreich abgewehrt, der Angriff bleibt in Deiner Deckung haengen! Leichter Schaden: " .. nAP .. " AP";
elseif nTotal < nAngriffschwer and nAngriff >= 20 then
rMessageResult.text = "[NACHTEIL] Du bist getroffen und hast dich in eine unvorteilhafte Position gebracht! Schaden: " .. nSchwer .. " leichter Schaden: " .. nAP .. " AP";
DB.setValue(nodeChar .. ".stellung_number", "number", (-2));
elseif nTotal < nAngriff and nAngriff >= 20 then
rMessageResult.text = "[GETROFFEN] Du bist getroffen! Schaden: " .. nSchwer .. " leichter Schaden: " .. nAP .. " AP";
elseif nTotalschwer > nAngriff and nAngriff >= 20 then
rMessageResult.text = "[VORTEIL] Du hast die gegnerische Waffe beiseite geschlagen und einen Stellungsvorteil! " .. " leichter Schaden " .. nAP .. " AP";
DB.setValue(nodeChar .. ".stellung_number", "number", (2));
elseif nTotal >= nAngriff and nAngriff >= 20 then
rMessageResult.text = "[ABWEHRERFOLG] Du hast den Angriff erfolgreich abgewehrt! " .. " leichter Schaden " .. nAP .. " AP";
end
Comm.deliverChatMessage(rMessageResult);
end
end
if I try to roll from a rollfield from a windowlist, the roll will even not be executed.
in the CT i have linkedPCFields an use cross-linked number fields to display the results
psicodelix
August 23rd, 2023, 08:47
Could you tell me which line is 164?
Elawyn
August 23rd, 2023, 08:48
sorry :) sure.
"if rTarget then"
and this is a second line that throws the same error:
"rCreature = DB.findNode(rSource.sCTNode)"
an this is the beginning of the rollhandler that will not even be executed:
"function AngriffHandler(rSource, rTarget, rRoll)
local rMessage = ActionsManager.createActionMessage(rSource, rRoll);
rMessage.text = rMessage.text;
if (rSource) then
local nTotal = ActionsManager.total(rRoll);
local nSchaden = rRoll.SF;
..."
so i guess it doesnt finde "rSource"
Elawyn
August 23rd, 2023, 09:02
perhaps its easier to show the function in RW :
:58611
there line 22 throws the error (cant find rSource a nil Value)
psicodelix
August 23rd, 2023, 09:05
according to your first pic the error is in line 164, could you check it?
Beautiful ruleset BTW :)
Elawyn
August 23rd, 2023, 09:10
thank you. :) and i LOVE RW!!!
I am sorry, that was another Handler function build the same way. I am a bit excited...
line 164 was: if rTarget then
line 165 was: rCreature = DB.findNode(rSource.sCTNode)
it throws the "rSource a nil Value" error.
in the second Screenshot with another rollhandler function line 22 ("if rSoucre") causes the error.
sorry for confusion!
damned
August 23rd, 2023, 09:21
Before the first error add a Debug like this:
Debug.chat("rSource: ", rSource);
damned
August 23rd, 2023, 09:22
And right after the
function AbwehrHandler(rSource, rTarget, rRoll)
add the following:
Debug.chat("rSource: ", rSource);
Debug.chat("rTarget: ", rTarget);
Debug.chat("rRoll: ", rRoll);
Are they all giving you what you expect?
It looks like rSource isnt being sent?
Elawyn
August 23rd, 2023, 09:26
I try and tell
Elawyn
August 23rd, 2023, 09:32
here is the screenshot with the debug to chat command . first line is the "angriffHandler" (line 22) #1021 from damned
the rest ist #1022 "function AbwehrHandler"
both rSource and rTarget are nil
58612
i dont no why. before update (yesterday evening) everything worked and i didnt change anything.
disclaimer: all artwork is licensed (bought on graphic river) so i think its no problem to show the screenshots.
psicodelix
August 23rd, 2023, 09:49
it is difficult to trace the source of the problem without seeing the whole project, but you can try to install the previous version to check if it is something related to the update, here is a link:
https://mega.nz/file/msRDjJyL#DUrClmrlQLauqepOZxI9heKkVVqsT6lEVFiNp3BqU 3k
you must uninstall the current version first.
Elawyn
August 23rd, 2023, 10:07
I roll back to 0.8.8. everything work as expected. no more errors or nil Values occured
psicodelix
August 23rd, 2023, 10:23
that is worrying, would you mind sharing the project (or a part of it) to try to find the source of the problem? I would need the part where the dice roll is generated.
Elawyn
August 23rd, 2023, 10:31
thank you so much for your help. I can now use the RW as normal, perhaps there is a solution in future for coming updates, but for now I can play. If it is helpful, I can provide my extension, but be aware i am without coding experience so it is a self-made solution i build after watching videos from real coders like you and damned.
BTW: the Wizard is fullfilling my dream of making an extension for my self-written ruleset on a wonderful VTT, which allows such things. And I am damned so thankful for his video series (esp. the christmas specials). i learned enough to build this and unterstand quotes here in forum or in forums like stackoverflow to find a solution working for me for all the things and automation I want to insert.
Elawyn
August 23rd, 2023, 10:34
@psicodelix: sure I will provide you everything you need for trouble shooting. should I send you the whole extension data as pm? or only the snippet with my roll Handlers? I tried to give my extension a similar structure as you did with the OGL example.
Elawyn
August 23rd, 2023, 11:26
I attached in a zip all my used roll Handlers. If you need the whole extension, tell me. Do not hesitate to ask me any question about my weird structure...
My system uses competetive rolls, so I build all rolls like an attac roll but changed the not used DC against the results of the former roll of the opponent. I manage the data transfer in the CT by (hidden) number fields, cross-linked to the NPC/ charsheet. The damage rolls are quite normal I guess, but uses rTarget so I attached them too. The values "LP" and "AP" are hitpoints and endurancepoints. The SF value is a damage multiplier (damage is in most situations based on the roll difference)
name explanation:
InitHandler = initiative
AngriffHandler = attac
AbwehrHandler = defense (parry action)
AusweichenHandler = defense (evade action)
ResistenzHandler = resistance
SkillHandler = skill
SchockHandler = shocked
FertigkeitDefensivHandler = competetive defense skill roll
AbwehrAstralHandler = defense (magic)
BFHandler/ PZHandler = breakage
I hope this gives a clou , what I did within the rolls.
PantsORama
August 24th, 2023, 03:20
So is there anyplace to go to learn about anchoring objects in the UI.
I am not getting it.
damned
August 24th, 2023, 04:14
Anchoring to what...
The Ruleset Wizard gives you a bunch of GUI options that are much easier to work with in my opinion.
There are some videos here on Anchoring that might help.
https://www.youtube.com/channel/UCRCeeMZq2rhjRl0O0XZAloA/videos
Otherwise explain/share what you are trying to do and hopefully we can work it out together!
PantsORama
August 24th, 2023, 04:38
Thanks. I am trying to anchor container to a frame, and then anchor UI input elements within that container.
But I am really a baby when it comes to this. I am not even sure what questions to ask.
So I am going to watch these vids and do some experimentation. Then I can have more focused questions, I hope.
Thanks for pointing me in the right direction.
damned
August 24th, 2023, 04:50
Ok Frame i understand.
What is a container?
Moon Wizard
August 24th, 2023, 05:34
If you're talking about a subwindow/container object, they will contain a separate window class. You would need to create the window class that the container points to with the layout you want within the subwindow/container.
If you're talking about creating a generic framed control, after you position/size the frame; you would want to use the <anchored to="framename" position="insidetopleft" offset="#,#" width="#" height="#" /> to position controls within the field (assuming you want to position from the top/left corner of the frame with a fixed width and height).
Generally, I find it easiest to use an existing ruleset, and make minor adjustments to learn the system first.
I don't use the ruleset wizard at all, just define controls with positions relative to parent window and/or other controls.
Regards,
JPG
Trenloe
August 24th, 2023, 07:26
So is there anyplace to go to learn about anchoring objects in the UI.
I am not getting it.
Are you using the ruleset wizard application outside of FG or is this a question about general FG UI coding?
damned
August 24th, 2023, 07:38
Its a Ruleset Wizard question. You cant really mix coding in and out of the Wizard. You do it all in the Wizard. You can code by hand in the Wizard but you cant edit the files outside of the Wizard as they will get over-written when you regenerate the PAK file.
psicodelix
August 24th, 2023, 11:10
I attached in a zip all my used roll Handlers. If you need the whole extension, tell me. Do not hesitate to ask me any question about my weird structure...
My system uses competetive rolls, so I build all rolls like an attac roll but changed the not used DC against the results of the former roll of the opponent. I manage the data transfer in the CT by (hidden) number fields, cross-linked to the NPC/ charsheet. The damage rolls are quite normal I guess, but uses rTarget so I attached them too. The values "LP" and "AP" are hitpoints and endurancepoints. The SF value is a damage multiplier (damage is in most situations based on the roll difference)
name explanation:
InitHandler = initiative
AngriffHandler = attac
AbwehrHandler = defense (parry action)
AusweichenHandler = defense (evade action)
ResistenzHandler = resistance
SkillHandler = skill
SchockHandler = shocked
FertigkeitDefensivHandler = competetive defense skill roll
AbwehrAstralHandler = defense (magic)
BFHandler/ PZHandler = breakage
I hope this gives a clou , what I did within the rolls.
Sorry, sometimes the forum does not warn me of new messages... Thanks, I'll take a look and see if I can find the problem.
psicodelix
August 24th, 2023, 11:32
https://www.rulesetwizard.com/update-combat-tracker-walkthrough/ (https://www.rulesetwizard.com/update-combat-tracker-walkthrough/)
damned
August 24th, 2023, 12:14
https://www.rulesetwizard.com/update-combat-tracker-walkthrough/ (https://www.rulesetwizard.com/update-combat-tracker-walkthrough/)
Thats awesome!
Elawyn
August 24th, 2023, 12:32
Thx for looking over the rSource issue and thx for the ct workaround!
psicodelix
August 24th, 2023, 13:45
Ok, finally I managed to find and fix the problem, it was indeed a bug in 0.8.9.
I will release a hotfix asap.
Elawyn
August 24th, 2023, 18:15
Yeah, really good news. thank you very much for your great support!
psicodelix
August 24th, 2023, 21:18
Yeah, really good news. thank you very much for your great support!
I have just released version 0.8.10 which fixes the problem. Please update your installation and check that everything works correctly.
Elawyn
August 24th, 2023, 21:29
I installed the Hot fix and tested my roll Handlers. Every roll work as expected. No errors. No Nil values.
You ironed it out. Good Job. Whatever you did. :)
damned
August 25th, 2023, 00:23
Well done psicodelix
psicodelix
August 25th, 2023, 06:56
Great!
psicodelix
August 30th, 2023, 15:31
FYI, I am working on the next update of the wizard, to include the latest changes in the graphic section of the core. I hope it will be finished this week. Stay tuned.
Brotherkelly
September 24th, 2023, 14:26
Hi all,
I don't know whether this has been asked already (I did search but couldn't find anything).
I have a pre-defined list in a data file, as shown below, that I would like to add to a string cycler. I can get the following code to work with a Combo Box but not the String Cycler.
The error I get is:
[ERROR] Script execution error: [string "C:item_equipment:equipment_group_list"]:3: attempt to call global 'addItems' (a nil value)
Any thoughts?
Pre-defined data:
geartypes = {
"Clothing",
"Tools",
"Personal Electronics",
"Weapon Accessory",
"Data Systems",
"Communication",
"Surveillance",
"Prosthetics",
"Security",
"Medical",
"Power Packs",
"Ammo Clip",
"General",
"Drugs & Poisons"
}
Code for Combo Box:
function onInit()
super.onInit();
addItems(DataCommon.geartypes);
end
bayne7400
September 24th, 2023, 14:32
Combo boxes are weird. First try to define the table to a variable (assuming additems takes a table.) aTable=datacommon...
If that doesn't work on init run a loop of your table and use the add item function in the combo box script. I have used the latter method.
Brotherkelly
September 24th, 2023, 15:38
Combo boxes are weird. First try to define the table to a variable (assuming additems takes a table.) aTable=datacommon...
If that doesn't work on init run a loop of your table and use the add item function in the combo box script. I have used the latter method.
Thanks, but the combo box isn't the issue. I cannot get it to work with the String cycler.
bayne7400
September 24th, 2023, 15:44
Where exactly in the button_stringcycler.lua is "additems" function? Additems is part of the combobox script.
Brotherkelly
September 24th, 2023, 15:48
Where exactly in the button_stringcycler.lua is "additems" function? Additems is part of the combobox script.
I think you may have identified where I need to look, thanks.
I will investigate the button_stringcycler.lua function.
Brotherkelly
October 26th, 2023, 18:23
I couldn't resolve my issue so I reverted to just adding the data in the cycler list.
Brotherkelly
October 26th, 2023, 18:36
I have another question regarding the sidebar buttons.
I wanted to add a couple of campaign buttons in my new ruleset for Skillsa and Traits but wasn't sure how to do this. After looking at the videos posted by Damned for the White Lies Ruleset, I found a solution.
I implemented the same code that Damned used but get the result shown in the attached file. The Skills button is labelled but the Traits button is not (the blank one at the top of the Campaign section).
The code I added (in the Strings.xml) was:
<string name="Library_recordtype_label_skills">Skills</string>
<string name="Library_recordtype_label_traits">Traits</string>
And the code I added in the data_library.lua was:
LibraryData.aRecords["skill"] = {
bExport = true,
aDataMap = {"skill" , "reference.skills"},
aDisplayIcon = {"sidebar" , "sidebar_down"},
sRecordDisplayClass = "skills",
sSidebarCategory = "campaign",
}
LibraryData.aRecords["trait"] = {
bExport = true,
aDataMap = {"trait" , "reference.traits"},
aDisplayIcon = {"sidebar" , "sidebar_down"},
sRecordDisplayClass = "traits",
sSidebarCategory = "campaign",
}
Is there anything I am missing?
superteddy57
October 26th, 2023, 18:57
Some are built in, but you would need to create string resources and append the name with the record key.
Example
<string name="library_recordtype_label_trait">Traits</string>
<string name="library_recordtype_single_trait">Trait</string>
<string name="library_recordtype_empty_trait">« New Trait »</string>
This is not dependent on Ruleset Wizard, just overall how that system works within FG.
Brotherkelly
October 27th, 2023, 12:50
Some are built in, but you would need to create string resources and append the name with the record key.
Example
<string name="library_recordtype_label_trait">Traits</string>
<string name="library_recordtype_single_trait">Trait</string>
<string name="library_recordtype_empty_trait">« New Trait »</string>
This is not dependent on Ruleset Wizard, just overall how that system works within FG.
I added these extra lines but no change. Maybe there was something else I needed to do.
Anyway, I did some more digging into the Core RPG files and found that 'feats' was already defined. So I modified my code to utilise the feats string (with a minor renaming) and I have got what I want. The Traits sidebar button now shows the correct text and all the items in the list show correctly.
On to the next update.
greybeardgunner70
November 1st, 2023, 01:19
I have built a skills windowlist using Damned's great examples from his Xmas 22 series. Everything works just fine with one exception. See skill_detail image below.
I need to know if there is a special script or function that I need to use to have a dropped skill (using skill_card and skill_detail) pull a number from another script or from another place on the character sheet.
I have a script that automatically calculates "Skill Base" for each skill based on the attributes. I would need skill_detail to reference that script and call the named skill's Skill Base and populate the appropriate window on skill_detail.
I would also like for skill_detail to pull the encumbrance penalty from another window on the CS and populate that.
These numbers are then used to calculate the target number, so that a roll can be made from skill_detail.
greybeardgunner70
November 8th, 2023, 01:19
I think essentially I need a short tutorial on how "getparent" works in a script, so that I can use that to call certain stats off the CS when I use the "onDrop" function.
Brotherkelly
November 8th, 2023, 19:04
I think essentially I need a short tutorial on how "getparent" works in a script, so that I can use that to call certain stats off the CS when I use the "onDrop" function.
getParent() is used to step up a level within the database.
local nodeChar = window.getDatabaseNode().getParent().getParent();
This line provides the database node two levels (two instances of getParent() ) above the current node for the window. The current node in this case being charsheet.id-0001.combatpersonallist.id-0001
Therefore, after the getParent() has been applied, the new node is: charsheet.id-0001
You can now use this node to get data from other child nodes such as bod_current, bod_modifier, etc.
The lines below are from the database of my campaign.
<charsheet>
<id-00001>
<holder name="Octopus Knife Fight" owner="true" />
<age type="string">24</age>
<amount type="number">0</amount>
<appearance type="string">\n</appearance>
<attack_TN type="number">3</attack_TN>
<attack_TN_melee type="number">4</attack_TN_melee>
<attributes_misc_roll_level type="number">0</attributes_misc_roll_level>
<attributes_misc_roll_tn type="number">0</attributes_misc_roll_tn>
<bleeding_check type="string">Bleeding</bleeding_check>
<bod_current type="number">5</bod_current>
<bod_modifier type="number">0</bod_modifier>
<cha_current type="number">5</cha_current>
<cha_modifier type="number">0</cha_modifier>
<cleararmour_label type="string">Clear Amour Values</cleararmour_label>
<combatpersonallist>
<holder name="Octopus Knife Fight" owner="true" />
<id-00001>
<holder name="Octopus Knife Fight" owner="true" />
<attack_level type="number">3</attack_level>
<attribute_modifier type="number">0</attribute_modifier>
<combat_personal_stat type="string">Sm Arms</combat_personal_stat>
<combat_personal_statvalue type="string">smallarms</combat_personal_statvalue>
<combat_personal_weapon type="string">Gunther MP-20 SMG</combat_personal_weapon>
<personal_damage type="number">3</personal_damage>
<personal_target_number type="number">7</personal_target_number>
</id-00001>
</combatpersonallist>
<dex_current type="number">5</dex_current>
<dex_modifier type="number">0</dex_modifier>
<drop_item_check type="string">Drop Item</drop_item_check>
<edge_current type="number">3</edge_current>
<edge_modifier type="number">-1</edge_modifier>
<edge_value type="number">3</edge_value>
<enc_heavy type="number">60</enc_heavy>
<enc_light type="number">30</enc_light>
<enc_overloaded type="number">90</enc_overloaded>
<untrained_misc_roll_level type="number">0</untrained_misc_roll_level>
<untrained_misc_roll_tn type="number">16</untrained_misc_roll_tn>
<updatearmour_label type="string">Update Amour Values</updatearmour_label>
<wil_current type="number">6</wil_current>
<wil_modifier type="number">0</wil_modifier>
</id-00001>
</charsheet>
Hope this helps.
Moon Wizard
November 8th, 2023, 21:59
I recommend using the main DB package functions, instead of the individual node versions. It's safer for error handling, as well as a long term plan to migrate to DB package and deprecate the databasenode versions.
local nodeChar = DB.getParent(DB.getParent(window.getDatabaseNode() ));
or
local nodeChar = DB.getChild(window.getDatabaseNode(), "...");
Regards,
JPG
greybeardgunner70
November 28th, 2023, 02:21
local nodeChar = DB.getParent(DB.getParent(window.getDatabaseNode() ));
Does this direct it to search the entire database or simply go up 1 level and search? The number I am trying to call is on the Notes tab of the CS. I am trying to get it to populate on a windowlist of a sub window of the Abilities tab.
Brotherkelly
November 30th, 2023, 14:08
local nodeChar = DB.getParent(DB.getParent(window.getDatabaseNode() ));
Does this direct it to search the entire database or simply go up 1 level and search? The number I am trying to call is on the Notes tab of the CS. I am trying to get it to populate on a windowlist of a sub window of the Abilities tab.
This will go up two levels from the node you are currently at. Each getParent steps up one level.
greybeardgunner70
December 9th, 2023, 14:43
Is there a discussion somewhere on how to properly setup the file structure so everything will be included in the .pak when it is updated/exported? I clearly haven't done this correctly, since when I open the .pak on my laptop (vs my desktop where I created the ruleset), my graphics aren't importing.
bayne7400
December 9th, 2023, 15:09
Every time you export it pulls the graphics file from your hard drive. So if you move to another computer and the images are not in the same location it cant find them.
greybeardgunner70
December 9th, 2023, 15:31
Right, I understand that part. But if I were to want to export the ruleset and make it public, the images would have to be included in the .pak file. I need to know how to set that up.
The .pak file currently contains a Graphics folder, but it is empty. I could just copy the images into that folder, but there should be a way to have RW package them automatically, every time I generate a new pak file.
psicodelix
December 9th, 2023, 20:43
To make the wizard add the images to the pak file they have to be included in the project, and the path must be correct. Nothing else needs to be done.59436
greybeardgunner70
December 10th, 2023, 13:18
Here is the RW graphics file and the FGU error messages.
psicodelix
December 12th, 2023, 06:47
I think that the file path is not correct. Looking at your screenshot it looks like the path should start with C:\users\toddj\ instead of C:\users\Todd\.
greybeardgunner70
December 12th, 2023, 12:32
That is correct. users/todd is my desktop, users/toddj is my laptop. When I send the RW file or a PAK file to a friend who is assisting me with scripting, the images don't go through to him either. Just as they don't go through when I open the file on my laptop. When I create the frames and icons, I point RW to a folder on my hard drive where the images are kept. So this is my question, when I am ready to share the pak file, how do I package it so the images go with it? When I open the PAK file, it contains all the correct folders (including a graphics folder), but its empty. I know this works somehow, since I have used/opened Damned's tutorial examples. I'm sure I am missing something essential in the process, I just can't see it.
psicodelix
December 13th, 2023, 06:57
The first step would be to create a dedicated folder for your project and put the rwp file in it. Then you create a subfolder for the images, put the graphic files in it and add them to the project.
The last step is to make the wizard use relative paths. For this the simple option is to change the path by hand (by default the wizard uses absolute paths) and leave only the relative part, e.g. yourimgfolder\yourgraphicfile.png.
Another option is to check the advanced development option in the project options. With this option the wizard will use relative paths automatically (as long as the file is in a subfolder) but it will also create other source code management files and folders that you may not be interested in.
In any case, once the files have the relative path you can compress the whole folder and send it to someone else and everything will work correctly.
Elawyn
December 21st, 2023, 21:35
Hi Psicodelix, i have two questions to this action function, you use in your ruleset template (I modified it for my own RW based ruleset but only for the string values shown in chat output):
function action(draginfo)
local nodeWin = window.getDatabaseNode();
local rActor = ActorManager.resolveActor(nodeWin.getChild(".......")); -- To reach Character node
local rRoll = {};
rRoll.sType = "effect";
rRoll.aDice = {};
rRoll.nMod = 0;
rRoll.effect = window.name.getValue();
rRoll.nDuration = window.duration.getValue();
rRoll.sDesc = rRoll.effect .. " : " .. DB.getValue(nodeWin, "wirkung", "") .. "[" ..DB.getValue(nodeWin, "manoever_cycler", "") .. "]";
ActionsManager.performAction(draginfo, rActor, rRoll);
end
First: Is it possible to send that information shown in chat also in the effects field in the CT by ButtonPress (I can handle a ButtonPress command for a chat output)? If so, could you provide an idea, what the proper command/ way is?
Second: is it possible to reach the CoreRPG given field "duration" in the CT to set my operator from the according charsheet field as duration in the CT?
I know about different extensions dealing with actions/ effects for different rulesets. But they are much to complicated for me as non-coder to adapt. I am looking for a good aproach to have an automation for sending an effect in a despriptive way to the CT with the duration beside of dropping it by drag&drop (that works for the description except duration with this function and the corresponding onDragStart command). everything above that is a fruit, hanging too high for me. beside that I am interested in a way to learn about or see a template for RW, that allows such things ;)
Wish you the best and a merry christmas!
Elawyn
greybeardgunner70
January 14th, 2024, 14:10
I have been developing a Harnmaster character sheet using Ruleset Wizard. Everything is working peachy and how I want it, with one exception. When a player fills out their Inventory to the point scrolling is required, when they scroll there are spaces created between items that make it hard to tell exactly where you are. I realize this is very much a third party use of FGU and you guys aren't at all beholden to help someone who is essentially tinkering with your product, but I was hoping perhaps this was something you had run into before and you could tell me what's causing it. I have increased the size of the windowlist thinking perhaps there were built in limits to how small it could be, but that didn't change things. Clicking on anything in the window, resets the list (edit list, item info icon, etc). See image.
59705
59706
Moderator: Moved to the Ruleset Wizard thread.
greybeardgunner70
January 15th, 2024, 12:44
I have been developing a Harnmaster character sheet using Ruleset Wizard. Everything is working peachy and how I want it, with one exception. When a player fills out their Inventory to the point scrolling is required, when they scroll there are spaces created between items that make it hard to tell exactly where you are. I realize this is very much a third party use of FGU and you guys aren't at all beholden to help someone who is essentially tinkering with your product, but I was hoping perhaps this was something you had run into before and you could tell me what's causing it. I have increased the size of the windowlist thinking perhaps there were built in limits to how small it could be, but that didn't change things. Clicking on anything in the window, resets the list (edit list, item info icon, etc). See image.
59705
59706
Moderator: Moved to the Ruleset Wizard thread.
I guess they thought this was a RW problem...
damned
January 16th, 2024, 00:56
Send me the project file(s) and Ill have a look.
Brotherkelly
February 9th, 2024, 18:39
Hi all, not sure if this is the best lace for this query but here goes.
I am still working through building the ruleset for Battletech and part of my update requires the roll of a dice within the function of another roll. I am using the ActionsManager.performAction function. The functions rolls the dice okay but the value it shows in the chat is always 0, never the number actually rolled. The code I am using is below:
local rAreaRoll = {
sType = "Dice",
sDesc = "Explosive Damage",
aDice = {type = "d6"},
nMod = 0,
nBonuses = 0,
TN = 0
};
Debug.chat("Roll",rAreaRoll);
ActionsManager.performAction(nil, rSource, rAreaRoll);
local rMessage = ActionsManager.createActionMessage(rSource, rAreaRoll);
rMessage.text = rMessage.text .. "vs " .. sNodeID;
Comm.deliverChatMessage(rMessage);
Can anyone point me in the right direction to get the desired output in the chat window?
bayne7400
February 9th, 2024, 19:30
Try this for your rRoll Table.
local rRoll = {};
rRoll.sType = "explosive";
rRoll.aDice = "d6";
rRoll.nBonuses = 0
rRoll.nMod = 0;
rRoll.sDesc = "Explosive Damage",
I wouldnt use Dice
Also make sure you have this.
function onInit()
ActionsManager.registerResultHandler("explosive", ExplosiveHandler);
end
then it will look for a function named "ExplosiveHandler" and dump your results into that
Brotherkelly
February 9th, 2024, 19:47
Try this for your rRoll Table.
local rRoll = {};
rRoll.sType = "explosive";
rRoll.aDice = "d6";
rRoll.nBonuses = 0
rRoll.nMod = 0;
rRoll.sDesc = "Explosive Damage",
I wouldnt use Dice
Also make sure you have this.
function onInit()
ActionsManager.registerResultHandler("explosive", ExplosiveHandler);
end
then it will look for a function named "ExplosiveHandler" and dump your results into that
Thanks, this worked.
Brotherkelly
March 7th, 2024, 19:34
Hi all, I have another query regarding the setTarget function for Tokeninstance.
The code below works fine for the host but the setTarget line doesn't work for the client. This is the third line from the end of the code
function onBeforeDiceRoll()
local nodeWin = window.getDatabaseNode();
local nodeChar = DB.getParent(DB.getParent(nodeWin));
Debug.chat(nodeWin,nodeChar);
local sDamageType = "";
local sAttackNode = DB.getChild(nodeChar,"inventorylist");
local sWeaponName = nodeWin.getChild("name").getValue();
Debug.chat(sAttackNode);
for k, v in pairs(sAttackNode.getChildren()) do
local sName = DB.getValue(v,"name");
-- Debug.console("Item Name = ",sName);
if sName == sWeaponName then
nAPValue = DB.getValue(v,"item_ap_value");
sDamageType = DB.getValue(v,"item_damage_type");
-- Debug.chat(sDamageType);
end
end
if string.lower(sDamageType) == "explosive" then
-- local rCreature = nodeChar.getChild(sSkillList);
-- local sAttackPointNode = nodeChar.getChild("areanode").getValue();
local sAttackPointNode = DB.getChild(nodeChar,"areanode").getValue();
-- Debug.chat(nodeChar,sAttackPointNode);
-- local rSourceAttackPoint = ActorManager.resolveActor(sAttackPointNode);
local rSource = ActorManager.resolveActor(nodeChar);
local nodeSourceCT = rSource.sCTNode;
local tokenSource = CombatManager.getTokenFromCT(nodeSourceCT);
Debug.chat(rSourceAttackPoint,rSource,tokenSource) ;
local tokenAttackPoint = CombatManager.getTokenFromCT(sAttackPointNode);
local imageAreaPoint = ImageManager.getImageControl(tokenAttackPoint);
Debug.chat("Token/Image",tokenAttackPoint,imageAreaPoint);
local aCTTokensTable = {};
local nTargetDistance,nAPValue = 0;
local nDamage = nodeWin.getChild("personal_damage").getValue();
-- Debug.chat("image",tokenAttackPoint,imageAreaPoint,nDamage);
nTargetDistance = nDamage;
-- Debug.chat("distances",nAPValue,nDamage,nTargetDistance);
aCTTokensTable = imageAreaPoint.getTokensWithinDistance(tokenAttack Point, nTargetDistance);
-- aCTTokens = tokenAttackPoint.getTargets();
Debug.chat(aCTTokensTable);
-- Set Targets in range of explosion point
-- managerDamage.AreaTargets(nTargetDistance,nodeChar ,sDamageType);
for k, v in pairs(aCTTokensTable) do
tokenSource.setTarget(true, aCTTokensTable[k].getId());
Debug.chat("Check");
end
-- Clear Explosion point token targeting
tokenSource.setTarget(false, tokenAttackPoint.getId());
end
end
The process goes into the for k,v in pairs loop but just doesn't set the targets for the client side.
Any suggestions?
Brotherkelly
March 10th, 2024, 20:14
Update on the previous message. I have resolved my issue. It was a timing issue with when the code to set the targets was being called. I've moved it to the attack roll button in a function on AfterDiceRoll. This works a treat for both the host and the client.
rmilmine
March 27th, 2024, 23:27
Question, I have a previously created extension that has windows.
Is there a way for me to import those windows into the Ruleset Wizard?
I see an import window checkbox but it is greyed out.
psicodelix
March 28th, 2024, 09:32
Question, I have a previously created extension that has windows.
Is there a way for me to import those windows into the Ruleset Wizard?
I see an import window checkbox but it is greyed out.
not at this moment, it is a feature that is in development, it is the next big feature that is planned, but there is no estimated date yet.
Elawyn
April 23rd, 2024, 07:25
Hi all, I just stumbled over an issue, perhaps since last update: I have created a subwindow for my NPC Sheet and -as usual before in RW- binded it with the Tab Template, like in Charsheet as I did several times before. Worked fine until last update. But now, the self-made Tab and the binded subwindow are not shown. I might be wrong, but Moon Wizard told something about the new structure and NPC sheet is already changed to the new settings. I don`t know how to change my tab to reach my new subwindow again or how to rename. Is there a possibility? For my understanding it should be an easy renaming ?
Regards
Elawyn
as a workaround I overwrite this snippet from record_npc.xml and added my Tab/ Subwindow
<root>
<windowclass name="npc" copy="record_window_tabbed">
<minimize>minimized_npc</minimize>
<gmexport>npc</gmexport>
<tab>
<name>main</name>
<resource>tab_main</resource>
<class>npc_main</class>
<embed/>
</tab>
<tab merge="add">
<name>notes</name>
<resource>tab_notes</resource>
<class>record_content_notes</class>
<embed/>
</tab>
<tab merge="add">
<name>spells</name>
<resource>tab_spells</resource>
<class>npc_spells</class>
<embed/>
</tab>
</windowclass>
</root>
this works, but what do I missing, using the RW functionallity? the wording is the same...
Elawyn
April 23rd, 2024, 14:50
another question, in the update notes of 9.0 was written, there is an NPC-template. I didn`t found in examples and also with updating it will not download in my ruleset wizard folder, am I doing something wrong, when updating? afaik I revcieve the whole installation folder only the first download?
dstuffle
April 24th, 2024, 15:08
What is the best way to use the buttongroup_radio template (from the CoreRPG common\template_button.xml) on a character sheet?
I've read the wiki and as far as I can tell they do it by editing the XML, which I haven't found a way to do inside ruleset wizard yet. Am I missing a button property that I need to do some set up on?
psicodelix
April 25th, 2024, 07:00
another question, in the update notes of 9.0 was written, there is an NPC-template. I didn`t found in examples and also with updating it will not download in my ruleset wizard folder, am I doing something wrong, when updating? afaik I revcieve the whole installation folder only the first download?
yes, the NPC sheet was updated in FG 4.4.9, and in wizard version 0.9.0 a new template with this sheet was included, you should have it in the installation folder. While I investigate the possible problem you can download the template file from here:
https://www.rulesetwizard.com/wp-content/uploads/examples/NPC%20Sheet%20template.rwp
psicodelix
April 25th, 2024, 07:04
What is the best way to use the buttongroup_radio template (from the CoreRPG common\template_button.xml) on a character sheet?
I've read the wiki and as far as I can tell they do it by editing the XML, which I haven't found a way to do inside ruleset wizard yet. Am I missing a button property that I need to do some set up on?
It is very simple, just follow the steps below:
- Drag an Option list control from the toolbox to your window.
- Fill the Items collection with the items you want it to contain.
- Select the orientation type, horizontal or vertical.
And in the most basic form, that's it.
60662
Elawyn
April 25th, 2024, 15:16
Thx!
dstuffle
April 25th, 2024, 15:23
Thank you! I'll give it a try.
Urheil
July 12th, 2024, 14:12
Hi. I've just found out about this app and tried to install it.
So, I tried to install the demo, but had an error:
61282
Just in case the error were from the .net version:
61283
It says there is a higher version installed.
I was trying to wrote you from the webpage, but couldn't, that's why i wrote you here.
Can you take a look into it?
Thanks!
psicodelix
July 12th, 2024, 16:34
Hi. I've just found out about this app and tried to install it.
So, I tried to install the demo, but had an error:
61282
Just in case the error were from the .net version:
61283
It says there is a higher version installed.
I was trying to wrote you from the webpage, but couldn't, that's why i wrote you here.
Can you take a look into it?
Thanks!
yes, of course, and thanks for the pics. Which operating system do you use? Have you tried running the installer as administrator?
Urheil
July 13th, 2024, 02:11
yes, of course, and thanks for the pics. Which operating system do you use? Have you tried running the installer as administrator?
Hi, i have windows 10 and yes, i tried as an administrator
Urheil
July 14th, 2024, 05:15
Hi, i have windows 10 and yes, i tried as an administrator
I was able to install it through cmd as administrator.
Right click, run as administrator was greyed so i thought i was already executing it as admin. I'll try the demo in the next days.
Thanks!
Urheil
July 14th, 2024, 05:45
I create a new extension. Tried to add a new window and crashed.
Reopen the demo version. Tried to open the created extension (basicaly the empty one just created) and couldn't because it said it's a demo version.
Is this known issue or an expected behavior?
The part that crashed, i guess it's not ok.
I was trying to duplicate the video :
https://www.youtube.com/watch?v=a40sQ-DDyKU
I'm getting very frustrated while trying to understand how creating extensions works
Brotherkelly
July 21st, 2024, 12:02
Hi, I am wondering if there is a way to set the tooltip for a Stringfield to be the same as the text entered into the field?
The reason for asking is that some of the stringfields I've set up in my ruleset are not long enough to show all the text - due to the limited space I have. For example, skills list has skill names that are longer than the Stringfield set for them.
It would be helpful to have the tooltip show the full name when you hover the cursor over it.
Any help is much appreciated.
superteddy57
July 21st, 2024, 13:54
From a pure coding standpoint, you could approach it with updating the tooltip when the value changes:
function onValueChanged()
self.setTooltipText(getValue());
end
Brotherkelly
July 21st, 2024, 14:43
From a pure coding standpoint, you could approach it with updating the tooltip when the value changes:
function onValueChanged()
self.setTooltipText(getValue());
end
Thanks, I'll give this a go.
Brotherkelly
July 21st, 2024, 14:51
This almost worked.
I needed to add it into an onInit function and it shows the text every time.
Thanks superteddy57.
damned
July 21st, 2024, 15:35
Hi, I am wondering if there is a way to set the tooltip for a Stringfield to be the same as the text entered into the field?
The reason for asking is that some of the stringfields I've set up in my ruleset are not long enough to show all the text - due to the limited space I have. For example, skills list has skill names that are longer than the Stringfield set for them.
It would be helpful to have the tooltip show the full name when you hover the cursor over it.
Any help is much appreciated.
Just do something like this on the Name string
function onInit()
local nodeChar = getDatabaseNode();
setTooltipText(DB.getValue(nodeChar));
end
edit: too slow!
Brotherkelly
July 21st, 2024, 19:55
Thanks for the suggestion Damned. I will try it out. This will at least give me another option.
superteddy57
July 21st, 2024, 20:48
This almost worked.
I needed to add it into an onInit function and it shows the text every time.
Thanks superteddy57.
Oh yeah, the first set needs onInit(). You could take it further with what damned said into this:
function onInit()
updateTooltip();
end
function onValueChanged
updateTooltip();
end
function updateTooltip()
self.setTooltipText(getValue());
end
Brotherkelly
July 21st, 2024, 21:01
Thanks.
psicodelix
July 22nd, 2024, 07:53
I create a new extension. Tried to add a new window and crashed.
Reopen the demo version. Tried to open the created extension (basicaly the empty one just created) and couldn't because it said it's a demo version.
Is this known issue or an expected behavior?
The part that crashed, i guess it's not ok.
I was trying to duplicate the video :
https://www.youtube.com/watch?v=a40sQ-DDyKU
I'm getting very frustrated while trying to understand how creating extensions works
Hi, sorry, I've been on vacation for a few days with almost no access to a computer.
Indeed the demo version does not allow to load or save projects, but it should not produce any crash. Could you tell me how to reproduce this error?
On the other hand, creating an extension can be simple or very complex, what do you want to achieve?
Koshaker
September 15th, 2024, 17:36
Hi, i really need some help... I got some homemade rules and want to make a ruleset with Ruleset Wizard. But i got stuck. In my ruleset success of throwing dices - 6. In one throw can be 1 or 10+ dices. I want FG to check the result and massage in chat how much you got. But it always says "0 success"
code:
function resultHandler(rRoll)
local successes = 0
for _, diceResult in ipairs(rRoll.aDice or {}) do
if diceResult.result == 6 then
successes = successes + 1
end
end
local message = string.format("successes: %d", successes)
Comm.addChatMessage({text = message, sender = rRoll.sUser or ""})
end
I would be very grateful if you could help me
damned
September 15th, 2024, 22:29
use the inbuilt diceroller string - and roll something like 2d6s6 and it will do the successes for you.
Koshaker
September 15th, 2024, 23:55
Thanks! its was so easy, i feel myself a little shame... well, gonna try make next step by myself) its like take result of previous roll, take all dice exept 1 and 6 result, reroll it, count 1 and 6 from bouth rolls and decide wich of them more)
p.s. Your tutorials are amazing!
damned
September 16th, 2024, 00:02
Building auto-rerolling of a smaller set of dice is harder.
What I would do is:
1. Perform first roll
2. Count 1s and 6s and remaining dice and store them on a field on char/npc sheet
3. Make the remaining dice field rollable
4. it will roll remaining dice and add to 1s and 6s, declare result and then clear 1s, 6s and remaining from the character sheet
damned
September 16th, 2024, 01:17
Have a look at the reroll mechanic implementation in Tales from the Loop for a rough idea how Ive set this up.
psicodelix
September 17th, 2024, 07:03
note that the signature of the handler function is not as you have used it, but like this
function onRollResult(rSource, rTarget, rRoll)
probably that's why it didn't work, because instead of processing the roll you were processing the source.
Koshaker
September 17th, 2024, 19:56
I was trying to use the built-in FGButton function on the constitution parameter, so that after the roll " {body_current} + d6s6 " it would trigger the script from "Result handler function name"
function onRollResult(rSource, rTarget, rRoll)
local playerNode = DB.findNode(rSource.sCTNode)
if playerNode then
playerNode.getChild("lastRoll").setValue(rRoll.nTotal)
end
end
but its give me error about " String "Frontier:Scripts/RollResult.lua" :2: FindNode: Invalid parameter 1
i used GPT to find out, what can i do to solve this problem, but it was useless.
biggest part of time, i spend by trying use "rRoll.aDice" and save result by this function.
damned
September 18th, 2024, 02:23
Share your project file and directions to what element you are coding
If you are using AI to write the code for you it wont work. These AI tools do not know enough about FG to help you.
psicodelix
September 18th, 2024, 07:03
I was trying to use the built-in FGButton function on the constitution parameter, so that after the roll " {body_current} + d6s6 " it would trigger the script from "Result handler function name"
but its give me error about " String "Frontier:Scripts/RollResult.lua" :2: FindNode: Invalid parameter 1
i used GPT to find out, what can i do to solve this problem, but it was useless.
biggest part of time, i spend by trying use "rRoll.aDice" and save result by this function.
use Debug.chat(rSource) to view the contents of that variable and determine the source of the problem.
Koshaker
September 18th, 2024, 07:25
62033
first of all, i want to code at least one skill check, after that, i gonna use it for all others rools. Actualy i think it have to be some sort of big red button with text like "PUSH" wich can use any others rolls.
damned
September 18th, 2024, 07:46
Can you also share the RWP?
Koshaker
September 18th, 2024, 07:50
yes, sure. here
damned
September 18th, 2024, 07:54
RCVD. Now where are you trying to use rRoll/rSource?
Koshaker
September 18th, 2024, 08:06
I tried to follow your advice and save the roll results in a character's field. First, I attempted to use a Number Field, and then I tried using a Label. Later, I read that it's possible to create a virtual field that works only during the session, if I understood correctly. Unfortunately, I couldn't progress beyond the first step of your suggestion due to my limited programming knowledge.
1.
function SaveRollResult(rRoll, rSource, rTarget)
local playerNode = DB.findNode(rSource.sCTNode)
if playerNode then
playerNode.getChild("lastRoll").setValue(rRoll.nTotal)
end
end
2.
function SaveRollResult(rRoll, rSource, rTarget)
local playerNode = DB.findNode(rSource.sCTNode)
if playerNode then
local rollResultNode = playerNode.getChild("lastRoll")
if not rollResultNode then
rollResultNode = playerNode.createChild("lastRoll", "number")
end
rollResultNode.setValue(rRoll.nTotal)
else
print("Ошибка: Не удалось найти узел игрока.")
end
end
there was others, but looks pretty same
damned
September 18th, 2024, 09:05
And you want to roll #d6 and count 1s and 6s and reroll any remaining dice one more time.
Add all the 1s and all the 6s and compare them and declare a result?
Koshaker
September 18th, 2024, 09:27
Absolutely correct! However, it would be preferable if the reroll was a separate button that the player could use at will. Essentially, it gives the player the chance to risk getting either a critical success or a critical failure.
damned
September 18th, 2024, 12:55
This is not exactly what you want but it should give you some tangible ideas on how to do what you want.
https://www.fantasygrounds.com/forums/attachment.php?attachmentid=62039
62039
Koshaker
September 18th, 2024, 13:39
Wow, that sounds quite complex. Thank you, it will definitely help. I’ll try to adapt it to what I need in the end. If you’re interested, I can send it to you when I’m done!
SieferSeesSomething
September 20th, 2024, 20:00
Hi all, I just stumbled over an issue, perhaps since last update: I have created a subwindow for my NPC Sheet and -as usual before in RW- binded it with the Tab Template, like in Charsheet as I did several times before. Worked fine until last update. But now, the self-made Tab and the binded subwindow are not shown. I might be wrong, but Moon Wizard told something about the new structure and NPC sheet is already changed to the new settings. I don`t know how to change my tab to reach my new subwindow again or how to rename. Is there a possibility? For my understanding it should be an easy renaming ?
Regards
Elawyn
as a workaround I overwrite this snippet from record_npc.xml and added my Tab/ Subwindow
<root>
<windowclass name="npc" copy="record_window_tabbed">
<minimize>minimized_npc</minimize>
<gmexport>npc</gmexport>
<tab>
<name>main</name>
<resource>tab_main</resource>
<class>npc_main</class>
<embed/>
</tab>
<tab merge="add">
<name>notes</name>
<resource>tab_notes</resource>
<class>record_content_notes</class>
<embed/>
</tab>
<tab merge="add">
<name>spells</name>
<resource>tab_spells</resource>
<class>npc_spells</class>
<embed/>
</tab>
</windowclass>
</root>
this works, but what do I missing, using the RW functionallity? the wording is the same...
Did someone ever answer this question a few pages back? I am also curious how to add a new tab to a record window, preferably without having to mess with xml using this Ruleset Wizard.
I am trying out the demo and following Damian's Ruleset Wizard Extension Tutorial and the second video isn't working for me where a tab is added (https://www.youtube.com/watch?v=a40sQ-DDyKU). Even though it bugs out and is presumably fixed in future tutorials, it at least adds the tab and is overriding the original functionality, but it doesn't even do that for me. I'm guessing the way tabs work has been recently changed to involve this record_window_tabbed thing that I can't seem to find on the internet except for in this thread a couple pages back and another thread also in 2024, so it's got to be recent, I'm guessing. Is there a way to work around it with Ruleset Wizard currently so I can keep going on in the tutorial?
damned
September 20th, 2024, 23:21
I am trying to learn the new tabs thing still myself...
SieferSeesSomething
September 21st, 2024, 00:13
Oh wow, it must be fresh then. I suppose I'll just keep an eye on this thread, and wait for people smarter than myself, like you or psicodelix, to figure it out.
Do you think the Ruleset Wizard would still be useful to learn or does that signify other parts of the code have changed too much, and I should wait for some patches for the Ruleset Wizard before I jump in and try to figure it out? Was hoping to use it to help make extensions for existing rulesets. I was learning how to do it manually through XML and Lua before, and I could keep doing that, but this looks like it could really speed the workflow up.
For example, D&D 4th edition doesn't have classes, races, backgrounds, skills, etc, in the sidebar for some reason like other rulesets do, just feats and powers. I was thinking I could possibly use this tool to help mimic that behavior as an extension (and it'd be even more awesome if I could make it so you can drag them onto a character sheet to add them, too). I've got other ideas, but that's probably the next online campaign I'll run, so anything that speeds up the process to make extensions for it sounds tempting.
damned
September 21st, 2024, 00:27
You may have to do the tabs manually in XML (you can create manual XML files in your project via the RSW still) at this time.
Not only have tabs changed but they have not changed across all things at the same time.
Some have new tabs, some have old tabs and I think some might even be in a transitional state too right now.
Elawyn
September 22nd, 2024, 06:38
Hi, also after the last update, where the "npc_pictures" tab occurs, you need to set a xml based vertical tab additionally. But only for npc sheet.
62108
As Damned mentioned, you have to do a xml script. In my example you can see, it is very easy inside the Ruleset Wizard to create a new xml file an put your code in. I underlined my own code snippet inside the core template, you have to override. This example works, if you only want to add a vertical tab on npc sheet, take it and customize it into your wording. All the other tab functionalities are working in Ruleset Wizard without coding. If that was still familiar , I am sorry!
damned
September 22nd, 2024, 06:48
Great work! One small suggestion Elawyn - consider naming the file something like npc_tabs.xml - the word script might confuse you or someone else at a later time.
Elawyn
September 22nd, 2024, 07:00
Hi Damned, thanks for the hint. I will do.
Koshaker
October 13th, 2024, 08:24
Hello again.
I keep working on my ruleset, and have new porblem. I used the standard version with a character sheet that uses "SubWindow". I have charsheet. it has a subwindow. For work, I use charsheet_main and charsheet_weapon, which are switched via verticalTab. charsheet_weapon has a windowlist called weapon_detail. it contains a weapon_detail object. There is a fight cell in weapon_detail. I need to get the value of the Fight_current cell from charsheet_main and assign it to the fight cell from weapon_detail. I used like:
1.local nodeCharSheetMain = window.getDatabaseNode("charsheet_main");
2. local nodeWin = window.getDatabaseNode();
local nodePath = nodeWin.getPath();
local nodeList = nodeWin.getParent().getParent()
and numerous variation of that codes. But it didnt work. I know, i can put Fight_current cell in window list to set value, but i need to keep it on charsheet_main. Is there any solution of this problem?
thanks a lot!
damned
October 13th, 2024, 10:01
Dont get it from the Window. Get it from the database.
Something like:
local nodeChar = window.getDatabaseNode();
Debug.chat("nodeChar: ", nodeChar);
local nFight = DB.getValue(nodeChar, "fight_curr", 0);
Debug.chat("nFight : ", nFight );
Koshaker
October 13th, 2024, 12:01
Thanks for help! its was almost right, next code worked well
function onInit()
local nodeChar = window.getDatabaseNode();
local nodeCharSheetMain = nodeChar.getParent().getParent();
Debug.chat("nodeCharSheetMain: ", nodeCharSheetMain);
local nodePath = nodeCharSheetMain.getPath();
Debug.chat("nodePath: ", nodePath);
local nFight = DB.getValue(nodePath .. ".Fight_current", 0);
Debug.chat("nFight: ", nFight);
end
Koshaker
November 13th, 2024, 07:39
Hello again!
have a little question about combat tracker.
i used code for initrolls which i took from "Ruleset Wizard 014"
(function InitHandler(rSource, rTarget, rRoll)
local rMessage = ActionsManager.createActionMessage(rSource, rRoll);
Comm.deliverChatMessage(rMessage);
if (rSource) then
local nTotal = ActionsManager.total(rRoll);
rCreature = DB.findNode(rSource.sCTNode);
rCreature.getChild("initresult").setValue(nTotal);
end
end)
It works for GM, but did not for player. Do i need to use some sort of "msgOOB" to let players use initrolls by themself, or there is another way?
psicodelix
November 13th, 2024, 08:40
The PCs initiative is usually managed through the character sheet, using a linked field between the character sheet and the combat tracker, to avoid having to use OOB. If you want to do it from the CT you will have to use OOB.
Koshaker
February 7th, 2025, 13:04
Hello!
Hope you can help me, I have a character sheet, it has a page with used items. There is a separate list of windows with the use of ranged combat, the player can carry several types of weapons. Depending on the use of skills, the character can use different weapon capabilities. There is a conditional option for automatic shooting, but it is possible only if the "Auto" parameter is greater than zero. I figured out how to check for the presence of the necessary skill, but I can't figure out how to make FG check for the presence of the "Auto" parameter for the weapon used. Weapons are implemented through (.RWeaponList.id-00001, .RWeaponList.id-00002, etc.), every weapon slot have personal button for shoot. Is there any way to implement a check for a separate item?
Muagen
February 7th, 2025, 22:29
@psicodelix
Quick question. I know an update or two ago ended up breaking some rulesets developed with Ruleset Wizard. There was a kerfuffle. I'm kinda thinking about buying a license to do a ruleset or two.
Does everything work again now?
psicodelix
February 8th, 2025, 07:14
Hello!
Hope you can help me, I have a character sheet, it has a page with used items. There is a separate list of windows with the use of ranged combat, the player can carry several types of weapons. Depending on the use of skills, the character can use different weapon capabilities. There is a conditional option for automatic shooting, but it is possible only if the "Auto" parameter is greater than zero. I figured out how to check for the presence of the necessary skill, but I can't figure out how to make FG check for the presence of the "Auto" parameter for the weapon used. Weapons are implemented through (.RWeaponList.id-00001, .RWeaponList.id-00002, etc.), every weapon slot have personal button for shoot. Is there any way to implement a check for a separate item?
If I understand your description of the problem correctly, I think the easiest way would be to copy that “Auto” parameter when creating the weapon record in the character sheet, so you would have it along with the rest of the attributes of the weapon.
psicodelix
February 8th, 2025, 07:16
@psicodelix
Quick question. I know an update or two ago ended up breaking some rulesets developed with Ruleset Wizard. There was a kerfuffle. I'm kinda thinking about buying a license to do a ruleset or two.
Does everything work again now?
I am not sure what problem you are referring to, I have checked the development blog (https://www.rulesetwizard.com/blog/) and have not found any reference to that error.
In any case, the last update was quite some time ago and since then no user that I know of has reported any problems.
Muagen
February 8th, 2025, 14:39
I am not sure what problem you are referring to, I have checked the development blog (https://www.rulesetwizard.com/blog/) and have not found any reference to that error.
In any case, the last update was quite some time ago and since then no user that I know of has reported any problems.
Maybe I'm misremembering things, but I thought that sometime around FGU 4.5 a number of the rulesets built with Ruleset Wizard encountered issues with the changes to what was supposed to be referenced in the XML data. I see in your patch notes for RW that it's been brought in line with those changes, I think, but I just wanted to make sure.
Thanks for the reply and directing me to the development blog!
psicodelix
February 8th, 2025, 19:30
Yes, well, when there are big CoreRPG updates things usually break in all rulesets, not only in those made with RSW, and they have to be updated. I make sure that the templates and the generated code are always updated to the latest version.
rmilmine
June 3rd, 2025, 23:41
I created a new project.
When I try saving it I set the location.
It created 2 additional folders in the folder.
windows and xml.
When I try to save the project I get the following error
64520
Anyone have any idea why this error is happening. It was able to create this folder but doesn't seem to be able to save to it.
When I open the project it says there is a backup that it is opening instead.
psicodelix
June 4th, 2025, 06:58
Sometimes projects stored in cloud folders throw permission errors. The most common causes are:
1. Limited write permissions
OneDrive folders may restrict access if:
The program is not running with the same user privileges (e.g., not run as administrator).
Group policies or system security settings prevent access.
Fix:
Try running the program as Administrator
Check if the folder is marked as read-only
2. "Online-only" files/folders
OneDrive may mark files or folders as "online-only", meaning they aren’t actually present on disk until accessed.
Fix:
Right-click the folder and select “Always keep on this device”.
Make sure it shows a green checkmark icon instead of a cloud icon.
3. Sync conflicts or folder locking
OneDrive may lock files or folders while they’re being synced, preventing write operations.
Fix:
Wait for OneDrive to finish syncing (check the icon in the system tray).
Avoid using illegal characters in folder names (<, >, :, ", /, \, |, ?, *), as they can break sync.
4. Ransomware protection or Controlled Folder Access
Windows Defender and OneDrive can block unknown programs from writing to protected folders.
Fix:
Go to Windows Security > Virus & threat protection > Ransomware protection.
If Controlled Folder Access is enabled, add your program to the allowed apps list.
If none of that works, try saving the project outside the OneDrive folder.
rmilmine
June 5th, 2025, 00:06
I actually figured it out. I went and watched some of Damned's videos and saw how he created a new ruleset and followed those steps and it worked fine. I then copied the file content over and no problem. I think it was trying to put the result file into the one drive folder and not the fantasy grounds folder. Which was probably my misunderstanding of things.
rmilmine
June 20th, 2025, 01:14
What video is best for showing how to modify an existing ruleset window?
either on the rulese wizard website or damned's youtube
rmilmine
June 20th, 2025, 05:37
Ok, so, I'm watching the tutorial Damned did. Part 2 showed creating a window based off of the npc window in 5ed. If I want to add a single tab to a window, like say the classes tab, do you really need to enter each and every tab that is already in existence on the window I want to add the tab to?
LordEntrails
June 20th, 2025, 20:21
Ok, so, I'm watching the tutorial Damned did. Part 2 showed creating a window based off of the npc window in 5ed. If I want to add a single tab to a window, like say the classes tab, do you really need to enter each and every tab that is already in existence on the window I want to add the tab to?
No, there is now a better way to do it.
Psico showed me how and I have it on one of my windows in my ruleset. I don't remember all the detials, but have attached the script file that I used. You can get the FrontierSpace ruleset from the Forge for free and dig into it more. Sorry I don't have more time today to give you more info, but if youa re still stuck on Monday I can figure out all the details.
rmilmine
June 20th, 2025, 21:50
No, there is now a better way to do it.
Psico showed me how and I have it on one of my windows in my ruleset. I don't remember all the detials, but have attached the script file that I used. You can get the FrontierSpace ruleset from the Forge for free and dig into it more. Sorry I don't have more time today to give you more info, but if youa re still stuck on Monday I can figure out all the details.
Thanks.
Having a look at it now.
So I just need to create the window class and then call the function to register it with the window class it will be on?
rmilmine
June 21st, 2025, 00:55
I'm missing something not really sure what.
I created a window called: referenceclass_main (this is the name of an existing window class in pfrpg)
I only changed properties of the windowclass that I needed different from the one being replaced.
I did not change Data Source. I don't want to change it from what is in the original.
I added to that window a label and a string field. archetype_label and archetype.
I also added a string cycler called: classtype.
I set merge to join.
I also set the source property for the string field named archetype to .
I'm getting the following errors:
[6/20/2025 5:46:48 PM] [ERROR] Script execution error: [string "CoreRPG:scripts/manager_window.lua"]:62: attempt to call field 'getDatabaseNode' (a nil value)
I know I must be doing something wrong, or missed something, but no idea what.
*edit*
To add a little to this.
I put Core in a folder and loaded FG.
This function is the one giving the error.
function getWindowReadOnlyState(w)
if not w then
return true;
end
Debug.console(w)
return WindowManager.getReadOnlyState(UtilityManager.getT opWindow(w).getDatabaseNode());
end
I added the Debug.console in order to see what was in there.
The debug gives:
6/21/2025 8:55:47 AM] referenceclass_main = { fg unk }
psicodelix
June 27th, 2025, 06:56
could you share your full referenceclass_main window source code?
psicodelix
June 27th, 2025, 07:09
and why are you doing this?
"I also set the source property for the string field named archetype to ."
rmilmine
November 17th, 2025, 15:05
Couple of questions.
One does this check for updates, or is it manually done?
Two, I am working on a ruleset that is based off of CoreRPG.
I want to create a new record similar to skills in the 3.5 ruleset.
the record_skill.xml file has this
<windowclass name="referenceskill" copy="record_window" />
<windowclass name="referenceskill_header" copy="record_header" />
<windowclass name="referenceskill_main">
</windowclass>
If I wanted to replicate this, do I just make three separate windowclasses?
How do I get them to be put in the same file?
Do they need to be in the same file?
Do I need to create an xml file for any of this?
psicodelix
November 17th, 2025, 15:29
Hi rmilmine
Yes, the program automatically checks for updates. When an update is available, you will see the automatic update button.
As for the skills, you will need two window classes. I recommend that you download, open, and try the sidebar example from the example library on my website:
Examples Library – Ruleset Wizard (https://www.rulesetwizard.com/examples-library/)
I think that example does exactly what you need.
rmilmine
November 17th, 2025, 15:35
Thanks.
That will help.
dungeongrub
January 30th, 2026, 12:42
Anyone able to update me on how to use the new(ish)windowmenubar? I've used windowmenubar_recordsheet in a custom control for a new weapons sheet in my ruleset(called weaponsheet but I can't get the padlock to lock the fields in my two tabbed subwindows (called weaponsheet_main and weaponsheet_notes). I've tried using AI and it's sent me down all sorts of coding rabbit holes, none of which worked. Am I missing some LUA code somewhere? Thanks.
psicodelix
January 30th, 2026, 13:01
Check this post:
https://www.rulesetwizard.com/0-9-5-update/
The last section discusses the new window menu bar templates.
dungeongrub
January 30th, 2026, 13:52
Check this post:
https://www.rulesetwizard.com/0-9-5-update/
The last section discusses the new window menu bar templates.
Thanks, I read the update before posting - the link, share and close buttons in the menu bar are working fine, but the padlock is not locking the name field or any of the number and string fields in the sub-windows.
psicodelix
January 31st, 2026, 05:57
Thanks, I read the update before posting - the link, share and close buttons in the menu bar are working fine, but the padlock is not locking the name field or any of the number and string fields in the sub-windows.
In each of your subwindows, you should have a structure like this, which is what ultimately causes the controls to be locked or unlocked:
function onInit()
self.update();
end
function update()
local nodeRecord = getDatabaseNode();
local bReadOnly = WindowManager.getReadOnlyState(nodeRecord);
WindowManager.callSafeControlUpdate(self, "subwindow_control_name_1", bReadOnly);
WindowManager.callSafeControlUpdate(self, "subwindow_control_name_2", bReadOnly);
WindowManager.callSafeControlUpdate(self, "subwindow_control_name_3", bReadOnly);
end
dungeongrub
January 31st, 2026, 11:52
In each of your subwindows, you should have a structure like this, which is what ultimately causes the controls to be locked or unlocked:
function onInit()
self.update();
end
function update()
local nodeRecord = getDatabaseNode();
local bReadOnly = WindowManager.getReadOnlyState(nodeRecord);
WindowManager.callSafeControlUpdate(self, "subwindow_control_name_1", bReadOnly);
WindowManager.callSafeControlUpdate(self, "subwindow_control_name_2", bReadOnly);
WindowManager.callSafeControlUpdate(self, "subwindow_control_name_3", bReadOnly);
end
Thanks again! I put this in to one of the sub-windows but it's still not working.
I have a 'weaponsheet' main class which holds the windowmenubar custom class.
Two subwindows are 'sub_weaponsheet_main' and 'sub_weaponsheet_notes'. I put the code into windowclass: weaponsheet_notes just to try it as it only has 3 fields to lock: 'weight', 'stowage' and 'info'.
...I also tried putting the code into sub_weaponsheet_notes but it doesn't work either.
I put a couple of screen shots... if you had time could I ask you to take a look please? Thanks so much.
66425
66426
psicodelix
January 31st, 2026, 16:17
It seems to be correct. Could you share your project so I can test it?
dungeongrub
January 31st, 2026, 22:42
It seems to be correct. Could you share your project so I can test it?
Sure, that would be great!
psicodelix
February 1st, 2026, 08:08
Okay, at some point the way the lock is managed changed. Use the updated structure shown in the attached images.
dungeongrub
February 1st, 2026, 14:23
I don't know how you do it, but you did it! Outstanding - thanks very much for sorting it, I'm very happy with the result.
Thanks for bringing the community such a fantastic tool.66441
psicodelix
February 1st, 2026, 15:32
Thanks, I'm glad to hear it.
rmilmine
March 11th, 2026, 02:33
Question.
I am trying to create a window using the following window classes.
skill
skill_header
skill_main
skill has copy="record_window"
skill_header has copy="record_header"
I took this basic structure from CoreRPG and the quest window.
When I open this window up in fantasy grounds it has the isidentified button, and the nonid_icon and nonid_name text box.
Quest does not have this.
Quest xml:
<windowclass name="quest" copy="record_window" />
<windowclass name="quest_header" copy="record_header" />
<windowclass name="quest_main">
<script>
function onInit()
self.onLockModeChanged(WindowManager.getWindowRead OnlyState(self));
end
function onLockModeChanged(bReadOnly)
WindowManager.callSafeControlsSetLockMode(self, { "description", }, bReadOnly);
end
</script>
<sheetdata>
<anchor_column name="columnanchor" />
<header_column name="description_header">
<static textres="header_description" />
</header_column>
<ft_columnh name="description" />
<sub_column_gmnotes name="sub_gmnotes" />
</sheetdata>
</windowclass>
what ruleset wizard says the xml code is:
<windowclass name="skill" copy="record_window">
<placement>
<size height="300" width="300" />
</placement>
<sheetdata />
</windowclass>
<windowclass name="skill_header" copy="record_header">
<placement>
<size height="300" width="300" />
</placement>
<sheetdata />
</windowclass>
<windowclass name="skill_main">
<script file="campaign/scripts/skill.lua" />
<placement>
<size height="300" width="300" />
</placement>
<sheetdata>
<anchor_column name="anchorcolumn" />
</sheetdata>
</windowclass>
So why is it that Quest does not have the identified button and my window does?
LordEntrails
March 11th, 2026, 04:57
I'm thinking it has to do with the function populate found in record_window.lua
But not sure since my code skills suck
function populate()
if header then
local sHeaderClass = header.getValue();
if sHeaderClass == "" or sHeaderClass == "record_header" then
local sDefaultClass = string.format("%s_header", getClass());
if Interface.isWindowClass(sDefaultClass) then
header.setValue(sDefaultClass, getDatabaseNode());
end
end
end
if content then
local sContentClass = content.getValue();
if sContentClass == "" then
local sDefaultClass = string.format("%s_main", getClass());
if Interface.isWindowClass(sDefaultClass) then
content.setValue(sDefaultClass, getDatabaseNode());
end
end
end
end
rmilmine
March 11th, 2026, 05:08
From what I saw previously populate is the function that causes the buttons to be displayed.
It's probably something in the definition of quest
["quest"] = {
aDataMap = { "quest", "reference.quests" },
sSidebarCategory = "world",
tOptions = {
bExport = true,
},
["skill"] = {
aDataMap = { "skill", "reference.skills" },
sRecordDisplayClass = "skill",
sSidebarCategory = "campaign",
tOptions = {
bExport = true,
bID = true,
bPicture = true,
},
aCustomFilters = {
["Name Filter"] = { sField = "name" },
["Category Filter"] = { sField = "category" },
},
},
and there it is.
bID = true
and
bPicture = true
Those are what is making it different.
Thank you for pointing me there.
rmilmine
March 13th, 2026, 14:47
Is there a good example of how to do lists with the iedit, iadd and idelete buttons in ruleset wizard?
When I look at the section on the ruleset wizard website with videos the names don't really describe what is being discussed in each one.
Some do, most don't.
Thanks,
Robert.
rmilmine
March 13th, 2026, 15:33
Another question.
How do I do offsets with the advanced anchoring?
I want a button to be anchored to the right side of another control.
So I set right and right and the control name for one item in the advanced anchor, but how do I set the left so that the button is always 30 in width and moves with the anchored control on the right?
LordEntrails
March 13th, 2026, 19:31
Don't know about the iEdit etc buttons. Have you tried a Find in Files on an extracted copy of CoreRPG to see where it shows up?
Advanced anchoring is right above Custom Anchoring in the Properties window (part of the Display Anchoring section). Sorry, I don't know the difference between the two.
rmilmine
March 13th, 2026, 21:59
Don't know about the iEdit etc buttons. Have you tried a Find in Files on an extracted copy of CoreRPG to see where it shows up?
Advanced anchoring is right above Custom Anchoring in the Properties window (part of the Display Anchoring section). Sorry, I don't know the difference between the two.
Thanks, I had not noticed the custom anchoring, which is what I needed, and found it about 5 minutes after I made that post.
Custom anchoring has all the options that I expected advanced anchoring to have. Not sure why they aren't one in the same.
After much digging I found the error I was getting was because of a typo.
In order to get iadd and iedit to work you need to add a custom property for the <target></target> xml and I had a typo in the iAdd for the name of the list.
So that's fixed.
On the same window I have a check box, and it is displaying as always checked.
I've put code in the onchange and the value is changing it's just always showing checked.
I've tried setting the On Icon and Off Icon properties but still no luck.
psicodelix
March 15th, 2026, 11:10
Custom anchoring was the original feature that allowed users to handle complex anchoring scenarios. Later, advanced anchoring was added, which makes it possible to create almost any anchoring scenario in a much simpler and more intuitive way. The original feature remains for backward compatibility with older projects, and because it is still necessary in specific cases, especially when merging controls.
psicodelix
March 15th, 2026, 11:13
As for the checkbox issue, there could be several possible causes. Make sure the value actually changes in the database. If the value changes but isn't reflected in the UI, the problem is likely a front-end issue, but it's hard to investigate further without seeing the code.
Powered by vBulletin® Version 4.2.1 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.