| 04-12-2007, 12:23 AM | #1 |
Sorry for asking for so much help, but I wanna make sure I learn all the ins and outs of JASS with this little map. Anyway this trigger seems to really leak a lot every time its ran. The trigger is kind of long but, its pretty much repeated in the Thaw section. I would appreciate it if you could help me yet again with my trouble. Thanks to everyone who has been helping me though, especially blue_da_noob since he has pretty much answered all my questions. Couple things you should know, I want the unit to turn a color when its frozen, and it to be paused. For some reason since I put the loops in the pausing hasn't worked. Any fix ups on this would be most appreciated. JASS:function FreezeUnit takes nothing returns nothing //Locals local unit UFreezing local unit UFrozen local force TempForce local integer begin = 0 local integer end = 6 set UFreezing = GetAttacker() set UFrozen = GetTriggerUnit() set TempForce = GetPlayersAll() //Heal Unit call SetUnitState(UFrozen, UNIT_STATE_LIFE, RMaxBJ(0,100)) //Check if unit can be frozen if( IsUnitPaused(UFrozen) == false ) then if( GetUnitTypeId(UFrozen) != GetUnitTypeId(UFreezing)) then //Team 1 Frozen Color if( GetUnitTypeId(UFrozen) == udg_UNTTypes[1] ) then loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 0, 0, 255, 255) set begin=begin+1 endif exitwhen begin>end endloop set begin=6 set end=11 loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 0, 255, 0, 255) set begin=begin+1 endif exitwhen begin>end endloop //Team 2 Frozen Color else set begin = 0 set end = 6 if( GetUnitTypeId(UFrozen) == udg_UNTTypes[2] ) then loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 0, 255, 0, 255) set begin=begin+1 endif exitwhen begin>end endloop set begin=6 set end=11 loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 0, 0, 255, 255) set begin=begin+1 endif exitwhen begin>end endloop endif endif //Other Animations call SetUnitTimeScalePercent( UFrozen, 0.00 ) call IssueImmediateOrder( UFrozen, "stop" ) call PauseUnit(UFrozen, true) call PingMinimapForForce(TempForce, GetLocationX(GetUnitLoc(UFrozen)), GetLocationY(GetUnitLoc(UFrozen)), 5.00) //Message players call DisplayTimedTextToForce( TempForce, 10.00, ( udg_STRColors[GetPlayerId(GetOwningPlayer(UFreezing))+1] + ( udg_STRNameArray[GetPlayerId(GetOwningPlayer(UFreezing))+1] + ( " |cff3366FFhas frozen|r " + ( udg_STRColors[GetPlayerId(GetOwningPlayer(UFrozen))+1] + udg_STRNameArray[GetPlayerId(GetOwningPlayer(UFrozen))+1] ) ) ) ) ) //Score for players if( GetUnitTypeId(UFrozen) == udg_UNTTypes[1] ) then set udg_INTTeam1Frozen = udg_INTTeam1Frozen+1 else set udg_INTTeam2Frozen = udg_INTTeam2Frozen+1 endif call SetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_GOLD) + 1) call SetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_FOOD_USED, GetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_FOOD_USED) + 1) set udg_INTFrozen[GetConvertedPlayerId(GetOwningPlayer(UFrozen))] = ( udg_INTFrozen[GetConvertedPlayerId(GetOwningPlayer(UFrozen))] + 1 ) set udg_INTFreezes[GetConvertedPlayerId(GetOwningPlayer(UFreezing))] = ( udg_INTFreezes[GetConvertedPlayerId(GetOwningPlayer(UFreezing))] + 1 ) //Check if all frozen if( udg_INTTeam1Players == udg_INTTeam1Frozen) then set udg_INTWinner = 2 call TriggerExecute( gg_trg_Team_Scores ) elseif( udg_INTTeam2Players == udg_INTTeam2Frozen) then set udg_INTWinner = 1 call TriggerExecute( gg_trg_Team_Scores ) endif endif //Check if unit can be thawed elseif( IsUnitPaused(UFrozen) == true ) then if( GetUnitTypeId(UFrozen) == GetUnitTypeId(UFreezing)) then //Team 1 Thaw Color set begin=0 set end = 6 if( GetUnitTypeId(UFrozen) == udg_UNTTypes[1] ) then loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 255, 255, 255, 255) set begin=begin+1 endif exitwhen begin>end endloop set begin=6 set end=11 loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 255, 0, 0, 255) set begin=begin+1 endif exitwhen begin>end endloop //Team 2 Thaw Color else set begin = 0 set end = 6 if( GetUnitTypeId(UFrozen) == udg_UNTTypes[2] ) then loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 255, 0, 0, 255) set begin=begin+1 endif exitwhen begin>end endloop set begin=6 set end=11 loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 255, 255, 255, 255) set begin=begin+1 endif exitwhen begin>end endloop endif endif //Other Animations call SetUnitTimeScalePercent( UFrozen, 100.00 ) call PauseUnit(UFrozen, false) call PingMinimapForForce(TempForce, GetLocationX(GetUnitLoc(UFrozen)), GetLocationY(GetUnitLoc(UFrozen)), 5.00) //Message players call DisplayTimedTextToForce( TempForce, 10.00, ( udg_STRColors[GetPlayerId(GetOwningPlayer(UFreezing))+1] + ( udg_STRNameArray[GetPlayerId(GetOwningPlayer(UFreezing))+1] + ( " |cffCC3333has thawed|r " + ( udg_STRColors[GetPlayerId(GetOwningPlayer(UFrozen))+1] + udg_STRNameArray[GetPlayerId(GetOwningPlayer(UFrozen))+1] ) ) ) ) ) //Score for players if( GetUnitTypeId(UFrozen) == udg_UNTTypes[1] ) then set udg_INTTeam1Frozen = udg_INTTeam1Frozen-1 else set udg_INTTeam2Frozen = udg_INTTeam2Frozen-1 endif call SetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_GOLD) + 1) call SetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_LUMBER, GetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_LUMBER) + 1) set udg_INTThaws[GetConvertedPlayerId(GetOwningPlayer(UFreezing))] = ( udg_INTThaws[GetConvertedPlayerId(GetOwningPlayer(UFreezing))] + 1 ) set udg_INTThawed[GetConvertedPlayerId(GetOwningPlayer(UFrozen))] = ( udg_INTThawed[GetConvertedPlayerId(GetOwningPlayer(UFrozen))] + 1 ) endif endif //Null Locals set UFreezing = null set UFrozen = null call DestroyForce(TempForce) endfunction //=========================================================================== function InitTrig_Player_Attacked takes nothing returns nothing local integer begin = 0 set gg_trg_Player_Attacked = CreateTrigger( ) loop call TriggerRegisterPlayerUnitEventSimple( gg_trg_Player_Attacked, Player(begin), EVENT_PLAYER_UNIT_ATTACKED ) set begin = begin+1 exitwhen begin>11 endloop call TriggerAddAction( gg_trg_Player_Attacked, function FreezeUnit ) endfunction |
| 04-12-2007, 12:42 AM | #2 |
I try to fix your code for you... but without indenting, its impossible. I can't understand what the hell is going on in that much code without some form of indenting. |
| 04-12-2007, 12:45 AM | #3 |
Well I'll do anything to get this fixed, I need to learn from it so... Tell me how you wanted it indented. Like if you if then else indented, same with loops. |
| 04-12-2007, 12:48 AM | #4 |
Usually, you indent in blocks. Blocks are anything that have a start (function) and an end (endfunction). With an If, you just consider else and elseif to end the last if block and start a new one. eg: JASS:function loop call call call exitwhen endloop if call call else call call endif endfunction |
| 04-12-2007, 12:49 AM | #5 |
Ok, I'll indent it right now. Thanks a bunch. |
| 04-12-2007, 12:50 AM | #6 |
I will run it under JC, just give me a second. (I don't feel like reading the whole thing)I don't know, it gave me like 44 errors or 42 or something like that. Maybe you can get JASSCraft and correct it... ![]() Here is the link: Click here to get JASSCraft! Sorry, I can't c'n'p the errors because it isn't actual changable text. ![]() @Earth-Fury: Here is the code indented... Here: JASS:function FreezeUnit takes nothing returns nothing //Locals local unit UFreezing local unit UFrozen local force TempForce local integer begin = 0 local integer end = 6 set UFreezing = GetAttacker() set UFrozen = GetTriggerUnit() set TempForce = GetPlayersAll() //Heal Unit call SetUnitState(UFrozen, UNIT_STATE_LIFE, RMaxBJ(0,100)) //Check if unit can be frozen if( IsUnitPaused(UFrozen) == false ) then if( GetUnitTypeId(UFrozen) != GetUnitTypeId(UFreezing)) then //Team 1 Frozen Color if( GetUnitTypeId(UFrozen) == udg_UNTTypes[1] ) then loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 0, 0, 255, 255) set begin=begin+1 endif exitwhen begin>end endloop set begin=6 set end=11 loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 0, 255, 0, 255) set begin=begin+1 endif exitwhen begin>end endloop //Team 2 Frozen Color else set begin = 0 set end = 6 if( GetUnitTypeId(UFrozen) == udg_UNTTypes[2] ) then loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 0, 255, 0, 255) set begin=begin+1 endif exitwhen begin>end endloop set begin=6 set end=11 loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 0, 0, 255, 255) set begin=begin+1 endif exitwhen begin>end endloop endif endif //Other Animations call SetUnitTimeScalePercent( UFrozen, 0.00 ) call IssueImmediateOrder( UFrozen, "stop" ) call PauseUnit(UFrozen, true) call PingMinimapForForce(TempForce, GetLocationX(GetUnitLoc(UFrozen)), GetLocationY(GetUnitLoc(UFrozen)), 5.00) //Message players call DisplayTimedTextToForce( TempForce, 10.00, ( udg_STRColors[GetPlayerId(GetOwningPlayer(UFreezing))+1] + ( udg_STRNameArray[GetPlayerId(GetOwningPlayer(UFreezing))+1] + ( " |cff3366FFhas frozen|r " + ( udg_STRColors[GetPlayerId(GetOwningPlayer(UFrozen))+1] + udg_STRNameArray[GetPlayerId(GetOwningPlayer(UFrozen))+1] ) ) ) ) ) //Score for players if( GetUnitTypeId(UFrozen) == udg_UNTTypes[1] ) then set udg_INTTeam1Frozen = udg_INTTeam1Frozen+1 else set udg_INTTeam2Frozen = udg_INTTeam2Frozen+1 endif call SetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_GOLD) + 1) call SetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_FOOD_USED, GetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_FOOD_USED) + 1) set udg_INTFrozen[GetConvertedPlayerId(GetOwningPlayer(UFrozen))] = ( udg_INTFrozen[GetConvertedPlayerId(GetOwningPlayer(UFrozen))] + 1 ) set udg_INTFreezes[GetConvertedPlayerId(GetOwningPlayer(UFreezing))] = ( udg_INTFreezes[GetConvertedPlayerId(GetOwningPlayer(UFreezing))] + 1 ) //Check if all frozen if( udg_INTTeam1Players == udg_INTTeam1Frozen) then set udg_INTWinner = 2 call TriggerExecute( gg_trg_Team_Scores ) elseif( udg_INTTeam2Players == udg_INTTeam2Frozen) then set udg_INTWinner = 1 call TriggerExecute( gg_trg_Team_Scores ) endif endif //Check if unit can be thawed elseif( IsUnitPaused(UFrozen) == true ) then if( GetUnitTypeId(UFrozen) == GetUnitTypeId(UFreezing)) then //Team 1 Thaw Color set begin=0 set end = 6 if( GetUnitTypeId(UFrozen) == udg_UNTTypes[1] ) then loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 255, 255, 255, 255) set begin=begin+1 endif exitwhen begin>end endloop set begin=6 set end=11 loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 255, 0, 0, 255) set begin=begin+1 endif exitwhen begin>end endloop //Team 2 Thaw Color else set begin = 0 set end = 6 if( GetUnitTypeId(UFrozen) == udg_UNTTypes[2] ) then loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 255, 0, 0, 255) set begin=begin+1 endif exitwhen begin>end endloop set begin=6 set end=11 loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 255, 255, 255, 255) set begin=begin+1 endif exitwhen begin>end endloop endif endif //Other Animations call SetUnitTimeScalePercent( UFrozen, 100.00 ) call PauseUnit(UFrozen, false) call PingMinimapForForce(TempForce, GetLocationX(GetUnitLoc(UFrozen)), GetLocationY(GetUnitLoc(UFrozen)), 5.00) //Message players call DisplayTimedTextToForce( TempForce, 10.00, ( udg_STRColors[GetPlayerId(GetOwningPlayer(UFreezing))+1] + ( udg_STRNameArray[GetPlayerId(GetOwningPlayer(UFreezing))+1] + ( " |cffCC3333has thawed|r " + ( udg_STRColors[GetPlayerId(GetOwningPlayer(UFrozen))+1] + udg_STRNameArray[GetPlayerId(GetOwningPlayer(UFrozen))+1] ) ) ) ) ) //Score for players if( GetUnitTypeId(UFrozen) == udg_UNTTypes[1] ) then set udg_INTTeam1Frozen = udg_INTTeam1Frozen-1 else set udg_INTTeam2Frozen = udg_INTTeam2Frozen-1 endif call SetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_GOLD) + 1) call SetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_LUMBER, GetPlayerState(GetOwningPlayer(UFreezing), PLAYER_STATE_RESOURCE_LUMBER) + 1) set udg_INTThaws[GetConvertedPlayerId(GetOwningPlayer(UFreezing))] = ( udg_INTThaws[GetConvertedPlayerId(GetOwningPlayer(UFreezing))] + 1 ) set udg_INTThawed[GetConvertedPlayerId(GetOwningPlayer(UFrozen))] = ( udg_INTThawed[GetConvertedPlayerId(GetOwningPlayer(UFrozen))] + 1 ) endif endif //Null Locals set UFreezing = null set UFrozen = null call DestroyForce(TempForce) endfunction //=========================================================================== function InitTrig_Player_Attacked takes nothing returns nothing local integer begin = 0 set gg_trg_Player_Attacked = CreateTrigger( ) loop call TriggerRegisterPlayerUnitEventSimple( gg_trg_Player_Attacked, Player(begin), EVENT_PLAYER_UNIT_ATTACKED ) set begin = begin+1 exitwhen begin>11 endloop call TriggerAddAction( gg_trg_Player_Attacked, function FreezeUnit ) endfunction Ok... I'll tell you some of the problems: - The variable "UNT_Types[1]" wasn't set as a variable, nor was it set as an array... - The STR_Colors variable wasn't set. - Basically, you forgot to set a bunch of variables you used. You can set a variable like this: JASS:set Var = Value or local <Type> Var = <Value> etc. |
| 04-12-2007, 12:58 AM | #7 |
Wow thanks that looks a lot better then what I had done, haha. Changing it. I have all the global variables set in another trigger, the trigger works fine but it just lags really bad when a bunch of units attack. I also wish for the event to be attack instead of damage. |
| 04-12-2007, 01:17 AM | #8 |
I'll take a look at it. btw: This: JASS:function FreezeUnit takes nothing returns nothing //Locals local unit UFreezing local unit UFrozen local force TempForce local integer begin = 0 local integer end = 6 set UFreezing = GetAttacker() set UFrozen = GetTriggerUnit() set TempForce = GetPlayersAll() JASS:function FreezeUnit takes nothing returns nothing //Locals local unit UFreezing = GetAttacker() local unit UFrozen = GetTriggerUnit() local force TempForce = GetPlayersAll() local integer begin = 0 local integer end = 6 ![]() EDIT: After skimming, I found one small position leak here: JASS:call PingMinimapForForce(TempForce, GetLocationX(GetUnitLoc(UFrozen)), GetLocationY(GetUnitLoc(UFrozen)), 5.00) JASS:local location UFrozloc = (GetUnitLoc(UFrozen)) JASS:call PingMinimapForForce(TempForce, GetLocationX(UFrozloc), GetLocationY(UFrozloc), 5.00) JASS:set UFrozloc = null call RemoveLocation( UFrozloc ) |
| 04-12-2007, 01:19 AM | #9 |
JASS:loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 0, 0, 255, 255) set begin=begin+1 endif exitwhen begin>end endloop set begin=6 set end=11 loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 0, 255, 0, 255) set begin=begin+1 endif exitwhen begin>end endloop I'm not sure, but aren't these infinite loops? I don't see how begin will ever become greater than end. |
| 04-12-2007, 01:27 AM | #10 |
Wouldn't it loop until that occurs, or? Also, if it goes into an infinite loop, wouldn't WE crash? I'm not sure either... ![]() |
| 04-12-2007, 01:33 AM | #11 |
JASS:set UFrozloc = null call RemoveLocation( UFrozloc ) Small correction: You want to remove it before you null it. Otherwise you wont be removing anything. |
| 04-12-2007, 01:33 AM | #12 |
Now the thing with nulling is that I was told by Vexorian that nulling is bad because it makes it so there is nothing to delete. I'm not sure if he was talking about something different though. Please explain this for me. |
| 04-12-2007, 01:41 AM | #13 |
You said that the units no longer get paused since you put in the loops. Does any of the other stuff after the loops work? |
| 04-12-2007, 01:49 AM | #14 |
Well I was wrong, I noticed that only udg_UNTTypes[2] gets frozen. Also the message only displays with that and the ping. With udg_UNTTypes[1] however, the unit just turns blue but doesn't pause nor a text display nor a ping. |
| 04-12-2007, 01:57 AM | #15 |
Try changing your loops to to this: JASS:loop if(GetLocalPlayer() == Player(begin)) then call SetUnitVertexColor(UFrozen, 0, 0, 255, 255) endif set begin = begin + 1 exitwhen begin>end endloop Also I think you want your end value to be 5 not 6. |
