hi there..

i´ve written this functions to fill and erase tiles in my 3D Editor:
Click to reveal.. ('fill_tile')

Code:
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);
	}
}



Click to reveal.. ('load_empty')

Code:
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:
Code:
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:
Code:
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.. ._.


Selling my Acknex Engine Editions (A7 Com & A8 Pro):
>> click here if you are interested <<