inevit4ble
Well-Known Member
- Reaction score
- 38
Hi Every1,
This problem is messed up by my standards.
In my spawn script a hero i created and a bunch of struct variables are set to certain criteria depending on the hero choice.
BJDebug shows me that the variables have a value but right after its finished running all variables become null
Its as if the unit somehow is removed and recreated.
Any idea why this would occur?
Relevant snippet:
The only actions that occur after the setting is a moveUnit action.
We have tried almost everything to work this out and its driving me crazy!
This problem is messed up by my standards.
In my spawn script a hero i created and a bunch of struct variables are set to certain criteria depending on the hero choice.
BJDebug shows me that the variables have a value but right after its finished running all variables become null
Its as if the unit somehow is removed and recreated.
Any idea why this would occur?
Relevant snippet:
JASS:
//===========================================================================
//=======================WaitPoint CharCreate================================
//===========================================================================
private function wpCondition takes nothing returns boolean
//Human Racial Bonus
local unit ut = GetTriggerUnit()
local player p = GetOwningPlayer(ut)
local integer d = GetPlayerId(p)
local integer i
//General Spell Book of game functions
call UnitAddAbility(ut, 039;A00B039;)
//Feats Book
call UnitAddAbility(ut, 039;A00I039;)
//Feat Point Set
call AdjustPlayerStateBJ( 1, p, PLAYER_STATE_RESOURCE_FOOD_CAP )
//Attribute Points
call AdjustPlayerStateBJ( 28, p, PLAYER_STATE_RESOURCE_LUMBER )
if Race[d] == 1 then //Dwarf
set UD[ut].rac = "Dwarf"
set UD[ut].str = 8
set UD[ut].dex = 8
set UD[ut].con = 10
set UD[ut].inl = 8
set UD[ut].wis = 8
set UD[ut].cha = 6
call BJDebugMsg("Dwarf")
elseif Race[d] == 2 then //Elf
set UD[ut].rac = "Elf"
set UD[ut].str = 8
set UD[ut].dex = 10
set UD[ut].con = 6
set UD[ut].inl = 8
set UD[ut].wis = 8
set UD[ut].cha = 8
elseif Race[d] == 3 then //Gnome
set UD[ut].rac = "Gnome"
set UD[ut].str = 6
set UD[ut].dex = 8
set UD[ut].con = 10
set UD[ut].inl = 8
set UD[ut].wis = 8
set UD[ut].cha = 8
//Smaller in size so +1 AC gained
set UD[ut].size = 1
elseif Race[d] == 4 then //Half-Elf
set UD[ut].rac = "Half-Elf"
set UD[ut].str = 8
set UD[ut].dex = 8
set UD[ut].con = 8
set UD[ut].inl = 8
set UD[ut].wis = 8
set UD[ut].cha = 8
elseif Race[d] == 5 then //Half-Orc
set UD[ut].rac = "Half-Orc"
set UD[ut].str = 10
set UD[ut].dex = 8
set UD[ut].con = 8
set UD[ut].inl = 6
set UD[ut].wis = 8
set UD[ut].cha = 6
elseif Race[d] == 6 then //Halfling
set UD[ut].rac = "Halfling"
set UD[ut].str = 6
set UD[ut].dex = 10
set UD[ut].con = 8
set UD[ut].inl = 8
set UD[ut].wis = 8
set UD[ut].cha = 8
//Smaller in size so +1 AC gained
set UD[ut].size = 1
elseif Race[d] == 7 then //Human
set UD[ut].rac = "Human"
set UD[ut].str = 8
set UD[ut].dex = 8
set UD[ut].con = 8
set UD[ut].inl = 8
set UD[ut].wis = 8
set UD[ut].cha = 8
call AdjustPlayerStateBJ( 1, p, PLAYER_STATE_RESOURCE_FOOD_CAP )//Extra Food for Human
endif
//Barbarian
if Class[d] == 1 then
call BJDebugMsg("Barbarian")
set UD[ut].cla = "Barbarian"
//Set per class and grows with level
set UD[ut].baseAttkBonus = 1 //Good
call UnitAddAbility(ut, 039;A000039;)
//Start Gold
set i = GetRandomInt(4, 16)*10
call AdjustPlayerStateBJ( i, p, PLAYER_STATE_RESOURCE_GOLD )
set i = 0
loop
set i = i + 1
//actions
call UnitAddAbility(ut, 039;A00M039;)
call SetUnitAbilityLevel(ut, 039;A00M039;, 2)
call UnitRemoveAbility(ut, 039;A00M039;)
exitwhen i == 11//runs 12 times?
endloop
//Proficiencies
set UD[ut].equip[1] = "ws"
set UD[ut].equip[2] = "wm"
set UD[ut].equip[3] = "al"
set UD[ut].equip[4] = "am"
set UD[ut].equip[5] = "ss"
set UD[ut].equip[6] = ""
/*call SetPlayerAbilityAvailable( Player(i), lig, true)
call SetUnitAbilityLevel(ut, lig, 2)
call SetPlayerAbilityAvailable( Player(i), med, true)
call SetUnitAbilityLevel(ut, med, 2)
call SetPlayerAbilityAvailable( Player(i), sim, true)
call SetUnitAbilityLevel(ut, sim, 2)
call SetPlayerAbilityAvailable( Player(i), mar, true)
call SetUnitAbilityLevel(ut, mar, 2)
call SetPlayerAbilityAvailable( Player(i), shi, true)
call SetUnitAbilityLevel(ut, shi, 2)*/
//Bard
elseif Class[d] == 2 then
set UD[ut].cla = "Bard"
set UD[ut].baseAttkBonus = 0 //Average
call UnitAddAbility(ut, 039;A001039;)//Class Skills
call UnitAddAbility(ut, 039;A00P039;)//Class Spells
//Start Gold
set i = GetRandomInt(4, 16)*10
call AdjustPlayerStateBJ( i, p, PLAYER_STATE_RESOURCE_GOLD )
set i = 0
loop
set i = i + 1
//actions
call UnitAddAbility(ut, 039;A00M039;)
call SetUnitAbilityLevel(ut, 039;A00M039;, 2)
call UnitRemoveAbility(ut, 039;A00M039;)
exitwhen i == 5 //
endloop
//Proficeincies
set UD[ut].equip[1] = "ws"
set UD[ut].equip[2] = "al"
set UD[ut].equip[3] = "ss"
set UD[ut].equip[4] = ""
/*call SetPlayerAbilityAvailable( Player(i), lig, true)
call SetUnitAbilityLevel(ut, lig, 2)
call SetPlayerAbilityAvailable( Player(i), sim, true)
call SetUnitAbilityLevel(ut, sim, 2)
call SetPlayerAbilityAvailable( Player(i), shi, true)
call SetUnitAbilityLevel(ut, shi, 2)*/
//Special selection of weapons
//Cleric
elseif Class[d] == 3 then
set UD[ut].cla = "Cleric"
set UD[ut].baseAttkBonus = 0 //Average
call UnitAddAbility(ut, 039;A002039;)
call UnitAddAbility(ut, 039;A00Q039;)//Class Spells
//Start Gold
set i = GetRandomInt(5, 20)*10
call AdjustPlayerStateBJ( i, p, PLAYER_STATE_RESOURCE_GOLD )
set i = 0
loop
set i = i + 1
//actions
call UnitAddAbility(ut, 039;A00M039;)
call SetUnitAbilityLevel(ut, 039;A00M039;, 2)
call UnitRemoveAbility(ut, 039;A00M039;)
exitwhen i == 7 //
endloop
//Proficiencies
set UD[ut].equip[1] = "al"
set UD[ut].equip[2] = "am"
set UD[ut].equip[3] = "ah"
set UD[ut].equip[4] = "ws"
set UD[ut].equip[5] = "ss"
set UD[ut].equip[6] = ""
/*call SetPlayerAbilityAvailable( Player(i), lig, true)
call SetUnitAbilityLevel(ut, lig, 2)
call SetPlayerAbilityAvailable( Player(i), med, true)
call SetUnitAbilityLevel(ut, med, 2)
call SetPlayerAbilityAvailable( Player(i), hea, true)
call SetUnitAbilityLevel(ut, hea, 2)
call SetPlayerAbilityAvailable( Player(i), sim, true)
call SetUnitAbilityLevel(ut, sim, 2)
call SetPlayerAbilityAvailable( Player(i), shi, true)
call SetUnitAbilityLevel(ut, shi, 2)*/
//Druid
elseif Class[d] == 4 then
set UD[ut].cla = "Druid"
set UD[ut].baseAttkBonus = 0 //Average
call UnitAddAbility(ut, 039;A003039;)
call UnitAddAbility(ut, 039;A00R039;)//Class Spells
//Start Gold
set i = GetRandomInt(2, 8)*10
call AdjustPlayerStateBJ( i, p, PLAYER_STATE_RESOURCE_GOLD )
set i = 0
loop
set i = i + 1
//actions
call UnitAddAbility(ut, 039;A00M039;)
call SetUnitAbilityLevel(ut, 039;A00M039;, 2)
call UnitRemoveAbility(ut, 039;A00M039;)
exitwhen i == 7 //
endloop
//Proficiencies
set UD[ut].equip[1] = "al"
set UD[ut].equip[2] = "am"
set UD[ut].equip[3] = "ss"
set UD[ut].equip[4] = ""
/*call SetPlayerAbilityAvailable( Player(i), lig, true)
call SetUnitAbilityLevel(ut, lig, 2)
call SetPlayerAbilityAvailable( Player(i), med, true)
call SetUnitAbilityLevel(ut, med, 2)
call SetPlayerAbilityAvailable( Player(i), shi, true)
call SetUnitAbilityLevel(ut, shi, 2)*/
//Special selection of weapons
//Fighter
elseif Class[d] == 5 then
set UD[ut].cla = "Fighter"
set UD[ut].baseAttkBonus = 1 //Good
call UnitAddAbility(ut, 039;A004039;)
//Start Gold
set i = GetRandomInt(6, 24)*10
call AdjustPlayerStateBJ( i, p, PLAYER_STATE_RESOURCE_GOLD )
set i = 0
loop
set i = i + 1
//actions
call UnitAddAbility(ut, 039;A00M039;)
call SetUnitAbilityLevel(ut, 039;A00M039;, 2)
call UnitRemoveAbility(ut, 039;A00M039;)
exitwhen i == 9 //
endloop
//Proficiencies
set UD[ut].equip[1] = "ws"
set UD[ut].equip[2] = "wm"
set UD[ut].equip[3] = "we"
set UD[ut].equip[4] = "al"
set UD[ut].equip[5] = "am"
set UD[ut].equip[6] = "ah"
set UD[ut].equip[7] = "ss"
set UD[ut].equip[8] = "st"
//Monk
elseif Class[d] == 6 then
set UD[ut].cla = "Monk"
set UD[ut].baseAttkBonus = 0 //Average
call UnitAddAbility(ut, 039;A005039;)
//Start Gold
set i = GetRandomInt(5, 20)
call AdjustPlayerStateBJ( i, p, PLAYER_STATE_RESOURCE_GOLD )
set i = 0
loop
set i = i + 1
//actions
call UnitAddAbility(ut, 039;A00M039;)
call SetUnitAbilityLevel(ut, 039;A00M039;, 2)
call UnitRemoveAbility(ut, 039;A00M039;)
exitwhen i == 7 //
endloop
//Proficiencies
set UD[ut].equip[1] = "ws"
set UD[ut].equip[2] = ""
/*call SetPlayerAbilityAvailable( Player(i), lig, true)
call SetUnitAbilityLevel(ut, lig, 2)
call SetPlayerAbilityAvailable( Player(i), med, true)
call SetUnitAbilityLevel(ut, med, 2)
call SetPlayerAbilityAvailable( Player(i), hea, true)
call SetUnitAbilityLevel(ut, hea, 2)
call SetPlayerAbilityAvailable( Player(i), sim, true)
call SetUnitAbilityLevel(ut, sim, 2)
call SetPlayerAbilityAvailable( Player(i), mar, true)
call SetUnitAbilityLevel(ut, mar, 2)
call SetPlayerAbilityAvailable( Player(i), shi, true)
call SetUnitAbilityLevel(ut, shi, 2)
call SetPlayerAbilityAvailable( Player(i), twr, true)
call SetUnitAbilityLevel(ut, twr, 2)*/
//Paladin
elseif Class[d] == 7 then
set UD[ut].cla = "Paladin"
set UD[ut].baseAttkBonus = 1 //Good
call UnitAddAbility(ut, 039;A006039;)
call UnitAddAbility(ut, 039;A00S039;)//Class Spells
//Start Gold
set i = GetRandomInt(6, 24)*10
call AdjustPlayerStateBJ( i, p, PLAYER_STATE_RESOURCE_GOLD )
set i = 0
loop
set i = i + 1
//actions
call UnitAddAbility(ut, 039;A00M039;)
call SetUnitAbilityLevel(ut, 039;A00M039;, 2)
call UnitRemoveAbility(ut, 039;A00M039;)
exitwhen i == 9 //
endloop
//Ranger
elseif Class[d] == 8 then
set UD[ut].cla = "Ranger"
set UD[ut].baseAttkBonus = 1 //Good
call UnitAddAbility(ut, 039;A007039;)
call UnitAddAbility(ut, 039;A00T039;)//Class Spells
//Start Gold
set i = GetRandomInt(6, 24)*10
call AdjustPlayerStateBJ( i, p, PLAYER_STATE_RESOURCE_GOLD )
set i = 0
loop
set i = i + 1
//actions
call UnitAddAbility(ut, 039;A00M039;)
call SetUnitAbilityLevel(ut, 039;A00M039;, 2)
call UnitRemoveAbility(ut, 039;A00M039;)
exitwhen i == 7 //
endloop
//Profs
set UD[ut].equip[1] = "ws"
set UD[ut].equip[2] = "wm"
set UD[ut].equip[3] = "al"
set UD[ut].equip[4] = "am"
set UD[ut].equip[5] = "ah"
set UD[ut].equip[6] = "ss"
set UD[ut].equip[7] = ""
//Rogue
elseif Class[d] == 9 then
set UD[ut].cla = "Rogue"
set UD[ut].baseAttkBonus = 0 //Average
call UnitAddAbility(ut, 039;A008039;)
//Start Gold
set i = GetRandomInt(5, 20)*10
call AdjustPlayerStateBJ( i, p, PLAYER_STATE_RESOURCE_GOLD )
set i = 0
loop
set i = i + 1
//actions
call UnitAddAbility(ut, 039;A00M039;)
call SetUnitAbilityLevel(ut, 039;A00M039;, 2)
call UnitRemoveAbility(ut, 039;A00M039;)
exitwhen i == 5 //
endloop
set UD[ut].equip[1] = "ws"
set UD[ut].equip[2] = "wm"
set UD[ut].equip[3] = "al"
set UD[ut].equip[4] = "ss"
set UD[ut].equip[5] = ""
//Sorcerer
elseif Class[d] == 10 then
set UD[ut].cla = "Sorcerer"
set UD[ut].baseAttkBonus = 0 //Poor
call UnitAddAbility(ut, 039;A009039;)
call UnitAddAbility(ut, 039;A00O039;)//Class Spells
//Start Gold
set i = GetRandomInt(3, 12)*10
call AdjustPlayerStateBJ( i, p, PLAYER_STATE_RESOURCE_GOLD )
set i = 0
loop
set i = i + 1
//actions
call UnitAddAbility(ut, 039;A00M039;)
call SetUnitAbilityLevel(ut, 039;A00M039;, 2)
call UnitRemoveAbility(ut, 039;A00M039;)
exitwhen i == 3 //
endloop
//Profs
set UD[ut].equip[1] = "ws"
//Wizard
elseif Class[d] == 11 then
set UD[ut].cla = "Wizard"
set UD[ut].baseAttkBonus = 0 //Poor
call UnitAddAbility(ut, 039;A00A039;)
call UnitAddAbility(ut, 039;A00N039;)//Class Spells
//Start Gold
set i = GetRandomInt(3, 12)*10
call AdjustPlayerStateBJ( i, p, PLAYER_STATE_RESOURCE_GOLD )
set i = 0
loop
set i = i + 1
//actions
call UnitAddAbility(ut, 039;A00M039;)
call SetUnitAbilityLevel(ut, 039;A00M039;, 2)
call UnitRemoveAbility(ut, 039;A00M039;)
exitwhen i == 3 //
endloop
set UD[ut].equip[1] = "ws"
endif
//Set depending on weapon. No weapon = 1
set UD[ut].weapondmg = 3 //At start heroes have no weapon
//Unarmed dmg is 1-3
//This value needs to be set as default if weapon is unequiped
//Bonus = (Stat - 10) / 2
set i = UD[ut].str
set UD[ut].strB = (i - 10) / 2
set i = UD[ut].dex
set UD[ut].dexB = (i - 10) / 2
set i = UD[ut].con
set UD[ut].conB = (i - 10) / 2
set i = UD[ut].inl
set UD[ut].inlB = (i - 10) / 2
set i = UD[ut].wis
set UD[ut].wisB = (i - 10) / 2
set i = UD[ut].cha
set UD[ut].chaB = (i - 10) / 2
//AC = 10 + Armor + Shield + DexB + Natural + Delfection + Size + Misc
//****THIS FORMULA IS ONLY FOR PLAYERS****\\
//Creeps will have set ACs
//set UD[ut].armorclass = 10 + UD[ut].armor + UD[ut].shield + UD[ut].dexB + UD[ut].nat + UD[ut].def + UD[ut].size + UD[ut].misc
//Gives Multiboard Inventory to Hero
call InitInventory(ut)
//Leak Catch
set ut = null
set p = null
return true
endfunction
private function wpActions takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer i = 0
local real x = GetRectCenterX(gg_rct_Beginning)
local real y = GetRectCenterY(gg_rct_Beginning)
set playerChar[GetPlayerId(GetOwningPlayer(u))] = u
if playerWaiting == playerNum then
loop
exitwhen i == 4
call SetUnitPosition(playerChar<i>, x, y)
call PanCameraToTimed(x, y, 0.)
set i = i + 1
endloop
else
call DisplayTextToPlayer(GetOwningPlayer(u), 0., 0., "Waiting for Players to complete selection")
endif
//Leak Catch
set u = null
endfunction
//===========================================================================
//=======================WaitPoint CharCreEnd================================
//===========================================================================
</i>
The only actions that occur after the setting is a moveUnit action.
We have tried almost everything to work this out and its driving me crazy!