Notes entry in Group Files

Discussion of initiative tool.

Moderators: dorpond, Azhrei

User avatar
Blakey
Dragon
Posts: 778
Joined: Fri Mar 23, 2007 11:27 am
Location: Sussex, UK.

Notes entry in Group Files

Post by Blakey »

IT v1.0

I have taken Jay's DMGenie output script and added the ability to output the description as an XML field. I've then added a "description" custom field to my game file. That works great and the description comes out in the custom data. However Custom data is just one long line which isn't all that friendly to read.

But the Notes field looks like it might be useful in this case. So is there a way to get data into the Notes field for a combatant when in the group file *.rpgrp?

Thanks
Blakey
The guy in the green hat.

User avatar
jay
RPTools Team
Posts: 1767
Joined: Tue Feb 07, 2006 1:07 am
Location: Austin, Tx

Post by jay »

Sorry it's taken me so long to reply, my daughter got married on Friday :D

The element where notes are saved is just called <notes>. Place your text here and it should show up in the notes on the index card.

User avatar
Blakey
Dragon
Posts: 778
Joined: Fri Mar 23, 2007 11:27 am
Location: Sussex, UK.

Post by Blakey »

Gratz Jay!!! :-)

No, sorry that doesn't work. Or at least not for me.

I'm using IT v1.0.b22.

Here is the XML copy and pasted (apologies for the long post). You can see this entry has some notes but nothing shows up in the notes section on the Index Card View...

Any other ideas?

Cheers
Blakey

Code: Select all

<group>
 <game>Rodinia</game>
 <groups>
 <group>
 <name>DMGenie Group</name>
 <combatants>
 <combatant>
 <name>Trap, Tilting Floor</name>
 <count>1</count>
 <init>0</init>
 <player></player>
 <type>NPC</type>
 <token>
 <alignment>N</alignment>
 <family>Tilting floor trap</family> <TODO>
 <size>M</size>
 <ac>25</ac>
 <touchAc>25</touchAc>
 <flatFootedAc>25</flatFootedAc>
 <speed>0</speed>
 <baseAttack>0</baseAttack>
 <str>10</str>
 <dex>10</dex>
 <con>10</con>
 <int>10</int>
 <wis>10</wis>
 <cha>10</cha>
 <grapple>FIXME</grapple>
 <fortSave>0</fortSave>
 <reflexSave>0</reflexSave>
 <willSave>0</willSave>
 <strBonus>0</strBonus>
 <dexBonus>0</dexBonus>
 <conBonus>0</conBonus>
 <intBonus>0</intBonus>
 <wisBonus>0</wisBonus>
 <chaBonus>0</chaBonus>
 <gender></gender>
 <levels>1d8</levels>
 <height>0</height>
 <weight>0</weight>
 <age>0</age>
 <damageReduction></damageReduction>
 <hp>1</hp>
 <fortBase>0</fortBase>
 <fortMagic>0</fortMagic>
 <reflexBase>0</reflexBase>
 <reflexMagic>0</reflexMagic>
 <willBase>0</willBase>
 <willMagic>0</willMagic>
 <sizeBonus>M</sizeBonus>
 <armorCheckPenalty>0</armorCheckPenalty>
 <notes>Trap, Tilting Floor

Turning the trigger in the wrong direction causes the eastern end of the 10-foot landing to tilt upward.  Anyone standing on the floor must succeed at a reflex save (DC 15) or tumble down the 20-foot staircase, landing prone.  A successful tumble check (DC 12) halves the damage and allows the PC to land on his or her feet.

The trap and trigger reset after the trap has been triggered.

Challenge Rating: 1
mechanical
location trigger
automatic reset
Hidden/puzzle switch bypass (Search DC 25)
DC 15 Reflex save avoids
DC 12 Tumble Check for half damage
20 ft. staircase fall (2d6, fall)
multiple targets (first target in each of two adjacent 5-ft. squares)
Search DC 25
Disable Device DC 20
Market Price: 1,300 gp.

</notes>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>0</skill>
 <skill>-99</skill>
 <skill>0</skill>
 <skill>-99</skill>
 </combatant>
 </combatants>
 </group>
 </groups>
</group>

The guy in the green hat.

