// Variables new g_iMsgBarTime; new g_iTripmine[MAXPLAYERS+1], g_iTripmineHealth[MAXPLAYERS+1][100], bool:g_bCantPlant[MAXPLAYERS+1]; new g_iTripmineId, cvar_tripmine_health, cvar_tripmine_bonus;
public plugin_init() { register_plugin("[ZP] Extra Item: Laser Tripmine", "1.0", "Lost-Souls")
public plugin_precache() { precache_model("models/zombie_plague/lgk_lasermine.mdl"); precache_model("sprites/laserbeam.spr"); precache_sound("weapons/mine_deploy.wav"); precache_sound("weapons/mine_charge.wav"); precache_sound("weapons/mine_activate.wav"); precache_sound("debris/beamstart9.wav"); }
// The first three public fuctions below make sure that this plugin won't stop running if the modules below ain't running public plugin_natives() { set_module_filter("moduleFilter") set_native_filter("nativeFilter") }
public moduleFilter(const szModule[]) {
return PLUGIN_CONTINUE; }
public nativeFilter(const szName[], iId, iTrap) { if (!iTrap) return PLUGIN_HANDLED;
return PLUGIN_CONTINUE; }
public client_disconnect(this) { g_iTripmine[this] = 0;
Tripmine_Kill(this);
new Array:hDmgTime = Array:entity_get_int(this, m_rgpDmgTime);
remove_entity(entity_get_int(this, m_pBeam));
ArrayDestroy(hDmgTime); }
public EventNewRound() { new pTripmine = -1;
while ((pTripmine = find_ent_by_class(pTripmine, "zp_tripmine")) != 0) remove_entity(pTripmine);
arrayset(g_iTripmine, 0, sizeof g_iTripmine);
new rgpPlayers[MAXPLAYERS], iPlayersCount, pPlayer; get_players(rgpPlayers, iPlayersCount);
for (new i = 0; i < iPlayersCount; i++) { pPlayer = rgpPlayers[i]; limit[pPlayer] = 0 Tripmine_Kill(pPlayer); } }
public CmdSetLaser(this) { if (!is_user_alive(this)) return PLUGIN_HANDLED;
if (zp_get_user_zombie(this)) return PLUGIN_HANDLED;
if (task_exists(this+TASK_SETLASER)) return PLUGIN_HANDLED;
if (!g_iTripmine[this]) { client_print(this, print_center, "You do not have lasermines to plant!"); return PLUGIN_HANDLED; }
if (task_exists(this+TASK_DELLASER)) return PLUGIN_HANDLED;
new rgpData[1];
new pTripmine = rgpData[0] = Tripmine_Spawn(this); Tripmine_RelinkTripmine(pTripmine);
if (g_bCantPlant[this]) { zp_colored_print(this, "Can't plant a^x04 Lasermine^x01 at this location!");
public TaskSetLaser(rgpData[], iTaskId) { new pPlayer = iTaskId - TASK_SETLASER;
if (g_bCantPlant[pPlayer]) { zp_colored_print(pPlayer, "Couldn't plant a^x04 Lasermine^x01!");
Tripmine_Kill(pPlayer); return; }
g_iTripmine[pPlayer] -= 1;
if (!g_iTripmine[pPlayer]) client_print(pPlayer, print_center, "You do not have any more lasermines"); else client_print(pPlayer, print_center, "You have %d more Lasermine(s) to plant", g_iTripmine[pPlayer]);
public zp_user_humanized_post(this) { g_iTripmine[this] = 0;
Tripmine_Kill(this);
new Array:hDmgTime = Array:entity_get_int(this, m_rgpDmgTime);
remove_entity(entity_get_int(this, m_pBeam));
ArrayDestroy(hDmgTime); }
public zp_user_infected_post(this) { g_iTripmine[this] = 0;
Tripmine_Kill(this);
new Array:hDmgTime = Array:entity_get_int(this, m_rgpDmgTime);
remove_entity(entity_get_int(this, m_pBeam));
ArrayDestroy(hDmgTime); }
public zp_fw_items_select_pre(id, itemid) { if(itemid != g_iTripmineId) return ZP_ITEM_AVAILABLE;
zp_items_menu_text_add(" \y[Free To All]")
return ZP_ITEM_AVAILABLE; }
public zp_extra_item_selected(pPlayer, iItemId) { if (iItemId != g_iTripmineId) return;
GiveLasermine(pPlayer) set_task(0.3, "showMenuLasermine", pPlayer) } public GiveLasermine(pPlayer) { new iHealth = get_pcvar_num(cvar_tripmine_health); g_iTripmineHealth[pPlayer][g_iTripmine[pPlayer]] = iHealth; g_iTripmine[pPlayer] += 1; zp_colored_print(pPlayer, "You bought a^x04 Lasermine^x01!"); zp_colored_print(pPlayer, "Open console and type:^x04 bind^x01 <key>^x04 +setlaser,^x01 then hold that key to plant a^x04 Lasermine"); zp_colored_print(pPlayer, "Open console and type:^x04 bind^x01 <key>^x04 +dellaser,^x01 then aim at a^x04 Lasermine^x01 and hold that key to disarm it"); } public zp_extra_item_selected_pre(pPlayer, iItemId) { if (iItemId != g_iTripmineId) return PLUGIN_CONTINUE
public showMenuLasermine(id) { new menuid = menu_create("\y[LgK | Lasermine]", "menuLasermine");
new szText[64] formatex(szText, charsmax(szText), "\r3. \yLasermine Count: \r%d", g_iTripmine[id])
menu_additem(menuid, "Buy/Place \y[Lasermine]");
menu_additem(menuid, "Remove a Lasermine");
menu_addtext(menuid, szText)
menu_display(id, menuid, 0); }
public menuLasermine(id, menuid, item) { if (!is_user_alive(id)) return PLUGIN_HANDLED;
if (zp_get_user_zombie(id)) return PLUGIN_HANDLED;
switch(item) { case MENU_EXIT: { menu_destroy(menuid); return PLUGIN_HANDLED; } case 0: { if (!g_iTripmine[id]) { zp_colored_print(id, "Can't Buy ^04Lasermine") showMenuLasermine(id); return PLUGIN_HANDLED; }
if (g_iTripmine[id]) { CmdSetLaser(id); zp_colored_print(id, "Wait Some Seconds when lasermine is placed to open the menu again") set_task(1.27, "showMenuLasermine", id) } } case 1: { if(!g_iTripmine[id] && !g_bCantPlant[id]) { CmdDelLaser(id); zp_colored_print(id, "Wait Some Seconds when lasermine is removed to open the menu again") set_task(1.27, "showMenuLasermine", id) } else zp_colored_print(id, "You Have Not Selected Your Lasermine") } }
return PLUGIN_HANDLED; } public Tripmine_ShowInfo_Post(Float:flVecStart[3], Float:flVecEnd[3], Conditions, this, Trace) { if (!is_user_connected(this) || !is_user_alive(this)) return FMRES_IGNORED;
static iHit; iHit = get_tr2(Trace, TR_pHit);
if (pev_valid(iHit)) { if (pev(iHit, pev_deadflag) == DEAD_NO) { new szClassName[32], szName[32]; pev(iHit, pev_classname, szClassName, charsmax(szClassName))