AlliedModders Donor
Join Date: Mar 2014
Location: Tomorrowland
|
04-16-2019
, 13:07
Re: Sprite from anywhere
|
#4
|
Okay, this plugin is used on zombie servers, see the part STW thats for seeing thru walls, basically this tree has a sprite which can be seen through any obstacle, maybe you could figure out something with this.
PHP Code:
#include <amxmodx> #include <amxmisc> #include <fakemeta_util> #include <hamsandwich> #include <engine> #include <fun> #include <zombieplague> #include <WPMGPrintChatColor> #include <dhudmessage>
#define PLUGIN "NewYearTree's" #define VERSION "1.2b" #define AUTHOR "shel" #define PREFIX "Tree-Spawner"
#define is_INvelid(%1) (0<%1<33) //Is_user_connected... #define TASK_DEATH_TIMER 785689 //id of Task #define M_TIMER 546245 //Don't tach this, if u don't know what it's do #define TIMEFORSPAWNNEXT 5 //How many second's left for next activate allow(#SPRITE squency max 255 ~ 4.14min or 255 seconds Engine limit)
//#define STW //Undefine if u don't like see through walls sprite /************************************************ SETTINGS ************************************************/ #define DHUDZ //Show DHUD message's #define COMMAND "say tree_spawz" //Command for call menu #define AFLAG "l" //AmxModX flag for acces #define userFlags(%0) (get_user_flags(%0) & read_flags(AFLAG)) #define ELKA "new_year_model_tree" //ClassName #define MDL "models/new_year_tree.mdl" //Model #define SPRITE "sprites/new_year_snowman.spr" //Sprite #define SpriteClassName "spawn_timer" //Sprite ClassName for register #define PUBLIC //Undefine if u use this plugin on public server's #if !defined PUBLIC /***************ZM***************/ /*#define RANDAMMO //Random count of ammopacks #if defined RANDAMMO new ammo; #define FROMA 70 #define TOA 200 #else #define AMMO 150 //How Many Ammo Give if RANDAMMO undefined #endif /***************ZM***************/ #else /***************PUBLIC***************/ #define RANDMONEY #if defined RANDMONEY #define FROMAM 1500 #define TOAM 8000 new money; #else #define MONEY 1500 //How many money give #endif /***************PUBLIC***************/
#endif
///Uncomment if you want use it //if u use model with anim undefine AMDL #define AMDL /************************************************SETTINGS************************************************/
new g_infoTarget,g_menuId = -1,bool: g_registration,g_AllTrees,bool: g_ssad,HamHook:g_HamHookZ,Array:tree_id,Array:x_tree,Array:y_tree,Float:tree_fSpawn_next[8096],z_TimerZZZ[8096],Array:z_tree
public plugin_init(){ 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 pTr = create_tr2(); #if defined STW 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); #endif new Float:fDist, Float:fScale; fDist = get_distance_f(vecNormal, vecHostOrigin); fScale = fDist / 300.0; 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)]); free_tr2(pTr); return FMRES_IGNORED; } bool: save_gifts(){ new map[32] 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 delete_file(iFile) 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) } return true } get_gifts(const iFile[1024]){ new file = fopen(iFile, "rt") if(!file) return; while(file && !feof(file)){ new sfLineData[512] fgets(file, sfLineData, charsmax(sfLineData)) if(sfLineData[0] == ';') continue if(sfLineData[0] == '/' && sfLineData[1] == '/') continue if(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]) create_gift(fOrigin) } fclose(file) } bool: create_gift(const Float: fOrigin[3]){ new ent = engfunc(EngFunc_CreateNamedEntity, g_infoTarget) if(!pev_valid(ent)) return false if(!g_registration){ g_HamHookZ = RegisterHamFromEntity(Ham_Touch, ent, "fw_TouchGift") register_forward(FM_AddToFullPack, "FakeMeta_AddToFullPack_Post", 1); tree_id = ArrayCreate() x_tree = ArrayCreate() y_tree = ArrayCreate() z_tree = ArrayCreate() g_registration = true } ArrayPushCell(tree_id, ent) ArrayPushCell(x_tree, fOrigin[0]) ArrayPushCell(y_tree, fOrigin[1]) ArrayPushCell(z_tree, fOrigin[2]) drop_to_floor ( ent ) 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}) #if defined AMDL set_pev( ent, pev_framerate, 1.0 ); set_pev( ent, pev_sequence, 1 ); set_pev( ent, pev_animtime, get_gametime( ) ); #endif g_AllTrees++ return true }
public plugin_precache(){ precache_model(MDL) engfunc(EngFunc_PrecacheModel, SPRITE); }
public plugin_cfg(){ 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)) if(iDir){ 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)) return if(!pev_valid(ent)) return static className[32] pev(ent, pev_classname, className, 31) if(!equal(className, ELKA)) return if(entity_get_int(id, EV_INT_button) & IN_USE){ new name[32] get_user_name(id, name, 31) #if !defined PUBLIC #if defined RANDAMMO ammo = random_num(FROMA,TOA) zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id)+ammo) #if defined DHUDZ 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) #endif #else zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id)+AMMO) #if defined DHUDZ 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) #endif #endif #else #if defined RANDMONEY money = random_num(FROMAM,TOAM) cs_set_user_money(id,cs_get_user_money(id)+money) #if defined DHUDZ set_dhudmessage( 255, 0, 30, -1.0, 0.30, 2, 0.5, 6.0, 0.01, 0.1); show_dhudmessage(0, "%s got %d$, congratz!",name,money) #endif #else cs_set_user_money(id,cs_get_user_money(id)+MONEY) #if defined DHUDZ set_dhudmessage( 255, 0, 30, -1.0, 0.30, 2, 0.5, 6.0, 0.01, 0.1); show_dhudmessage(0, "%s got %d$, congratz!",name,MONEY) #endif #endif #endif 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) DisableHamForward(g_HamHookZ) return } } public createe_next22(Ent){ Ent -= TASK_DEATH_TIMER; 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) } public trees(id){ if(!userFlags(id)) return; new menu_name[1024]; format(menu_name, 1023, "\rTrees menu, amount of presents: %d", g_AllTrees); g_menuId = menu_create(menu_name, "menu_handler"); menu_additem(g_menuId, "\wrespawn tree", "1", 0); if(!g_AllTrees){ menu_additem(g_menuId, "\ddelete last tree", "2", 0); menu_additem(g_menuId, "\ddelete all trees", "3", 0); } else{ menu_additem(g_menuId, "\wdelete last tree", "2", 0); menu_additem(g_menuId, "\wdelete all trees", "3", 0); } if(!g_ssad) menu_additem(g_menuId, "\dsave", "4", 0); else menu_additem(g_menuId, "\wsave", "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){ switch(item){ case 0:{ new Float:fOrigin[3] fm_get_aim_origin(id, fOrigin) if(create_gift(fOrigin)) g_ssad = true menu_destroy(menu) trees(id) } case 1:{ if(!g_AllTrees){ PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tno trees on map", PREFIX) menu_destroy(menu) trees(id) return 1; } g_ssad = true PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !ttree is deleted", PREFIX) g_AllTrees-- 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) menu_destroy(menu) trees(id) } case 2:{ if(!g_AllTrees){ PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tNo trees on map", PREFIX) menu_destroy(menu) trees(id) return PLUGIN_HANDLED } g_ssad = true PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tdeleted !g%d !ttrees", PREFIX, g_AllTrees) new ent while((ent = fm_find_ent_by_class(ent, ELKA))) engfunc(EngFunc_RemoveEntity, ent) g_AllTrees = 0 ArrayClear(tree_id) ArrayClear(x_tree) ArrayClear(y_tree) ArrayClear(z_tree) menu_destroy(menu) trees(id)
} case 3:{ if(!g_ssad){ menu_destroy(menu); trees(id); return PLUGIN_HANDLED; } g_ssad = false; save_gifts(); menu_destroy(menu); trees(id); } } return 1; }
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; vecOrigin[2] += 35.0; 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[0] = flRed; 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_short(pSprite); write_byte(iCount); write_byte(iLife); // 0.1's write_byte(iScale); write_byte(iVelocityAlongVector); write_byte(iRandomVelocity); message_end(); }
__________________
|
|