User avatar
jay
RPTools Team
Posts: 1767
Joined: Tue Feb 07, 2006 1:07 am
Location: Austin, Tx

Post by jay »

I fixed some problems w/ the XML that you posted to get it to work on 1.0b23 which is the production build:
  • Renamed <game> to <game-name>.
  • Renamed <init> to <init-modifier>.
  • Removed <TODO> string.
  • Added <token> end tag.
  • Moved <notes> element and contents to be right after the <token> element.
This makes it look something like this...

Code: Select all

<group-set>
 <game-name>Init Tool Default D&D</game-name>
 <groups>
 <group>
 <name>DMGenie Group</name>
 <combatants>
 <combatant>
 <name>Trap, Tilting Floor</name>
 <count>1</count>
 <init-modifier>0</init-modifier>
 <player></player>
 <type>NPC</type>
 <token/>
 <notes>Trap, Tilting Floor

Turning the trigger in the wrong direction causes the eastern end of the 10-foot landing to tilt upward.  Anyone standing on the floor must succeed at a reflex save (DC 15) or tumble down the 20-foot staircase, landing prone.  A successful tumble check (DC 12) halves the damage and allows the PC to land on his or her feet.

The trap and trigger reset after the trap has been triggered.

Challenge Rating: 1
mechanical
location trigger
automatic reset
Hidden/puzzle switch bypass (Search DC 25)
DC 15 Reflex save avoids
DC 12 Tumble Check for half damage
20 ft. staircase fall (2d6, fall)
multiple targets (first target in each of two adjacent 5-ft. squares)
Search DC 25
Disable Device DC 20
Market Price: 1,300 gp.

</notes>
 <alignment>N</alignment>
 <family>Tilting floor trap</family>
 <size>M</size>
 <ac>25</ac>
 <touchAc>25</touchAc>
 <flatFootedAc>25</flatFootedAc>
 <speed>0</speed>
 <baseAttack>0</baseAttack>
 <str>10</str>
 <dex>10</dex>
 <con>10</con>
 <int>10</int>
 <wis>10</wis>
 <cha>10</cha>
 <grapple>FIXME</grapple>
 <fortSave>0</fortSave>
 <reflexSave>0</reflexSave>
 <willSave>0</willSave>
 <strBonus>0</strBonus>
 <dexBonus>0</dexBonus>
 <conBonus>0</conBonus>
 <intBonus>0</intBonus>
 <wisBonus>0</wisBonus>
 <chaBonus>0</chaBonus>
 <gender></gender>
 <levels>1d8</levels>
 <height>0</height>
 <weight>0</weight>
 <age>0</age>
 <damageReduction></damageReduction>
 <hp>1</hp>
 <fortBase>0</fortBase>
 <fortMagic>0</fortMagic>
 <reflexBase>0</reflexBase>
 <reflexMagic>0</reflexMagic>
 <willBase>0</willBase>
 <willMagic>0</willMagic>
 <sizeBonus>M</sizeBonus>
 <armorCheckPenalty>0</armorCheckPenalty>
 </combatant>
 </combatants>
 </group>
 </groups>
</group-set>
Note that I removed all of the repeated <skill> elements to make thins shorter. Only the last one would get saved into GT.
Once again I apologize for the slow response.

User avatar
Blakey
Dragon
Posts: 778
Joined: Fri Mar 23, 2007 11:27 am
Location: Sussex, UK.

Post by Blakey »

jay wrote:I fixed some problems w/ the XML that you posted to get it to work on 1.0b23 which is the production build:
  • Renamed <game> to <game>.
  • Renamed <init> to <init>.
  • Removed <TODO> string.
  • Added <token> end tag.
  • Moved <notes> element and contents to be right after the <token> element.
Okay, couple of questions then:

1. Is the order of the XML important? If so that surprises me as I didn't think it would matter.
2. The code I posted was what was generated by your DMGenie output code button, with <notes> added in by hand. Are you suggesting that this doesn't work with the latest production build?
Once again I apologize for the slow response.
No worries, thanks for the help squire.

Blakey
The guy in the green hat.

User avatar
jay
RPTools Team
Posts: 1767
Joined: Tue Feb 07, 2006 1:07 am
Location: Austin, Tx

Post by jay »

