sm-plugins/ItemSpawn/scripting/ItemSpawn.sp

270 lines
12 KiB
SourcePawn
Raw Normal View History

2018-08-04 17:30:59 +02:00
#pragma newdecls required
#include <sourcemod>
#include <sdktools>
#include <zombiereloaded>
#pragma semicolon 1
2018-08-04 17:30:59 +02:00
int g_iConsole;
int g_iCounter = 0;
2018-08-04 17:30:59 +02:00
#include "items\balrog.inc"
#include "items\doghuman.inc"
#include "items\tnt.inc"
#include "items\vortigaunt.inc"
2018-08-07 21:54:11 +02:00
#include "items\whiteknight.inc"
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Plugin myinfo =
{
name = "ItemSpawn",
author = "Neon",
description = "",
2018-08-02 12:13:03 +02:00
version = "1.1",
url = "https://steamcommunity.com/id/n3ontm"
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnPluginStart()
{
HookEvent("round_start", OnRoundStart, EventHookMode_Post);
2018-08-04 17:30:59 +02:00
2018-07-30 23:09:08 +02:00
RegAdminCmd("sm_tnt", Command_TNT, ADMFLAG_KICK);
2018-08-04 17:30:59 +02:00
RegAdminCmd("sm_balrog", Command_Balrog, ADMFLAG_KICK);
2018-08-03 16:17:09 +02:00
RegAdminCmd("sm_humandog", Command_HumanDog, ADMFLAG_KICK);
2018-08-04 17:30:59 +02:00
RegAdminCmd("sm_vortigaunt", Command_Vortigaunt, ADMFLAG_KICK);
2018-08-07 21:54:11 +02:00
RegAdminCmd("sm_whiteknight", Command_WhiteKnight, ADMFLAG_KICK);
2018-08-11 16:36:11 +02:00
2018-08-08 17:36:02 +02:00
LoadTranslations("common.phrases");
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnMapStart()
{
// Yeeaass (Physbox model)
PrecacheModel("models/props/cs_militia/crate_extrasmallmill.mdl");
// Balrog
2018-08-04 17:30:59 +02:00
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");
2018-08-02 12:13:03 +02:00
2018-08-03 16:17:09 +02:00
// Dog
2018-08-04 17:30:59 +02:00
PrecacheModel("models/player/pil/re1/dog/dog_pil.mdl");
2018-08-03 16:17:09 +02:00
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");
2018-08-04 17:30:59 +02:00
// Dog Poo
PrecacheModel("models/poo/curlygpoo.mdl");
2018-08-03 16:17:09 +02:00
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");
2018-08-07 21:54:11 +02:00
// 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:
//----------------------------------------------------------------------------------------------------
2018-08-04 17:30:59 +02:00
stock int CreateEntityAtOrigin(const char[] classname, const float origin[3])
{
2018-08-07 21:54:11 +02:00
int entity = CreateEntityByName(classname);
TeleportEntity(entity, origin, NULL_VECTOR, NULL_VECTOR);
2018-08-04 17:30:59 +02:00
return entity;
}
2018-08-03 16:17:09 +02:00
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
2018-08-04 17:30:59 +02:00
stock bool DispatchKeyFormat(int entity, const char[] key, const char[] value, any ...)
2018-08-03 16:17:09 +02:00
{
2018-08-04 17:30:59 +02:00
char buffer[1024];
VFormat(buffer, sizeof(buffer), value, 4);
2018-07-30 23:09:08 +02:00
2018-08-07 21:54:11 +02:00
DispatchKeyValue(entity, key, buffer);
2018-07-30 23:09:08 +02:00
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
2018-08-04 17:30:59 +02:00
stock void SpawnAndActivate(int entity)
2018-07-30 23:09:08 +02:00
{
2018-08-04 17:30:59 +02:00
DispatchSpawn(entity);
ActivateEntity(entity);
}
2018-08-03 16:17:09 +02:00
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
2018-08-04 17:30:59 +02:00
stock void ParentToEntity(int entity, int parent)
2018-08-03 16:17:09 +02:00
{
SetVariantString("!activator");
2018-08-04 17:30:59 +02:00
AcceptEntityInput(entity, "SetParent", parent, parent);
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
2018-08-04 17:30:59 +02:00
stock void SetEntityBBox(int entity, const float mins[3], const float maxs[3])
{
2018-08-04 17:30:59 +02:00
SetEntPropVector(entity, Prop_Send, "m_vecMins", mins);
SetEntPropVector(entity, Prop_Send, "m_vecMaxs", maxs);
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
2018-08-07 21:54:11 +02:00
stock void SetEntityProps(int entity)
{
2018-08-04 17:30:59 +02:00
SetEntProp(entity, Prop_Send, "m_nSolidType", 3);
SetEntProp(entity, Prop_Send, "m_fEffects", 32);
2018-08-02 12:13:03 +02:00
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
2018-08-04 17:30:59 +02:00
public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast)
2018-08-02 12:13:03 +02:00
{
2018-08-04 17:30:59 +02:00
g_iCounter = 0;
2018-08-02 12:13:03 +02:00
2018-08-04 17:30:59 +02:00
// player_weaponstrip.
int iPlayerStrip = CreateEntityByName("player_weaponstrip");
2018-08-11 16:36:11 +02:00
DispatchKeyFormat(iPlayerStrip, "targetname", "item_spawn_weaponstrip");
2018-08-04 17:30:59 +02:00
SpawnAndActivate(iPlayerStrip);
2018-08-02 12:13:03 +02:00
2018-08-04 17:30:59 +02:00
// player_speedmod.
int iPlayerSpeed = CreateEntityByName("player_speedmod");
2018-08-11 16:36:11 +02:00
DispatchKeyFormat(iPlayerSpeed, "targetname", "item_spawn_speedmod");
2018-08-04 17:30:59 +02:00
SpawnAndActivate(iPlayerSpeed);
2018-08-02 12:13:03 +02:00
// filter_activator_class nodamage.
int iNoDamageFilter = CreateEntityByName("filter_activator_class");
2018-08-12 16:43:30 +02:00
DispatchKeyFormat(iNoDamageFilter, "targetname", "item_filter_nodamage");
DispatchKeyFormat(iNoDamageFilter, "Negated", "0");
DispatchKeyFormat(iNoDamageFilter, "filterclass", "light");
SpawnAndActivate(iNoDamageFilter);
2018-08-12 16:43:30 +02:00
// 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 iHumanFilter4 = CreateEntityByName("filter_multi");
DispatchKeyFormat(iHumanFilter4, "targetname", "item_filter_zombies");
DispatchKeyFormat(iHumanFilter4, "Negated", "0");
DispatchKeyFormat(iHumanFilter4, "filtertype", "1");
DispatchKeyFormat(iHumanFilter4, "filter01", "item_filter_zombie");
DispatchKeyFormat(iHumanFilter4, "filter02", "item_filter_zombie_items");
SpawnAndActivate(iHumanFilter4);
2018-08-03 16:17:09 +02:00
}