HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Map crashes on init

09-18-2007, 03:55 PM#1
botanic
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
Collapse 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
Setup Trigger
Collapse 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
Test Trigger
Trigger:
Untitled Trigger 001
Collapse Events
Player - Player 1 (Red) types a chat message containing -test as An exact match
Conditions
Collapse Actions
Set temppoint = (Position of (Random unit from (Units currently selected by Player 1 (Red))))
Custom script: set udg_tempreal = ReturnZ(udg_temppoint)
Game - Display to (All players) the text: (String(tempreal))

PS: 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
TaintedReality
Collapse JASS:
call ExecuteFunc("Set_Z_Map")

Collapse 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
Troll-Brain
the function Set_Z_Map is after :

Collapse JASS:
call ExecuteFunc("Set_Z_Map")
09-18-2007, 05:54 PM#4
TaintedReality
Quote:
the function Set_Z_Map is after :

ExecuteFunc() doesn't care whether it's before or after ^^.
09-18-2007, 06:27 PM#5
botanic
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
Troll-Brain
Collapse JASS:
call MoveLocation(udg_ZLocation,X,Y)
the point is still on the map ?

(Don't forget to edit your code)
09-18-2007, 06:48 PM#7
botanic
i don't get what you mean i don't see why it wouldn't be :/
09-18-2007, 08:01 PM#8
Troll-Brain
Quote:
Originally Posted by botanic
i don't get what you mean i don't see why it wouldn't be :/
if the X/Y of the point are outside the map.
the values X/Y of a point : (minX < X < maxY) or (minY < Y < maxY)
09-19-2007, 12:14 AM#9
botanic
no that should never happen