Blakey wrote:1. Is the order of the XML important? If so that surprises me as I didn't think it would matter.
Order is important for the values that IT uses directly. The custom fields come after these required values, but other than that their order isn't important.
Blakey wrote:2. The code I posted was what was generated by your DMGenie output code button, with <notes> added in by hand. Are you suggesting that this doesn't work with the latest production build?
That is possible. I don't remember when I changed things last and I've not gotten any bug reports about it. We'll have to fix it :)

User avatar
jay
RPTools Team
Posts: 1767
Joined: Tue Feb 07, 2006 1:07 am
Location: Austin, Tx

Re: Notes entry in Group Files

Post by jay »

Blakey wrote:I have taken Jay's DMGenie output script and added the ability to output the description as an XML field.
Can I see the script your using. The one I posted in the gallery doesn't look like it works. I fixed that, but I want to make sure we're looking at the same code.

User avatar
Blakey
Dragon
Posts: 778
Joined: Fri Mar 23, 2007 11:27 am
Location: Sussex, UK.

Post by Blakey »

Hi Jay,

Thanks for your help on this.

As far as I recall all I did here was to change the default <game> to Rodinia - my own game name. Then I added <notes> before the skills section. Clearly I need to at least change the location of <notes> to be after the <token> node.

I copied this from the thread on this board about importing from DMGenie.

This is the code I'm using in its entirety:

Code: Select all

