From 2c15a570a79236fe53d7afd3e9b0b51ffbd94197 Mon Sep 17 00:00:00 2001 From: zaCade Date: Fri, 3 Aug 2018 17:55:43 +0200 Subject: [PATCH] ItemSpawn: Seperate items, start shortening code. --- ItemSpawn/scripting/ItemSpawn2.sp | 180 ++++++++ ItemSpawn/scripting/items/balrog.inc | 516 +++++++++++++++++++++++ ItemSpawn/scripting/items/doghuman.inc | 298 +++++++++++++ ItemSpawn/scripting/items/tnt.inc | 401 ++++++++++++++++++ ItemSpawn/scripting/items/vortigaunt.inc | 269 ++++++++++++ 5 files changed, 1664 insertions(+) create mode 100644 ItemSpawn/scripting/ItemSpawn2.sp create mode 100644 ItemSpawn/scripting/items/balrog.inc create mode 100644 ItemSpawn/scripting/items/doghuman.inc create mode 100644 ItemSpawn/scripting/items/tnt.inc create mode 100644 ItemSpawn/scripting/items/vortigaunt.inc diff --git a/ItemSpawn/scripting/ItemSpawn2.sp b/ItemSpawn/scripting/ItemSpawn2.sp new file mode 100644 index 00000000..18ebe878 --- /dev/null +++ b/ItemSpawn/scripting/ItemSpawn2.sp @@ -0,0 +1,180 @@ +#pragma newdecls required + +#include +#include +#include + +#pragma semicolon 1 + +int g_iConsole; +int g_iCounter = 0; + +#include "items\balrog.inc" +#include "items\doghuman.inc" +#include "items\tnt.inc" +#include "items\vortigaunt.inc" + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "ItemSpawn", + author = "Neon", + description = "", + version = "1.1", + url = "https://steamcommunity.com/id/n3ontm" +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + HookEvent("round_start", OnRoundStart, EventHookMode_Post); + + RegAdminCmd("sm_tnt", Command_TNT, ADMFLAG_KICK); + RegAdminCmd("sm_balrog", Command_Balrog, ADMFLAG_KICK); + RegAdminCmd("sm_humandog", Command_HumanDog, ADMFLAG_KICK); + RegAdminCmd("sm_vortigaunt", Command_Vortigaunt, ADMFLAG_KICK); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + // Physbox + PrecacheModel("models/props/cs_militia/crate_extrasmallmill.mdl"); + + // Vortigaunt + PrecacheModel("models/vortigaunt_slave.mdl"); + + // Balrog + PrecacheModel("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.mdl"); + AddFileToDownloadsTable("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.dx80.vtx"); + AddFileToDownloadsTable("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.dx90.vtx"); + AddFileToDownloadsTable("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.mdl"); + AddFileToDownloadsTable("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.sw.vtx"); + AddFileToDownloadsTable("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.vvd"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_body.vmt"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_body.vtf"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_body_2.vmt"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_eyes.vmt"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon.vmt"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon.vtf"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon_blade.vmt"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon_bump.vtf"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_wings.vmt"); + AddFileToDownloadsTable("sound/unloze/balrog_scream.mp3"); + + // TNT + PrecacheModel("models/props/furnitures/humans/barrel01b.mdl"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.dx80.vtx"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.dx90.vtx"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.mdl"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.phy"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.sw.vtx"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.vvd"); + AddFileToDownloadsTable("materials/models/barrel01b/wood_barrel01b.vmt"); + AddFileToDownloadsTable("materials/models/barrel01b/wood_barrel01b.vtf"); + AddFileToDownloadsTable("materials/models/barrel01b/wood_barrel01b_broken.vmt"); + AddFileToDownloadsTable("materials/models/barrel01b/wood_barrel01b_no_metal.vtf"); + + // Dog + PrecacheModel("models/player/pil/re1/dog/dog_pil.mdl"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.dx80.vtx"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.dx90.vtx"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.mdl"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.phy"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.sw.vtx"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.vvd"); + AddFileToDownloadsTable("materials/models/player/pil/re1/dog/0000a.vmt"); + AddFileToDownloadsTable("materials/models/player/pil/re1/dog/0000a.vtf"); + + // Dog Poo + PrecacheModel("models/poo/curlygpoo.mdl"); + AddFileToDownloadsTable("models/poo/curlygpoo.dx80.vtx"); + AddFileToDownloadsTable("models/poo/curlygpoo.dx90.vtx"); + AddFileToDownloadsTable("models/poo/curlygpoo.mdl"); + AddFileToDownloadsTable("models/poo/curlygpoo.phy"); + AddFileToDownloadsTable("models/poo/curlygpoo.sw.vtx"); + AddFileToDownloadsTable("models/poo/curlygpoo.vvd"); + AddFileToDownloadsTable("materials/models/poo/curlypoo.vmt"); + AddFileToDownloadsTable("materials/models/poo/curlypoo.vtf"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int CreateEntityAtOrigin(const char[] classname, const float origin[3]) +{ + int entity = INVALID_ENT_REFERENCE; + if ((entity = CreateEntityByName(classname)) != INVALID_ENT_REFERENCE) + DispatchKeyValueVector(entity, "origin", origin); + + return entity; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock bool DispatchKeyFormat(int entity, const char[] key, const char[] value, any ...) +{ + char buffer[1024]; + VFormat(buffer, sizeof(buffer), value, 4); + + return DispatchKeyValue(entity, key, buffer); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock bool ActivateAndSpawn(int entity) +{ + ActivateEntity(entity); + + return DispatchSpawn(entity); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock bool ParentToEntity(int entity, int parent) +{ + SetVariantString("!activator"); + + return AcceptEntityInput(entity, "SetParent", parent, parent); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + g_iCounter = 0; + + // player_weaponstrip + int iPlayerStrip = CreateEntityByName("player_weaponstrip"); + DispatchKeyFormat(iPlayerStrip, "targetname", "item_spawn_weaponstrip"); + ActivateAndSpawn(iPlayerStrip); + + // player_speedmod + int iPlayerSpeed = CreateEntityByName("player_speedmod"); + DispatchKeyFormat(iPlayerSpeed, "targetname", "item_spawn_speedmod"); + ActivateAndSpawn(iPlayerSpeed); + + // filter_activator_team humans + int iHumanFilter = CreateEntityByName("filter_activator_team"); + DispatchKeyFormat(iHumanFilter, "targetname", "item_spawn_human_filter"); + DispatchKeyFormat(iHumanFilter, "Negated", "0"); + DispatchKeyFormat(iHumanFilter, "filterteam", "3"); + ActivateAndSpawn(iHumanFilter); + + // filter_activator_team zombies + int iZombieFilter = CreateEntityByName("filter_activator_team"); + DispatchKeyFormat(iZombieFilter, "targetname", "item_spawn_zombie_filter"); + DispatchKeyFormat(iZombieFilter, "Negated", "0"); + DispatchKeyFormat(iZombieFilter, "filterteam", "2"); + ActivateAndSpawn(iZombieFilter); +} diff --git a/ItemSpawn/scripting/items/balrog.inc b/ItemSpawn/scripting/items/balrog.inc new file mode 100644 index 00000000..9dc8d9a3 --- /dev/null +++ b/ItemSpawn/scripting/items/balrog.inc @@ -0,0 +1,516 @@ +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_Balrog(int client, int argc) +{ + float fOrigin[3]; + + if (argc < 1) + { + GetClientEyePosition(client, fOrigin); + SpawnBalrog(fOrigin); + LogAction(client, -1, "\"%L\" spawned Balrog at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]); + return Plugin_Handled; + } + + char sArgs[64]; + char sTargetName[MAX_TARGET_LENGTH]; + int iTargets[MAXPLAYERS]; + int iTargetCount; + bool bIsML; + + GetCmdArg(1, sArgs, sizeof(sArgs)); + + if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0) + { + ReplyToTargetError(client, iTargetCount); + return Plugin_Handled; + } + + for (int i = 0; i < iTargetCount; i++) + { + if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i]) && (ZR_IsClientZombie(iTargets[i]))) + { + GetClientEyePosition(iTargets[i], fOrigin); + SpawnBalrog(fOrigin); + LogAction(client, -1, "\"%L\" gave Balrog to \"%L\".", client, iTargets[i]); + } + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SpawnBalrog(float fOrigin[3]) +{ + float fOriginTemp[3]; + + // weapon_knife. + int iKnife = CreateEntityAtOrigin("weapon_knife", fOrigin); + DispatchKeyFormat(iKnife, "targetname", "balrog_knife_%d", g_iCounter); + DispatchKeyFormat(iKnife, "hammerid", "11051995%d", g_iCounter); + DispatchKeyFormat(iKnife, "spawnflags", "1"); + DispatchKeyFormat(iKnife, "angles", "0 0 0"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "balrog_knife_%d,AddOutput,renderfx 6,0.02,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "balrog_model_%d,SetAnimation,balrog_attack1,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "balrog_timer_%d,Enable,,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "balrog_ui_%d,Activate,,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_spawn_speedmod,ModifySpeed,0.8,0,1"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "!activator,AddOutput,health 50000,0,1"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "!self,FireUser1,,0,1"); + DispatchKeyFormat(iKnife, "OnUser1", "!activator,AddOutput,rendermode 10,0,-1"); + DispatchKeyFormat(iKnife, "OnUser1", "!activator,AddOutput,renderfx 6,0,-1"); + DispatchKeyFormat(iKnife, "OnUser1", "!self,FireUser1,,1,-1"); + ActivateAndSpawn(iKnife); + + HookSingleEntityOutput(iKnife, "OnPlayerPickup", BalrogPickup, true); + + fOriginTemp[0] = fOrigin[0] + 4.5; + fOriginTemp[1] = fOrigin[1] + 1.26; + fOriginTemp[2] = fOrigin[2] - 28.9; + + // prop_dynamic model. + int iModel = CreateEntityAtOrigin("prop_dynamic", fOriginTemp); + DispatchKeyFormat(iModel, "targetname", "item_balrog_model_%d", g_iCounter); + DispatchKeyFormat(iModel, "model", "models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.mdl"); + DispatchKeyFormat(iModel, "disablebonefollowers", "1"); + DispatchKeyFormat(iModel, "defaultanim", "crouch_walk_lower"); + DispatchKeyFormat(iModel, "angles", "0 2 0"); + DispatchKeyFormat(iModel, "solid", "0"); + ActivateAndSpawn(iModel); + ParentToEntity(iModel, iKnife); + + // trigger_once strip. + int iTriggerOnce = CreateEntityAtOrigin("trigger_once", fOrigin); + DispatchKeyFormat(iTriggerOnce, "targetname", "item_balrog_trigger_%d", g_iCounter); + DispatchKeyFormat(iTriggerOnce, "filtername", "item_spawn_zombie_filter"); + DispatchKeyFormat(iTriggerOnce, "spawnflags", "1"); + DispatchKeyFormat(iTriggerOnce, "startdisabled", "1"); + DispatchKeyFormat(iTriggerOnce, "OnStartTouch", "item_spawn_weaponstrip,StripWeaponsAndSuit,,0,1"); + ActivateAndSpawn(iTriggerOnce); + ParentToEntity(iTriggerOnce, iKnife); + + SetEntityModel(iTriggerOnce, "models/vortigaunt_slave.mdl"); + + SetEntPropVector(iTriggerOnce, Prop_Send, "m_vecMins", {-8.0, -8.0, -8.0}); + SetEntPropVector(iTriggerOnce, Prop_Send, "m_vecMaxs", { 8.0, 8.0, 8.0}); + + SetEntProp(iTriggerOnce, Prop_Send, "m_fEffects", GetEntProp(iTriggerOnce, Prop_Send, "m_fEffects") |= 32); + SetEntProp(iTriggerOnce, Prop_Send, "m_nSolidType", 2); + + // trigger_hurt death. + int iTriggerHurt1 = CreateEntityAtOrigin("trigger_hurt", fOrigin); + DispatchKeyFormat(iTriggerHurt1, "targetname", "item_balrog_death_%d", g_iCounter); + DispatchKeyFormat(iTriggerHurt1, "filtername", "item_spawn_zombie_filter"); + DispatchKeyFormat(iTriggerHurt1, "spawnflags", "1"); + DispatchKeyFormat(iTriggerHurt1, "startdisabled", "1"); + DispatchKeyFormat(iTriggerHurt1, "damagetype", "0"); + DispatchKeyFormat(iTriggerHurt1, "damagemodel", "0"); + DispatchKeyFormat(iTriggerHurt1, "damagecap", "20"); + DispatchKeyFormat(iTriggerHurt1, "damage", "99999999"); + ActivateAndSpawn(iTriggerHurt1); + ParentToEntity(iTriggerHurt1, iKnife); + + SetEntityModel(iTriggerHurt1, "models/vortigaunt_slave.mdl"); + + SetEntPropVector(iTriggerHurt1, Prop_Send, "m_vecMins", {-8.0, -8.0, -8.0}); + SetEntPropVector(iTriggerHurt1, Prop_Send, "m_vecMaxs", { 8.0, 8.0, 8.0}); + + SetEntProp(iTriggerHurt1, Prop_Send, "m_fEffects", GetEntProp(iTriggerOnce, Prop_Send, "m_fEffects") |= 32); + SetEntProp(iTriggerHurt1, Prop_Send, "m_nSolidType", 2); + + + + + + // kill trigger_once + int iKillTrigger = CreateEntityByName("trigger_hurt"); + Format(sBuffer, sizeof(sBuffer), "balrog_kill_trigger_%d", g_iCounter); + DispatchKeyValue(iKillTrigger, "targetname", sBuffer); + DispatchKeyValue(iKillTrigger, "spawnflags", "1"); + DispatchKeyValue(iKillTrigger, "startdisabled", "1"); + DispatchKeyValue(iKillTrigger, "filtername", "item_spawn_zombie_filter"); + DispatchKeyValue(iKillTrigger, "damagetype", "0"); + DispatchKeyValue(iKillTrigger, "damagemodel", "0"); + DispatchKeyValue(iKillTrigger, "damagecap", "20"); + DispatchKeyValue(iKillTrigger, "damage", "200000"); + DispatchKeyValueVector(iKillTrigger, "origin", fOrigin); + DispatchSpawn(iKillTrigger); + ActivateEntity(iKillTrigger); + SetEntityModel(iKillTrigger, "models/vortigaunt_slave.mdl"); + float fMinbounds4[3] = {-10.0, -10.0, -36.0}; + float fMaxbounds4[3] = {10.0, 10.0, 36.0}; + SetEntPropVector(iKillTrigger, Prop_Send, "m_vecMins", fMinbounds4); + SetEntPropVector(iKillTrigger, Prop_Send, "m_vecMaxs", fMaxbounds4); + SetEntProp(iKillTrigger, Prop_Send, "m_nSolidType", 3); + int enteffects4 = GetEntProp(iKillTrigger, Prop_Send, "m_fEffects"); + enteffects4 |= 32; + SetEntProp(iKillTrigger, Prop_Send, "m_fEffects", enteffects4); + SetVariantString("!activator"); + AcceptEntityInput(iKillTrigger, "SetParent", iKnife); + + // trigger_hurt walking + int iKillTriggerWalking = CreateEntityByName("trigger_hurt"); + Format(sBuffer, sizeof(sBuffer), "balrog_kill_trigger_walking_%d", g_iCounter); + DispatchKeyValue(iKillTriggerWalking, "targetname", sBuffer); + DispatchKeyValue(iKillTriggerWalking, "spawnflags", "9"); + DispatchKeyValue(iKillTriggerWalking, "startdisabled", "0"); + DispatchKeyValue(iKillTriggerWalking, "filtername", "item_spawn_human_filter"); + DispatchKeyValue(iKillTriggerWalking, "damagetype", "128"); + DispatchKeyValue(iKillTriggerWalking, "damagemodel", "0"); + DispatchKeyValue(iKillTriggerWalking, "damagecap", "20"); + DispatchKeyValue(iKillTriggerWalking, "damage", "190"); + fOriginTemp[0] = fOrigin[0] + 28.5; + fOriginTemp[1] = fOrigin[1] - 2.74; + fOriginTemp[2] = fOrigin[2] - 4.9; + DispatchKeyValueVector(iKillTriggerWalking, "origin", fOriginTemp); + DispatchSpawn(iKillTriggerWalking); + ActivateEntity(iKillTriggerWalking); + SetEntityModel(iKillTriggerWalking, "models/vortigaunt_slave.mdl"); + float fMinbounds5[3] = {-32.0, -72.0, -84.0}; + float fMaxbounds5[3] = {32.0, 72.0, 84.0}; + SetEntPropVector(iKillTriggerWalking, Prop_Send, "m_vecMins", fMinbounds5); + SetEntPropVector(iKillTriggerWalking, Prop_Send, "m_vecMaxs", fMaxbounds5); + SetEntProp(iKillTriggerWalking, Prop_Send, "m_nSolidType", 3); + int enteffects5 = GetEntProp(iKillTriggerWalking, Prop_Send, "m_fEffects"); + enteffects5 |= 32; + SetEntProp(iKillTriggerWalking, Prop_Send, "m_fEffects", enteffects5); + SetVariantString("!activator"); + AcceptEntityInput(iKillTriggerWalking, "SetParent", iKnife); + + // trigger roar 1 + int iTriggerRoar = CreateEntityByName("trigger_multiple"); + Format(sBuffer, sizeof(sBuffer), "balrog_trigger_roar1_%d", g_iCounter); + DispatchKeyValue(iTriggerRoar, "targetname", sBuffer); + DispatchKeyValue(iTriggerRoar, "spawnflags", "1"); + DispatchKeyValue(iTriggerRoar, "startdisabled", "1"); + DispatchKeyValue(iTriggerRoar, "filtername", "item_spawn_zombie_filter"); + DispatchKeyValue(iTriggerRoar, "wait", "1"); + DispatchKeyValue(iTriggerRoar, "OnStartTouch", "item_spawn_speedmod,ModifySpeed,0,0,-1"); + DispatchKeyValue(iTriggerRoar, "OnStartTouch", "item_spawn_speedmod,speed,ModifySpeed,0.8,3,-1"); + fOriginTemp[0] = fOrigin[0] + 5.0; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] - 0.0; + DispatchKeyValueVector(iTriggerRoar, "origin", fOriginTemp); + DispatchSpawn(iTriggerRoar); + ActivateEntity(iTriggerRoar); + SetEntityModel(iTriggerRoar, "models/vortigaunt_slave.mdl"); + float fMinbounds6[3] = {-0.5, -0.5, -36.0}; + float fMaxbounds6[3] = {0.5, 0.5, 36.0}; + SetEntPropVector(iTriggerRoar, Prop_Send, "m_vecMins", fMinbounds6); + SetEntPropVector(iTriggerRoar, Prop_Send, "m_vecMaxs", fMaxbounds6); + SetEntProp(iTriggerRoar, Prop_Send, "m_nSolidType", 3); + int enteffects6 = GetEntProp(iTriggerRoar, Prop_Send, "m_fEffects"); + enteffects6 |= 32; + SetEntProp(iTriggerRoar, Prop_Send, "m_fEffects", enteffects6); + SetVariantString("!activator"); + AcceptEntityInput(iTriggerRoar, "SetParent", iKnife); + + // trigger roar 2 + int iTriggerRoar2 = CreateEntityByName("trigger_multiple"); + Format(sBuffer, sizeof(sBuffer), "balrog_trigger_roar2_%d", g_iCounter); + DispatchKeyValue(iTriggerRoar2, "targetname", sBuffer); + DispatchKeyValue(iTriggerRoar2, "spawnflags", "1"); + DispatchKeyValue(iTriggerRoar2, "startdisabled", "1"); + DispatchKeyValue(iTriggerRoar2, "filtername", "item_spawn_zombie_filter"); + DispatchKeyValue(iTriggerRoar2, "wait", "1"); + DispatchKeyValue(iTriggerRoar2, "OnStartTouch", "!activator,AddOutput,health 10000,0,-1"); + DispatchKeyValue(iTriggerRoar2, "OnStartTouch", "item_spawn_speedmod,ModifySpeed,1.5,0,-1"); + DispatchKeyValue(iTriggerRoar2, "OnStartTouch", "item_spawn_speedmod,ModifySpeed,1.0,10,-1"); + DispatchKeyValue(iTriggerRoar2, "OnStartTouch", "!activator,AddOutput,color 255 0 0,0,-1"); + DispatchKeyValue(iTriggerRoar2, "OnStartTouch", "!activator,AddOutput,color 255 255 255,10,-1"); + fOriginTemp[0] = fOrigin[0] - 15.5; + fOriginTemp[1] = fOrigin[1] + 5.0; + fOriginTemp[2] = fOrigin[2] + 31.0; + DispatchKeyValueVector(iTriggerRoar2, "origin", fOriginTemp); + DispatchSpawn(iTriggerRoar2); + ActivateEntity(iTriggerRoar2); + SetEntityModel(iTriggerRoar2, "models/vortigaunt_slave.mdl"); + float fMinbounds7[3] = {-736.0, -736.0, -560.0}; + float fMaxbounds7[3] = {736.0, 736.0, 560.0}; + SetEntPropVector(iTriggerRoar2, Prop_Send, "m_vecMins", fMinbounds7); + SetEntPropVector(iTriggerRoar2, Prop_Send, "m_vecMaxs", fMaxbounds7); + SetEntProp(iTriggerRoar2, Prop_Send, "m_nSolidType", 3); + int enteffects7 = GetEntProp(iTriggerRoar2, Prop_Send, "m_fEffects"); + enteffects7 |= 32; + SetEntProp(iTriggerRoar2, Prop_Send, "m_fEffects", enteffects7); + SetVariantString("!activator"); + AcceptEntityInput(iTriggerRoar2, "SetParent", iKnife); + + // trigger_hurt attack + int iKillTriggerAttack = CreateEntityByName("trigger_hurt"); + Format(sBuffer, sizeof(sBuffer), "balrog_kill_trigger_attack_%d", g_iCounter); + DispatchKeyValue(iKillTriggerAttack, "targetname", sBuffer); + DispatchKeyValue(iKillTriggerAttack, "spawnflags", "9"); + DispatchKeyValue(iKillTriggerAttack, "startdisabled", "1"); + DispatchKeyValue(iKillTriggerAttack, "filtername", "item_spawn_human_filter"); + DispatchKeyValue(iKillTriggerAttack, "damagetype", "128"); + DispatchKeyValue(iKillTriggerAttack, "damagemodel", "0"); + DispatchKeyValue(iKillTriggerAttack, "damagecap", "20"); + DispatchKeyValue(iKillTriggerAttack, "damage", "500"); + fOriginTemp[0] = fOrigin[0] + 360.5; + fOriginTemp[1] = fOrigin[1] - 58.74; + fOriginTemp[2] = fOrigin[2] + 35.6; + DispatchKeyValueVector(iKillTriggerAttack, "origin", fOriginTemp); + DispatchSpawn(iKillTriggerAttack); + ActivateEntity(iKillTriggerAttack); + SetEntityModel(iKillTriggerAttack, "models/vortigaunt_slave.mdl"); + float fMinbounds8[3] = {-152.0, -256.0, -71.5}; + float fMaxbounds8[3] = {152.0, 256.0, 71.5}; + SetEntPropVector(iKillTriggerAttack, Prop_Send, "m_vecMins", fMinbounds8); + SetEntPropVector(iKillTriggerAttack, Prop_Send, "m_vecMaxs", fMaxbounds8); + SetEntProp(iKillTriggerAttack, Prop_Send, "m_nSolidType", 3); + int enteffects8 = GetEntProp(iKillTriggerAttack, Prop_Send, "m_fEffects"); + enteffects8 |= 32; + SetEntProp(iKillTriggerAttack, Prop_Send, "m_fEffects", enteffects8); + SetVariantString("!activator"); + AcceptEntityInput(iKillTriggerAttack, "SetParent", iKnife); + + // Sound 1 + int iSound1 = CreateEntityByName("ambient_generic"); + Format(sBuffer, sizeof(sBuffer), "balrog_sound1_%d", g_iCounter); + DispatchKeyValue(iSound1, "targetname", sBuffer); + DispatchKeyValue(iSound1, "spawnflags", "49"); + DispatchKeyValue(iSound1, "radius", "8250"); + Format(sBuffer, sizeof(sBuffer), "balrog_knife_%d", g_iCounter); + DispatchKeyValue(iSound1, "SourceEntityName", sBuffer); + DispatchKeyValue(iSound1, "message", "unloze/balrog_scream.mp3"); + DispatchKeyValue(iSound1, "volume", "10"); + DispatchKeyValue(iSound1, "health", "10"); + DispatchKeyValue(iSound1, "pitch", "100"); + DispatchKeyValue(iSound1, "pitchstart", "100"); + DispatchSpawn(iSound1); + ActivateEntity(iSound1); + SetVariantString("!activator"); + AcceptEntityInput(iSound1, "SetParent", iKnife); + + // Sound 2 + int iSound2 = CreateEntityByName("ambient_generic"); + Format(sBuffer, sizeof(sBuffer), "balrog_sound2_%d", g_iCounter); + DispatchKeyValue(iSound2, "targetname", sBuffer); + DispatchKeyValue(iSound2, "spawnflags", "48"); + DispatchKeyValue(iSound2, "radius", "8250"); + Format(sBuffer, sizeof(sBuffer), "balrog_knife_%d", g_iCounter); + DispatchKeyValue(iSound2, "SourceEntityName", sBuffer); + DispatchKeyValue(iSound2, "message", "npc/strider/strider_step2.wav"); + DispatchKeyValue(iSound2, "volume", "10"); + DispatchKeyValue(iSound2, "health", "10"); + DispatchKeyValue(iSound2, "pitch", "100"); + DispatchKeyValue(iSound2, "pitchstart", "100"); + DispatchSpawn(iSound2); + ActivateEntity(iSound2); + SetVariantString("!activator"); + AcceptEntityInput(iSound2, "SetParent", iKnife); + + // Sound 3 + int iSound3 = CreateEntityByName("ambient_generic"); + Format(sBuffer, sizeof(sBuffer), "balrog_sound3_%d", g_iCounter); + DispatchKeyValue(iSound3, "targetname", sBuffer); + DispatchKeyValue(iSound3, "spawnflags", "48"); + DispatchKeyValue(iSound3, "radius", "8250"); + Format(sBuffer, sizeof(sBuffer), "balrog_knife_%d", g_iCounter); + DispatchKeyValue(iSound3, "SourceEntityName", sBuffer); + DispatchKeyValue(iSound3, "message", "npc/strider/strider_skewer1.wav"); + DispatchKeyValue(iSound3, "volume", "10"); + DispatchKeyValue(iSound3, "health", "10"); + DispatchKeyValue(iSound3, "pitch", "100"); + DispatchKeyValue(iSound3, "pitchstart", "100"); + DispatchSpawn(iSound3); + ActivateEntity(iSound3); + SetVariantString("!activator"); + AcceptEntityInput(iSound3, "SetParent", iKnife); + + // Timer + int iTimer = CreateEntityByName("logic_timer"); + Format(sBuffer, sizeof(sBuffer), "balrog_timer_%d", g_iCounter); + DispatchKeyValue(iTimer, "targetname", sBuffer); + DispatchKeyValue(iTimer, "spawnflags", "0"); + DispatchKeyValue(iTimer, "startdisabled", "1"); + DispatchKeyValue(iTimer, "UseRandomTime", "0"); + DispatchKeyValue(iTimer, "RefireTime", "0.95"); + Format(sBuffer, sizeof(sBuffer), "balrog_sound2_%d,PlaySound,,0,-1", g_iCounter); + DispatchKeyValue(iTimer, "OnTimer", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_kill_trigger_walking_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iTimer, "OnTimer", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_kill_trigger_walking_%d,Enable,,0.1,-1", g_iCounter); + DispatchKeyValue(iTimer, "OnTimer", sBuffer); + DispatchSpawn(iTimer); + ActivateEntity(iTimer); + SetVariantString("!activator"); + AcceptEntityInput(iTimer, "SetParent", iKnife); + + // Roar + int iRoar = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "balrog_relay1_%d", g_iCounter); + DispatchKeyValue(iRoar, "targetname", sBuffer); + DispatchKeyValue(iRoar, "spawnflags", "0"); + Format(sBuffer, sizeof(sBuffer), "balrog_trigger_roar2_%d,Enable,,0,-1", g_iCounter); + DispatchKeyValue(iRoar, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_trigger_roar2_%d,Disable,,4,-1", g_iCounter); + DispatchKeyValue(iRoar, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_model_%d,SetAnimation,balrog_groar,0,-1", g_iCounter); + DispatchKeyValue(iRoar, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_trigger_roar1_%d,Enable,,0,-1", g_iCounter); + //DispatchKeyValue(iRoar, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_trigger_roar1_%d,Disable,,3.05,-1", g_iCounter); + //DispatchKeyValue(iRoar, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_trigger_roar1_%d,Disable,,0.1,-1", g_iCounter); + //DispatchKeyValue(iRoar, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_trigger_roar1_%d,Disable,,3.01,-1", g_iCounter); + //DispatchKeyValue(iRoar, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_relay2_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iRoar, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_relay2_%d,Enable,,4,-1", g_iCounter); + DispatchKeyValue(iRoar, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_sound1_%d,PlaySound,,1,-1", g_iCounter); + DispatchKeyValue(iRoar, "OnTrigger", sBuffer); + //DispatchKeyValue(iRoar, "OnTrigger", "!activator,AddOutput,gravity 2,0,-1"); + DispatchKeyValue(iRoar, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyValue(iRoar, "OnTrigger", "!self,Enable,,25,-1"); + DispatchSpawn(iRoar); + ActivateEntity(iRoar); + SetVariantString("!activator"); + AcceptEntityInput(iRoar, "SetParent", iKnife); + + // Attack + int iAttack = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "balrog_relay2_%d", g_iCounter); + DispatchKeyValue(iAttack, "targetname", sBuffer); + DispatchKeyValue(iAttack, "spawnflags", "0"); + Format(sBuffer, sizeof(sBuffer), "balrog_model_%d,SetAnimation,balrog_attack1,0,-1", g_iCounter); + DispatchKeyValue(iAttack, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_sound3_%d,PlaySound,,1,-1", g_iCounter); + DispatchKeyValue(iAttack, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_trigger_roar1_%d,Enable,,0,-1", g_iCounter); + //DispatchKeyValue(iAttack, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_trigger_roar1_%d,Disable,,0.1,-1", g_iCounter); + //DispatchKeyValue(iAttack, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_kill_trigger_attack_%d,Enable,,1.75,-1", g_iCounter); + DispatchKeyValue(iAttack, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_kill_trigger_attack_%d,Disable,,2.2,-1", g_iCounter); + DispatchKeyValue(iAttack, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_relay1_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iAttack, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_relay1_%d,Enable,,4,-1", g_iCounter); + DispatchKeyValue(iAttack, "OnTrigger", sBuffer); + //DispatchKeyValue(iAttack, "OnTrigger", "!activator,AddOutput,gravity 2,0,-1"); + DispatchKeyValue(iAttack, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyValue(iAttack, "OnTrigger", "!self,Enable,,4.1,-1"); + DispatchSpawn(iAttack); + ActivateEntity(iAttack); + SetVariantString("!activator"); + AcceptEntityInput(iAttack, "SetParent", iKnife); + + // Physbox + int iPhysbox = CreateEntityByName("func_physbox_multiplayer"); + Format(sBuffer, sizeof(sBuffer), "balrog_physbox_%d", g_iCounter); + DispatchKeyValue(iPhysbox, "targetname", sBuffer); + DispatchKeyValue(iPhysbox, "spawnflags", "574464"); + DispatchKeyValue(iPhysbox, "rendermode", "0"); + DispatchKeyValue(iPhysbox, "renderfx", "0"); + DispatchKeyValue(iPhysbox, "rendercolor", "255 255 255"); + DispatchKeyValue(iPhysbox, "renderamt", "255 255 255"); + DispatchKeyValue(iPhysbox, "propdata", "0"); + DispatchKeyValue(iPhysbox, "pressuredelay", "0"); + DispatchKeyValue(iPhysbox, "preferredcarryangles", "0 0 0"); + DispatchKeyValue(iPhysbox, "PerformanceMode", "0"); + DispatchKeyValue(iPhysbox, "notsolid", "0"); + DispatchKeyValue(iPhysbox, "nodamageforces", "0"); + DispatchKeyValue(iPhysbox, "material", "0"); + DispatchKeyValue(iPhysbox, "massScale", "0"); + DispatchKeyValue(iPhysbox, "health", "32500"); + DispatchKeyValue(iPhysbox, "gibdir", "0 0 0"); + DispatchKeyValue(iPhysbox, "forcetoenablemotion", "0"); + DispatchKeyValue(iPhysbox, "explosion", "0"); + DispatchKeyValue(iPhysbox, "ExplodeRadius", "0"); + DispatchKeyValue(iPhysbox, "explodemagnitude", "0"); + DispatchKeyValue(iPhysbox, "ExplodeDamage", "0"); + DispatchKeyValue(iPhysbox, "disableshadows", "1"); + DispatchKeyValue(iPhysbox, "disablereceiveshadows", "0"); + DispatchKeyValue(iPhysbox, "Damagetype", "0"); + DispatchKeyValue(iPhysbox, "damagetoenablemotion", "0"); + DispatchKeyValue(iPhysbox, "damagefilter", "item_spawn_human_filter"); + DispatchKeyValue(iPhysbox, "model", "models/props/cs_militia/crate_extrasmallmill.mdl"); + Format(sBuffer, sizeof(sBuffer), "balrog_model_%d,EmitBlood,,0,-1", g_iCounter); + DispatchKeyValue(iPhysbox, "OnDamaged", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_model_%d,ClearParent,,0,-1", g_iCounter); + DispatchKeyValue(iPhysbox, "OnBreak", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_model_%d,SetAnimation,balrog_death,0,-1", g_iCounter); + DispatchKeyValue(iPhysbox, "OnBreak", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_model_%d,SetDefaultAnimation,balrog_death_idle,0,-1", g_iCounter); + DispatchKeyValue(iPhysbox, "OnBreak", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_kill_trigger_%d,Enable,,1,-1", g_iCounter); + DispatchKeyValue(iPhysbox, "OnBreak", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_kill_trigger_%d,Disable,,2,-1", g_iCounter); + DispatchKeyValue(iPhysbox, "OnBreak", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_relay1_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iPhysbox, "OnBreak", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_relay2_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iPhysbox, "OnBreak", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_timer_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iPhysbox, "OnBreak", sBuffer); + fOriginTemp[0] = fOrigin[0] + 44.0; + fOriginTemp[1] = fOrigin[1] - 18.74; + fOriginTemp[2] = fOrigin[2] + 126.89; + DispatchKeyValueVector(iPhysbox, "origin", fOriginTemp); + DispatchSpawn(iPhysbox); + ActivateEntity(iPhysbox); + float fMinbounds3[3] = {-124.0, -120.0, -188.2}; + float fMaxbounds3[3] = {124.0, 120.0, 188.2}; + SetEntPropVector(iPhysbox, Prop_Send, "m_vecMins", fMinbounds3); + SetEntPropVector(iPhysbox, Prop_Send, "m_vecMaxs", fMaxbounds3); + SetEntProp(iPhysbox, Prop_Send, "m_nSolidType", 3); + int enteffects3 = GetEntProp(iPhysbox, Prop_Send, "m_fEffects"); + enteffects3 |= 32; + SetEntProp(iPhysbox, Prop_Send, "m_fEffects", enteffects3); + SetVariantString("!activator"); + AcceptEntityInput(iPhysbox, "SetParent", iKnife); + HookSingleEntityOutput(iPhysbox, "OnBreak", BalrogKill, true); + + // Game UI + int iUI = CreateEntityByName("game_ui"); + Format(sBuffer, sizeof(sBuffer), "balrog_ui_%d", g_iCounter); + DispatchKeyValue(iUI, "targetname", sBuffer); + DispatchKeyValue(iUI, "spawnflags", "0"); + DispatchKeyValue(iUI, "FieldOfView", "-1.0"); + Format(sBuffer, sizeof(sBuffer), "balrog_relay2_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyValue(iUI, "PressedAttack", sBuffer); + Format(sBuffer, sizeof(sBuffer), "balrog_relay1_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyValue(iUI, "PressedAttack2", sBuffer); + DispatchKeyValue(iUI, "PressedAttack2", "item_spawn_speedmod,ModifySpeed,0,0,-1"); + DispatchKeyValue(iUI, "PressedAttack2", "item_spawn_speedmod,ModifySpeed,0,0.1,-1"); + DispatchKeyValue(iUI, "PressedAttack2", "item_spawn_speedmod,ModifySpeed,0,0.2,-1"); + DispatchKeyValue(iUI, "PressedAttack2", "item_spawn_speedmod,ModifySpeed,0,0.3,-1"); + DispatchKeyValue(iUI, "PressedAttack2", "item_spawn_speedmod,ModifySpeed,0.8,3.0,-1"); + DispatchKeyValue(iUI, "PressedAttack", "item_spawn_speedmod,ModifySpeed,0,0,-1"); + DispatchKeyValue(iUI, "PressedAttack", "item_spawn_speedmod,ModifySpeed,0.8,3.0,-1"); + DispatchSpawn(iUI); + ActivateEntity(iUI); + SetVariantString("!activator"); + AcceptEntityInput(iUI, "SetParent", iKnife); + + // enable pickup trigger + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "Enable"); + + g_iCounter ++; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void BalrogPickup(const char[] output, int caller, int activator, float delay) +{ + ServerCommand("say ** %N has picked up Balrog **", activator); + + PrintToChat(activator, " RIGHT CLICK = MOTIVATE ZOMBIES and LEFT CLICK = ATTACK."); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void BalrogKill(const char[] output, int caller, int activator, float delay) +{ + ServerCommand("say ** %N has killed the Balrog **", activator); +} \ No newline at end of file diff --git a/ItemSpawn/scripting/items/doghuman.inc b/ItemSpawn/scripting/items/doghuman.inc new file mode 100644 index 00000000..62030667 --- /dev/null +++ b/ItemSpawn/scripting/items/doghuman.inc @@ -0,0 +1,298 @@ +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_HumanDog(int client, int argc) +{ + float fOrigin[3]; + + if (argc < 1) + { + GetClientEyePosition(client, fOrigin); + SpawnHumanDog(fOrigin); + LogAction(client, -1, "\"%L\" spawned Human Dog at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]); + return Plugin_Handled; + } + + char sArgs[64]; + char sTargetName[MAX_TARGET_LENGTH]; + int iTargets[MAXPLAYERS]; + int iTargetCount; + bool bIsML; + + GetCmdArg(1, sArgs, sizeof(sArgs)); + + if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0) + { + ReplyToTargetError(client, iTargetCount); + return Plugin_Handled; + } + + for (int i = 0; i < iTargetCount; i++) + { + if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i]) && (ZR_IsClientHuman(iTargets[i]))) + { + GetClientEyePosition(iTargets[i], fOrigin); + SpawnHumanDog(fOrigin); + LogAction(client, -1, "\"%L\" gave Human Dog to \"%L\".", client, iTargets[i]); + } + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SpawnHumanDog(float fOrigin[3]) +{ + char sBuffer[256]; + float fOriginTemp[3]; + + // Knife + int iKnife = CreateEntityByName("weapon_knife"); + Format(sBuffer, sizeof(sBuffer), "human_dog_knife_%d", g_iCounter); + DispatchKeyValue(iKnife, "targetname", sBuffer); + Format(sBuffer, sizeof(sBuffer), "11051995%d", g_iCounter); + DispatchKeyValue(iKnife, "hammerid", sBuffer); + DispatchKeyValue(iKnife, "spawnflags", "1"); + DispatchKeyValue(iKnife, "angles", "0 0 0"); + DispatchKeyValueVector(iKnife, "origin", fOrigin); + //DispatchKeyValue(iKnife, "OnPlayerPickUp", "!activator,AddOutput,renderfx 6,0,-1"); + Format(sBuffer, sizeof(sBuffer), "human_dog_ui_%d,Activate,,0,-1", g_iCounter); + DispatchKeyValue(iKnife, "OnPlayerPickup", sBuffer); + DispatchSpawn(iKnife); + ActivateEntity(iKnife); + HookSingleEntityOutput(iKnife, "OnPlayerPickup", HumanDogPickup, true); + + // Model + int iModel = CreateEntityByName("prop_dynamic"); + Format(sBuffer, sizeof(sBuffer), "human_dog_model_%d", g_iCounter); + DispatchKeyValue(iModel, "targetname", sBuffer); + DispatchKeyValue(iModel, "model", "models/player/pil/re1/dog/dog_pil.mdl"); + DispatchKeyValue(iModel, "DisableBoneFollowers", "1"); + DispatchKeyValue(iModel, "angles", "0 0 0"); + DispatchKeyValue(iModel, "solid", "0"); + DispatchKeyValue(iModel, "skin", "1"); + DispatchKeyValue(iModel, "DefaultAnim", "Run_lower"); + fOriginTemp[0] = fOrigin[0] + 10.4; + fOriginTemp[1] = fOrigin[1] - 2.0; + fOriginTemp[2] = fOrigin[2] - 40.32; + DispatchKeyValueVector(iModel, "origin", fOriginTemp); + DispatchSpawn(iModel); + ActivateEntity(iModel); + SetVariantString("!activator"); + AcceptEntityInput(iModel, "SetParent", iKnife); + + // pickup trigger_once + int iTrigger = CreateEntityByName("trigger_once"); + Format(sBuffer, sizeof(sBuffer), "tnt_trigger_%d", g_iCounter); + DispatchKeyValue(iTrigger, "targetname", sBuffer); + DispatchKeyValue(iTrigger, "spawnflags", "1"); + DispatchKeyValue(iTrigger, "startdisabled", "1"); + DispatchKeyValue(iTrigger, "filtername", "item_spawn_human_filter"); + DispatchKeyValue(iTrigger, "OnStartTouch", "item_spawn_weaponstrip,StripWeaponsAndSuit,,0,1"); + DispatchKeyValueVector(iTrigger, "origin", fOrigin); + DispatchSpawn(iTrigger); + ActivateEntity(iTrigger); + SetEntityModel(iTrigger, "models/vortigaunt_slave.mdl"); + float fMinbounds[3] = {-1.0, -1.0, -10.0}; + float fMaxbounds[3] = {1.0, 1.0, 10.0}; + SetEntPropVector(iTrigger, Prop_Send, "m_vecMins", fMinbounds); + SetEntPropVector(iTrigger, Prop_Send, "m_vecMaxs", fMaxbounds); + SetEntProp(iTrigger, Prop_Send, "m_nSolidType", 2); + int enteffects = GetEntProp(iTrigger, Prop_Send, "m_fEffects"); + enteffects |= 32; + SetEntProp(iTrigger, Prop_Send, "m_fEffects", enteffects); + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "SetParent", iKnife); + + // Relay Trigger + int iRelayTrigger = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "human_dog_relay_trigger_%d", g_iCounter); + DispatchKeyValue(iRelayTrigger, "targetname", sBuffer); + DispatchKeyValue(iRelayTrigger, "spawnflags", "0"); + Format(sBuffer, sizeof(sBuffer), "human_dog_relay_trigger2_%d,Trigger,,0,4", g_iCounter); + DispatchKeyValue(iRelayTrigger, "OnTrigger", sBuffer); + DispatchSpawn(iRelayTrigger); + ActivateEntity(iRelayTrigger); + SetVariantString("!activator"); + AcceptEntityInput(iRelayTrigger, "SetParent", iKnife); + + // Relay Trigger2 + int iRelayTrigger2 = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "human_dog_relay_trigger2_%d", g_iCounter); + DispatchKeyValue(iRelayTrigger2, "targetname", sBuffer); + DispatchKeyValue(iRelayTrigger2, "spawnflags", "0"); + DispatchSpawn(iRelayTrigger2); + ActivateEntity(iRelayTrigger2); + SetVariantString("!activator"); + AcceptEntityInput(iRelayTrigger2, "SetParent", iKnife); + HookSingleEntityOutput(iRelayTrigger2, "OnTrigger", HumanDogUse, false); + + // Game UI + int iUI = CreateEntityByName("game_ui"); + Format(sBuffer, sizeof(sBuffer), "human_dog_ui_%d", g_iCounter); + DispatchKeyValue(iUI, "targetname", sBuffer); + DispatchKeyValue(iUI, "spawnflags", "0"); + DispatchKeyValue(iUI, "FieldOfView", "-1.0"); + Format(sBuffer, sizeof(sBuffer), "human_dog_relay_trigger_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyValue(iUI, "PressedAttack2", sBuffer); + DispatchSpawn(iUI); + ActivateEntity(iUI); + SetVariantString("!activator"); + AcceptEntityInput(iUI, "SetParent", iKnife); + + // enable pickup trigger + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "Enable"); + + g_iCounter ++; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void HumanDogPickup(const char[] output, int caller, int activator, float delay) +{ + char sBuffer[128]; + Format(sBuffer, sizeof(sBuffer), "say ** %N has picked up Human Dog **", activator); + SetVariantString(sBuffer); + AcceptEntityInput(g_iConsole, "Command"); + PrintToChat(activator, "RIGHT CLICK with your KNIFE to leave a present for the Zombies (max 4)"); + CreateTimer(2.0, EquipWeapons, GetClientUserId(activator), TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void HumanDogUse(const char[] output, int caller, int activator, float delay) +{ + char sBuffer[256]; + float fOrigin[3]; + float fAngles[3]; + GetClientEyeAngles(activator, fAngles); + GetClientEyePosition(activator, fOrigin); + fAngles[0] = 0.0; + fAngles[2] = 0.0; + fOrigin[0] = fOrigin[0] + Cosine(DegToRad(fAngles[1])) * -50.0; + fOrigin[1] = fOrigin[1] + Sine(DegToRad(fAngles[1])) * -50.0; + fOrigin[2] = fOrigin[2] - 62.00; + + // Prop + int iProp = CreateEntityByName("prop_dynamic"); + Format(sBuffer, sizeof(sBuffer), "human_dog_poo_%d", g_iCounter); + DispatchKeyValue(iProp, "targetname", sBuffer); + DispatchKeyValue(iProp, "model", "models/poo/curlygpoo.mdl"); + DispatchKeyValue(iProp, "spawnflags", "0"); + DispatchKeyValue(iProp, "PerformanceMode", "0"); + DispatchKeyValue(iProp, "solid", "0"); + DispatchKeyValueVector(iProp, "origin", fOrigin); + DispatchSpawn(iProp); + ActivateEntity(iProp); + + // trigger + int iTrigger = CreateEntityByName("trigger_once"); + Format(sBuffer, sizeof(sBuffer), "human_dog_poo_trigger_%d", g_iCounter); + DispatchKeyValue(iTrigger, "targetname", sBuffer); + DispatchKeyValue(iTrigger, "spawnflags", "1"); + DispatchKeyValue(iTrigger, "startdisabled", "0"); + DispatchKeyValue(iTrigger, "filtername", "item_spawn_zombie_filter"); + Format(sBuffer, sizeof(sBuffer), "human_dog_poo_%d,Kill,,1,1", g_iCounter); + DispatchKeyValue(iTrigger, "OnStartTouch", sBuffer); + Format(sBuffer, sizeof(sBuffer), "human_dog_poo_hurt_%d,Enable,,0,1", g_iCounter); + DispatchKeyValue(iTrigger, "OnStartTouch", sBuffer); + Format(sBuffer, sizeof(sBuffer), "human_dog_poo_hurt_%d,Disable,,0.25,1", g_iCounter); + DispatchKeyValue(iTrigger, "OnStartTouch", sBuffer); + Format(sBuffer, sizeof(sBuffer), "human_dog_particles_%d,Start,,0,-1", g_iCounter); + DispatchKeyValue(iTrigger, "OnStartTouch", sBuffer); + Format(sBuffer, sizeof(sBuffer), "human_dog_particles_%d,Kill,,1,-1", g_iCounter); + DispatchKeyValue(iTrigger, "OnStartTouch", sBuffer); + Format(sBuffer, sizeof(sBuffer), "human_dog_sound_%d,PlaySound,,0,-1", g_iCounter); + DispatchKeyValue(iTrigger, "OnStartTouch", sBuffer); + DispatchKeyValueVector(iTrigger, "origin", fOrigin); + DispatchSpawn(iTrigger); + ActivateEntity(iTrigger); + SetEntityModel(iTrigger, "models/vortigaunt_slave.mdl"); + float fMinbounds[3] = {-12.0, -12.0, -7.5}; + float fMaxbounds[3] = {12.0, 12.0, 7.5}; + SetEntPropVector(iTrigger, Prop_Send, "m_vecMins", fMinbounds); + SetEntPropVector(iTrigger, Prop_Send, "m_vecMaxs", fMaxbounds); + SetEntProp(iTrigger, Prop_Send, "m_nSolidType", 2); + int enteffects = GetEntProp(iTrigger, Prop_Send, "m_fEffects"); + enteffects |= 32; + SetEntProp(iTrigger, Prop_Send, "m_fEffects", enteffects); + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "SetParent", iProp); + + // poo hurt + int iHurt = CreateEntityByName("trigger_hurt"); + Format(sBuffer, sizeof(sBuffer), "human_dog_poo_hurt_%d", g_iCounter); + DispatchKeyValue(iHurt, "targetname", sBuffer); + DispatchKeyValue(iHurt, "spawnflags", "1"); + DispatchKeyValue(iHurt, "startdisabled", "1"); + DispatchKeyValue(iHurt, "filtername", "item_spawn_zombie_filter"); + DispatchKeyValue(iHurt, "damagetype", "0"); + DispatchKeyValue(iHurt, "damagemodel", "0"); + DispatchKeyValue(iHurt, "damagecap", "20"); + DispatchKeyValue(iHurt, "damage", "8000"); + DispatchKeyValueVector(iHurt, "origin", fOrigin); + DispatchSpawn(iHurt); + ActivateEntity(iHurt); + SetEntityModel(iHurt, "models/vortigaunt_slave.mdl"); + float fMinbounds2[3] = {-96.0, -112.0, -142.0}; + float fMaxbounds2[3] = {96.0, 112.0, 142.0}; + SetEntPropVector(iHurt, Prop_Send, "m_vecMins", fMinbounds2); + SetEntPropVector(iHurt, Prop_Send, "m_vecMaxs", fMaxbounds2); + SetEntProp(iHurt, Prop_Send, "m_nSolidType", 3); + int enteffects2 = GetEntProp(iHurt, Prop_Send, "m_fEffects"); + enteffects2 |= 32; + SetEntProp(iHurt, Prop_Send, "m_fEffects", enteffects2); + SetVariantString("!activator"); + AcceptEntityInput(iHurt, "SetParent", iProp); + + // Particles + int iParticles = CreateEntityByName("info_particle_system"); + Format(sBuffer, sizeof(sBuffer), "human_dog_particles_%d", g_iCounter); + DispatchKeyValue(iParticles, "targetname", sBuffer); + DispatchKeyValue(iParticles, "effect_name", "fire_small_01"); + DispatchKeyValue(iParticles, "start_active", "0"); + DispatchKeyValueVector(iParticles, "origin", fOrigin); + DispatchSpawn(iParticles); + ActivateEntity(iParticles); + SetVariantString("!activator"); + AcceptEntityInput(iParticles, "SetParent", iProp); + + // Sound + int iSound = CreateEntityByName("ambient_generic"); + Format(sBuffer, sizeof(sBuffer), "human_dog_sound_%d", g_iCounter); + DispatchKeyValue(iSound, "targetname", sBuffer); + DispatchKeyValue(iSound, "spawnflags", "49"); + DispatchKeyValue(iSound, "radius", "1250"); + DispatchKeyValue(iSound, "message", "ambient/explosions/explode_9.wav"); + DispatchKeyValue(iSound, "volume", "10"); + DispatchKeyValue(iSound, "health", "10"); + DispatchKeyValue(iSound, "pitch", "100"); + DispatchKeyValue(iSound, "pitchstart", "100"); + DispatchKeyValueVector(iSound, "origin", fOrigin); + DispatchSpawn(iSound); + ActivateEntity(iSound); + SetVariantString("!activator"); + AcceptEntityInput(iSound, "SetParent", iProp); + + g_iCounter ++; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action EquipWeapons(Handle timer, any userid) +{ + int client = GetClientOfUserId(userid); + + if (client != 0) + { + GivePlayerItem(client, "weapon_p90"); + GivePlayerItem(client, "weapon_elite"); + GivePlayerItem(client, "item_kevlar"); + GivePlayerItem(client, "weapon_hegrenade"); + } +} \ No newline at end of file diff --git a/ItemSpawn/scripting/items/tnt.inc b/ItemSpawn/scripting/items/tnt.inc new file mode 100644 index 00000000..a0c338c1 --- /dev/null +++ b/ItemSpawn/scripting/items/tnt.inc @@ -0,0 +1,401 @@ +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_TNT(int client, int argc) +{ + float fOrigin[3]; + + if (argc < 1) + { + GetClientEyePosition(client, fOrigin); + SpawnTNT(fOrigin); + LogAction(client, -1, "\"%L\" spawned TNT at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]); + return Plugin_Handled; + } + + char sArgs[64]; + char sTargetName[MAX_TARGET_LENGTH]; + int iTargets[MAXPLAYERS]; + int iTargetCount; + bool bIsML; + + GetCmdArg(1, sArgs, sizeof(sArgs)); + + if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0) + { + ReplyToTargetError(client, iTargetCount); + return Plugin_Handled; + } + + for (int i = 0; i < iTargetCount; i++) + { + if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i]) && (ZR_IsClientZombie(iTargets[i]))) + { + GetClientEyePosition(iTargets[i], fOrigin); + SpawnTNT(fOrigin); + LogAction(client, -1, "\"%L\" gave TNT to \"%L\".", client, iTargets[i]); + } + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SpawnTNT(float fOrigin[3]) +{ + char sBuffer[256]; + float fOriginTemp[3]; + + // Knife + int iKnife = CreateEntityByName("weapon_knife"); + Format(sBuffer, sizeof(sBuffer), "tnt_knife_%d", g_iCounter); + DispatchKeyValue(iKnife, "targetname", sBuffer); + Format(sBuffer, sizeof(sBuffer), "11051995%d", g_iCounter); + DispatchKeyValue(iKnife, "hammerid", sBuffer); + DispatchKeyValue(iKnife, "spawnflags", "1"); + DispatchKeyValue(iKnife, "angles", "0 0 0"); + DispatchKeyValueVector(iKnife, "origin", fOrigin); + Format(sBuffer, sizeof(sBuffer), "tnt_ui_%d,Activate,,0,-1", g_iCounter); + DispatchKeyValue(iKnife, "OnPlayerPickup", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d,StartSpark,,0,1", g_iCounter); + DispatchKeyValue(iKnife, "OnPlayerPickup", sBuffer); + DispatchSpawn(iKnife); + ActivateEntity(iKnife); + HookSingleEntityOutput(iKnife, "OnPlayerPickup", TNTPickup, true); + + // Model + int iModel = CreateEntityByName("prop_dynamic"); + Format(sBuffer, sizeof(sBuffer), "tnt_model_%d", g_iCounter); + DispatchKeyValue(iModel, "targetname", sBuffer); + DispatchKeyValue(iModel, "model", "models/props/furnitures/humans/barrel01b.mdl"); + DispatchKeyValue(iModel, "DisableBoneFollowers", "1"); + DispatchKeyValue(iModel, "angles", "0.432793 271.953 -12.4926"); + DispatchKeyValue(iModel, "solid", "0"); + DispatchKeyValue(iModel, "OnUser1", "!self,IgniteLifetime,0,0,-1"); + DispatchKeyValue(iModel, "OnUser1", "!self,FireUser1,,0.2,-1"); + fOriginTemp[0] = fOrigin[0] - 30.16; + fOriginTemp[1] = fOrigin[1] - 2.0; + fOriginTemp[2] = fOrigin[2] - 9.2; + DispatchKeyValueVector(iModel, "origin", fOriginTemp); + DispatchSpawn(iModel); + ActivateEntity(iModel); + SetVariantString("!activator"); + AcceptEntityInput(iModel, "SetParent", iKnife); + SetVariantString("9999999"); + AcceptEntityInput(iModel, "SetHealth"); + AcceptEntityInput(iModel, "FireUser1"); + + // pickup trigger_once + int iTrigger = CreateEntityByName("trigger_once"); + Format(sBuffer, sizeof(sBuffer), "tnt_trigger_%d", g_iCounter); + DispatchKeyValue(iTrigger, "targetname", sBuffer); + DispatchKeyValue(iTrigger, "spawnflags", "1"); + DispatchKeyValue(iTrigger, "startdisabled", "1"); + DispatchKeyValue(iTrigger, "filtername", "item_spawn_zombie_filter"); + DispatchKeyValue(iTrigger, "OnStartTouch", "item_spawn_weaponstrip,StripWeaponsAndSuit,,0,1"); + DispatchKeyValueVector(iTrigger, "origin", fOrigin); + DispatchSpawn(iTrigger); + ActivateEntity(iTrigger); + SetEntityModel(iTrigger, "models/vortigaunt_slave.mdl"); + float fMinbounds[3] = {-10.0, -10.0, -36.0}; + float fMaxbounds[3] = {10.0, 10.0, 36.0}; + SetEntPropVector(iTrigger, Prop_Send, "m_vecMins", fMinbounds); + SetEntPropVector(iTrigger, Prop_Send, "m_vecMaxs", fMaxbounds); + SetEntProp(iTrigger, Prop_Send, "m_nSolidType", 2); + int enteffects = GetEntProp(iTrigger, Prop_Send, "m_fEffects"); + enteffects |= 32; + SetEntProp(iTrigger, Prop_Send, "m_fEffects", enteffects); + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "SetParent", iKnife); + + // Sparks + int iSparksHolder = CreateEntityByName("env_spark"); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d", g_iCounter); + DispatchKeyValue(iSparksHolder, "targetname", sBuffer); + DispatchKeyValue(iSparksHolder, "TrailLength", "1"); + DispatchKeyValue(iSparksHolder, "spawnflags", "0"); + DispatchKeyValue(iSparksHolder, "angles", "0 0 0"); + DispatchKeyValue(iSparksHolder, "MaxDelay", "0"); + DispatchKeyValue(iSparksHolder, "Magnitude", "1"); + fOriginTemp[0] = fOrigin[0] - 22.0; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] + 36.0; + DispatchKeyValueVector(iSparksHolder, "origin", fOriginTemp); + DispatchSpawn(iSparksHolder); + ActivateEntity(iSparksHolder); + SetVariantString("!activator"); + AcceptEntityInput(iSparksHolder, "SetParent", iKnife); + + // Sprite + int iSprite = CreateEntityByName("env_sprite"); + Format(sBuffer, sizeof(sBuffer), "tnt_sprite_%d", g_iCounter); + DispatchKeyValue(iSprite, "targetname", sBuffer); + DispatchKeyValue(iSprite, "spawnflags", "0"); + DispatchKeyValue(iSprite, "spawnflags", "0"); + DispatchKeyValue(iSprite, "scale", "0.1"); + DispatchKeyValue(iSprite, "rendermode", "5"); + DispatchKeyValue(iSprite, "renderfx", "0"); + DispatchKeyValue(iSprite, "model", "sprites/640_train.vmt"); + fOriginTemp[0] = fOrigin[0] + 31.0; + fOriginTemp[1] = fOrigin[1] + 1.73; + fOriginTemp[2] = fOrigin[2] + 4.3; + DispatchKeyValueVector(iSprite, "origin", fOriginTemp); + DispatchSpawn(iSprite); + ActivateEntity(iSprite); + SetVariantString("!activator"); + AcceptEntityInput(iSprite, "SetParent", iKnife); + + // Push + int iPush = CreateEntityByName("trigger_push"); + Format(sBuffer, sizeof(sBuffer), "tnt_push_%d", g_iCounter); + DispatchKeyValue(iPush, "targetname", sBuffer); + DispatchKeyValue(iPush, "spawnflags", "8"); + DispatchKeyValue(iPush, "startdisabled", "1"); + DispatchKeyValue(iPush, "speed", "18000"); + DispatchKeyValue(iPush, "pushdir", "-60 0 0"); + fOriginTemp[0] = fOrigin[0] + 79.46; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] + 15.76; + DispatchKeyValueVector(iPush, "origin", fOriginTemp); + DispatchSpawn(iPush); + ActivateEntity(iPush); + SetEntityModel(iPush, "models/vortigaunt_slave.mdl"); + float fMinbounds2[3] = {-36.0, -12.0, -25.0}; + float fMaxbounds2[3] = {36.0, 12.0, 25.0}; + SetEntPropVector(iPush, Prop_Send, "m_vecMins", fMinbounds2); + SetEntPropVector(iPush, Prop_Send, "m_vecMaxs", fMaxbounds2); + SetEntProp(iPush, Prop_Send, "m_nSolidType", 3); + int enteffects2 = GetEntProp(iPush, Prop_Send, "m_fEffects"); + enteffects2 |= 32; + SetEntProp(iPush, Prop_Send, "m_fEffects", enteffects2); + SetVariantString("!activator"); + AcceptEntityInput(iPush, "SetParent", iKnife); + + // Relay Trigger + int iRelayTrigger = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d", g_iCounter); + DispatchKeyValue(iRelayTrigger, "targetname", sBuffer); + DispatchKeyValue(iRelayTrigger, "spawnflags", "0"); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_up_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyValue(iRelayTrigger, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyValue(iRelayTrigger, "OnTrigger", sBuffer); + DispatchSpawn(iRelayTrigger); + ActivateEntity(iRelayTrigger); + SetVariantString("!activator"); + AcceptEntityInput(iRelayTrigger, "SetParent", iKnife); + + // Launch Compare + int iLaunchCompare = CreateEntityByName("logic_compare"); + Format(sBuffer, sizeof(sBuffer), "tnt_compare_launch_%d", g_iCounter); + DispatchKeyValue(iLaunchCompare, "targetname", sBuffer); + DispatchKeyValue(iLaunchCompare, "InitialValue", "1"); + DispatchKeyValue(iLaunchCompare, "CompareValue", "0"); + DispatchKeyValue(iLaunchCompare, "OnEqualTo", "!self,SetValue,1,0,-1"); + Format(sBuffer, sizeof(sBuffer), "tnt_sprite_%d,HideSprite,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnEqualTo", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_%d,Enable,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnEqualTo", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_up_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnEqualTo", sBuffer); + DispatchKeyValue(iLaunchCompare, "OnNotEqualTo", "!self,SetValue,0,0,-1"); + Format(sBuffer, sizeof(sBuffer), "tnt_sprite_%d,ShowSprite,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnNotEqualTo", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnNotEqualTo", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_up_%d,Enable,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnNotEqualTo", sBuffer); + DispatchKeyValueVector(iLaunchCompare, "origin", fOrigin); + DispatchSpawn(iLaunchCompare); + ActivateEntity(iLaunchCompare); + SetVariantString("!activator"); + AcceptEntityInput(iLaunchCompare, "SetParent", iKnife); + + // Relay Launch + int iRelayLaunch = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_%d", g_iCounter); + DispatchKeyValue(iRelayLaunch, "targetname", sBuffer); + DispatchKeyValue(iRelayLaunch, "spawnflags", "0"); + DispatchKeyValue(iRelayLaunch, "StartDisabled", "0"); + DispatchKeyValueVector(iRelayLaunch, "origin", fOrigin); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iRelayLaunch, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d,Enable,,20,-1", g_iCounter); + DispatchKeyValue(iRelayLaunch, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d,StopSpark,,0,-1", g_iCounter); + DispatchKeyValue(iRelayLaunch, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d,StartSpark,,20,-1", g_iCounter); + DispatchKeyValue(iRelayLaunch, "OnTrigger", sBuffer); + DispatchSpawn(iRelayLaunch); + ActivateEntity(iRelayLaunch); + SetVariantString("!activator"); + AcceptEntityInput(iRelayLaunch, "SetParent", iKnife); + HookSingleEntityOutput(iRelayLaunch, "OnTrigger", TNTUse, false); + + // Relay Launch Up + int iRelayLaunchUp = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_up_%d", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "targetname", sBuffer); + DispatchKeyValue(iRelayLaunchUp, "spawnflags", "0"); + DispatchKeyValue(iRelayLaunchUp, "StartDisabled", "1"); + DispatchKeyValueVector(iRelayLaunchUp, "origin", fOrigin); + Format(sBuffer, sizeof(sBuffer), "tnt_push_%d,Enable,,0,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_push_%d,Disable,,0.5,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d,Enable,,20,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d,StopSpark,,0,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d,StartSpark,,20,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + DispatchSpawn(iRelayLaunchUp); + ActivateEntity(iRelayLaunchUp); + SetVariantString("!activator"); + AcceptEntityInput(iRelayLaunchUp, "SetParent", iKnife); + HookSingleEntityOutput(iRelayLaunchUp, "OnTrigger", TNTUse, false); + + // Game UI + int iUI = CreateEntityByName("game_ui"); + Format(sBuffer, sizeof(sBuffer), "tnt_ui_%d", g_iCounter); + DispatchKeyValue(iUI, "targetname", sBuffer); + DispatchKeyValue(iUI, "spawnflags", "0"); + DispatchKeyValue(iUI, "FieldOfView", "-1.0"); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyValue(iUI, "PressedAttack2", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_compare_launch_%d,Compare,,0,-1", g_iCounter); + DispatchKeyValue(iUI, "PressedAttack", sBuffer); + DispatchSpawn(iUI); + ActivateEntity(iUI); + SetVariantString("!activator"); + AcceptEntityInput(iUI, "SetParent", iKnife); + + // enable pickup trigger + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "Enable"); + + g_iCounter ++; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TNTPickup(const char[] output, int caller, int activator, float delay) +{ + char sBuffer[128]; + Format(sBuffer, sizeof(sBuffer), "say ** %N has picked up TNT **", activator); + SetVariantString(sBuffer); + AcceptEntityInput(g_iConsole, "Command"); + PrintToChat(activator, " RIGHT CLICK = Launch TNT and LEFT CLICK = Switch between 'put down' and 'throw'."); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TNTUse(const char[] output, int caller, int activator, float delay) +{ + char sBuffer[256]; + float fOrigin[3]; + float fAngles[3]; + + GetClientEyeAngles(activator, fAngles); + GetClientEyePosition(activator, fOrigin); + fAngles[0] = 0.0; + fAngles[2] = 0.0; + fOrigin[0] = fOrigin[0] + Cosine(DegToRad(fAngles[1])) * 46.63; + fOrigin[1] = fOrigin[1] + Sine(DegToRad(fAngles[1])) * 46.63; + fOrigin[2] = fOrigin[2] - 29.86; + + // Prop + int iProp = CreateEntityByName("prop_physics_multiplayer"); + Format(sBuffer, sizeof(sBuffer), "tnt_prop_%d", g_iCounter); + DispatchKeyValue(iProp, "targetname", sBuffer); + DispatchKeyValue(iProp, "model", "models/props/furnitures/humans/barrel01b.mdl"); + DispatchKeyValue(iProp, "spawnflags", "256"); + DispatchKeyValue(iProp, "physdamagescale", "0.1"); + DispatchKeyValue(iProp, "PerformanceMode", "0"); + DispatchKeyValue(iProp, "nodamageforces", "0"); + DispatchKeyValue(iProp, "solid", "6"); + DispatchKeyValue(iProp, "minhealthdmg", "999999"); + DispatchKeyValue(iProp, "health", "999999"); + DispatchKeyValueVector(iProp, "origin", fOrigin); + Format(sBuffer, sizeof(sBuffer), "tnt_fire_%d,StartFire,,3,1", g_iCounter); + DispatchKeyValue(iProp, "OnUser1", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_explosion_%d,Explode,,6.5,1", g_iCounter); + DispatchKeyValue(iProp, "OnUser1", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_sound_%d,PlaySound,,6.5,1", g_iCounter); + DispatchKeyValue(iProp, "OnUser1", sBuffer); + Format(sBuffer, sizeof(sBuffer), "!self,Kill,,6.6,1", g_iCounter); + DispatchKeyValue(iProp, "OnUser1", sBuffer); + DispatchSpawn(iProp); + ActivateEntity(iProp); + AcceptEntityInput(iProp, "FireUser1"); + + // Sparks + int iSparks = CreateEntityByName("env_spark"); + Format(sBuffer, sizeof(sBuffer), "tnt_sparks_%d", g_iCounter); + DispatchKeyValue(iSparks, "targetname", sBuffer); + DispatchKeyValue(iSparks, "TrailLength", "1"); + DispatchKeyValue(iSparks, "spawnflags", "64"); + DispatchKeyValue(iSparks, "angles", "0 0 0"); + DispatchKeyValue(iSparks, "MaxDelay", "0"); + DispatchKeyValue(iSparks, "Magnitude", "1"); + DispatchKeyValueVector(iSparks, "origin", fOrigin); + DispatchSpawn(iSparks); + ActivateEntity(iSparks); + SetVariantString("!activator"); + AcceptEntityInput(iSparks, "SetParent", iProp); + + // Fire + int iFire = CreateEntityByName("env_fire"); + Format(sBuffer, sizeof(sBuffer), "tnt_fire_%d", g_iCounter); + DispatchKeyValue(iFire, "targetname", sBuffer); + DispatchKeyValue(iFire, "ignitionpoint", "32"); + DispatchKeyValue(iFire, "spawnflags", "17"); + DispatchKeyValue(iFire, "health", "30"); + DispatchKeyValue(iFire, "firesize", "64"); + DispatchKeyValue(iFire, "fireattack", "4"); + DispatchKeyValue(iFire, "damagescale", "1.0"); + DispatchKeyValueVector(iFire, "origin", fOrigin); + DispatchSpawn(iFire); + ActivateEntity(iFire); + SetVariantString("!activator"); + AcceptEntityInput(iFire, "SetParent", iProp); + + // Explosion + int iExplosion = CreateEntityByName("env_explosion"); + Format(sBuffer, sizeof(sBuffer), "tnt_explosion_%d", g_iCounter); + DispatchKeyValue(iExplosion, "targetname", sBuffer); + DispatchKeyValue(iExplosion, "fireballsprite", "sprites/zerogxplode.spr"); + DispatchKeyValue(iExplosion, "iMagnitude", "220"); + DispatchKeyValue(iExplosion, "iRadiusOverride", "1024"); + DispatchKeyValue(iExplosion, "rendermode", "5"); + DispatchKeyValue(iExplosion, "spawnflags", "16"); + DispatchKeyValueVector(iExplosion, "origin", fOrigin); + DispatchSpawn(iExplosion); + ActivateEntity(iExplosion); + SetVariantString("!activator"); + AcceptEntityInput(iExplosion, "SetParent", iProp); + + // Sound + int iSound = CreateEntityByName("ambient_generic"); + Format(sBuffer, sizeof(sBuffer), "tnt_sound_%d", g_iCounter); + DispatchKeyValue(iSound, "targetname", sBuffer); + DispatchKeyValue(iSound, "spawnflags", "48"); + DispatchKeyValue(iSound, "radius", "9800"); + DispatchKeyValue(iSound, "message", "ambient/explosions/explode_9.wav"); + DispatchKeyValue(iSound, "volume", "10"); + DispatchKeyValue(iSound, "health", "10"); + DispatchKeyValue(iSound, "pitch", "100"); + DispatchKeyValue(iSound, "pitchstart", "100"); + DispatchKeyValueVector(iSound, "origin", fOrigin); + DispatchSpawn(iSound); + ActivateEntity(iSound); + SetVariantString("!activator"); + AcceptEntityInput(iSound, "SetParent", iProp); + + g_iCounter ++; +} \ No newline at end of file diff --git a/ItemSpawn/scripting/items/vortigaunt.inc b/ItemSpawn/scripting/items/vortigaunt.inc new file mode 100644 index 00000000..70d5c0f8 --- /dev/null +++ b/ItemSpawn/scripting/items/vortigaunt.inc @@ -0,0 +1,269 @@ +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_Vortigaunt(int client, int argc) +{ + float fOrigin[3]; + + if (argc < 1) + { + GetClientEyePosition(client, fOrigin); + SpawnVortigaunt(fOrigin); + LogAction(client, -1, "\"%L\" spawned Vortigaunt at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]); + return Plugin_Handled; + } + + char sArgs[64]; + char sTargetName[MAX_TARGET_LENGTH]; + int iTargets[MAXPLAYERS]; + int iTargetCount; + bool bIsML; + + GetCmdArg(1, sArgs, sizeof(sArgs)); + + if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0) + { + ReplyToTargetError(client, iTargetCount); + return Plugin_Handled; + } + + for (int i = 0; i < iTargetCount; i++) + { + if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i]) && (ZR_IsClientZombie(iTargets[i]))) + { + GetClientEyePosition(iTargets[i], fOrigin); + SpawnVortigaunt(fOrigin); + LogAction(client, -1, "\"%L\" gave Vortigaunt to \"%L\".", client, iTargets[i]); + } + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SpawnVortigaunt(float fOrigin[3]) +{ + char sBuffer[256]; + float fOriginTemp[3]; + + // Knife + int iKnife = CreateEntityByName("weapon_knife"); + Format(sBuffer, sizeof(sBuffer), "vort_knife_%d", g_iCounter); + DispatchKeyValue(iKnife, "targetname", sBuffer); + Format(sBuffer, sizeof(sBuffer), "11051995%d", g_iCounter); + DispatchKeyValue(iKnife, "hammerid", sBuffer); + DispatchKeyValue(iKnife, "spawnflags", "1"); + DispatchKeyValue(iKnife, "angles", "0 0 0"); + DispatchKeyValueVector(iKnife, "origin", fOrigin); + DispatchKeyValue(iKnife, "OnPlayerPickUp", "!activator,AddOutput,renderfx 6,0,-1"); + Format(sBuffer, sizeof(sBuffer), "vort_knife_%d,AddOutput,renderfx 6,0.03,-1", g_iCounter); + DispatchKeyValue(iKnife, "OnPlayerPickup", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_ui_%d,Activate,,0,-1", g_iCounter); + DispatchKeyValue(iKnife, "OnPlayerPickup", sBuffer); + DispatchSpawn(iKnife); + ActivateEntity(iKnife); + HookSingleEntityOutput(iKnife, "OnPlayerPickup", VortigauntPickup, true); + + // Model + int iModel = CreateEntityByName("prop_dynamic"); + Format(sBuffer, sizeof(sBuffer), "vort_model_%d", g_iCounter); + DispatchKeyValue(iModel, "targetname", sBuffer); + DispatchKeyValue(iModel, "model", "models/vortigaunt_slave.mdl"); + DispatchKeyValue(iModel, "DisableBoneFollowers", "1"); + DispatchKeyValue(iModel, "DefaultAnim", "Run_all"); + fOriginTemp[0] = fOrigin[0] + 7.0; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] - 34.24; + DispatchKeyValueVector(iModel, "origin", fOriginTemp); + DispatchSpawn(iModel); + ActivateEntity(iModel); + SetVariantString("!activator"); + AcceptEntityInput(iModel, "SetParent", iKnife); + + // pickup trigger_once + int iTrigger = CreateEntityByName("trigger_once"); + Format(sBuffer, sizeof(sBuffer), "vort_trigger_%d", g_iCounter); + DispatchKeyValue(iTrigger, "targetname", sBuffer); + DispatchKeyValue(iTrigger, "spawnflags", "1"); + DispatchKeyValue(iTrigger, "startdisabled", "1"); + DispatchKeyValue(iTrigger, "filtername", "item_spawn_zombie_filter"); + DispatchKeyValue(iTrigger, "OnStartTouch", "item_spawn_weaponstrip,StripWeaponsAndSuit,,0,1"); + DispatchKeyValueVector(iTrigger, "origin", fOrigin); + DispatchSpawn(iTrigger); + ActivateEntity(iTrigger); + SetEntityModel(iTrigger, "models/vortigaunt_slave.mdl"); + float fMinbounds[3] = {-10.0, -10.0, -36.0}; + float fMaxbounds[3] = {10.0, 10.0, 36.0}; + SetEntPropVector(iTrigger, Prop_Send, "m_vecMins", fMinbounds); + SetEntPropVector(iTrigger, Prop_Send, "m_vecMaxs", fMaxbounds); + SetEntProp(iTrigger, Prop_Send, "m_nSolidType", 2); + int enteffects = GetEntProp(iTrigger, Prop_Send, "m_fEffects"); + enteffects |= 32; + SetEntProp(iTrigger, Prop_Send, "m_fEffects", enteffects); + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "SetParent", iKnife); + + // Sound + int iSound = CreateEntityByName("ambient_generic"); + Format(sBuffer, sizeof(sBuffer), "vort_sound_%d", g_iCounter); + DispatchKeyValue(iSound, "targetname", sBuffer); + DispatchKeyValue(iSound, "spawnflags", "48"); + DispatchKeyValue(iSound, "radius", "2250"); + Format(sBuffer, sizeof(sBuffer), "vort_knife_%d", g_iCounter); + DispatchKeyValue(iSound, "SourceEntityName", sBuffer); + DispatchKeyValue(iSound, "message", "ambient/energy/zap9.wav"); + DispatchKeyValue(iSound, "volume", "10"); + DispatchKeyValue(iSound, "health", "10"); + DispatchKeyValue(iSound, "pitch", "100"); + DispatchKeyValue(iSound, "pitchstart", "100"); + DispatchSpawn(iSound); + ActivateEntity(iSound); + SetVariantString("!activator"); + AcceptEntityInput(iSound, "SetParent", iKnife); + + // Push + int iPush = CreateEntityByName("trigger_push"); + Format(sBuffer, sizeof(sBuffer), "vort_push_%d", g_iCounter); + DispatchKeyValue(iPush, "targetname", sBuffer); + DispatchKeyValue(iPush, "spawnflags", "1"); + DispatchKeyValue(iPush, "startdisabled", "1"); + DispatchKeyValue(iPush, "speed", "1800"); + DispatchKeyValue(iPush, "pushdir", "0 180 0"); + DispatchKeyValue(iPush, "filtername", "item_spawn_human_filter"); + fOriginTemp[0] = fOrigin[0] + 899.0; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] - 8.0; + DispatchKeyValueVector(iPush, "origin", fOriginTemp); + DispatchSpawn(iPush); + ActivateEntity(iPush); + SetEntityModel(iPush, "models/vortigaunt_slave.mdl"); + float fMinbounds2[3] = {-852.0, -16.0, -9.0}; + float fMaxbounds2[3] = {852.0, 16.0, 9.0}; + SetEntPropVector(iPush, Prop_Send, "m_vecMins", fMinbounds2); + SetEntPropVector(iPush, Prop_Send, "m_vecMaxs", fMaxbounds2); + SetEntProp(iPush, Prop_Send, "m_nSolidType", 3); + int enteffects2 = GetEntProp(iPush, Prop_Send, "m_fEffects"); + enteffects2 |= 32; + SetEntProp(iPush, Prop_Send, "m_fEffects", enteffects2); + SetVariantString("!activator"); + AcceptEntityInput(iPush, "SetParent", iKnife); + + // Relay + int iRelay = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "vort_relay_%d", g_iCounter); + DispatchKeyValueVector(iRelay, "origin", fOrigin); + DispatchKeyValue(iRelay, "targetname", sBuffer); + DispatchKeyValue(iRelay, "spawnflags", "0"); + DispatchKeyValue(iRelay, "startdisabled", "0"); + DispatchKeyValue(iRelay, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyValue(iRelay, "OnTrigger", "!self,Enable,,4,-1"); + Format(sBuffer, sizeof(sBuffer), "vort_model_%d,SetAnimation,zapattack1,0,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_push_%d,Enable,,1.5,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_push_%d,Disable,,2,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_sound_%d,PlaySound,,1.5,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_beam_%d,TurnOn,,1.5,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_beam_%d,TurnOff,,2.5,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + DispatchKeyValue(iRelay, "OnTrigger", "item_spawn_speedmod,ModifySpeed,0,0,-1"); + DispatchKeyValue(iRelay, "OnTrigger", "item_spawn_speedmod,ModifySpeed,1.15,3.25,-1"); + DispatchSpawn(iRelay); + ActivateEntity(iRelay); + SetVariantString("!activator"); + AcceptEntityInput(iRelay, "SetParent", iKnife); + + // Game UI + int iUI = CreateEntityByName("game_ui"); + Format(sBuffer, sizeof(sBuffer), "vort_ui_%d", g_iCounter); + DispatchKeyValue(iUI, "targetname", sBuffer); + DispatchKeyValue(iUI, "spawnflags", "0"); + DispatchKeyValue(iUI, "FieldOfView", "-1.0"); + Format(sBuffer, sizeof(sBuffer), "vort_relay_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyValue(iUI, "PressedAttack2", sBuffer); + DispatchSpawn(iUI); + ActivateEntity(iUI); + SetVariantString("!activator"); + AcceptEntityInput(iUI, "SetParent", iKnife); + + // beam start + int iBeamStart = CreateEntityByName("prop_dynamic_override"); + Format(sBuffer, sizeof(sBuffer), "vort_beam_start_%d", g_iCounter); + DispatchKeyValue(iBeamStart, "targetname", sBuffer); + DispatchKeyValue(iBeamStart, "model", "models/props/cs_italy/bananna.mdl"); + DispatchKeyValue(iBeamStart, "disableshadows", "1"); + DispatchKeyValue(iBeamStart, "disablereceiveshadows", "1"); + DispatchKeyValue(iBeamStart, "DisableBoneFollowers", "1"); + DispatchKeyValue(iBeamStart, "rendermode", "10"); + fOriginTemp[0] = fOrigin[0] + 29.0; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] - 8.0; + DispatchKeyValueVector(iBeamStart, "origin", fOriginTemp); + DispatchSpawn(iBeamStart); + ActivateEntity(iBeamStart); + SetVariantString("!activator"); + AcceptEntityInput(iBeamStart, "SetParent", iKnife); + + // beam end + int iBeamEnd = CreateEntityByName("prop_dynamic_override"); + Format(sBuffer, sizeof(sBuffer), "vort_beam_end_%d", g_iCounter); + DispatchKeyValue(iBeamEnd, "targetname", sBuffer); + DispatchKeyValue(iBeamEnd, "model", "models/props/cs_italy/bananna.mdl"); + DispatchKeyValue(iBeamEnd, "disableshadows", "1"); + DispatchKeyValue(iBeamEnd, "disablereceiveshadows", "1"); + DispatchKeyValue(iBeamEnd, "DisableBoneFollowers", "1"); + DispatchKeyValue(iBeamEnd, "rendermode", "10"); + fOriginTemp[0] = fOrigin[0] + 1743.0; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] - 8.0; + DispatchKeyValueVector(iBeamEnd, "origin", fOriginTemp); + DispatchSpawn(iBeamEnd); + ActivateEntity(iBeamEnd); + SetVariantString("!activator"); + AcceptEntityInput(iBeamEnd, "SetParent", iKnife); + + // Beam + int iBeam = CreateEntityByName("env_beam"); + Format(sBuffer, sizeof(sBuffer), "vort_beam_%d", g_iCounter); + DispatchKeyValue(iBeam, "targetname", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_beam_start_%d", g_iCounter); + DispatchKeyValue(iBeam, "LightningStart", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_beam_end_%d", g_iCounter); + DispatchKeyValue(iBeam, "LightningEnd", sBuffer); + DispatchKeyValue(iBeam, "BoltWidth", "3"); + DispatchKeyValue(iBeam, "NoiseAmplitude", "1"); + DispatchKeyValue(iBeam, "decalname", "Bigshot"); + DispatchKeyValue(iBeam, "framerate", "0"); + DispatchKeyValue(iBeam, "framestart", "0"); + DispatchKeyValue(iBeam, "life", "1"); + DispatchKeyValue(iBeam, "spawnflags", "48"); + DispatchKeyValue(iBeam, "TouchType", "1"); + DispatchKeyValue(iBeam, "rendercolor", "0 200 0"); + DispatchKeyValue(iBeam, "texture", "sprites/laserbeam.spr"); + DispatchSpawn(iBeam); + SetVariantString("!activator"); + AcceptEntityInput(iBeam, "SetParent", iKnife); + + // enable pickup trigger + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "Enable"); + + g_iCounter ++; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void VortigauntPickup(const char[] output, int caller, int activator, float delay) +{ + char sBuffer[128]; + Format(sBuffer, sizeof(sBuffer), "say ** %N has picked up Vortigaunt **", activator); + SetVariantString(sBuffer); + AcceptEntityInput(g_iConsole, "Command"); + + PrintToChat(activator, "Right Click to Pull Humans in front of you."); +} \ No newline at end of file