This site is a testing version, but all data is shared with the live forum.


Raised This Month: $ Target: $400
 0% 

[Solved] Saving Entity Position - Problem


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Baws
Veteran Member
Join Date: Oct 2012
Old 09-21-2014 , 21:42   [Solved] Saving Entity Position - Problem
Reply With Quote #1

Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <xs>

new const KZ_LIBRARY[] = "kzarg"
new const KZ_DIR[] = "kz"

enum C4_TIMERS
{
	KZ_C4_START = 1,
	KZ_C4_END = 2
};

new const KZ_ALTER_START[] = "alter_starts"

new const kz_alter_start_mdl[] = "models/w_c4.mdl"
new alter_button

new const Float:KZ_C4_ALTER_MIN[3] = {-14.0, -14.0, -4.0}
new const Float:KZ_C4_ALTER_MAX[3] = {14.0, 14.0, 4.0}

new g_hud_overtime

public plugin_init()
{
	register_plugin("ButtonCreator - kzarg", "0.0.1", "ReymonARG")
	
	register_clcmd("say /sbm", "cmdstarteverything", ADMIN_IMMUNITY, "- open Surf Button Maker menu")
	
	g_hud_overtime = CreateHudSyncObj()
}

public plugin_cfg()
{
	readalterstarts()
}

public plugin_natives()
{
	register_library(KZ_LIBRARY)
	register_native("kz_get_configsdir", "native_kz_get_configsdir", 1)
}

/*================================================================================================*/
/*************************************** [C4 Starts] **********************************************/
/*=============================================================================R=E=Y=M=O=N==A=R=G=*/

public cmdstarteverything(id)
{
	kz_makec4menu(id)
	return PLUGIN_CONTINUE;
}

stock kz_makec4menu(id, page=0)
{
	new menu = menu_create("\y[\rAG\y] Button Creator \w", "menuc4funccions");
	menu_additem(menu, "Create Start", "1", 0);
	menu_additem(menu, "Create End", "2", 0);
	menu_additem(menu, "Move Menu", "3", 0);
	menu_additem(menu, "Remove Aiming C4", "4", 0);
	menu_additem(menu, "Remove All", "5", 0);
	menu_additem(menu, "Save positions", "6", 0);
	
	menu_display(id, menu, page);
}

/*================================================================================================*/

public menuc4funccions(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		return PLUGIN_HANDLED;
	}
	
	new data[6], iName[64];
	new iaccess, callback;
	
	menu_item_getinfo(menu, item, iaccess, data,5, iName, 63, callback);
	
	new key = str_to_num(data);
	new page = floatround(str_to_float(data)/7.0001, floatround_floor)
 
	switch( key )
	{
		case 1: 
		{
			makeBox(id, "bstart", KZ_C4_START);
		}
		case 2:
		{
			makeBox(id, "bfinal", KZ_C4_END);
		}
		case 3:	
		{
			kz_movec4menu(id)
			return PLUGIN_HANDLED
		}
		case 4:
		{
			new ent, body;
			get_user_aiming(id, ent, body, 9999);
   
			if( !pev_valid(ent) )
			{
				kz_hud_overtime(id, "[AG] You have to point to an object to remove it.")
			}
			else
			{
				new szClassname[33];
				pev(ent, pev_classname, szClassname, 32);
    
				if( !equal(szClassname, "bstart", 0) && !equal(szClassname, "bfinal", 0) )
				{
					kz_hud_overtime(id, "[AG] You have to point to an object to remove it.")
				}
				else
				{
					set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME)
					kz_hud_overtime(id, "[AG] Object destroyed correctly.")
				}
			}
		}
		case 5:
		{
			new ent
			while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bstart")) )
			{
				set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME)
			}
			
			ent = 0 // Reset
			while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bfinal")) )
			{
				set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME)
			}
			
			kz_hud_overtime(id, "[AG] Object destroyed correctly.")
			
		}
		case 6:
		{
			new mapname[64], c4file[128]
			get_mapname(mapname, 63)
			kz_get_configsdir(c4file, 127)
			formatex(c4file, 127, "%s/%s/%s.cfg", c4file, KZ_ALTER_START, mapname)		

			if( file_exists(c4file) )
			{
				delete_file(c4file)
			}
   
			new ent, Float:vOrigin[3], szData[42];
			new f = fopen(c4file, "at")
			while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bstart")) )
			{
				pev(ent, pev_origin, vOrigin)
				formatex(szData, 41, "S %f %f %f^n", vOrigin[0], vOrigin[1], vOrigin[2])
				fputs(f, szData)
			}
			ent = 0
			while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bfinal")) )
			{
				pev(ent, pev_origin, vOrigin)
				formatex(szData, 41, "E %f %f %f^n", vOrigin[0], vOrigin[1], vOrigin[2])
				fputs(f, szData)
			}
			fclose(f);
   
			kz_hud_overtime(id, "[AG] Objects stored properly.")
		}
	}
 
	kz_makec4menu(id, page)
 
	return PLUGIN_HANDLED;
}