Public Sub ActionButton19()
func.AddToCombatLog "<group>" 
func.AddToCombatLog " <game>Rodinia</game>" 
func.AddToCombatLog " <groups>" 
func.AddToCombatLog " <group>" 
func.AddToCombatLog " <name>DMGenie Group</name>" 
func.AddToCombatLog " <combatants>" 
func.GetNextCreatureInit 0 
Set MyCreature = func.GetNextCreature 
While (Not MyCreature Is Nothing) 
func.AddToCombatLog " <combatant>" 
func.AddToCombatLog " <name>" & MyCreature.Name & "</name>" 
func.AddToCombatLog " <count>1</count>" 
func.AddToCombatLog " <init>" & MyCreature.InitBonus & "</init>" 
func.AddToCombatLog " <player>" & MyCreature.Desc_PlayerName & "</player>" 
func.AddToCombatLog " <type>NPC</type>" 
func.AddToCombatLog " <token>" 
func.AddToCombatLog " <alignment>" & MyCreature.Alignment & "</alignment>" 
func.AddToCombatLog " <family>" & MyCreature.RaceName & "</family> <TODO>" 
func.AddToCombatLog " <size>" & MyCreature.SizeStr & "</size>" 
func.AddToCombatLog " <ac>" & MyCreature.AC & "</ac>" 
func.AddToCombatLog " <touchAc>" & MyCreature.ACTouch & "</touchAc>" 
func.AddToCombatLog " <flatFootedAc>" & MyCreature.ACFF & "</flatFootedAc>" 
func.AddToCombatLog " <speed>" & MyCreature.SpeedStr & "</speed>" 
func.AddToCombatLog " <baseAttack>" & MyCreature.CalculateBABFromClasses() & "</baseAttack>" 
func.AddToCombatLog " <str>" & MyCreature.Str & "</str>" 
func.AddToCombatLog " <dex>" & MyCreature.Dex & "</dex>" 
func.AddToCombatLog " <con>" & MyCreature.Con & "</con>" 
func.AddToCombatLog " <int>" & MyCreature.Intel & "</int>" 
func.AddToCombatLog " <wis>" & MyCreature.Wis & "</wis>" 
func.AddToCombatLog " <cha>" & MyCreature.Cha & "</cha>" 
func.AddToCombatLog " <grapple>FIXME</grapple>" 
func.AddToCombatLog " <fortSave>" & MyCreature.FortSave & "</fortSave>" 
func.AddToCombatLog " <reflexSave>" & MyCreature.RefSave & "</reflexSave>" 
func.AddToCombatLog " <willSave>" & MyCreature.WillSave & "</willSave>" 
func.AddToCombatLog " <strBonus>" & MyCreature.StrMod & "</strBonus>" 
func.AddToCombatLog " <dexBonus>" & MyCreature.DexMod & "</dexBonus>" 
func.AddToCombatLog " <conBonus>" & MyCreature.ConMod & "</conBonus>" 
func.AddToCombatLog " <intBonus>" & MyCreature.IntMod & "</intBonus>" 
func.AddToCombatLog " <wisBonus>" & MyCreature.WisMod & "</wisBonus>" 
func.AddToCombatLog " <chaBonus>" & MyCreature.ChaMod & "</chaBonus>" 
func.AddToCombatLog " <gender>" & MyCreature.Gender & "</gender>" 
func.AddToCombatLog " <levels>" & MyCreature.LevelStr & "</levels>" 
func.AddToCombatLog " <height>" & MyCreature.Height & "</height>" 
func.AddToCombatLog " <weight>" & MyCreature.Weight & "</weight>" 
func.AddToCombatLog " <age>" & MyCreature.Age & "</age>" 
func.AddToCombatLog " <damageReduction>" & MyCreature.DamageReductionStr & "</damageReduction>" 
func.AddToCombatLog " <hp>" & MyCreature.HPBase & "</hp>" 
func.AddToCombatLog " <fortBase>" & MyCreature.FortBase & "</fortBase>" 
func.AddToCombatLog " <fortMagic>" & MyCreature.FortBonus & "</fortMagic>" 
func.AddToCombatLog " <reflexBase>" & MyCreature.RefBase & "</reflexBase>" 
func.AddToCombatLog " <reflexMagic>" & MyCreature.RefBonus & "</reflexMagic>" 
func.AddToCombatLog " <willBase>" & MyCreature.WillBase & "</willBase>" 
func.AddToCombatLog " <willMagic>" & MyCreature.WillBonus & "</willMagic>" 
func.AddToCombatLog " <sizeBonus>" & MyCreature.SizeStr & "</sizeBonus>" 
func.AddToCombatLog " <armorCheckPenalty>" & MyCreature.FinalCheck & "</armorCheckPenalty>" 
func.AddToCombatLog " <notes>" & MyCreature.Desc & "</notes>" 
Dim MySkill, i 
for i = 1 to func.GetNumberOf_Skills 
Set MySkill = func.GetSkillObj(CInt(i)) 
if func.ValidSk(MySkill) then 
tag = lcase(MySkill.NameUcase) 
tag = replace(tag, "(", "") 
tag = replace(tag, ")", "") 
words = split(tag) 
if ubound(words) >= 0 then 
tag = "skill." & words(0) 
if ubound(words) > 0 then 
for j = 1 to ubound(words) 
tag = tag & func.Capital(words(j)) 
next 
end if 
func.AddToCombatLog " <" & tag & ".total>" & MyCreature.SkillTotal(i) & "</" & tag & ".total>" 
func.AddToCombatLog " <" & tag & ".rank>" & MyCreature.SkillRanks(i) & "</" & tag & ".rank>" 
func.AddToCombatLog " <" & tag & ".misc>" & MyCreature.SkillTotal(i) & "</" & tag & ".misc>" 
else 
func.AddToCombatLog " <skipping>" 
end if 
end If 
next 
func.AddToCombatLog " </combatant>" 
Set MyCreature = func.GetNextCreature 
Wend 
func.AddToCombatLog " </combatants>" 
func.AddToCombatLog " </group>" 
func.AddToCombatLog " </groups>" 
func.AddToCombatLog "</group>" 

End Sub
Cheers
Blakey
The guy in the green hat.

User avatar
Blakey
Dragon
Posts: 778
Joined: Fri Mar 23, 2007 11:27 am
Location: Sussex, UK.

Post by Blakey »

P.S. It would really help me if we can get this resolved by Saturday lunchtime (GMT) as I have a game Saturday afternoon for which I need to generate a bunch of stat blocks from DMGenie...

:D

Cheers
Blakey
The guy in the green hat.

User avatar
jay
RPTools Team
Posts: 1767
Joined: Tue Feb 07, 2006 1:07 am
Location: Austin, Tx

Post by jay »

Here it is, updated with the notes field. I'm thinking maybe that you had an earlier copy of the script, becuase the one posted here seems to work. Here is that script with your notes added in the right spot:

Code: Select all

