ftt: Add troll 'meow'

This commit is contained in:
Jackzie 2021-05-21 11:02:41 -05:00
parent 23c5672984
commit ccf2340d3c
No known key found for this signature in database
GPG key ID: 1E834FE36520537A
3 changed files with 26 additions and 12 deletions

View file

@ -243,7 +243,7 @@ public Action Command_PlaySound(int client, int args) {
PrecacheSound(arg2); PrecacheSound(arg2);
for (int i = 0; i < target_count; i++) { for (int i = 0; i < target_count; i++) {
target = target_list[i]; target = target_list[i];
if(IsClientConnected(target) && IsClientInGame(target)) { if(IsClientConnected(target) && IsClientInGame(target) && !IsFakeClient(target)) {
if(StrEqual(arg3, "direct")) if(StrEqual(arg3, "direct"))
ClientCommand(target, "playgamesound %s", arg2); ClientCommand(target, "playgamesound %s", arg2);
else else
@ -283,12 +283,14 @@ public Action Command_StopSound(int client, int args) {
int target; int target;
for (int i = 0; i < target_count; i++) { for (int i = 0; i < target_count; i++) {
target = target_list[i]; target = target_list[i];
if(IsClientConnected(target) && IsClientInGame(target) && !IsFakeClient(target)) {
if(args < 2) if(args < 2)
StopSound(target, 0, lastSound[target]); StopSound(target, 0, lastSound[target]);
else else
StopSound(target, 0, arg2); StopSound(target, 0, arg2);
} }
} }
}
return Plugin_Handled; return Plugin_Handled;
} }
public Action Command_SetClientModel(int client, int args) { public Action Command_SetClientModel(int client, int args) {
@ -451,7 +453,6 @@ public void OnClientDisconnect(int client) {
} }
} }
public void OnMapStart() { public void OnMapStart() {
AddFileToDownloadsTable("sound/custom/mariokartmusic.mp3");
PrecacheSound("sound/custom/mariokartmusic.mp3"); PrecacheSound("sound/custom/mariokartmusic.mp3");
HookEntityOutput("info_changelevel", "OnStartTouch", EntityOutput_OnStartTouchSaferoom); HookEntityOutput("info_changelevel", "OnStartTouch", EntityOutput_OnStartTouchSaferoom);

View file

@ -1,6 +1,6 @@
#define AUTOPUNISH_FLOW_MIN_DISTANCE 5000.0 #define AUTOPUNISH_FLOW_MIN_DISTANCE 5000.0
#define AUTOPUNISH_MODE_COUNT 3 #define AUTOPUNISH_MODE_COUNT 3
#define TROLL_MODE_COUNT 23 #define TROLL_MODE_COUNT 24
// //
enum trollMode { enum trollMode {
Troll_Reset = 0, //0 Troll_Reset = 0, //0
@ -25,8 +25,10 @@ enum trollMode {
Troll_DamageBoost, //19 Troll_DamageBoost, //19
Troll_TempHealthQuickDrain, //20 Troll_TempHealthQuickDrain, //20
Troll_VomitPlayer, //21 Troll_VomitPlayer, //21
Troll_VocalizeGag Troll_VocalizeGag,
Troll_Meow
} }
//TODO: Troll_Cat - play custom sounds
enum TrollModifier { enum TrollModifier {
TrollMod_None = 0, TrollMod_None = 0,
TrollMod_InstantFire = 1, TrollMod_InstantFire = 1,
@ -55,7 +57,8 @@ char TROLL_MODES_NAMES[TROLL_MODE_COUNT][32] = {
"Damage Boost", "Damage Boost",
"Temp Quick Drain", "Temp Quick Drain",
"Vomit Player", "Vomit Player",
"Vocalize Gag" "Vocalize Gag",
"Meow"
}; };
char TROLL_MODES_DESCRIPTIONS[TROLL_MODE_COUNT][128] = { char TROLL_MODES_DESCRIPTIONS[TROLL_MODE_COUNT][128] = {
"Resets the user, removes all troll effects", //0 "Resets the user, removes all troll effects", //0
@ -80,8 +83,10 @@ char TROLL_MODES_DESCRIPTIONS[TROLL_MODE_COUNT][128] = {
"Makes a player take more damage than normal", "Makes a player take more damage than normal",
"Makes a player's temporarily health drain very quickly", "Makes a player's temporarily health drain very quickly",
"Shortcut to sm_vomitplayer. vomits the player.", "Shortcut to sm_vomitplayer. vomits the player.",
"Prevents player from sending any vocalizations (even automatic)" "Prevents player from sending any vocalizations (even automatic)",
"Makes the player meow"
}; };
enum L4D2Infected enum L4D2Infected
{ {
L4D2Infected_None = 0, L4D2Infected_None = 0,
@ -134,6 +139,7 @@ void ApplyModeToClient(int client, int victim, trollMode mode, TrollModifier mod
case Troll_NoShove: {} case Troll_NoShove: {}
case Troll_SlowDrain: {} case Troll_SlowDrain: {}
case Troll_TempHealthQuickDrain: {} case Troll_TempHealthQuickDrain: {}
case Troll_Meow: {}
case Troll_VomitPlayer: { case Troll_VomitPlayer: {
L4D_CTerrorPlayer_OnVomitedUpon(victim, victim); L4D_CTerrorPlayer_OnVomitedUpon(victim, victim);
} }

View file

@ -67,6 +67,7 @@ public void OnPluginStart() {
HookEvent("player_disconnect", Event_PlayerDisconnect); HookEvent("player_disconnect", Event_PlayerDisconnect);
HookEvent("player_death", Event_PlayerDeath); HookEvent("player_death", Event_PlayerDeath);
HookEvent("triggered_car_alarm", Event_CarAlarm); HookEvent("triggered_car_alarm", Event_CarAlarm);
AddNormalSoundHook(view_as<NormalSHook>(SoundHook)); AddNormalSoundHook(view_as<NormalSHook>(SoundHook));
AutoExecConfig(true, "l4d2_feedthetrolls"); AutoExecConfig(true, "l4d2_feedthetrolls");
@ -88,6 +89,9 @@ public void OnMapEnd() {
UnhookEntityOutput("func_button", "OnPressed", Event_ButtonPress); UnhookEntityOutput("func_button", "OnPressed", Event_ButtonPress);
} }
public void OnMapStart() { public void OnMapStart() {
AddFileToDownloadsTable("sound/custom/meow1.mp3");
PrecacheSound("sound/custom/meow1.mp3");
lastButtonUser = -1; lastButtonUser = -1;
HookEntityOutput("func_button", "OnPressed", Event_ButtonPress); HookEntityOutput("func_button", "OnPressed", Event_ButtonPress);
CreateTimer(MAIN_TIMER_INTERVAL_S, Timer_Main, _, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE); CreateTimer(MAIN_TIMER_INTERVAL_S, Timer_Main, _, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
@ -137,7 +141,7 @@ public void Event_PanicEventCreate(Event event, const char[] name, bool dontBroa
} }
public void Event_CarAlarm(Event event, const char[] name, bool dontBroadcast) { public void Event_CarAlarm(Event event, const char[] name, bool dontBroadcast) {
int user = event.GetInt("userid"); int user = event.GetInt("userid");
int client = GetClientOfUserId(user; int client = GetClientOfUserId(user);
if(client) { if(client) {
PrintToChatAll("%N has alerted the horde!", client); PrintToChatAll("%N has alerted the horde!", client);
L4D2_RunScript("RushVictim(GetPlayerFromUserID(%d), %d)", user, 15000); L4D2_RunScript("RushVictim(GetPlayerFromUserID(%d), %d)", user, 15000);
@ -154,7 +158,7 @@ public Action L4D2_OnChooseVictim(int attacker, int &curTarget) {
if(hMagnetChance.FloatValue < GetRandomFloat()) return Plugin_Continue; if(hMagnetChance.FloatValue < GetRandomFloat()) return Plugin_Continue;
L4D2Infected class = view_as<L4D2Infected>(GetEntProp(attacker, Prop_Send, "m_zombieClass")); L4D2Infected class = view_as<L4D2Infected>(GetEntProp(attacker, Prop_Send, "m_zombieClass"));
int existingTarget = GetClientOfUserId(g_iAttackerTarget[attacker]); int existingTarget = GetClientOfUserId(g_iAttackerTarget[attacker]);
if(existingTarget > 0 && IsPlayerAlive(existingTarget) && (hMagnetTargetMode.IntValue & 1 != 1 || !IsPlayerIncapped(existingTarget)) { if(existingTarget > 0 && IsPlayerAlive(existingTarget) && (hMagnetTargetMode.IntValue & 1 != 1 || !IsPlayerIncapped(existingTarget))) {
if(class == L4D2Infected_Tank && (hMagnetTargetMode.IntValue % 2 != 2 || !IsPlayerIncapped(existingTarget))) { if(class == L4D2Infected_Tank && (hMagnetTargetMode.IntValue % 2 != 2 || !IsPlayerIncapped(existingTarget))) {
curTarget = existingTarget; curTarget = existingTarget;
return Plugin_Changed; return Plugin_Changed;
@ -373,6 +377,9 @@ public Action SoundHook(int[] clients, int& numClients, char sample[PLATFORM_MAX
return Plugin_Changed; return Plugin_Changed;
} else if(HasTrollMode(entity, Troll_VocalizeGag)) { } else if(HasTrollMode(entity, Troll_VocalizeGag)) {
return Plugin_Handled; return Plugin_Handled;
} else if(HasTrollMode(entity, Troll_Meow)) {
strcopy(sample, sizeof(sample), "custom/meow1.mp3");
return Plugin_Changed;
} }
} }