Witam!
Czy ktoś mógłby dodać mi do jetpacka limit raz na mapę dla każdego gracza, oraz zakaz korzystania z jetpacka na trybie nemesis?
#include <amxmodx> #include <hamsandwich> #include <fakemeta> #include <engine> #include <zombieplague> #include <xs> //Uncomment this if your server is running ZP50 and above. //#define UseZP50 #if defined UseZP50 #tryinclude <zp50_core> #tryinclude <zp50_items> #tryinclude <zp50_ammopacks> #tryinclude <zp50_class_survivor> #else #tryinclude <zombieplague> #endif new bool:bIsAlive[33], iGas[33], SprSmoke, iMaxClients, iItem #define JpPower 400 #define JpUp 200.0 #define MaxGas 20 #define ClassnameJp "n4d_jetpack" #define ModelJp "models/zs/p_jp2.mdl" #define SoundFly "zs/fly2.wav" #define SoundBlow "zs/blow.wav" #define ItemName "ML_JETPACK" #define ItemCost 50 public plugin_precache() { SprSmoke = precache_model("sprites/smoke.spr") precache_model(ModelJp) precache_sound(SoundFly) precache_sound(SoundBlow) } public plugin_init() { register_plugin(ItemName, "0.0.1", "wbyokomo") RegisterHam(Ham_Spawn, "player", "OnSpawnPost", 1) RegisterHam(Ham_Killed, "player", "OnKilled") register_forward(FM_ClientDisconnect, "OnClientDisconnect") register_think(ClassnameJp, "OnThinkJetPack") iMaxClients = get_maxplayers() #if defined UseZP50 iItem = zp_items_register(ItemName, ItemCost) #else iItem = zp_register_extra_item(ItemName, ItemCost, ZP_TEAM_HUMAN) #endif register_clcmd("say /jp","CmdBuyJetPack") register_dictionary("zombie_plague.txt") } //this forward is from CSBot_Init API by PRoSToTeM@, see http://forums.alliedmods.net/showpost.php?s=3faa8633e3e2573157f4cd48fbd4e19e&p=2080292&postcount=15 public CSBot_Init(id) { RegisterHamFromEntity(Ham_Spawn, id, "OnSpawnPost", 1) RegisterHamFromEntity(Ham_Killed, id, "OnKilled") } public OnClientDisconnect(id) { bIsAlive[id] = false ResetJetPack(id) } public OnSpawnPost(id) { if(!is_user_alive(id)) return; bIsAlive[id] = true } public OnKilled(id) { bIsAlive[id] = false ResetJetPack(id) } public OnThinkJetPack(ent) { if(ent < 1) return; static id; id = entity_get_edict(ent, EV_ENT_owner); if(!(1<=id<=iMaxClients)) return; if(!bIsAlive[id]) return; static button; button = entity_get_int(id, EV_INT_button); if((iGas[id] > 0) && (button & IN_DUCK) && (button & IN_JUMP)) { static Float:Velocity[3], Float:Origin[3] velocity_by_aim(id, JpPower, Velocity) Velocity[2] = JpUp entity_set_vector(id, EV_VEC_velocity, Velocity) entity_get_vector(ent, EV_VEC_origin, Origin) engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0) write_byte(TE_BEAMFOLLOW) write_short(id) write_short(SprSmoke) write_byte(2) write_byte(7) write_byte(128) write_byte(32) write_byte(8) write_byte(192) message_end() iGas[id]-- if(iGas[id] > 5) emit_sound(id, CHAN_WEAPON, SoundFly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); else emit_sound(id, CHAN_WEAPON, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); } else { if((iGas[id] < MaxGas) && !(button & IN_DUCK) && !(button & IN_JUMP)) { iGas[id]++ } } entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1) } public CmdBuyJetPack(id) { if(!bIsAlive[id]) return PLUGIN_HANDLED; #if defined UseZP50 if(zp_core_is_zombie(id)) return PLUGIN_HANDLED; if(zp_class_survivor_get(id)) return PLUGIN_HANDLED; #else if(zp_get_user_zombie(id)) return PLUGIN_HANDLED; if(zp_get_user_survivor(id)) return PLUGIN_HANDLED; #endif static iAP #if defined UseZP50 iAP = zp_ammopacks_get(id) #else iAP = zp_get_user_ammo_packs(id) #endif if(iAP < ItemCost) return PLUGIN_HANDLED; if(IsPlayerHasJetPack(id)) return PLUGIN_HANDLED; CreateJetPack(id) #if defined UseZP50 zp_ammopacks_set(id, iAP-ItemCost) #else zp_set_user_ammo_packs(id, iAP-ItemCost) #endif client_print(id, print_chat, "[ZP] Kupiles JetPack, like a Boss. Przytrzymaj SKOK+KUCANIE aby poleciec.") return PLUGIN_HANDLED; } #if defined UseZP50 public zp_fw_items_select_pre(id, item, ignorecost) { if(item != iItem) return ZP_ITEM_AVAILABLE; if(zp_core_is_zombie(id)) return ZP_ITEM_DONT_SHOW; if(IsPlayerHasJetPack(id)) return ZP_ITEM_NOT_AVAILABLE; return ZP_ITEM_AVAILABLE; } public zp_fw_items_select_post(id, item, ignorecost) { if(item != iItem) return; CreateJetPack(id) client_print(id, print_chat, "[ZP] You just bought a JetPack, fly like a BOSS. Hold JUMP+DUCK to fly.") } public zp_fw_core_infect_post(id) { ResetJetPack(id) } public zp_fw_core_cure_post(id) { ResetJetPack(id) } #else public zp_extra_item_selected(id, item) { if(item == iItem) { if(IsPlayerHasJetPack(id)) return ZP_PLUGIN_HANDLED; CreateJetPack(id) client_print(id, print_chat, "[ZP] You just bought a JetPack, fly like a BOSS. Hold JUMP+DUCK to fly.") } return PLUGIN_CONTINUE; } public zp_user_infected_post(id) { ResetJetPack(id) } public zp_user_humanized_post(id) { ResetJetPack(id) } #endif CreateJetPack(id) { new ent = create_entity("info_target") if(ent < 1) return; new Float:Origin[3] entity_get_vector(id, EV_VEC_origin, Origin) entity_set_string(ent, EV_SZ_classname, ClassnameJp) entity_set_model(ent, ModelJp) entity_set_origin(ent, Origin) entity_set_int(ent, EV_INT_movetype, MOVETYPE_FOLLOW) entity_set_edict(ent, EV_ENT_aiment, id) entity_set_int(ent, EV_INT_solid, SOLID_NOT) entity_set_size(ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0}) entity_set_edict(ent, EV_ENT_owner, id) entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1) } RemovePlayerJetPack(id) { new ent = -1 while((ent = find_ent_by_class(ent, ClassnameJp))) { if(entity_get_edict(ent, EV_ENT_owner) != id) continue; entity_set_float(ent, EV_FL_nextthink, 0.0) remove_entity(ent) } } IsPlayerHasJetPack(id) { new ent = -1 new bHasJP = 0 while((ent = find_ent_by_class(ent, ClassnameJp))) { if(entity_get_edict(ent, EV_ENT_owner) == id) { bHasJP = 1 break; } } return bHasJP; } ResetJetPack(id) { iGas[id] = MaxGas RemovePlayerJetPack(id) }