Public Sub ActionButton19()
func.AddToCombatLog "<group-set>"
func.AddToCombatLog "  <game-name>Rodinia</game-name>"
func.AddToCombatLog "  <groups>"
func.AddToCombatLog "    <group>"
func.AddToCombatLog "      <name>DMGenie Group</name>"
func.AddToCombatLog "      <combatants>"
func.GetNextCreatureInit 0
Set MyCreature = func.GetNextCreature
While (Not MyCreature Is Nothing)
  func.AddToCombatLog "        <combatant>"
  func.AddToCombatLog "          <name>" & MyCreature.Name & "</name>"
  func.AddToCombatLog "          <count>1</count>"
  func.AddToCombatLog "          <init-modifier>" & MyCreature.InitBonus & "</init-modifier>"
  func.AddToCombatLog "          <player>" & MyCreature.Desc_PlayerName & "</player>"
  func.AddToCombatLog "          <type>PC</type>"
  func.AddToCombatLog "          <token/>"
  func.AddToCombatLog "          <notes>" & MyCreature.Desc & "</notes>"
  func.AddToCombatLog "          <alignment>" & MyCreature.Alignment & "</alignment>"
  func.AddToCombatLog "          <family>" & MyCreature.RaceName & "</family> <!-- TODO: Change family to race -->"
  func.AddToCombatLog "          <size>" & MyCreature.SizeStr & "</size>"
  func.AddToCombatLog "          <ac>" & MyCreature.AC & "</ac>"
  func.AddToCombatLog "          <touchAc>" & MyCreature.ACTouch & "</touchAc>"
  func.AddToCombatLog "          <flatFootedAc>" & MyCreature.ACFF & "</flatFootedAc>"
  func.AddToCombatLog "          <speed>" & MyCreature.SpeedStr & "</speed>"
  func.AddToCombatLog "          <baseAttack>" & MyCreature.CalculateBABFromClasses() & "</baseAttack>"
  func.AddToCombatLog "          <str>" & MyCreature.Str & "</str>"
  func.AddToCombatLog "          <dex>" & MyCreature.Dex & "</dex>"
  func.AddToCombatLog "          <con>" & MyCreature.Con & "</con>"
  func.AddToCombatLog "          <int>" & MyCreature.Intel & "</int>"
  func.AddToCombatLog "          <wis>" & MyCreature.Wis & "</wis>"
  func.AddToCombatLog "          <cha>" & MyCreature.Cha & "</cha>"
  func.AddToCombatLog "          <grapple>FIXME</grapple>"
  func.AddToCombatLog "          <fortSave>" & MyCreature.FortSave & "</fortSave>"
  func.AddToCombatLog "          <reflexSave>" & MyCreature.RefSave & "</reflexSave>"
  func.AddToCombatLog "          <willSave>" & MyCreature.WillSave & "</willSave>"
  func.AddToCombatLog "          <strBonus>" & MyCreature.StrMod & "</strBonus>"
  func.AddToCombatLog "          <dexBonus>" & MyCreature.DexMod & "</dexBonus>"
  func.AddToCombatLog "          <conBonus>" & MyCreature.ConMod & "</conBonus>"
  func.AddToCombatLog "          <intBonus>" & MyCreature.IntMod & "</intBonus>"
  func.AddToCombatLog "          <wisBonus>" & MyCreature.WisMod & "</wisBonus>"
  func.AddToCombatLog "          <chaBonus>" & MyCreature.ChaMod & "</chaBonus>"
  func.AddToCombatLog "          <gender>" & MyCreature.Gender & "</gender>"
  func.AddToCombatLog "          <levels>" & MyCreature.LevelStr & "</levels>"
  func.AddToCombatLog "          <height>" & MyCreature.Height & "</height>"
  func.AddToCombatLog "          <weight>" & MyCreature.Weight & "</weight>"
  func.AddToCombatLog "          <age>" & MyCreature.Age & "</age>"
  func.AddToCombatLog "          <damageReduction>" & MyCreature.DamageReductionStr & "</damageReduction>"
  func.AddToCombatLog "          <hp>" & MyCreature.HPBase & "</hp>"
  func.AddToCombatLog "          <fortBase>" & MyCreature.FortBase & "</fortBase>"
  func.AddToCombatLog "          <fortMagic>" & MyCreature.FortBonus & "</fortMagic>"
  func.AddToCombatLog "          <reflexBase>" & MyCreature.RefBase & "</reflexBase>"
  func.AddToCombatLog "          <reflexMagic>" & MyCreature.RefBonus & "</reflexMagic>"
  func.AddToCombatLog "          <willBase>" & MyCreature.WillBase & "</willBase>"
  func.AddToCombatLog "          <willMagic>" & MyCreature.WillBonus & "</willMagic>"
  func.AddToCombatLog "          <sizeBonus>" & MyCreature.SizeStr & "</sizeBonus>"
  func.AddToCombatLog "          <armorCheckPenalty>" & MyCreature.FinalCheck & "</armorCheckPenalty>"
  Dim MySkill, i
  for i = 1 to func.GetNumberOf_Skills
    Set MySkill = func.GetSkillObj(CInt(i))
    if func.ValidSk(MySkill) then
      tag = lcase(MySkill.NameUcase)
      tag = replace(tag, "(", "")
      tag = replace(tag, ")", "")
      words = split(tag)
      if ubound(words) >= 0 then
        tag = "skill." & words(0)
        if ubound(words) > 0 then
          for j = 1 to ubound(words)
            tag = tag & func.Capital(words(j))
          next
        end if
        func.AddToCombatLog "          <" & tag & ".total>" & MyCreature.SkillTotal(i) & "</" & tag & ".total>"
        func.AddToCombatLog "          <" & tag & ".rank>" & MyCreature.SkillRanks(i) & "</" & tag & ".rank>"
        func.AddToCombatLog "          <" & tag & ".misc>" & MyCreature.SkillTotal(i) & "</" & tag & ".misc>"
      else
        func.AddToCombatLog "          <!-- skipping a skill without a name -->"
      end if
    end If
  next
  func.AddToCombatLog "        </combatant>"
  Set MyCreature = func.GetNextCreature
