#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <xs>
#define PLUGIN "Pumpkin on Maps"
#define VERSION "1.0"
#define AUTHOR "Aragon*" // editat de yontu
#define ADMIN_ACC ADMIN_IMMUNITY
new const PumpkinModel[] = "models/pumpkin.mdl";
new const TreeClassname[] = "pUmpk1NNN";
new menu;
new Float:fMaxs[3] = { 16.0, 16.0, 38.0 };
new Float:fMins[3] = { -16.0, -16.0, -38.0 };
new const PumpkinColorGlow[ 6 ][ 3 ] =
{
{ 0, 255, 255 },
{ 255, 255, 0 },
{ 255, 0, 255 },
{ 255, 0, 0 },
{ 0, 255, 0 },
{ 0, 255, 0 }
};
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_think( TreeClassname, "make_dlight" );
register_clcmd("say /pumpkin", "PumpkinMenu");
register_clcmd("say /saveorigins", "cmdSaveOrigins");
}
public plugin_precache()
{
precache_model(PumpkinModel);
}
public plugin_cfg()
{
static sConfigsDir[64], sFile[64];
get_configsdir(sConfigsDir, sizeof sConfigsDir - 1);
static sMapName[32];
get_mapname(sMapName, sizeof sMapName - 1);
formatex(sFile, sizeof sFile - 1, "%s/Pumpkin/%s_origins.cfg", sConfigsDir, sMapName);
if(!file_exists(sFile)) {
return 1
}
static sFileOrigin[3][32], sFileAngles[3][32], iLine, iLength, sBuffer[256];
static sTemp1[128], sTemp2[128];
static Float:fOrigin[3], Float:fAngles[3];
while(read_file(sFile, iLine++, sBuffer, sizeof sBuffer - 1, iLength))
{
if((sBuffer[0]==';') || !iLength)
continue;
strtok(sBuffer, sTemp1, sizeof sTemp1 - 1, sTemp2, sizeof sTemp2 - 1, '|', 0);
parse(sTemp1, sFileOrigin[0], sizeof sFileOrigin[] - 1, sFileOrigin[1], sizeof sFileOrigin[] - 1, sFileOrigin[2], sizeof sFileOrigin[] - 1);
fOrigin[0] = str_to_float(sFileOrigin[0]);
fOrigin[1] = str_to_float(sFileOrigin[1]);
fOrigin[2] = str_to_float(sFileOrigin[2]);
parse(sTemp2, sFileAngles[0], sizeof sFileAngles[] - 1, sFileAngles[1], sizeof sFileAngles[] - 1, sFileAngles[2], sizeof sFileAngles[] - 1);
fAngles[0] = str_to_float(sFileAngles[0]);
fAngles[1] = str_to_float(sFileAngles[1]);
fAngles[2] = str_to_float(sFileAngles[2]);
static iEnt;
iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
if(!iEnt)
return 0;
engfunc(EngFunc_SetOrigin, iEnt, fOrigin);
set_pev(iEnt, pev_angles, fAngles);
engfunc(EngFunc_SetModel, iEnt, PumpkinModel);
set_pev(iEnt, pev_classname, TreeClassname);
new iRandom = random_num( 0, 3 ); // or some many values
set_rendering( iEnt, kRenderFxGlowShell,
PumpkinColorGlow[ iRandom ][ 0 ], PumpkinColorGlow[ iRandom ][ 1 ], PumpkinColorGlow[ iRandom ][ 2 ],
kRenderNormal, 255 );
dllfunc(DLLFunc_Spawn, iEnt);
set_pev(iEnt, pev_solid, SOLID_BBOX);
engfunc(EngFunc_SetSize, iEnt, fMins, fMaxs);
}
return 1;
}
public PumpkinMenu(id) {
if(!access(id, ADMIN_ACC))
return 1;
menu = menu_create("\yPumpkin Menu", "cmdPumpkinMenu");
menu_additem(menu, "\wCreate Pumpkin", "1", 0);
menu_additem(menu, "\wRemove Pumpkin", "2", 0);
menu_additem(menu, "\wRotate Pumpkin", "3", 0);
menu_additem(menu, "\wSave Pumpkin Origin", "4", 0);
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0);
return PLUGIN_CONTINUE;
}
public cmdPumpkinMenu(id, menu, item) {
if (item == MENU_EXIT) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data);
switch(key) {
case 1: cmdAddPumpkin(id)
case 2: {
cmdRemovePumpkin(id)
PumpkinMenu(id)
}
case 3: {
cmdRotatePumpkin(id)
PumpkinMenu(id)
}
case 4: {
cmdSaveOrigins(id)
PumpkinMenu(id)
}
default: return PLUGIN_HANDLED;
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public cmdAddPumpkin(id)
{
if(!access(id, ADMIN_ACC))
return 1;
if(!is_user_alive(id))
return 1;
static Float:fAimOrigin[3];
fm_get_aimorigin(id, fAimOrigin);
if((engfunc(EngFunc_PointContents, fAimOrigin) != CONTENTS_SKY) && (engfunc(EngFunc_PointContents, fAimOrigin) != CONTENTS_SOLID))
{
static iEnt;
iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
if(!iEnt)
return 0;
engfunc(EngFunc_SetOrigin, iEnt, fAimOrigin);
engfunc(EngFunc_SetModel, iEnt, PumpkinModel);
set_pev(iEnt, pev_classname, TreeClassname);
dllfunc(DLLFunc_Spawn, iEnt);
set_pev(iEnt, pev_solid, SOLID_BBOX);
engfunc(EngFunc_SetSize, iEnt, fMins, fMaxs);
new iRandom = random_num( 0, 3 ); // or some many values
set_rendering( iEnt, kRenderFxGlowShell,
PumpkinColorGlow[ iRandom ][ 0 ], PumpkinColorGlow[ iRandom ][ 1 ], PumpkinColorGlow[ iRandom ][ 2 ],
kRenderNormal, 255 );
client_print(id, print_chat, "Successfuly created a Pumpkin! Now save the origins ^"/saveorigins^"");
}
else
client_print(id, print_chat, "Sorry, but that location is unavailable!");
return 0;
}
public cmdRemovePumpkin(id)
{
if(!access(id, ADMIN_ACC))
return 1;
if(!is_user_alive(id))
return 1;
static iEnt, iBody;
get_user_aiming(id, iEnt, iBody);
if(pev_valid(iEnt))
{
static sClassname[32];
pev(iEnt, pev_classname, sClassname, sizeof sClassname - 1);
if(!strcmp(sClassname, TreeClassname, 1))
{
engfunc(EngFunc_RemoveEntity, iEnt);
client_print(id, print_chat, "Successfuly, you removed a tree! Now save the origins ^"/saveorigins^"");
}
else
client_print(id, print_chat, "Sorry, you must aim at an Pumpkin to remove it!");
}
return 0;
}
public cmdRotatePumpkin(id)
{
if(!access(id, ADMIN_ACC))
return 1;
if(!is_user_alive(id))
return 1;
static iEnt, iBody;
get_user_aiming(id, iEnt, iBody);
if(pev_valid(iEnt))
{
static sClassname[32];
pev(iEnt, pev_classname, sClassname, sizeof sClassname - 1);
if(!strcmp(sClassname, TreeClassname, 1))
{
static Float:fAngles[3];
pev(iEnt, pev_angles, fAngles);
fAngles[1] += 90.0;
set_pev(iEnt, pev_angles, fAngles);
client_print(id, print_chat, "Successfuly, you rotated a Pumpkin! Now save the origins ^"/saveorigins^"");
}
else
client_print(id, print_chat, "Sorry, you must aim at an Pumpkin to rotate it!");
}
return 0;
}
public cmdSaveOrigins(id)
{
if(!access(id, ADMIN_ACC))
return 1;
static sConfigsDir[64], sFile[64];
get_configsdir(sConfigsDir, sizeof sConfigsDir - 1);
static sMapName[32];
get_mapname(sMapName, sizeof sMapName - 1);
formatex(sFile, sizeof sFile - 1, "%s/Pumpkin/%s_origins.cfg", sConfigsDir, sMapName);
new iEnt = -1, iCount;
static sBuffer[256];
while((iEnt = find_ent_by_class(iEnt, TreeClassname)))
{
new Float:fEntOrigin[3], Float:fEntAngles[3]
pev(iEnt, pev_origin, fEntOrigin);
pev(iEnt, pev_angles, fEntAngles);
formatex(sBuffer, sizeof sBuffer - 1, "%f %f %f | %f %f %f^n", fEntOrigin[0], fEntOrigin[1], fEntOrigin[2], fEntAngles[0], fEntAngles[1], fEntAngles[2]);
write_file(sFile, sBuffer, -1);
iCount++;
}
client_print(id, print_chat, "Successfuly saved all tree origins (%d) for map %s!", iCount,sMapName);
return 0;
}
public make_dlight( iEntity ) {
MakeLight( iEntity, 40, random_num(0, 255), random_num(0, 255), random_num(0, 255) );
/*
static Float:fAngles[ 3 ];
entity_get_vector( iEntity, EV_VEC_angles, fAngles );
fAngles[ 1 ]--;
entity_set_vector( iEntity, EV_VEC_angles, fAngles );*/
// deasupra reprezinta sistemul de rotatie al dovlecilor, imediat cum au fost spawn-ati pe harta
entity_set_float( iEntity, EV_FL_nextthink, halflife_time( ) + 0.01 );
}
stock fm_get_aimorigin(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;
}
public MakeLight( iEntity, iRadius, red, green, blue ) {
if( is_valid_ent( iEntity ) ) {
static Float:fOrigin[ 3 ];
pev( iEntity, pev_origin, fOrigin );
message_begin( MSG_BROADCAST, SVC_TEMPENTITY, _, iEntity );
write_byte( TE_DLIGHT );
engfunc( EngFunc_WriteCoord, fOrigin[ 0 ] );
engfunc( EngFunc_WriteCoord, fOrigin[ 1 ] );
engfunc( EngFunc_WriteCoord, fOrigin[ 2 ] );
write_byte( iRadius )
write_byte( red )
write_byte( green )
write_byte( blue )
write_byte( 2 )
write_byte( 0 )
message_end( );
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1048\\ f0\\ fs16 \n\\ par }
*/