/*********************Developed by Zombie-Arena.ru*********************/
/************************************************ SETTINGS ************************************************/
/***************ZM***************/
/***************ZM***************/
/***************PUBLIC***************/
/***************PUBLIC***************/
///Uncomment if you want use it
//if u use model with anim undefine AMDL
/************************************************SETTINGS************************************************/
new g_infoTarget,g_menuId = -1,bool: g_registration,g_AllTrees,bool: g_ssad,Array:tree_id,Array:x_tree,Array:y_tree,
Float:tree_fSpawn_next[8096],z_TimerZZZ[8096],Array:z_tree,active_elka[8096]
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd(COMMAND, "trees");
g_infoTarget = engfunc(EngFunc_AllocString, "info_target");
public FakeMeta_AddToFullPack_Post(ES_Handle, iE, iEntity, iHost){
if(!pev_valid(iEntity) || pev(iEntity, pev_iuser1) != M_TIMER) return FMRES_IGNORED;
new Float:vecHostOrigin[3], Float:vecNormal[3];
pev(iHost, pev_origin, vecHostOrigin);
new Float:vecEntityOrigin[3], Float:vecEndPos[3];
pev(iEntity, pev_origin, vecEntityOrigin);
engfunc(EngFunc_TraceLine, vecHostOrigin, vecEntityOrigin, IGNORE_MONSTERS, iEntity, pTr);
get_tr2(pTr, TR_vecEndPos, vecEndPos);
get_tr2(pTr, TR_vecPlaneNormal, vecNormal);
xs_vec_mul_scalar(vecNormal, 10.0, vecNormal);
xs_vec_add(vecEndPos, vecNormal, vecNormal);
set_es(ES_Handle, ES_Origin, vecNormal);
new Float:fDist, Float:fScale;
fDist = get_distance_f(vecNormal, vecHostOrigin);
if(fScale < 0.4) fScale = 0.4;
else if(fScale > 1.0) fScale = 1.0;
set_es(ES_Handle, ES_Scale, fScale);
set_es(ES_Handle, ES_Frame, tree_fSpawn_next[pev(iEntity, pev_iuser2)]);
get_mapname(map, charsmax(map));
formatex(map, charsmax(map), "%s.ini", map);
new cfgDir[64], iFile[128];
get_configsdir(cfgDir, charsmax(cfgDir));
formatex(cfgDir, charsmax(cfgDir), "%s/gifts", cfgDir);
formatex(iFile, charsmax(iFile), "%s/%s", cfgDir, map);
if(!dir_exists(cfgDir))if(!mkdir(cfgDir))return false;
if(!g_AllTrees)return true;
for(new i = 0; i < g_AllTrees; i++){
new text[1024], Float:fOrigin[3], ent = ArrayGetCell(tree_id, i);
pev(ent, pev_origin, fOrigin);
format(text, charsmax(text),"^"%f^" ^"%f^" ^"%f^"",fOrigin[0], fOrigin[1], fOrigin[2]);
write_file(iFile, text, i);
get_gifts(const iFile[1024]){
new file = fopen(iFile, "rt");
while(file && !feof(file)){
fgets(file, sfLineData, charsmax(sfLineData));
if(sfLineData[0] == ';'||sfLineData[0] == '/' && sfLineData[1] == '/'||equal(sfLineData, ""))continue;
new origins[3][32], Float: fOrigin[3];
parse(sfLineData, origins[0], 31, origins[1], 31, origins[2], 31);
fOrigin[0] = str_to_float(origins[0]);
fOrigin[1] = str_to_float(origins[1]);
fOrigin[2] = str_to_float(origins[2]);
bool: create_gift(const Float: fOrigin[3]){
new ent = engfunc(EngFunc_CreateNamedEntity, g_infoTarget);
if(!pev_valid(ent))return false;
RegisterHamFromEntity(Ham_Touch, ent, "fw_TouchGift");
register_forward(FM_AddToFullPack, "FakeMeta_AddToFullPack_Post", 1);
ArrayPushCell(tree_id, ent);
ArrayPushCell(x_tree, fOrigin[0]);
ArrayPushCell(y_tree, fOrigin[1]);
ArrayPushCell(z_tree, fOrigin[2]);
engfunc(EngFunc_SetModel, ent, MDL);
set_pev(ent, pev_origin, fOrigin);
set_pev(ent, pev_solid, SOLID_BBOX);
set_pev(ent, pev_classname, ELKA);
engfunc(EngFunc_SetSize, ent, Float:{-16.0, -16.0, -16.0}, Float:{16.7, 16.7, 1500.0});
set_pev( ent, pev_framerate, 1.0 );
set_pev( ent, pev_sequence, 1 );
set_pev( ent, pev_animtime, get_gametime( ) );
public plugin_precache(){
engfunc(EngFunc_PrecacheModel, SPRITE);
new map[32];get_mapname(map, charsmax(map));
formatex(map, charsmax(map),"%s.ini",map);
new cfgDir[1024], iDir, iFile[1024];get_configsdir(cfgDir, charsmax(cfgDir));
formatex(cfgDir, charsmax(cfgDir), "%s/gifts", cfgDir);iDir = open_dir(cfgDir, iFile, charsmax(iFile))
while(next_file(iDir, iFile, charsmax(iFile))){
if (iFile[0] == '.')continue;
if(equal(map, iFile)){format(iFile, 1024, "%s/%s", cfgDir, iFile);get_gifts(iFile);break;}
public fw_TouchGift(ent, id){
if(!is_user_alive(id)||!pev_valid(ent)) return;
static className[32];pev(ent, pev_classname, className, 31)
if(!equal(className, ELKA)||active_elka[ent])return;
if(entity_get_int(id, EV_INT_button) & IN_USE){
new name[32];get_user_name(id, name, 31);
ammo = random_num(FROMA,TOA);
zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id)+ammo);
set_dhudmessage( 255, 0, 30, -1.0, 0.30, 2, 0.5, 6.0, 0.01, 0.1);
show_dhudmessage(0, "%s, получил %d аммо-паков, поздравляем",name,ammo);
zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id)+AMMO);
set_dhudmessage( 255, 0, 30, -1.0, 0.30, 2, 0.5, 6.0, 0.01, 0.1);
show_dhudmessage(0, "%s, получил %d аммо-паков, поздравляем",name,AMMO);
money = random_num(FROMAM,TOAM);
cs_set_user_money(id,cs_get_user_money(id)+money);
set_dhudmessage( 255, 0, 30, -1.0, 0.30, 2, 0.5, 6.0, 0.01, 0.1);
show_dhudmessage(0, "%s, получил %d$, поздравляем",name,money)
cs_set_user_money(id,cs_get_user_money(id)+MONEY);
set_dhudmessage( 255, 0, 30, -1.0, 0.30, 2, 0.5, 6.0, 0.01, 0.1);
show_dhudmessage(0, "%s, получил %d$, поздравляем",name,MONEY)
new Float:vecOrigin[3];pev(ent, pev_origin, vecOrigin);
set_pev(ent, pev_origin, vecOrigin);vecOrigin[2] += 150.0;
tree_fSpawn_next[ent] = TIMEFORSPAWNNEXT.0;
createe_next(ent, vecOrigin);
set_task(1.0, "createe_next22", ent+TASK_DEATH_TIMER,_,_,"a",TIMEFORSPAWNNEXT)
public createe_next22(Ent){
if(tree_fSpawn_next[Ent] -= 1.0) return;
if(pev_valid(z_TimerZZZ[Ent]))set_pev(z_TimerZZZ[Ent], pev_flags, pev(z_TimerZZZ[Ent], pev_flags) | FL_KILLME);
remove_task(Ent+TASK_DEATH_TIMER);
//EnableHamForward(g_HamHookZ)
if(!userFlags(id)) return;
format(menu_name, 1023, "\rМеню елок, кол-во подарков: %d", g_AllTrees);
g_menuId = menu_create(menu_name, "menu_handler");
menu_additem(g_menuId, "\wПоставить ёлку", "1", 0);
menu_additem(g_menuId, "\dУдалить предыдущий ёлку", "2", 0);
menu_additem(g_menuId, "\dУдалить все ёлки", "3", 0);
menu_additem(g_menuId, "\wУдалить предыдущий ёлку", "2", 0);
menu_additem(g_menuId, "\wУдалить все ёлки", "3", 0);
menu_additem(g_menuId, "\dСохранить изменения", "4", 0);
else menu_additem(g_menuId, "\wСохранить изменения", "4", 0);
menu_setprop(g_menuId, MPROP_EXIT, MEXIT_ALL);
menu_setprop(g_menuId, MPROP_EXITNAME, "\yВыход");
menu_display(id, g_menuId, 0);
public menu_handler(id, menu, item){
new Float:fOrigin[3];fm_get_aim_origin(id, fOrigin);
if(create_gift(fOrigin))g_ssad = true;
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tНа карте нет елок", PREFIX);
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tЕлка удалена", PREFIX)
engfunc(EngFunc_RemoveEntity, ArrayGetCell(tree_id, g_AllTrees))
ArrayDeleteItem(tree_id, g_AllTrees)
ArrayDeleteItem(x_tree, g_AllTrees)
ArrayDeleteItem(y_tree, g_AllTrees)
ArrayDeleteItem(z_tree, g_AllTrees)
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tНа карте нет елок", PREFIX);
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tБыло удалено !g%d !tелок", PREFIX, g_AllTrees);
new ent;while((ent = fm_find_ent_by_class(ent, ELKA)))engfunc(EngFunc_RemoveEntity, ent);
public createe_next(ent, Float:vecOrigin[3]){
static iszInfoTarget = 0;
if(iszInfoTarget || (iszInfoTarget = engfunc(EngFunc_AllocString, "info_target"))) z_TimerZZZ[ent] = engfunc(EngFunc_CreateNamedEntity, iszInfoTarget);
if(!pev_valid(ent)) return;
set_pev(z_TimerZZZ[ent], pev_classname, SpriteClassName);
set_pev(z_TimerZZZ[ent], pev_origin, vecOrigin);
set_pev(z_TimerZZZ[ent], pev_iuser1, M_TIMER);
set_pev(z_TimerZZZ[ent], pev_iuser2, ent);
engfunc(EngFunc_SetModel, z_TimerZZZ[ent], SPRITE);
fm_set_user_rendering(z_TimerZZZ[ent], kRenderFxNone, 0.0, 0.0, 0.0, kRenderTransAdd, 255.0);
set_pev(z_TimerZZZ[ent], pev_solid, SOLID_NOT);
set_pev(z_TimerZZZ[ent], pev_movetype, MOVETYPE_NONE);
stock fm_set_user_rendering(id, iRenderFx, Float:flRed, Float:flGreen, Float:flBlue, iRenderMode, Float:flRenderAmt){
new Float:fRenderColor[3];
fRenderColor[1] = flGreen;
fRenderColor[2] = flBlue;
set_pev(id, pev_renderfx, iRenderFx);
set_pev(id, pev_rendercolor, fRenderColor);
set_pev(id, pev_rendermode, iRenderMode);
set_pev(id, pev_renderamt, flRenderAmt);
stock CREATE_SPRITETRAIL(const Float:fOrigin[3], pSprite, iCount, iLife, iScale, iVelocityAlongVector, iRandomVelocity){
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_SPRITETRAIL);
engfunc(EngFunc_WriteCoord, fOrigin[0]);
engfunc(EngFunc_WriteCoord, fOrigin[1]);
engfunc(EngFunc_WriteCoord, fOrigin[2]);
engfunc(EngFunc_WriteCoord, fOrigin[0]);
engfunc(EngFunc_WriteCoord, fOrigin[1]);
engfunc(EngFunc_WriteCoord, fOrigin[2]);
write_byte(iLife); // 0.1's
write_byte(iVelocityAlongVector);
write_byte(iRandomVelocity);
/*********************Developed by Zombie-Arena.ru*********************/
/*********************Developed by Zombie-Arena.ru*********************/