Wend
func.AddToCombatLog "      </combatants>"
func.AddToCombatLog "    </group>"
func.AddToCombatLog "  </groups>"
func.AddToCombatLog "</group-set>" 
End Sub
I'll update that script to add the notes as well.

EDIT: Fixed problem where the forum was deleting some of the code.
Last edited by jay on Thu May 15, 2008 3:14 pm, edited 1 time in total.

User avatar
Blakey
Dragon
Posts: 778
Joined: Fri Mar 23, 2007 11:27 am
Location: Sussex, UK.

Post by Blakey »

Now when I try this new script, output the resulting text to DMGenie's combat log and then save it as an .rpgrp file, when I try to load it into IT )Open Group File) it says:

The file 'c:\Docu...' does not contain valid Group data.

I've updated IT to v1.0b23

Any ideas?
The guy in the green hat.

User avatar
jay
RPTools Team
Posts: 1767
Joined: Tue Feb 07, 2006 1:07 am
Location: Austin, Tx

Post by jay »

Blakey wrote:Now when I try this new script, output the resulting text to DMGenie's combat log and then save it as an .rpgrp file, when I try to load it into IT )Open Group File) it says:

The file 'c:\Docu...' does not contain valid Group data.

I've updated IT to v1.0b23

Any ideas?
The only thing that I can think of is that DMGenie's combat log cuts off if there is too much text in it. I'm guessing it is a windows limit. It only seemed to happen to me whan I tried to generate text for large DMGenie groups. But that is the only thing that I had problems with. Could you email me the group file you create? I'll take a look and see if I can figure out what the problem is. I'll probably be online for most of the night as well, so you can AIM me if you want and we'll fix the whole thing before your game tomorrow.

User avatar
Blakey
Dragon
Posts: 778
Joined: Fri Mar 23, 2007 11:27 am
Location: Sussex, UK.

Post by Blakey »

Hi Jay,

I appreciate your help - living on opposite sides of the Atlantic makes instant fixes impossible of course. :D

I did some debugging myself and have made significant progress.

First off here is the DMGenie script I am now using. Note these changes I had to make to get it working:
  • Ensure the first tag is <group> not <group>
  • Ensure the <game> tag is <game>
  • Ensure the <init> tag is <init>
  • Change <TODO> back to the originial <TODO> comment
  • Change <token> to <token>
I also added "Rodinia" as my game name and changed the default <type> to be NPC from PC as most of the encounter groups I create are for NPCs so this is a better default.

Code: Select all

