#pragma newdecls required #include #include #include #include #include #pragma semicolon 1 int g_iCounter = 0; bool g_bClientHasItem[MAXPLAYERS+1] = false; Handle g_hGetSlot; Handle g_hBumpWeapon; Handle g_hOnPickedUp; #include "items/balrog.inc" #include "items/doghuman.inc" #include "items/earth.inc" #include "items/jumper.inc" #include "items/tnt.inc" #include "items/vortigaunt.inc" #include "items/whiteknight.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_balrog", Command_Balrog, ADMFLAG_KICK); RegAdminCmd("sm_humandog", Command_HumanDog, ADMFLAG_KICK); RegAdminCmd("sm_earth", Command_Earth, ADMFLAG_KICK); RegAdminCmd("sm_jumper", Command_Jumper, ADMFLAG_KICK); RegAdminCmd("sm_tnt", Command_TNT, ADMFLAG_KICK); RegAdminCmd("sm_vortigaunt", Command_Vortigaunt, ADMFLAG_KICK); RegAdminCmd("sm_whiteknight", Command_WhiteKnight, ADMFLAG_KICK); LoadTranslations("common.phrases"); Handle hGameConf = LoadGameConfigFile("plugin.entWatch"); if(hGameConf == INVALID_HANDLE) { SetFailState("Couldn't load plugin.ItemSpawn game config!"); return; } if(GameConfGetOffset(hGameConf, "GetSlot") == -1) { delete hGameConf; SetFailState("Couldn't get GetSlot offset from game config!"); return; } if(GameConfGetOffset(hGameConf, "BumpWeapon") == -1) { delete hGameConf; SetFailState("Couldn't get BumpWeapon offset from game config!"); return; } if(GameConfGetOffset(hGameConf, "OnPickedUp") == -1) { delete hGameConf; SetFailState("Couldn't get OnPickedUp offset from game config!"); return; } // 320 CBaseCombatWeapon::GetSlot(void)const StartPrepSDKCall(SDKCall_Entity); if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "GetSlot")) { delete hGameConf; SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"GetSlot\" failed!"); return; } PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain); g_hGetSlot = EndPrepSDKCall(); // 397 CCSPlayer::BumpWeapon(CBaseCombatWeapon *) StartPrepSDKCall(SDKCall_Player); if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "BumpWeapon")) { delete hGameConf; SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"BumpWeapon\" failed!"); return; } PrepSDKCall_SetReturnInfo(SDKType_Bool, SDKPass_Plain); PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); g_hBumpWeapon = EndPrepSDKCall(); // 300 CBaseCombatWeapon::OnPickedUp(CBaseCombatCharacter *) StartPrepSDKCall(SDKCall_Entity); if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "OnPickedUp")) { delete hGameConf; SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"OnPickedUp\" failed!"); return; } PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); g_hOnPickedUp = EndPrepSDKCall(); if(g_hGetSlot == INVALID_HANDLE) { SetFailState("Couldn't prepare GetSlot SDKCall!"); return; } if(g_hGetSlot == INVALID_HANDLE) { SetFailState("Couldn't prepare BumpWeapon SDKCall!"); return; } if(g_hOnPickedUp == INVALID_HANDLE) { SetFailState("Couldn't prepare OnPickedUp SDKCall!"); return; } } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public void OnMapStart() { // Yeeaass (Physbox model) PrecacheModel("models/props/cs_militia/crate_extrasmallmill.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"); // 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"); // Earth Staff PrecacheModel("models/staff/staff.mdl"); AddFileToDownloadsTable("models/staff/staff.dx80.vtx"); AddFileToDownloadsTable("models/staff/staff.dx90.vtx"); AddFileToDownloadsTable("models/staff/staff.mdl"); AddFileToDownloadsTable("models/staff/staff.phy"); AddFileToDownloadsTable("models/staff/staff.sw.vtx"); AddFileToDownloadsTable("models/staff/staff.vvd"); AddFileToDownloadsTable("materials/models/Staff/staffofmagnus.vmt"); AddFileToDownloadsTable("materials/models/Staff/staffofmagnus.vtf"); // Earth Prop PrecacheModel("models/ffxii/earthmodel1.mdl"); AddFileToDownloadsTable("models/ffxii/earthmodel1.dx80.vtx"); AddFileToDownloadsTable("models/ffxii/earthmodel1.dx90.vtx"); AddFileToDownloadsTable("models/ffxii/earthmodel1.mdl"); AddFileToDownloadsTable("models/ffxii/earthmodel1.phy"); AddFileToDownloadsTable("models/ffxii/earthmodel1.sw.vtx"); AddFileToDownloadsTable("models/ffxii/earthmodel1.vvd"); AddFileToDownloadsTable("materials/models/ffxii/earthmodel1/rockwall01.vmt"); // 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"); // Vortigaunt PrecacheModel("models/vortigaunt_slave.mdl"); // WhiteKnight PrecacheModel("models/dog_jugger.mdl"); AddFileToDownloadsTable("models/dog_jugger.dx80.vtx"); AddFileToDownloadsTable("models/dog_jugger.dx90.vtx"); AddFileToDownloadsTable("models/dog_jugger.mdl"); AddFileToDownloadsTable("models/dog_jugger.sw.vtx"); AddFileToDownloadsTable("models/dog_jugger.vvd"); AddFileToDownloadsTable("materials/models/dog_gondor/dog_sheet.vmt"); AddFileToDownloadsTable("materials/models/dog_gondor/dog_sheet.vtf"); AddFileToDownloadsTable("materials/models/dog_gondor/dog_sheet_phong.vtf"); AddFileToDownloadsTable("materials/models/dog_gondor/eyeglass.vmt"); AddFileToDownloadsTable("materials/models/dog_gondor/eyeglass.vtf"); AddFileToDownloadsTable("materials/models/dog_gondor/weapon107_000_001.vmt"); AddFileToDownloadsTable("materials/models/dog_gondor/weapon107_000_001.vtf"); AddFileToDownloadsTable("materials/models/dog_gondor/weapon107_000_002.vtf"); } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- stock int CreateEntityAtOrigin(const char[] classname, const float origin[3]) { int entity = CreateEntityByName(classname); TeleportEntity(entity, origin, NULL_VECTOR, NULL_VECTOR); return entity; } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- stock bool DispatchKeyFormat(int entity, const char[] key, const char[] value, any ...) { char buffer[1024]; VFormat(buffer, sizeof(buffer), value, 4); DispatchKeyValue(entity, key, buffer); } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- stock void SpawnAndActivate(int entity) { DispatchSpawn(entity); ActivateEntity(entity); } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- stock void ParentToEntity(int entity, int parent) { SetVariantString("!activator"); AcceptEntityInput(entity, "SetParent", parent, parent); } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- stock void SetEntityBBox(int entity, const float mins[3], const float maxs[3]) { SetEntPropVector(entity, Prop_Send, "m_vecMins", mins); SetEntPropVector(entity, Prop_Send, "m_vecMaxs", maxs); } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- stock void SetEntityProps(int entity) { SetEntProp(entity, Prop_Send, "m_nSolidType", 3); SetEntProp(entity, Prop_Send, "m_fEffects", 32); } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- stock void AddItemFilter(int entity) { SDKHook(entity, SDKHook_StartTouch, OnTriggerTouch); SDKHook(entity, SDKHook_EndTouch, OnTriggerTouch); SDKHook(entity, SDKHook_Touch, OnTriggerTouch); } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public Action OnTriggerTouch(int trigger, int client) { return (IsValidClient(client) && g_bClientHasItem[client]) ? Plugin_Handled : Plugin_Continue; } //---------------------------------------------------------------------------------------------------- // 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"); } } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public bool IsValidClient(int client) { if (client <= 0) return false; if (client > GetMaxClients()) return false; if (!IsClientInGame(client)) return false; if (!IsClientAuthorized(client)) return false; return true; } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public void OnClientDisconnect(int client) { g_bClientHasItem[client] = false; } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) { for (int client = 1; client <= MaxClients; client++) { g_bClientHasItem[client] = false; } g_iCounter = 0; // player_weaponstrip. int iPlayerStrip = CreateEntityByName("player_weaponstrip"); DispatchKeyFormat(iPlayerStrip, "targetname", "item_spawn_weaponstrip"); SpawnAndActivate(iPlayerStrip); // player_speedmod. int iPlayerSpeed = CreateEntityByName("player_speedmod"); DispatchKeyFormat(iPlayerSpeed, "targetname", "item_spawn_speedmod"); SpawnAndActivate(iPlayerSpeed); // filter_activator_class nodamage. int iNoDamageFilter = CreateEntityByName("filter_activator_class"); DispatchKeyFormat(iNoDamageFilter, "targetname", "item_filter_nodamage"); DispatchKeyFormat(iNoDamageFilter, "Negated", "0"); DispatchKeyFormat(iNoDamageFilter, "filterclass", "light"); SpawnAndActivate(iNoDamageFilter); // filter_activator_team human. int iHumanFilter1 = CreateEntityByName("filter_activator_team"); DispatchKeyFormat(iHumanFilter1, "targetname", "item_filter_human"); DispatchKeyFormat(iHumanFilter1, "Negated", "0"); DispatchKeyFormat(iHumanFilter1, "filterteam", "3"); SpawnAndActivate(iHumanFilter1); // filter_activator_team human ignored. int iHumanFilter2 = CreateEntityByName("filter_activator_team"); DispatchKeyFormat(iHumanFilter2, "targetname", "item_filter_human_ignored"); DispatchKeyFormat(iHumanFilter2, "Negated", "1"); DispatchKeyFormat(iHumanFilter2, "filterteam", "3"); SpawnAndActivate(iHumanFilter2); // filter_damage_type human items. int iHumanFilter3 = CreateEntityByName("filter_damage_type"); DispatchKeyFormat(iHumanFilter3, "targetname", "item_filter_human_items"); DispatchKeyFormat(iHumanFilter3, "Negated", "0"); DispatchKeyFormat(iHumanFilter3, "damagetype", "512"); SpawnAndActivate(iHumanFilter3); // filter_multi humans. int iHumanFilter4 = CreateEntityByName("filter_multi"); DispatchKeyFormat(iHumanFilter4, "targetname", "item_filter_humans"); DispatchKeyFormat(iHumanFilter4, "Negated", "0"); DispatchKeyFormat(iHumanFilter4, "filtertype", "1"); DispatchKeyFormat(iHumanFilter4, "filter01", "item_filter_human"); DispatchKeyFormat(iHumanFilter4, "filter02", "item_filter_human_items"); SpawnAndActivate(iHumanFilter4); // filter_activator_team zombie. int iZombieFilter1 = CreateEntityByName("filter_activator_team"); DispatchKeyFormat(iZombieFilter1, "targetname", "item_filter_zombie"); DispatchKeyFormat(iZombieFilter1, "Negated", "0"); DispatchKeyFormat(iZombieFilter1, "filterteam", "2"); SpawnAndActivate(iZombieFilter1); // filter_activator_team zombie ignored. int iZombieFilter2 = CreateEntityByName("filter_activator_team"); DispatchKeyFormat(iZombieFilter2, "targetname", "item_filter_zombie_ignored"); DispatchKeyFormat(iZombieFilter2, "Negated", "1"); DispatchKeyFormat(iZombieFilter2, "filterteam", "2"); SpawnAndActivate(iZombieFilter2); // filter_damage_type zombie items. int iZombieFilter3 = CreateEntityByName("filter_damage_type"); DispatchKeyFormat(iZombieFilter3, "targetname", "item_filter_zombie_items"); DispatchKeyFormat(iZombieFilter3, "Negated", "0"); DispatchKeyFormat(iZombieFilter3, "damagetype", "128"); SpawnAndActivate(iZombieFilter3); // filter_multi zombies. int iZombieFilter4 = CreateEntityByName("filter_multi"); DispatchKeyFormat(iZombieFilter4, "targetname", "item_filter_zombies"); DispatchKeyFormat(iZombieFilter4, "Negated", "0"); DispatchKeyFormat(iZombieFilter4, "filtertype", "1"); DispatchKeyFormat(iZombieFilter4, "filter01", "item_filter_zombie"); DispatchKeyFormat(iZombieFilter4, "filter02", "item_filter_zombie_items"); SpawnAndActivate(iZombieFilter4); }