| 09-18-2007, 03:55 PM | #1 |
I have a JASS system I am almost done with to replace GetLocationZ... ne ways when I try and test it my map crashes on init :/ custom script JASS:function ReturnZ takes location Z returns real local integer dist = udg_Dist_Between_Pts_Z local integer X_Max = udg_Lastpoint_Z_X local integer Y_Max = udg_Lastpoint_Z_Y local real X = 0.0 local real Y = 0.0 local integer ArrayNumber = 0 local real point1 local real point2 local real point3 local real tmpX local real tmpY if X < 0 then set X = -X else set X = GetLocationX(Z) + (X_Max * dist) endif if Y < 0 then set Y = -Y else set Y = GetLocationY(Z) + (Y_Max * dist) endif set tmpX = X - ModuloReal(X, dist) set tmpY = Y - ModuloReal(Y, dist) if tmpX + tmpY < 64 then set ArrayNumber = R2I((X-tmpX)+1*Y_Max + (Y-tmpY)) if ArrayNumber <= 8191 then set point1 = udg_Z_Value1[ArrayNumber] elseif (ArrayNumber > 8191) and (ArrayNumber <= (8191*2)) then set point1 = udg_Z_Value2[ArrayNumber] elseif (ArrayNumber > 8191*2) and (ArrayNumber <= (8191*3)) then set point1 = udg_Z_Value3[ArrayNumber] elseif (ArrayNumber > 8191*3) and (ArrayNumber <= (8191*4)) then set point1 = udg_Z_Value4[ArrayNumber] elseif (ArrayNumber > 8191*4) and (ArrayNumber <= (8191*5)) then set point1 = udg_Z_Value5[ArrayNumber] endif set ArrayNumber = R2I((X-tmpX+1)+1*Y_Max + (Y-tmpY)) if ArrayNumber <= 8191 then set point2 = udg_Z_Value1[ArrayNumber] elseif (ArrayNumber > 8191) and (ArrayNumber <= (8191*2)) then set point2 = udg_Z_Value2[ArrayNumber] elseif (ArrayNumber > 8191*2) and (ArrayNumber <= (8191*3)) then set point2 = udg_Z_Value3[ArrayNumber] elseif (ArrayNumber > 8191*3) and (ArrayNumber <= (8191*4)) then set point2 = udg_Z_Value4[ArrayNumber] elseif (ArrayNumber > 8191*4) and (ArrayNumber <= (8191*5)) then set point2 = udg_Z_Value5[ArrayNumber] endif set ArrayNumber = R2I((X-tmpX)+1*Y_Max + (Y-tmpY+1)) if ArrayNumber <= 8191 then set point3 = udg_Z_Value1[ArrayNumber] elseif (ArrayNumber > 8191) and (ArrayNumber <= (8191*2)) then set point3 = udg_Z_Value2[ArrayNumber] elseif (ArrayNumber > 8191*2) and (ArrayNumber <= (8191*3)) then set point3 = udg_Z_Value3[ArrayNumber] elseif (ArrayNumber > 8191*3) and (ArrayNumber <= (8191*4)) then set point3 = udg_Z_Value4[ArrayNumber] elseif (ArrayNumber > 8191*4) and (ArrayNumber <= (8191*5)) then set point3 = udg_Z_Value5[ArrayNumber] endif return point1 + point2 + point3 else set ArrayNumber = R2I((X-tmpX+1)+1*Y_Max + (Y-tmpY+1)) if ArrayNumber <= 8191 then set point1 = udg_Z_Value1[ArrayNumber] elseif (ArrayNumber > 8191) and (ArrayNumber <= (8191*2)) then set point1 = udg_Z_Value2[ArrayNumber] elseif (ArrayNumber > 8191*2) and (ArrayNumber <= (8191*3)) then set point1 = udg_Z_Value3[ArrayNumber] elseif (ArrayNumber > 8191*3) and (ArrayNumber <= (8191*4)) then set point1 = udg_Z_Value4[ArrayNumber] elseif (ArrayNumber > 8191*4) and (ArrayNumber <= (8191*5)) then set point1 = udg_Z_Value5[ArrayNumber] endif set ArrayNumber = R2I((X-tmpX+1)+1*Y_Max + (Y-tmpY)) if ArrayNumber <= 8191 then set point2 = udg_Z_Value1[ArrayNumber] elseif (ArrayNumber > 8191) and (ArrayNumber <= (8191*2)) then set point2 = udg_Z_Value2[ArrayNumber] elseif (ArrayNumber > 8191*2) and (ArrayNumber <= (8191*3)) then set point2 = udg_Z_Value3[ArrayNumber] elseif (ArrayNumber > 8191*3) and (ArrayNumber <= (8191*4)) then set point2 = udg_Z_Value4[ArrayNumber] elseif (ArrayNumber > 8191*4) and (ArrayNumber <= (8191*5)) then set point2 = udg_Z_Value5[ArrayNumber] endif set ArrayNumber = R2I((X-tmpX)+1*Y_Max + (Y-tmpY+1)) if ArrayNumber <= 8191 then set point3 = udg_Z_Value1[ArrayNumber] elseif (ArrayNumber > 8191) and (ArrayNumber <= (8191*2)) then set point3 = udg_Z_Value2[ArrayNumber] elseif (ArrayNumber > 8191*2) and (ArrayNumber <= (8191*3)) then set point3 = udg_Z_Value3[ArrayNumber] elseif (ArrayNumber > 8191*3) and (ArrayNumber <= (8191*4)) then set point3 = udg_Z_Value4[ArrayNumber] elseif (ArrayNumber > 8191*4) and (ArrayNumber <= (8191*5)) then set point3 = udg_Z_Value5[ArrayNumber] endif return point1 + point2 + point3 endif return -1.00 endfunction JASS:constant function between_points takes nothing returns integer return 64 //Change to set more or fewer points recommended is 64 MUST be a factor of the max points on the map endfunction constant function lastpoint_x takes nothing returns integer return 10240 //set to the number of points in the x of the map found under Map Properties endfunction constant function lastpoint_y takes nothing returns integer return 10240 //set to the number of points in the y of the map found under Map Properties endfunction function Set_Max_Array takes nothing returns nothing local integer dist = between_points() local integer X_Max = (lastpoint_x() * 2) / dist local integer Y_Max = (lastpoint_x() * 2) / dist local integer max = (X_Max / dist) + (Y_Max / dist) local integer I = 0 set udg_Dist_Between_Pts_Z = dist set udg_Lastpoint_Z_X = X_Max set udg_Lastpoint_Z_Y = Y_Max set udg_End_Array = max call ExecuteFunc("Set_Z_Map") endfunction function Set_Z_Map takes nothing returns nothing local integer X_Max = udg_Lastpoint_Z_X local integer Y_Max = udg_Lastpoint_Z_Y local integer dist = udg_Dist_Between_Pts_Z local integer I = -1 local integer X = -(X_Max/2*dist) local integer Y = -(Y_Max/2*dist) local integer X2 = 0 local integer Y2 = 0 local integer ArrayNumber = 0 local real end = Y_Max + X_Max set udg_ZLocation = Location(X,Y) //Set first Z point loop set I = I+1 exitwhen I > end call MoveLocation(udg_ZLocation,X,Y) set ArrayNumber = X2+1*Y_Max + Y2 if ArrayNumber <= 8191 then set udg_Z_Value1[ArrayNumber] = GetLocationZ(udg_ZLocation) elseif (ArrayNumber > 8191) and (ArrayNumber <= (8191*2)) then set udg_Z_Value2[ArrayNumber] = GetLocationZ(udg_ZLocation) elseif (ArrayNumber > 8191*2) and (ArrayNumber <= (8191*3)) then set udg_Z_Value3[ArrayNumber] = GetLocationZ(udg_ZLocation) elseif (ArrayNumber > 8191*3) and (ArrayNumber <= (8191*4)) then set udg_Z_Value4[ArrayNumber] = GetLocationZ(udg_ZLocation) elseif (ArrayNumber > 8191*4) and (ArrayNumber <= (8191*5)) then set udg_Z_Value5[ArrayNumber] = GetLocationZ(udg_ZLocation) endif if X == (X_Max * dist) then set Y = Y + dist set X = 0 set Y2 = Y2+1 set X2 = 0 else set X = X + dist set X2 = X2 + 1 endif endloop endfunction //=========================================================================== function InitTrig_Set_Values_Init takes nothing returns nothing set gg_trg_Set_Values_Init = CreateTrigger( ) call TriggerAddAction( gg_trg_Set_Values_Init, function Set_Max_Array ) endfunction Trigger: Untitled Trigger 001![]() ConditionsPS: Yes I know it will not return the correct Z when using ReturnZ that is just a placeholder until I can figure out the math :/ right now Im more worried about the crashing problem :P |
| 09-18-2007, 05:30 PM | #2 |
JASS:call ExecuteFunc("Set_Z_Map") JASS:function Set_Z_Map takes integer X_Max, integer Y_Max, integer dist returns nothing What's wrong with this picture? =p. ExecuteFunc only works with functions that have no parameters. |
| 09-18-2007, 05:34 PM | #3 |
the function Set_Z_Map is after : JASS:call ExecuteFunc("Set_Z_Map") |
| 09-18-2007, 05:54 PM | #4 | |
Quote:
ExecuteFunc() doesn't care whether it's before or after ^^. |
| 09-18-2007, 06:27 PM | #5 |
doh I knew i set them to globals at the beginning for some reason :P fixed it tho and still it crashes :/ EDIT: nm fixed it crashing just now I get 0.000 from the -test command no matter what height or where the unit is at :/ |
| 09-18-2007, 06:42 PM | #6 |
JASS:call MoveLocation(udg_ZLocation,X,Y) (Don't forget to edit your code) |
| 09-18-2007, 06:48 PM | #7 |
i don't get what you mean i don't see why it wouldn't be :/ |
| 09-18-2007, 08:01 PM | #8 | |
Quote:
the values X/Y of a point : (minX < X < maxY) or (minY < Y < maxY) |
| 09-19-2007, 12:14 AM | #9 |
no that should never happen |