Public Sub ActionButton19() 
func.AddToCombatLog "<group>" 
func.AddToCombatLog " <game>Rodinia</game>" 
func.AddToCombatLog " <groups>" 
func.AddToCombatLog " <group>" 
func.AddToCombatLog " <name>DMGenie Group</name>" 
func.AddToCombatLog " <combatants>" 
func.GetNextCreatureInit 0 
Set MyCreature = func.GetNextCreature 
While (Not MyCreature Is Nothing) 
func.AddToCombatLog " <combatant>" 
func.AddToCombatLog " <name>" & MyCreature.Name & "</name>" 
func.AddToCombatLog " <count>1</count>" 
func.AddToCombatLog " <init>" & MyCreature.InitBonus & "</init>" 
func.AddToCombatLog " <player>" & MyCreature.Desc_PlayerName & "</player>" 
func.AddToCombatLog " <type>NPC</type>" 
func.AddToCombatLog " <token>" 
func.AddToCombatLog " <notes>" & MyCreature.Desc & "</notes>" 
func.AddToCombatLog " <alignment>" & MyCreature.Alignment & "</alignment>" 
func.AddToCombatLog " <family>" & MyCreature.RaceName & "</family> <TODO>" 
func.AddToCombatLog " <size>" & MyCreature.SizeStr & "</size>" 
func.AddToCombatLog " <ac>" & MyCreature.AC & "</ac>" 
func.AddToCombatLog " <touchAc>" & MyCreature.ACTouch & "</touchAc>" 
func.AddToCombatLog " <flatFootedAc>" & MyCreature.ACFF & "</flatFootedAc>" 
func.AddToCombatLog " <speed>" & MyCreature.SpeedStr & "</speed>" 
func.AddToCombatLog " <baseAttack>" & MyCreature.CalculateBABFromClasses() & "</baseAttack>" 
func.AddToCombatLog " <str>" & MyCreature.Str & "</str>" 
func.AddToCombatLog " <dex>" & MyCreature.Dex & "</dex>" 
func.AddToCombatLog " <con>" & MyCreature.Con & "</con>" 
func.AddToCombatLog " <int>" & MyCreature.Intel & "</int>" 
func.AddToCombatLog " <wis>" & MyCreature.Wis & "</wis>" 
func.AddToCombatLog " <cha>" & MyCreature.Cha & "</cha>" 
func.AddToCombatLog " <grapple>FIXME</grapple>" 
func.AddToCombatLog " <fortSave>" & MyCreature.FortSave & "</fortSave>" 
func.AddToCombatLog " <reflexSave>" & MyCreature.RefSave & "</reflexSave>" 
func.AddToCombatLog " <willSave>" & MyCreature.WillSave & "</willSave>" 
func.AddToCombatLog " <strBonus>" & MyCreature.StrMod & "</strBonus>" 
func.AddToCombatLog " <dexBonus>" & MyCreature.DexMod & "</dexBonus>" 
func.AddToCombatLog " <conBonus>" & MyCreature.ConMod & "</conBonus>" 
func.AddToCombatLog " <intBonus>" & MyCreature.IntMod & "</intBonus>" 
func.AddToCombatLog " <wisBonus>" & MyCreature.WisMod & "</wisBonus>" 
func.AddToCombatLog " <chaBonus>" & MyCreature.ChaMod & "</chaBonus>" 
func.AddToCombatLog " <gender>" & MyCreature.Gender & "</gender>" 
func.AddToCombatLog " <levels>" & MyCreature.LevelStr & "</levels>" 
func.AddToCombatLog " <height>" & MyCreature.Height & "</height>" 
func.AddToCombatLog " <weight>" & MyCreature.Weight & "</weight>" 
func.AddToCombatLog " <age>" & MyCreature.Age & "</age>" 
func.AddToCombatLog " <damageReduction>" & MyCreature.DamageReductionStr & "</damageReduction>" 
func.AddToCombatLog " <hp>" & MyCreature.HPBase & "</hp>" 
func.AddToCombatLog " <fortBase>" & MyCreature.FortBase & "</fortBase>" 
func.AddToCombatLog " <fortMagic>" & MyCreature.FortBonus & "</fortMagic>" 
func.AddToCombatLog " <reflexBase>" & MyCreature.RefBase & "</reflexBase>" 
func.AddToCombatLog " <reflexMagic>" & MyCreature.RefBonus & "</reflexMagic>" 
func.AddToCombatLog " <willBase>" & MyCreature.WillBase & "</willBase>" 
func.AddToCombatLog " <willMagic>" & MyCreature.WillBonus & "</willMagic>" 
func.AddToCombatLog " <sizeBonus>" & MyCreature.SizeStr & "</sizeBonus>" 
func.AddToCombatLog " <armorCheckPenalty>" & MyCreature.FinalCheck & "</armorCheckPenalty>" 
Dim MySkill, i 
for i = 1 to func.GetNumberOf_Skills 
Set MySkill = func.GetSkillObj(CInt(i)) 
if func.ValidSk(MySkill) then 
tag = lcase(MySkill.NameUcase) 
tag = replace(tag, "(", "") 
tag = replace(tag, ")", "") 
words = split(tag) 
if ubound(words) >= 0 then 
tag = "skill." & words(0) 
if ubound(words) > 0 then 
for j = 1 to ubound(words) 
tag = tag & func.Capital(words(j)) 
next 
end if 
func.AddToCombatLog " <" & tag & ".total>" & MyCreature.SkillTotal(i) & "</" & tag & ".total>" 
func.AddToCombatLog " <" & tag & ".rank>" & MyCreature.SkillRanks(i) & "</" & tag & ".rank>" 
func.AddToCombatLog " <" & tag & ".misc>" & MyCreature.SkillTotal(i) & "</" & tag & ".misc>" 
else 
func.AddToCombatLog " <skipping>" 
end if 
end If 
next 
func.AddToCombatLog " </combatant>" 
Set MyCreature = func.GetNextCreature 
Wend 
func.AddToCombatLog " </combatants>" 
func.AddToCombatLog " </group>" 
func.AddToCombatLog " </groups>" 
func.AddToCombatLog "</group>" 

