2 registered members (TipmyPip, 1 invisible),
18,731
guests, and 7
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
problem with struct strings...
#403882
06/27/12 19:42
06/27/12 19:42
|
Joined: Mar 2008
Posts: 2,247 Baden Württemberg, Germany
Espér
OP
Expert
|
OP
Expert
Joined: Mar 2008
Posts: 2,247
Baden Württemberg, Germany
|
hi there.. i´ve written this functions to fill and erase tiles in my 3D Editor:
void fill_tile(VECTOR* positchange, var tool)
{
var f_handle;
VECTOR overgiv_pos;
wait(1);
vec_set(overgiv_pos, positchange);
if(tool == 0)
{
//Erstelle Grundwerte
blocks[positchange.x][positchange.y][positchange.z].filename = placing_filename;
blocks[positchange.x][positchange.y][positchange.z].setupname = placing_setupname;
blocks[positchange.x][positchange.y][positchange.z].contentname = actual_contentpack;
blocks[positchange.x][positchange.y][positchange.z].obj = ent_create(placing_filename, vector(positchange.x*editor_settings.tile_size, positchange.y*editor_settings.tile_size, positchange.z*editor_settings.tile_size-25), NULL);
blocks[positchange.x][positchange.y][positchange.z].obj.pan = preview_entity.pan;
blocks[positchange.x][positchange.y][positchange.z].obj. x_tile = positchange.x;
blocks[positchange.x][positchange.y][positchange.z].obj. y_tile = positchange.y;
blocks[positchange.x][positchange.y][positchange.z].obj. z_tile = positchange.z;
blocks[positchange.x][positchange.y][positchange.z].positionx = positchange.x;
blocks[positchange.x][positchange.y][positchange.z].positiony = positchange.y;
blocks[positchange.x][positchange.y][positchange.z].positionz = positchange.z;
blocks[positchange.x][positchange.y][positchange.z].obj_pan = blocks[positchange.x][positchange.y][positchange.z].obj.pan;
//lade Setupdatei
if(file_exists(blocks[positchange.x][positchange.y][positchange.z].setupname))
{
file_cpy("dmt.nymph", blocks[positchange.x][positchange.y][positchange.z].setupname);
f_handle = file_open_read("dmt.nymph");
nymph_reader = 0;
while(nymph_reader != -1)
{
nymph_filer = 0;
str_cpy(setupstring, "");
file_str_read(f_handle, setupstring);
//Ist SHADOW auf true?
if(str_stri(setupstring, "shadow=true"))
{set(blocks[positchange.x][positchange.y][positchange.z].obj, SHADOW);}
//Wird specBump Shader genutzt?
else if(str_stri(setupstring, "material=mtl_specBump"))
{blocks[positchange.x][positchange.y][positchange.z].obj.material = mtl_specBump;}
//Nutzt das Objekt 180° Rotationsalpha?
else if(str_stri(setupstring, "rotatealpha=true"))
{blocks[positchange.x][positchange.y][positchange.z].obj_rotatealpha = 1;set(blocks[positchange.x][positchange.y][positchange.z].obj, TRANSLUCENT);}
//Ist Das Ende der Nymph datei erreicht?
else if(str_stri(setupstring, "#end"))
{nymph_reader = -1;}
}
file_close(f_handle);
file_delete("dmt.nymph");
}
//Führe Rotationsalpha aus
blocks[positchange.x][positchange.y][positchange.z].obj.alpha = 100;
if(blocks[positchange.x][positchange.y][positchange.z].obj_rotatealpha == 1 && blocks[positchange.x][positchange.y][positchange.z].obj.pan > 160 && blocks[positchange.x][positchange.y][positchange.z].obj.pan < 200)
{blocks[positchange.x][positchange.y][positchange.z].obj.alpha = 60;}
//Selektiere objekt
selected_obj = blocks[positchange.x][positchange.y][positchange.z].obj;
//Schließe das Feld
blocks[positchange.x][positchange.y][positchange.z].locked = 1;
}
else if(tool == 1) //Fülleimer
{
load_empty(1, positchange.x, positchange.y, positchange.z);
wait_for(load_empty); wait(1);
//Erstelle Grundwerte
error("da1");
blocks[positchange.x][positchange.y][positchange.z].filename = placing_filename;
error("da2");
blocks[positchange.x][positchange.y][positchange.z].setupname = placing_setupname;
blocks[positchange.x][positchange.y][positchange.z].contentname = actual_contentpack;
blocks[positchange.x][positchange.y][positchange.z].obj = ent_create(placing_filename, vector(positchange.x*editor_settings.tile_size, positchange.y*editor_settings.tile_size, positchange.z*editor_settings.tile_size-25), NULL);
blocks[positchange.x][positchange.y][positchange.z].obj.pan = preview_entity.pan;
blocks[positchange.x][positchange.y][positchange.z].obj. x_tile = positchange.x;
blocks[positchange.x][positchange.y][positchange.z].obj. y_tile = positchange.y;
blocks[positchange.x][positchange.y][positchange.z].obj. z_tile = positchange.z;
blocks[positchange.x][positchange.y][positchange.z].positionx = positchange.x;
blocks[positchange.x][positchange.y][positchange.z].positiony = positchange.y;
blocks[positchange.x][positchange.y][positchange.z].positionz = positchange.z;
blocks[positchange.x][positchange.y][positchange.z].obj_pan = blocks[positchange.x][positchange.y][positchange.z].obj.pan;
//lade Setupdatei
if(file_exists(blocks[positchange.x][positchange.y][positchange.z].setupname))
{
file_cpy("dmt.nymph", blocks[positchange.x][positchange.y][positchange.z].setupname);
f_handle = file_open_read("dmt.nymph");
nymph_reader = 0;
while(nymph_reader != -1)
{
nymph_filer = 0;
str_cpy(setupstring, "");
file_str_read(f_handle, setupstring);
//Ist SHADOW auf true?
if(str_stri(setupstring, "shadow=true"))
{set(blocks[positchange.x][positchange.y][positchange.z].obj, SHADOW);}
//Wird specBump Shader genutzt?
else if(str_stri(setupstring, "material=mtl_specBump"))
{blocks[positchange.x][positchange.y][positchange.z].obj.material = mtl_specBump;}
//Nutzt das Objekt 180° Rotationsalpha?
else if(str_stri(setupstring, "rotatealpha=true"))
{blocks[positchange.x][positchange.y][positchange.z].obj_rotatealpha = 1;set(blocks[positchange.x][positchange.y][positchange.z].obj, TRANSLUCENT);}
//Ist Das Ende der Nymph datei erreicht?
else if(str_stri(setupstring, "#end"))
{nymph_reader = -1;}
}
file_close(f_handle);
file_delete("dmt.nymph");
}
//Führe Rotationsalpha aus
blocks[positchange.x][positchange.y][positchange.z].obj.alpha = 100;
if(blocks[positchange.x][positchange.y][positchange.z].obj_rotatealpha == 1 && blocks[positchange.x][positchange.y][positchange.z].obj.pan > 160 && blocks[positchange.x][positchange.y][positchange.z].obj.pan < 200)
{blocks[positchange.x][positchange.y][positchange.z].obj.alpha = 60;}
//Selektiere objekt
selected_obj = blocks[positchange.x][positchange.y][positchange.z].obj;
//Schließe das Feld
blocks[positchange.x][positchange.y][positchange.z].locked = 1;
wait(1);
positchange.x += 1;
positchange.x = clamp(positchange.x, 0, editor_settings.map_sizex);
if(blocks[positchange.x][positchange.y][positchange.z].locked == 0)
{fill_tile(vector(positchange.x, positchange.y, positchange.z), 1);}
else
{
if(str_cmpi(blocks[positchange.x][positchange.y][positchange.z].filename, placing_filename) == 0)
{
fill_tile(vector(positchange.x, positchange.y, positchange.z), 1);
}
}
vec_set(positchange, overgiv_pos);
positchange.x -= 1;
positchange.x = clamp(positchange.x, 0, editor_settings.map_sizex);
if(blocks[positchange.x][positchange.y][positchange.z].locked == 0)
{fill_tile(vector(positchange.x, positchange.y, positchange.z), 1);}
else
{
if(str_cmpi(blocks[positchange.x][positchange.y][positchange.z].filename, placing_filename) == 0)
{
fill_tile(vector(positchange.x, positchange.y, positchange.z), 1);
}
}
vec_set(positchange, overgiv_pos);
positchange.y += 1;
positchange.y = clamp(positchange.y, 0, editor_settings.map_sizey);
if(blocks[positchange.x][positchange.y][positchange.z].locked == 0)
{fill_tile(vector(positchange.x, positchange.y, positchange.z), 1);}
else
{
if(str_cmpi(blocks[positchange.x][positchange.y][positchange.z].filename, placing_filename) == 0)
{
fill_tile(vector(positchange.x, positchange.y, positchange.z), 1);
}
}
vec_set(positchange, overgiv_pos);
positchange.y -= 1;
positchange.y = clamp(positchange.y, 0, editor_settings.map_sizey);
if(blocks[positchange.x][positchange.y][positchange.z].locked == 0)
{fill_tile(vector(positchange.x, positchange.y, positchange.z), 1);}
else
{
if(str_cmpi(blocks[positchange.x][positchange.y][positchange.z].filename, placing_filename) == 0)
{
fill_tile(vector(positchange.x, positchange.y, positchange.z), 1);
}
}
vec_set(positchange, overgiv_pos);
}
}
void load_empty(var emptymode, var igox, var igoy, var igoz)
{
if(emptymode == 0)
{
var ix,iy,iz;
for(iz=0; iz<editor_settings.mapheight; iz++)
{
for(iy=0; iy<editor_settings.map_sizey; iy++)
{
for(ix=0; ix<editor_settings.map_sizex; ix++)
{
blocks[ix][iy][iz].locked = 0;
blocks[ix][iy][iz].team = 0;
blocks[ix][iy][iz].passable = 0;
blocks[ix][iy][iz].explored = 0;
blocks[ix][iy][iz].typus = 0;
blocks[ix][iy][iz].positionx = 0;
blocks[ix][iy][iz].positiony = 0;
blocks[ix][iy][iz].positionz = 0;
blocks[ix][iy][iz].obj_pan = 0;
blocks[ix][iy][iz].obj_rotatealpha = 0;
blocks[ix][iy][iz].objektname = "";
blocks[ix][iy][iz].filename = "";
blocks[ix][iy][iz].setupname = "";
blocks[ix][iy][iz].contentname = "";
blocks[igox][igoy][igoz].obj = NULL;
}
}
}
}
else if(emptymode == 1)
{
if(blocks[igox][igoy][igoz].obj != NULL)
{
reset(blocks[igox][igoy][igoz].obj, SHADOW);
ent_remove(blocks[igox][igoy][igoz].obj);
}
blocks[igox][igoy][igoz].locked = 0;
blocks[igox][igoy][igoz].team = 0;
blocks[igox][igoy][igoz].passable = 0;
blocks[igox][igoy][igoz].explored = 0;
blocks[igox][igoy][igoz].typus = 0;
blocks[igox][igoy][igoz].positionx = 0;
blocks[igox][igoy][igoz].positiony = 0;
blocks[igox][igoy][igoz].positionz = 0;
blocks[igox][igoy][igoz].obj_pan = 0;
blocks[igox][igoy][igoz].obj_rotatealpha = 0;
blocks[igox][igoy][igoz].objektname = "";
blocks[igox][igoy][igoz].filename = "";
blocks[igox][igoy][igoz].setupname = "";
blocks[igox][igoy][igoz].contentname = "";
}
}
i call it this way:
load_empty(0, 0, 0, 0); //Load defaults at startup
load_empty(1, x, y, z); //erase a tile
fill_tile(vector(x, y, z), chosen_tool); //fill a tile
chosen_tool can be 0 = pencil 1 = filling bucket My problem now: When i use the pencil, everything works great. But when i use the filling bucket to fill a framed plane, i got a crash in fill_tile problem line is this:
error("da1");
blocks[positchange.x][positchange.y][positchange.z].filename = placing_filename;
error("da2");
cause "da1" is shown.. the second not.. Am i doing something wrong? I tried to use a "if(blabla != NULL)" for each stat.. but it´s still the same.. ._.
|
|
|
|