- Joined
- Jan 11, 2008
- Messages
- 55
Im making a advanced system, where you can change a heros ability sets by using a multiboard. However, when I set the icons in the loop, it changes the icons for the whole column.(Btw, its based off final fantasy 13's class system)
The suspected problem function:
JASS:
library paradigm initializer onInit
globals
constant integer ParadigmId = 'A000'
trigger onCast
classstats array CharClasses
integer totalclasses = 0
multiboard array paradigmboard
endglobals
struct classstats
integer ability1 = 0
integer ability2 = 0
integer ability3 = 0
integer ability4 = 0
integer ability5 = 0
integer ability6 = 0
integer ability7 = 0
string classname =""
string classdesc1= ""
string icon = ""
endstruct
function parsedescription takes multiboard m, string S returns nothing
local integer currentline = 0
local integer currentspace = 0
local integer maxcharsperline = 30
local integer stringlength = 0
local string firstline = ""
local string secondline =""
local boolean newline = false
call BJDebugMsg("Initiating text parse prestringlength")
set stringlength = StringLength(S)
call BJDebugMsg("Initiating text parse post string length")
call BJDebugMsg("Description" + S)
if stringlength >= maxcharsperline then
set newline = true
else
set newline = false
endif
if newline == true then
set secondline = SubString(S,31,60)
set firstline = SubString(S,0,30)
call MultiboardSetItemValue(MultiboardGetItem(m,0,1), firstline)
call MultiboardSetItemValue(MultiboardGetItem(m,1,1), secondline)
call BJDebugMsg("two lines")
else
call BJDebugMsg("One line only")
set firstline = SubString(S,0,30)
call MultiboardSetItemValue(MultiboardGetItem(m,0,0), firstline)
endif
endfunction
function AddClass takes string icon ,string name, string desc, integer Abil1, integer Abil2, integer Abil3, integer Abil4, integer Abil5, integer Abil6, integer Abil7 returns nothing
local integer i
set i = totalclasses
set CharClasses[i].ability1 = Abil1
set CharClasses[i].ability2 = Abil2
set CharClasses[i].ability3 = Abil3
set CharClasses[i].ability4 = Abil4
set CharClasses[i].ability5 = Abil5
set CharClasses[i].ability6 = Abil6
set CharClasses[i].ability7 = Abil7
set CharClasses[i].classname = name
set CharClasses[i].classdesc1 = desc
set CharClasses[i].icon = icon
set totalclasses = totalclasses + 1
endfunction
function paraboard takes player p returns nothing
local integer i = 0
local integer i2 =0
local integer imax = totalclasses + 1
call BJDebugMsg("Initializing multiboard")
set paradigmboard[GetPlayerId(p)] = CreateMultiboard()
call MultiboardClear(paradigmboard[GetPlayerId(p)])
call MultiboardSetColumnCount(paradigmboard[GetPlayerId(p)],2)
call MultiboardSetRowCount(paradigmboard[GetPlayerId(p)],imax)
call BJDebugMsg("Multiboard created")
loop
exitwhen i == imax
call MultiboardSetItemWidth( MultiboardGetItem(paradigmboard[GetPlayerId(p)],i,1),.25)
call MultiboardSetItemWidth( MultiboardGetItem(paradigmboard[GetPlayerId(p)],i,0),.10)
call parsedescription(paradigmboard[GetPlayerId(p)], CharClasses[i].classdesc1)
call MultiboardSetItemIcon(MultiboardGetItem(paradigmboard[GetPlayerId(p)],i ,0), CharClasses[i].icon)
set i = i+1
endloop
call BJDebugMsg("Showing board")
call MultiboardDisplay(paradigmboard[GetPlayerId(p)],true)
endfunction
function ParadigmCast takes nothing returns nothing
if GetSpellAbilityId() == ParadigmId then
call BJDebugMsg("Spell cast")
call paraboard(GetOwningPlayer(GetSpellAbilityUnit()))
endif
endfunction
private function onInit takes nothing returns nothing
call BJDebugMsg("Init")
set onCast = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(onCast, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddAction(onCast, function ParadigmCast)
endfunction
endlibrary
JASS:
scope ClassCreation initializer onInit
function onInit takes nothing returns nothing
call AddClass ("ReplaceableTextures\\CommandButtons\\BTNHeroArchMage.blp", "Mage", "Uses ancient magic to deal damage", 0, 0,0,0,0,0,0)
call AddClass ("ReplaceableTextures\\CommandButtons\\BTNMercenaryCamp.blp", "my rofl copter", "it goes soi soi soi", 0, 0,0,0,0,0,0)
endfunction
endscope
The suspected problem function:
JASS:
function paraboard takes player p returns nothing
local integer i = 0
local integer i2 =0
local integer imax = totalclasses + 1
call BJDebugMsg("Initializing multiboard")
set paradigmboard[GetPlayerId(p)] = CreateMultiboard()
call MultiboardClear(paradigmboard[GetPlayerId(p)])
call MultiboardSetColumnCount(paradigmboard[GetPlayerId(p)],2)
call MultiboardSetRowCount(paradigmboard[GetPlayerId(p)],imax)
call BJDebugMsg("Multiboard created")
loop
exitwhen i == imax
call MultiboardSetItemWidth( MultiboardGetItem(paradigmboard[GetPlayerId(p)],i,1),.25)
call MultiboardSetItemWidth( MultiboardGetItem(paradigmboard[GetPlayerId(p)],i,0),.10)
call parsedescription(paradigmboard[GetPlayerId(p)], CharClasses[i].classdesc1)
call MultiboardSetItemIcon(MultiboardGetItem(paradigmboard[GetPlayerId(p)],i ,0), CharClasses[i].icon)
set i = i+1
endloop