End Sub 


This now generates sensible <XML> which Group Tool is able to read happily. When I load the group up into Group Tool and click on any given creature I see its NOTES section in full - perfect.

However, when I drag that group into Init Tool the Notes section does not appear on the Index Card view in Init Tool - which is where I really wanted it to appear...

Cheers
Blakey

P.S. This fix is enough for me to be able to convert the DMGenie groups I need for this afternoon's session to InitTool, even if they don't have Notes associated with them.
Last edited by Blakey on Sat May 10, 2008 5:16 am, edited 1 time in total.
The guy in the green hat.

User avatar
Blakey
Dragon
Posts: 778
Joined: Fri Mar 23, 2007 11:27 am
Location: Sussex, UK.

Post by Blakey »

I see the Problem now!!!

If you put an HTML tag with a minus sign in it, the forum steals it!

e.g. "group-set" becomes just "group"
e.g. "init-modifier" becomes just "init"
e.g. "token/" becomes just "token"

So you cannot post DMGenie code into the forum as it will corrupt it. Same with the output from DMGenie's log file. So please ignore my last post, although it goes to demonstrate the problem.


Cheers!
Blakey


P.S. I still have the issue of Notes not transfering from Group Tool to Init Tool...
The guy in the green hat.

User avatar
Blakey
Dragon
Posts: 778
Joined: Fri Mar 23, 2007 11:27 am
Location: Sussex, UK.

Post by Blakey »

Hi Jay,

Further to this conversation I have now figured out how to modify your DMGenie script to output all the bits I have as custom fields in my Rodinia game. So I'm getting on with building a nice exporter script for DMGenie which exports into my own personal set of custom fields. I've figured out a lot about how this all works from playing with it and its all pretty good.

I would post my DMGenie script but there is no point as:

1. The forum will corrupt the XML it outputs.
2. It outputs specific custom fields I have set up for Rodinia.

Anyway, this leaves one issue still:

That is the fact that the <notes> field does successfully get into the GROUP (.rpgrp) file and when you edit a combatant in the Group Tool you see the <notes> field all imported correctly. However when you drag and drop that group into Init Tool the <notes> field is not populated inside the Index Card view in IT.

This is in the release version v1.0b23 and I suspect therefore is not going to ever be fixed as this version has been frozen I believe?

Cheers
Blakey
The guy in the green hat.

Post Reply

Return to “InitiativeTool”