Plothos' 3.5 & Pathfinder Spell Managers
Moderators: dorpond, trevor, Azhrei, giliath, Gamerdude, jay, Mr.Ice
Re: Plothos' 3.5 & Pathfinder Spell Managers
The searchSpellLink returns the original string if it doesn't find a link for it.
Downloads:
- Notepad++ MapTool addon
- RPEdit details (v1.3)
- Coding Tips: Modularity and Design
- Videos: Macro Writing Tools
Re: Plothos' 3.5 & Pathfinder Spell Managers
It's failing in my FW for some reason. I'm unable to track down the problem.
Drop-In Utilities:
My Spell Manager for D&D3.5 and PFRPG
My Inventory Manager for D&D and PFRPG, but more generally useable than that.
My Message Manager -- My Top-Down D&D Token Images
and my Custom Initiative & Status/Spell-Effect Tracker (work in progress, but functional).
My Spell Manager for D&D3.5 and PFRPG
My Inventory Manager for D&D and PFRPG, but more generally useable than that.
My Message Manager -- My Top-Down D&D Token Images
and my Custom Initiative & Status/Spell-Effect Tracker (work in progress, but functional).
Re: Plothos' 3.5 & Pathfinder Spell Managers
Well, here's the token I use. You'll have to run the config to set up for PF.
- Attachments
-
- Lib.Spell_database 3.5preload.rptok
- (261.91 KiB) Downloaded 157 times
Downloads:
- Notepad++ MapTool addon
- RPEdit details (v1.3)
- Coding Tips: Modularity and Design
- Videos: Macro Writing Tools
Re: Plothos' 3.5 & Pathfinder Spell Managers
Unfortunately, this seems to no longer work. Tried it with v1.3.b86 and followed the instructions. Upon copying the from the properties of Lib_Spells, I received multiple instances of the following error:
The line "---" appears to be a comment, but duplicates "---" and must be unique to prevent this warning.
And I am unable to update the properties afterwards. It's a shame, too, since so few developers these days are able to keep these kind of tools up to date and available, and this one looked nice.
The line "---" appears to be a comment, but duplicates "---" and must be unique to prevent this warning.
And I am unable to update the properties afterwards. It's a shame, too, since so few developers these days are able to keep these kind of tools up to date and available, and this one looked nice.
Re: Plothos' 3.5 & Pathfinder Spell Managers
Hm, kinda strange.Jwguy wrote:The line "---" appears to be a comment, but duplicates "---" and must be unique to prevent this warning.
But any line that starts with a dash is a comment (as described in the notes on that page) so just add another character to the end of the line so that the two lines are different and you should be all set.
Re: Plothos' 3.5 & Pathfinder Spell Managers
I finally went and tracked this down:plothos wrote:Huh, fiddling with the lib:spells I have in my FW I cannot view known spells (or rather, I get blanks if there is no link), so I thought this was a general problem with the AM db. I'll check to see if something got crossed up. Ugh.
||| View Spells Text |||
Code: Select all
@@ @View Spells Text
@PROPS@ fontColor=silver ; autoExecute=false ; fontSize=11pt ; sortBy=3 ; color=blue ; playerEditable=true ; applyToSelected=false ; group=1 Spell Management ; tooltip= ; minWidth=94 ;
[h: passed = macro.args]
[h: classviewed = listGet(passed, 0)]
[h: levelviewed = listGet(passed, 1)]
[h: chardata = CasterInfo]
[h: classeshad = listSort(json.fields(chardata),"A")]
[h: classdata = json.get(chardata, classviewed)]
[h: lowestposs = json.get(classdata, "Lowest Level Spell")]
[h: highestposs = json.get(classdata, "Highest Level Spell")]
[h, if(!isNumber(levelviewed)): levelviewed = lowestposs]
[h: levelviewed = max(levelviewed, lowestposs)]
[h: levelviewed = min(levelviewed, highestposs)]
[h: spellsknown = json.get(classdata, "Spells Known")]
[h: maxlev = json.get(classdata, "Max Spell Level")]
[h: classSPD = json.get(classdata, "Spells Per Day")]
[h: minlev = json.get(classdata, "Lowest Level Spell")]
[h: numspecs = json.get(classdata, "Number of Specialties")]
[h: speclist = ""]
[h: numprohibs = json.get(classdata, "Number of Prohibitions")]
[h: numprohibs = eval(numprohibs)]
[h: prohiblist = ""]
[h, if(numspecs > 0), code: {
[h: sourcej = json.get(classdata, "Source")]
[h: shelfname = json.get(sourcej, "Shelf")]
[h: bookname = json.get(sourcej, "Book")]
[h: bookcasedata = getLibProperty("Bookcase", "Lib:spells")]
[h: shelfdata = json.get(bookcasedata, shelfname)]
[h: bookdata = json.get(shelfdata, bookname)]
[h: classmasterdata = json.get(bookdata, classviewed)]
[specschools = json.get(classdata, "Specialties")]
[schoollist = json.get(classmasterdata, "Specialty Spells")]
[foreach(specschool, specschools), code: {
[thislist = json.get(schoollist, specschool)]
[speclist = listAppend(speclist, thislist)]
}]
}; {}]
[h, if(numprohibs > 0), code:{
[h: sourcej = json.get(classdata, "Source")]
[h: shelfname = json.get(sourcej, "Shelf")]
[h: bookname = json.get(sourcej, "Book")]
[h: bookcasedata = getLibProperty("Bookcase", "Lib:spells")]
[h: shelfdata = json.get(bookcasedata, shelfname)]
[h: bookdata = json.get(shelfdata, bookname)]
[h: classmasterdata = json.get(bookdata, classviewed)]
[prohibschools = json.get(classdata, "Prohibitions")]
[schoollist = json.get(classmasterdata, "Specialty Spells")]
[foreach(prohibschool, prohibschools), code:{
[thislist = json.get(schoollist, prohibschool)]
[prohiblist = listAppend(prohiblist, thislist)]
}]
}; {}]
[h: numdoms = json.get(classdata, "Number of Domains")]
[h: domlist = "[]"]
[h: domainspells = json.get(classdata, "Domain Spells")]
<html>
<head></head>
<body>
<table border="1" width="800" background="[r:getImage('Lib:spells')]">
<tr background="[r: getImage('image:fog')]">
<td>
<font size="+2"><b>[r: classviewed] Spells Known</b></font>
[r:macroLink("Main", "Spell Main@Lib:spells", "none", "",token.name)]
[r:macroLink("Learn", "Learn Spell@Lib:spells", "none", passed,token.name)]
[r:"Known"]
[h: isPrepper = json.get(classdata, "Preps")]
[r, if(isPrepper=="Yes"): macroLink("Prepare", "Spell Prep@Lib:spells", "none", classviewed+","+levelviewed,token.name); "Prepare"]
[r, if(isPrepper=="Yes"): macroLink("Prepped", "View Prepped@Lib:spells", "none", classviewed+","+levelviewed,token.name); "Prepped"]
[r:macroLink("Cast", "Spell Cast@Lib:spells", "none", passed,token.name)]
[r:macroLink("Spec Abils", "Spec Abil Main@Lib:spells", "none", classviewed+","+levelviewed,token.name)]
<br><b>[r: token.name]</b><br>
[r, foreach(entry, classeshad, " "), code:{
[r, if(entry == classviewed): entry; macroLink(entry, "View Spells@Lib:spells", "none", entry, token.name)]
}]
</td>
</tr>
<tr background="[r: getImage('image:fog')]">
<td>
[h: num = minlev]
[r, while(num<= maxlev, "<br><br>"), code:{
[r: "<b>Level "+num+":</b><br>"]
[h: thislist = json.get(spellsknown, "Level "+num)]
[r, foreach(spell, thislist), code:{
[r: "<span style='white-space: nowrap; "]
[r, if(listFind(speclist, spell)>-1): "font-weight: bold;'>"; "font-weight: normal;'>"]
[r, if(listFind(prohiblist, spell)>-1): "'color: red;'>"]
[r: searchSpellLink(spell)]
[r: "</span>"]
}]
[r, if(thislist == ""): "(None)"]
[r, if(numdoms>0), code:{
[r: "<br> <i>Domain:</i> "]
[h: thesedoms = json.get(domainspells, "Level "+num)]
[r, foreach(spell, thesedoms): "<span style='white-space:nowrap'>"+searchSpellLink(spell)+"</span>"]
[r, if(thesedoms == ""): "(None)"]
}; {}]
[h: num = num+1]
}]
</td>
</tr>
</table>
</html>
!!
I also made this small change because it fits my magic system. All spells are spontaneous and the "known" was the same as the SPD so I could see how many different spells I could chose. This fix doesn't change any of the existing classes, but custom classes with no "known" spell limits and are not prepped will show the SPD for known.
||| Learn Spell Text |||
Code: Select all
@@ @Learn Spell Text
@PROPS@ fontColor=silver ; autoExecute=false ; fontSize=11pt ; sortBy=3 ; color=blue ; playerEditable=true ; applyToSelected=false ; group=2 Learning ; tooltip= ; minWidth=94 ;
[h:passed=macro.args]
[h:classviewed=listGet(passed,0)]
[h:levelviewed=listGet(passed,1)]
[h:charclassdata = json.get(CasterInfo, classviewed)]
[h: maxlev = json.get(charclassdata, "Max Spell Level")]
[h: highestposs = maxlev]
[h: lowestposs = json.get(charclassdata, "Lowest Level Spell")]
[h: curclasslev = json.get(charclassdata, "Class Level")]
[h, if(!isNumber(levelviewed)): levelviewed = lowestposs]
[h: levelviewed = max(levelviewed, lowestposs)]
[h: levelviewed = min(levelviewed, highestposs)]
[h: numspecs = json.get(charclassdata, "Number of Specialties")]
[h: numprohibs = json.get(charclassdata, "Number of Prohibitions")]
[h: numprohibs = eval(numprohibs)]
[h: numdoms = json.get(charclassdata, "Number of Domains")]
[h: cancastprohibs = json.get(charclassdata, "Can Cast Prohibs")]
[h: numberknown = json.get(charclassdata, "Number Known")]
[h: isPrepper = json.get(charclassdata, "Preps")]
[h: classsource = json.get(charclassdata, "Source")]
[h: shelfname = json.get(classsource, "Shelf")]
[h: bookname = json.get(classsource, "Book")]
[h: bookcasedata = getLibProperty("Bookcase", "Lib:spells")]
[h: shelfdata = json.get(bookcasedata, shelfname)]
[h: bookdata = json.get(shelfdata, bookname)]
[h: classmasterdata = json.get(bookdata, classviewed)]
[h: masterspelllists = json.get(classmasterdata, "Spell Lists")]
[h: learnlist = json.get(masterspelllists, "Level "+levelviewed)]
[h, if(numprohibs > 0 && cancastprohibs=="No"), code:{
[prohibs = json.get(charclassdata, "Prohibitions")]
[pass = json.set("{}", "List", learnlist, "Class", classviewed, "Schools", prohibs, "Classmasterdata", classmasterdata)]
[macro("Remove Prohibs@this"): pass]
[learnlist = macro.return]
}; {}]
[H, if(json.isEmpty(numberknown) && isPrepper == "No"): numberknown = json.get(charclassdata, "Spells Per Day")]
[h: charknownlists = json.get(charclassdata, "Spells Known")]
[h: charknownlist = json.get(charknownlists, "Level "+levelviewed)]
[h: learnlistarr = json.fromList(learnlist)]
[h: charknownlistarr = json.fromList(charknownlist)]
[h: learnlistarr = json.difference(learnlistarr, charknownlistarr)]
[h: learnlist = json.toList(learnlistarr)]
[h: learnlist = listSort(learnlist, "A")]
<html>
<head></head>
<body>
<table border="1" width="800" background="[r:getImage('Lib:spells')]">
<tr background="[r: getImage('image:fog')]">
<td>
<font size="+2"><b>Learning [r:classviewed] Spells</b></font>
[r:macroLink("Main", "Spell Main@Lib:spells", "none", "",token.name)]
[r:"Learn"]
[r:macroLink("Known", "View Spells@Lib:spells", "none", classviewed+","+levelviewed,token.name)]
[r, if(isPrepper=="Yes"): macroLink("Prepare", "Spell Prep@Lib:spells", "none", classviewed+","+levelviewed,token.name); "Prepare"]
[r, if(isPrepper=="Yes"): macroLink("Prepped", "View Prepped@Lib:spells", "none", classviewed+","+levelviewed,token.name); "Prepped"]
[r:macroLink("Cast", "Spell Cast@Lib:spells", "none", classviewed+","+levelviewed,token.name)]
[r:macroLink("Spec Abils", "Spec Abil Main@Lib:spells", "none", classviewed+","+levelviewed,token.name)]
<br><b>[r: token.name]</b><br>
[h: classeshad = listSort(json.fields(CasterInfo),"A")]
[r, foreach(classhad, classeshad, " "), code:{
[r, if(classhad == classviewed): classhad; macroLink(classhad, "Learn Spell@Lib:spells", "none", classhad+","+levelviewed, token.name)]
}]
</td>
</tr>
<tr background="[r: getImage('image:fog')]">
<td>
<table border="2" width="100%">
<tr>
<td width="50%" align="center">
<font size="+1"><b>Known</b></font>
</td>
<td width="50%" align="center">
<font size="+1"><b>Options</b></font>
</td>
</tr>
<tr>
<td width="50%" valign="top">
[r:macroLink("Unlearn Spell","Unlearn A Spell@Lib:spells","none",classviewed+","+levelviewed,token.name)]<br><br>
[h: num = levelviewed]
[r: "<b>Level "+num+":</b>"]
[h: thislist = listSort(json.get(charknownlists, "Level "+num),"A")]
[r, if(numberknown != ""): listCount(thislist)+" / "+listGet(numberknown, num)+" known"]
[r, if(thislist == ""), code: {
[r: "<br>(None)"]
}; {
[r:"<br>"]
[r, foreach(spellentry, thislist): "<span style='white-space:nowrap'>"+spellentry+"</span>"]
}]
[r, if(numdoms > 0), code:{
[r: "<br> <i>Domain:</i> "]
[h: domainspelllists = json.get(charclassdata, "Domain Spells")]
[h: thisdomlist = listSort(json.get(domainspelllists, "Level "+num), "A")]
[r, foreach(spellentry, thisdomlist): "<span style='white-space:nowrap'>"+spellentry+"</span>"]
[r, if(thisdomlist == ""): "(None)"]
}; {}]
</td>
<td width="50%" valign="top">
[h: num=0]
[r, c(10, ""), code:{
[r, if(num!=levelviewed && num<=maxlev && num>=lowestposs): macroLink(num, "Learn Spell@this", "none", classviewed+","+num, token.name)]
[r, if(num==levelviewed): num]
[r, if(num<=maxlev): " "]
[h: num=num+1]
}]
<br><br>
<b>Level [r:levelviewed]:</b><br>
[r, if(numspecs > 0), code:{
[h: pass = json.set("{}", "List", learnlist, "Classviewed", classviewed, "Levelviewed", levelviewed)]
[r, macro("Spec Learn List Populate@this"): pass]
[r, if(learnlist == ""): "(None)"]
}; {
[r, foreach(spellentry, learnlist): macroLink("<span style='white-space:nowrap'>"+spellentry+"</span>", "Learn Spell Wrap@this", "none", classviewed+","+levelviewed+","+spellentry, token.name)]
[r, if(learnlist == ""): "(None)"]
}]
[r, if(numdoms > 0), code:{
[h: domains = json.get(charclassdata, "Domains")]
[h: classdomainspells = json.get(classmasterdata, "Domain Spells")]
[h: expecteddomainspells = ""]
[h, foreach(domain, domains), code:{
[thislist = json.get(classdomainspells, domain)]
[spellstoadd = json.get(thislist, "Level "+levelviewed)]
[expecteddomainspells = listAppend(expecteddomainspells, spellstoadd)]
}]
[h: expecteddomainspells = listSort(expecteddomainspells, "A")]
[h: haddomainspells = json.get(domainspelllists, "Level "+levelviewed)]
[h, if(expecteddomainspells != ""): expectedarr = json.fromList(expecteddomainspells); expectedarr = "[]"]
[h, if(haddomainspells != ""): hadarr = json.fromList(haddomainspells); hadarr = "[]"]
[h: missingarr = json.difference(expectedarr, hadarr)]
[r: "<br> <i>Domain:</i> "]
[r, foreach(spellentry, missingarr): macroLink("<span style='white-space:nowrap'>"+spellentry+"</span>", "Learn Domain Spell Wrap@this", "none", classviewed+","+levelviewed+","+spellentry, token.name)]
[r, if(json.isEmpty(missingarr)): "(None)"]
}; {}]
<br><br>
[r, if(numspecs > 0): "<i>Specialty spells in bold. "+if(cancastprohibs == "Yes", "Restricted spells in red.</i><br>", "</i><br>")]
[r: macroLink("Add Houserule Spell", "Add Houserule Spell@this", "none", classviewed+","+levelviewed, token.name)]
[r, if(numdoms > 0): "<br>"+macroLink("Add Houserule Domain Spell", "Add Houserule Domain Spell@this", "none", classviewed+","+levelviewed, token.name)]
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
!!
Custom frames for each token should be easy:
Code: Select all
[frame("Spells: "+getName()):{
...
}]
Downloads:
- Notepad++ MapTool addon
- RPEdit details (v1.3)
- Coding Tips: Modularity and Design
- Videos: Macro Writing Tools
Re: Plothos' 3.5 & Pathfinder Spell Managers
Hey Plothos. Are you making any changes I should know about. In my quest to reformat some of the output, I'm building some scaffolding around your code to make my code compatible with yours. Right now I'm just focusing on the abilities where all the abilities screens will be different. I've merge the code to account for class and class-independent abilities. It's all basically the same code, just different source variables. I have some more code to write, and some testing to do but it should be done sometime this week. I'm just checking with you to see if you're releasing anything new with this in the near future.aliasmask wrote:I'm also thinking the interface could use a face lift. Make it more compact. Also, some pages should have a different frame name based on the token name. So, when using multiple tokens that use the manager, I don't have to browse back to where I was. Having a leaner interface will allow for the manager to dock better. Right now it takes up most of my screen.
Custom frames for each token should be easy:Code: Select all
[frame("Spells: "+getName()):{ ... }]
Downloads:
- Notepad++ MapTool addon
- RPEdit details (v1.3)
- Coding Tips: Modularity and Design
- Videos: Macro Writing Tools
Re: Plothos' 3.5 & Pathfinder Spell Managers
I was thinking, specifically for Tome of Blood, that it would be useful to have a Rest encounter feature. So, it wouldn't refesh the daily charges, but would refresh "encounter" charges or actions.
Downloads:
- Notepad++ MapTool addon
- RPEdit details (v1.3)
- Coding Tips: Modularity and Design
- Videos: Macro Writing Tools
Re: Plothos' 3.5 & Pathfinder Spell Managers
I followed all of the steps to add this to my Pathfinder campaign, but it won't let me go past "3. Set Spells Per Day". Whenever I click it, regardless of the character or class, it gives the following error:
java.lang.NullPointerException
at net.rptools.maptool.client.MapToolVariableResolver.setVariable(MapToolVariableResolver.java:271)
at net.rptools.parser.MapVariableResolver.setVariable(MapVariableResolver.java:32)
at net.rptools.maptool.client.MapToolLineParser.parseLine(MapToolLineParser.java:973)
at net.rptools.maptool.client.MapToolLineParser.runMacroBlock(MapToolLineParser.java:1524)
at net.rptools.maptool.client.MapToolLineParser.runMacro(MapToolLineParser.java:1455)
at net.rptools.maptool.client.MapToolLineParser.runMacro(MapToolLineParser.java:1336)
at net.rptools.maptool.client.functions.MacroLinkFunction.runMacroLink(MacroLinkFunction.java:455)
at net.rptools.maptool.client.functions.MacroLinkFunction.runMacroLink(MacroLinkFunction.java:362)
at net.rptools.maptool.client.ui.htmlframe.HTMLPane$1.hyperlinkUpdate(HTMLPane.java:68)
at javax.swing.JEditorPane.fireHyperlinkUpdate(Unknown Source)
at javax.swing.text.html.HTMLEditorKit$LinkController.activateLink(Unknown Source)
at javax.swing.text.html.HTMLEditorKit$LinkController.mouseClicked(Unknown Source)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at net.rptools.maptool.client.swing.MapToolEventQueue.dispatchEvent(MapToolEventQueue.java:38)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Thank you for your assistance.
java.lang.NullPointerException
at net.rptools.maptool.client.MapToolVariableResolver.setVariable(MapToolVariableResolver.java:271)
at net.rptools.parser.MapVariableResolver.setVariable(MapVariableResolver.java:32)
at net.rptools.maptool.client.MapToolLineParser.parseLine(MapToolLineParser.java:973)
at net.rptools.maptool.client.MapToolLineParser.runMacroBlock(MapToolLineParser.java:1524)
at net.rptools.maptool.client.MapToolLineParser.runMacro(MapToolLineParser.java:1455)
at net.rptools.maptool.client.MapToolLineParser.runMacro(MapToolLineParser.java:1336)
at net.rptools.maptool.client.functions.MacroLinkFunction.runMacroLink(MacroLinkFunction.java:455)
at net.rptools.maptool.client.functions.MacroLinkFunction.runMacroLink(MacroLinkFunction.java:362)
at net.rptools.maptool.client.ui.htmlframe.HTMLPane$1.hyperlinkUpdate(HTMLPane.java:68)
at javax.swing.JEditorPane.fireHyperlinkUpdate(Unknown Source)
at javax.swing.text.html.HTMLEditorKit$LinkController.activateLink(Unknown Source)
at javax.swing.text.html.HTMLEditorKit$LinkController.mouseClicked(Unknown Source)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at net.rptools.maptool.client.swing.MapToolEventQueue.dispatchEvent(MapToolEventQueue.java:38)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Thank you for your assistance.
Re: Plothos' 3.5 & Pathfinder Spell Managers
What are your current memory settings? You can find this in mt.cfg if you're on Windows and using Maptool Launcher, in the batch files, or in the shell script you're using to launch.
Also, make sure you're using an updated version from later in the thread.
Also, make sure you're using an updated version from later in the thread.
Re: Plothos' 3.5 & Pathfinder Spell Managers
npe should not occur due to memory settings (you could get a stack overflow running an embedded macro, *that* would return an npe to the calling macro and *that* could report the npe HOWEVER then you would FIRST get the stack overflow report.... then again... its java and maptool, stranger things have happened.Vhex wrote:What are your current memory settings? You can find this in mt.cfg if you're on Windows and using Maptool Launcher, in the batch files, or in the shell script you're using to launch.
why isn't it in the OP?Vhex wrote: Also, make sure you're using an updated version from later in the thread.
GETTING STARTED WITH MAPTOOLS - TUTORIALS, DOCS, VIDEOS, TOOLS, ETC
DISCORD (the new MT forum!)
My stuff
Excel Tools: Table and Light editors
MT Tools: Bag of Tricks: Tools for Maptool, Dungeon Builder I, Dungeon Builder II,onMouseOverEvent.
Frameworks: Dark Heresy, Rogue Trader, Deathwatch, Black Crusade, Only War, SET Card Game, RoboRally
Wiki: Debugging Tutorial, Speed Up Your Macros, Working With Two CODE Levels, Shortcut Keys, Avoiding Stack Overflow, READ THIS
DISCORD (the new MT forum!)
My stuff
Excel Tools: Table and Light editors
MT Tools: Bag of Tricks: Tools for Maptool, Dungeon Builder I, Dungeon Builder II,onMouseOverEvent.
Frameworks: Dark Heresy, Rogue Trader, Deathwatch, Black Crusade, Only War, SET Card Game, RoboRally
Wiki: Debugging Tutorial, Speed Up Your Macros, Working With Two CODE Levels, Shortcut Keys, Avoiding Stack Overflow, READ THIS
Re: Plothos' 3.5 & Pathfinder Spell Managers
Here is my most recent update of it. I fixed a couple of level up bugs and I fixed the spellcraft check link by creating my own "skillRoll" function. skillRoll still requires the 3.5/pathfinder lib token. One you replace your existing lib token for Plothos's beta 3.0 you need to run onCampaignLoad from the new token for the UDF to be defined. If for some reason it doesn't work, try saving and reloading campaign. It also includes some custom spell classes like SLOT_Cleric. Feel free to ignore or delete those.
[file removed - doesn't work with newer FW]
[file removed - doesn't work with newer FW]
Downloads:
- Notepad++ MapTool addon
- RPEdit details (v1.3)
- Coding Tips: Modularity and Design
- Videos: Macro Writing Tools
Re: Plothos' 3.5 & Pathfinder Spell Managers
thanks. I too immediately encountered an bug when I tried to create a level 7 priest (based on the campaign file). Here's part of the log:
Spoiler
2013-02-25 16:02:54,612 [client.MapToolLineParser:1276] DEBUG - Domain8="(None)"
2013-02-25 16:02:54,613 [client.MapToolLineParser:1276] DEBUG - if(Domain9=="", 1, 0)
2013-02-25 16:02:54,615 [model.Token:1038] DEBUG - Evaluating property: 'Domain9' for token Caster(00000000B49ABD2E6D02000000000000)----------------------------------------------------------------------------------
2013-02-25 16:02:54,616 [client.MapToolLineParser:1276] DEBUG - Domain9="(None)"
2013-02-25 16:02:54,617 [client.MapToolLineParser:1276] DEBUG - passinfo="{}"
2013-02-25 16:02:54,618 [client.MapToolLineParser:1276] DEBUG - pass=json.set("{}","Report",passreport,"Output Class","Domain Change","Specific Type","Domain Change","Use Info",passinfo)
2013-02-25 16:02:54,621 [client.MapToolLineParser:1276] DEBUG - "Output@Lib:spells"
2013-02-25 16:02:54,622 [client.MapToolLineParser:1276] DEBUG - pass
2013-02-25 16:02:54,624 [client.MapToolLineParser:1276] DEBUG - passed=macro.args
2013-02-25 16:02:54,626 [client.MapToolLineParser:1276] DEBUG - report=json.get(passed,"Report")
2013-02-25 16:02:54,628 [client.MapToolLineParser:1276] DEBUG - outputclass=json.get(passed,"Output Class")
2013-02-25 16:02:54,630 [client.MapToolLineParser:1276] DEBUG - specifictype=json.get(passed,"Specific Type")
2013-02-25 16:02:54,633 [client.MapToolLineParser:1276] DEBUG - useinfo=json.get(passed,"Use Info")
2013-02-25 16:02:54,635 [client.MapToolLineParser:1276] DEBUG - if(outputclass=="Cast", 1, 0)
2013-02-25 16:02:54,637 [client.MapToolLineParser:1276] DEBUG - ''
2013-02-25 16:02:54,639 [client.MapToolLineParser:1276] DEBUG - if(outputclass=="Convert Cast", 1, 0)
2013-02-25 16:02:54,640 [client.MapToolLineParser:1276] DEBUG - ''
2013-02-25 16:02:54,642 [client.MapToolLineParser:1276] DEBUG - report
2013-02-25 16:02:54,646 [client.MapToolLineParser:1276] DEBUG - passreport=""
2013-02-25 16:02:54,648 [client.MapToolLineParser:1276] DEBUG - CMSLlist=getLibProperty("CMSL","Lib:spells")
2013-02-25 16:02:54,650 [client.MapToolLineParser:1276] DEBUG - CMSL=listGet(CMSLlist,CCL)
2013-02-25 16:02:54,651 [model.Token:1038] DEBUG - Evaluating property: 'CCL' for token Caster(00000000B49ABD2E6D02000000000000)----------------------------------------------------------------------------------
2013-02-25 16:02:54,652 [client.MapToolLineParser:1276] DEBUG - SPDall=getLibProperty("CSPD"+CCL,"Lib:spells","ERROR")
2013-02-25 16:02:54,654 [model.Token:1038] DEBUG - Evaluating property: 'CCL' for token Caster(00000000B49ABD2E6D02000000000000)----------------------------------------------------------------------------------
2013-02-25 16:02:54,655 [client.MapToolLineParser:1293] DEBUG - net.rptools.parser.ParserException: Function "getLibProperty" requires no more than 2 parameters; 3 were provided.
2013-02-25 16:02:54,613 [client.MapToolLineParser:1276] DEBUG - if(Domain9=="", 1, 0)
2013-02-25 16:02:54,615 [model.Token:1038] DEBUG - Evaluating property: 'Domain9' for token Caster(00000000B49ABD2E6D02000000000000)----------------------------------------------------------------------------------
2013-02-25 16:02:54,616 [client.MapToolLineParser:1276] DEBUG - Domain9="(None)"
2013-02-25 16:02:54,617 [client.MapToolLineParser:1276] DEBUG - passinfo="{}"
2013-02-25 16:02:54,618 [client.MapToolLineParser:1276] DEBUG - pass=json.set("{}","Report",passreport,"Output Class","Domain Change","Specific Type","Domain Change","Use Info",passinfo)
2013-02-25 16:02:54,621 [client.MapToolLineParser:1276] DEBUG - "Output@Lib:spells"
2013-02-25 16:02:54,622 [client.MapToolLineParser:1276] DEBUG - pass
2013-02-25 16:02:54,624 [client.MapToolLineParser:1276] DEBUG - passed=macro.args
2013-02-25 16:02:54,626 [client.MapToolLineParser:1276] DEBUG - report=json.get(passed,"Report")
2013-02-25 16:02:54,628 [client.MapToolLineParser:1276] DEBUG - outputclass=json.get(passed,"Output Class")
2013-02-25 16:02:54,630 [client.MapToolLineParser:1276] DEBUG - specifictype=json.get(passed,"Specific Type")
2013-02-25 16:02:54,633 [client.MapToolLineParser:1276] DEBUG - useinfo=json.get(passed,"Use Info")
2013-02-25 16:02:54,635 [client.MapToolLineParser:1276] DEBUG - if(outputclass=="Cast", 1, 0)
2013-02-25 16:02:54,637 [client.MapToolLineParser:1276] DEBUG - ''
2013-02-25 16:02:54,639 [client.MapToolLineParser:1276] DEBUG - if(outputclass=="Convert Cast", 1, 0)
2013-02-25 16:02:54,640 [client.MapToolLineParser:1276] DEBUG - ''
2013-02-25 16:02:54,642 [client.MapToolLineParser:1276] DEBUG - report
2013-02-25 16:02:54,646 [client.MapToolLineParser:1276] DEBUG - passreport=""
2013-02-25 16:02:54,648 [client.MapToolLineParser:1276] DEBUG - CMSLlist=getLibProperty("CMSL","Lib:spells")
2013-02-25 16:02:54,650 [client.MapToolLineParser:1276] DEBUG - CMSL=listGet(CMSLlist,CCL)
2013-02-25 16:02:54,651 [model.Token:1038] DEBUG - Evaluating property: 'CCL' for token Caster(00000000B49ABD2E6D02000000000000)----------------------------------------------------------------------------------
2013-02-25 16:02:54,652 [client.MapToolLineParser:1276] DEBUG - SPDall=getLibProperty("CSPD"+CCL,"Lib:spells","ERROR")
2013-02-25 16:02:54,654 [model.Token:1038] DEBUG - Evaluating property: 'CCL' for token Caster(00000000B49ABD2E6D02000000000000)----------------------------------------------------------------------------------
2013-02-25 16:02:54,655 [client.MapToolLineParser:1293] DEBUG - net.rptools.parser.ParserException: Function "getLibProperty" requires no more than 2 parameters; 3 were provided.
GETTING STARTED WITH MAPTOOLS - TUTORIALS, DOCS, VIDEOS, TOOLS, ETC
DISCORD (the new MT forum!)
My stuff
Excel Tools: Table and Light editors
MT Tools: Bag of Tricks: Tools for Maptool, Dungeon Builder I, Dungeon Builder II,onMouseOverEvent.
Frameworks: Dark Heresy, Rogue Trader, Deathwatch, Black Crusade, Only War, SET Card Game, RoboRally
Wiki: Debugging Tutorial, Speed Up Your Macros, Working With Two CODE Levels, Shortcut Keys, Avoiding Stack Overflow, READ THIS
DISCORD (the new MT forum!)
My stuff
Excel Tools: Table and Light editors
MT Tools: Bag of Tricks: Tools for Maptool, Dungeon Builder I, Dungeon Builder II,onMouseOverEvent.
Frameworks: Dark Heresy, Rogue Trader, Deathwatch, Black Crusade, Only War, SET Card Game, RoboRally
Wiki: Debugging Tutorial, Speed Up Your Macros, Working With Two CODE Levels, Shortcut Keys, Avoiding Stack Overflow, READ THIS
Re: Plothos' 3.5 & Pathfinder Spell Managers
ok checked out your lib and its even worse... I replaced the one in the campaign file and on running 'spell menu' with the 'caster selected' I got: 'value for casterInfo' here again a part of the log:
and I keep m comming:
open spell library (F2) --> class --> cleric -->
Spoiler
2013-02-25 16:11:04,668 [client.MapToolLineParser:1293] DEBUG - net.rptools.parser.ParserException: Unresolved value "CasterInfo".
2013-02-25 16:11:06,525 [macro.MacroManager:373] DEBUG - Starting macro: ImpersonateMacro----------------------------------------------------------------------------------
2013-02-25 16:11:06,527 [client.MapToolLineParser:1276] DEBUG - "Spell Main@Lib:spells"
2013-02-25 16:11:06,527 [client.MapToolLineParser:1276] DEBUG - ""
2013-02-25 16:11:06,530 [client.MapToolLineParser:1276] DEBUG - "Spells: "+getName()
2013-02-25 16:11:06,542 [client.MapToolLineParser:1276] DEBUG - ""
2013-02-25 16:11:06,545 [client.MapToolLineParser:1276] DEBUG - "Spell Main Text@Lib:spells"
2013-02-25 16:11:06,549 [client.MapToolLineParser:1276] DEBUG - ""
2013-02-25 16:11:06,567 [client.MapToolLineParser:1276] DEBUG - chardata = CasterInfo
2013-02-25 16:11:06,525 [macro.MacroManager:373] DEBUG - Starting macro: ImpersonateMacro----------------------------------------------------------------------------------
2013-02-25 16:11:06,527 [client.MapToolLineParser:1276] DEBUG - "Spell Main@Lib:spells"
2013-02-25 16:11:06,527 [client.MapToolLineParser:1276] DEBUG - ""
2013-02-25 16:11:06,530 [client.MapToolLineParser:1276] DEBUG - "Spells: "+getName()
2013-02-25 16:11:06,542 [client.MapToolLineParser:1276] DEBUG - ""
2013-02-25 16:11:06,545 [client.MapToolLineParser:1276] DEBUG - "Spell Main Text@Lib:spells"
2013-02-25 16:11:06,549 [client.MapToolLineParser:1276] DEBUG - ""
2013-02-25 16:11:06,567 [client.MapToolLineParser:1276] DEBUG - chardata = CasterInfo
open spell library (F2) --> class --> cleric -->
Code: Select all
Invalid condition in IF(json.length(cat1_) == 0) roll option. Statement options (if any): H, if(json.length(cat1_) == 0), code Statement Body : { [H: twoDim_ = 0] };{ [H: twoDim_ = if(json.type(json.get(cat1_,0)) == "ARRAY",1,0)] }
GETTING STARTED WITH MAPTOOLS - TUTORIALS, DOCS, VIDEOS, TOOLS, ETC
DISCORD (the new MT forum!)
My stuff
Excel Tools: Table and Light editors
MT Tools: Bag of Tricks: Tools for Maptool, Dungeon Builder I, Dungeon Builder II,onMouseOverEvent.
Frameworks: Dark Heresy, Rogue Trader, Deathwatch, Black Crusade, Only War, SET Card Game, RoboRally
Wiki: Debugging Tutorial, Speed Up Your Macros, Working With Two CODE Levels, Shortcut Keys, Avoiding Stack Overflow, READ THIS
DISCORD (the new MT forum!)
My stuff
Excel Tools: Table and Light editors
MT Tools: Bag of Tricks: Tools for Maptool, Dungeon Builder I, Dungeon Builder II,onMouseOverEvent.
Frameworks: Dark Heresy, Rogue Trader, Deathwatch, Black Crusade, Only War, SET Card Game, RoboRally
Wiki: Debugging Tutorial, Speed Up Your Macros, Working With Two CODE Levels, Shortcut Keys, Avoiding Stack Overflow, READ THIS
Re: Plothos' 3.5 & Pathfinder Spell Managers
I don't recall running across that error. Look like bad syntax with an extra parameter as the error says. I'll see if that is in the version I have. I just may not have run across it yet.
edit: I do not have that line in my version.
Code: Select all
[SPDall=getLibProperty("CSPD"+CCL,"Lib:spells","ERROR")]
Downloads:
- Notepad++ MapTool addon
- RPEdit details (v1.3)
- Coding Tips: Modularity and Design
- Videos: Macro Writing Tools