stock kz_movec4menu(id, page=0)
{
	new menu = menu_create("\y[\rAG\y] C4 Move Start \w", "moverc4funccion")
	
	menu_additem(menu, "X++", "1", 0)
	menu_additem(menu, "X--", "2", 0)
	menu_additem(menu, "Y++", "3", 0)
	menu_additem(menu, "Y--", "4", 0)
	menu_additem(menu, "Z++", "5", 0)
	menu_additem(menu, "Z--", "6", 0)
	
	menu_setprop(menu, MPROP_EXITNAME, "\wC4 Menu");
	
	menu_display(id, menu, page)
}

public moverc4funccion(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		kz_makec4menu(id)
		return PLUGIN_HANDLED;
	}
	
	new data[6], iName[64];
	new iaccess, callback;
	
	menu_item_getinfo(menu, item, iaccess, data,5, iName, 63, callback);
	new page = floatround(str_to_float(data)/7.0001, floatround_floor)
	
	moveBox(id, str_to_num(data))
	kz_movec4menu(id, page)
	
	return PLUGIN_HANDLED
}	

/*================================================================================================*/

readalterstarts()
{
	new mapname[64], c4file[128]
	get_mapname(mapname, 63)
	kz_get_configsdir(c4file, 127)
	formatex(c4file, 127, "%s/%s/%s.cfg", c4file, KZ_ALTER_START, mapname)
	
	if( !file_exists(c4file) )
	{
		return;
	}
 
	new szData[41]
	new szType[2], szX[13], szY[13], szZ[13]
	new Float:vOrigin[3]
	new f = fopen(c4file, "rt")
	while( !feof(f) )
	{
		fgets(f, szData, 40)
		parse(szData, szType, 1, szX, 12, szY, 12, szZ, 12)
  
		vOrigin[0] = str_to_float(szX)
		vOrigin[1] = str_to_float(szY)
		vOrigin[2] = str_to_float(szZ)
  
		if( szType[0] == 'S' )
		{
			makeBox(0, "bstart", 1, vOrigin)
		}
		else if( szType[0] == 'E' )
		{
			makeBox(0, "bfinal", 2, vOrigin)
		}
		else
		{
			log_amx("Invalid: %c en: %s", szType[0], c4file)
		}
	}
	fclose(f);
}

/*================================================================================================*/

stock makeBox(id, const szClassname[], {C4_TIMERS,_}:type, Float:pOrigin[3]={0.0, 0.0, 0.0})
{
	new ent= engfunc(EngFunc_CreateNamedEntity, alter_button);
 
	if( !pev_valid(ent) )
	{
		return PLUGIN_HANDLED;
	}
 
	set_pev(ent, pev_classname, szClassname)
	set_pev(ent, pev_solid, SOLID_BBOX)
	set_pev(ent, pev_movetype, MOVETYPE_NONE)
	set_pev(ent, pev_target, type == KZ_C4_START ? "counter_start" : "counter_off")
	engfunc(EngFunc_SetModel, ent, kz_alter_start_mdl)
	engfunc(EngFunc_SetSize, ent, KZ_C4_ALTER_MIN, KZ_C4_ALTER_MAX)
 
	// Check if it making from file or user
	if( id )
	{
		new Float:vOrigin[3]
		fm_get_aim_origin(id, vOrigin)
		vOrigin[2] += 22.0 // Prevent put on the floor
		engfunc(EngFunc_SetOrigin, ent, vOrigin);
  
	}
	else
	{ 
		engfunc(EngFunc_SetOrigin, ent, pOrigin)
	}
 
	switch( type )
	{
		case KZ_C4_START: fm_set_rendering(ent, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 100)
		case KZ_C4_END: fm_set_rendering(ent, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 100)
	}
  
	return PLUGIN_HANDLED
}

/*================================================================================================*/

stock moveBox(id, mode)
{
	new ent, body, szClassname[33];
	get_user_aiming(id, ent, body, 9999);
 
	if( !pev_valid(ent) )
	{
		return PLUGIN_HANDLED;
	}
  
	pev(ent, pev_classname, szClassname, 32);
 
	if( !equal(szClassname, "bstart", 0) && !equal(szClassname, "bfinal", 0) )
	{
		kz_hud_overtime(id, "[AG] You must focus an object.")
	}
	else
	{
		new Float:vOrigin[3];
		pev(ent, pev_origin, vOrigin);
 
		switch( mode )
		{
			case 1: vOrigin[0] += 5.0
			case 2: vOrigin[0] -= 5.0
			case 3: vOrigin[1] += 5.0
			case 4: vOrigin[1] -= 5.0
			case 5: vOrigin[2] += 5.0
			case 6: vOrigin[2] -= 5.0
		}
  
		engfunc(EngFunc_SetOrigin, ent, vOrigin)
	}
 
	return PLUGIN_HANDLED;
}

stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) 
{
	new Float:RenderColor[3];
	RenderColor[0] = float(r);
	RenderColor[1] = float(g);
	RenderColor[2] = float(b);

	set_pev(entity, pev_renderfx, fx);
	set_pev(entity, pev_rendercolor, RenderColor);
	set_pev(entity, pev_rendermode, render);
	set_pev(entity, pev_renderamt, float(amount));

	return 1;
}

stock fm_get_aim_origin(index, Float:origin[3]) 
{
	new Float:start[3], Float:view_ofs[3];
	pev(index, pev_origin, start);
	pev(index, pev_view_ofs, view_ofs);
	xs_vec_add(start, view_ofs, start);

	new Float:dest[3];
	pev(index, pev_v_angle, dest);
	engfunc(EngFunc_MakeVectors, dest);
	global_get(glb_v_forward, dest);
	xs_vec_mul_scalar(dest, 9999.0, dest);
	xs_vec_add(start, dest, dest);

	engfunc(EngFunc_TraceLine, start, dest, 0, index, 0);
	get_tr2(0, TR_vecEndPos, origin);

	return 1;
}

stock kz_hud_overtime(id, const message[], {Float,Sql,Result,_}:...)
{
	static msg[192]
	vformat(msg, 191, message, 3);
	
	set_hudmessage(0, 0, 255, -1.0, 0.90, 0, 0.0, 2.0, 0.0, 1.0, -1);
	ShowSyncHudMsg(id, g_hud_overtime, msg);
}

stock kz_get_configsdir(name[], len)
{
	new lalin[64]
	get_localinfo("amxx_configsdir", lalin,63)
	
	return formatex(name, len, "%s/%s", lalin, KZ_DIR)
}

public native_kz_get_configsdir(name[], len)
{
	param_convert(1)
	
	new lalin[64]
	get_localinfo("amxx_configsdir", lalin,63)
	
	return formatex(name, len, "%s/%s", lalin, KZ_DIR)
}
Create the button makes the server crash. Any fix?
__________________
Like my clean plugins and work?

Last edited by Baws; 09-23-2014 at 23:24.
Baws is offline
hornet
AMX Mod X Plugin Approver
Join Date: Mar 2010
Location: Australia
Old 09-21-2014 , 23:35   Re: Server Crash - Create Entity
Reply With Quote #2

Take a look at the include files to see how to use these engine functions properly.

Code:
new alter_button // new ent = engfunc(EngFunc_CreateNamedEntity, alter_button);

->

Code:
new const alter_button[] = "SOME LEGIT ENT CLASSNAME" //such as info_target ... etc. // new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, alter_buttoon));

I also highly recommend reading the New Menu's tutorial by Emp, and sub some functions in from Engine module to replace those ugly Fakemeta stocks.
hornet is offline
hzqst
Senior Member
Join Date: Jul 2008
Old 09-22-2014 , 00:34   Re: Server Crash - Create Entity
Reply With Quote #3

g_engfuncs.pfnCreateNamedEntity(const char *name) needs a static space of memory as the first parameter.
in mp.dll we usually use
Code:
edict_t *pent = g_engfuncs.pfnCreateNamedEntity(MAKE_STRING(szName));
or
Code:
template <class T> T *GetClassPtr(T *a)
{
	entvars_t *pev = (entvars_t *)a;

	if (pev == NULL)
		pev = VARS(g_engfuncs.pfnCreateEntity());

	a = (T *)GET_PRIVATE(ENT(pev));

	if (a == NULL)
	{
		a = new(pev) T;
		a->pev = pev;
	}

	return a;
}
to create an entity.
hzqst is offline
Baws
Veteran Member
Join Date: Oct 2012
Old 09-22-2014 , 16:49   Re: Server Crash - Create Entity
Reply With Quote #4

--FIXED-- Thanks guys!
__________________
Like my clean plugins and work?

Last edited by Baws; 09-22-2014 at 17:21.
Baws is offline
Baws
Veteran Member
Join Date: Oct 2012
Old 09-22-2014 , 17:31   Re: Server Crash - Create Entity
Reply With Quote #5

It doesn't save, sorry for saying it was fixed haha. There's one more problem, it doesn't save.
__________________
Like my clean plugins and work?
Baws is offline
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 09-22-2014 , 18:08   Re: Server Crash - Create Entity
Reply With Quote #6

Looks like you did not bother to debug yourself...
__________________
Arkshine is offline
Baws
Veteran Member
Join Date: Oct 2012
Old 09-22-2014 , 18:12   Re: Server Crash - Create Entity
Reply With Quote #7

Quote:
Originally Posted by Arkshine View Post
Looks like you did not bother to debug yourself...
There's no errors. And it goes to where it displays the HUD. I don't know where's the problem.
__________________
Like my clean plugins and work?
Baws is offline
Baws
Veteran Member
Join Date: Oct 2012
Old 09-22-2014 , 23:50   Re: Server Crash - Create Entity
Reply With Quote #8

Solved.
__________________
Like my clean plugins and work?

Last edited by Baws; 09-23-2014 at 23:23.
Baws is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 16:14.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode