mirror of
https://github.com/Jackzmc/sourcemod-plugins.git
synced 2025-05-05 20:53:20 +00:00
l4d2_feedthetrolls: Minor cleanup
This commit is contained in:
parent
e5e7876bde
commit
e18e59689b
3 changed files with 43 additions and 57 deletions
Binary file not shown.
|
@ -56,7 +56,8 @@ char TROLL_MODES_DESCRIPTIONS[TROLL_MODE_COUNT][128] = {
|
|||
"Prevents a player from picking up ANY (new) item. Use ThrowItAll to make them drop",
|
||||
"Swarms a player with zombies. Requires swarm plugin"
|
||||
};
|
||||
int iTrollUsers[MAXPLAYERS+1];
|
||||
int g_iTrollUsers[MAXPLAYERS+1];
|
||||
bool g_bPendingItemGive[MAXPLAYERS+1];
|
||||
|
||||
//Applies the selected trollMode to the victim.
|
||||
//Modifiers are as followed: 0 -> Both (fire instant, and timer), 1 -> Fire Once, 2 -> Start timer
|
||||
|
@ -70,9 +71,11 @@ void ApplyModeToClient(int client, int victim, trollMode mode, TrollModifer modi
|
|||
bool hasActivationMod = (modifiers & ~TrollMod_InstantFire & ~TrollMod_Repeat) == TrollMod_None;
|
||||
|
||||
switch(mode) {
|
||||
case Troll_iCantSpellNoMore: {}
|
||||
|
||||
case Troll_Reset: {
|
||||
ShowActivity(client, "reset troll effects for %N. ", victim);
|
||||
iTrollUsers[victim] = Troll_Reset;
|
||||
g_iTrollUsers[victim] = Troll_Reset;
|
||||
return;
|
||||
}
|
||||
case Troll_SlowSpeed:
|
||||
|
@ -113,7 +116,7 @@ void ApplyModeToClient(int client, int victim, trollMode mode, TrollModifer modi
|
|||
float targPos[3];
|
||||
GetClientAbsOrigin(clients[i], targPos);
|
||||
SDKHooks_DropWeapon(victim, wpn, targPos);
|
||||
iTrollUsers[victim] = mode;
|
||||
g_iTrollUsers[victim] = mode;
|
||||
CreateTimer(0.2, Timer_GivePistol);
|
||||
return;
|
||||
}
|
||||
|
@ -124,6 +127,19 @@ void ApplyModeToClient(int client, int victim, trollMode mode, TrollModifer modi
|
|||
case Troll_CameTooEarly:
|
||||
//TODO: Implement modifier code
|
||||
ReplyToCommand(client, "This troll mode is not implemented.");
|
||||
case Troll_KillMeSoftly: {
|
||||
char wpn[32];
|
||||
GetClientWeaponName(victim, 4, wpn, sizeof(wpn));
|
||||
if(StrEqual(wpn, "weapon_adrendaline") || StrEqual(wpn, "weapon_pain_pills")) {
|
||||
ClientCommand(victim, "slot5");
|
||||
g_bPendingItemGive[victim] = true;
|
||||
}else{
|
||||
ReplyToCommand(client, "User does not have pills or adrendaline");
|
||||
return;
|
||||
}
|
||||
//TODO: Implement TrollMod_Repeat
|
||||
return;
|
||||
}
|
||||
case Troll_ThrowItAll: {
|
||||
if(!hasActivationMod || (modifiers | TrollMod_InstantFire) == TrollMod_InstantFire)
|
||||
ThrowAllItems(victim);
|
||||
|
@ -157,16 +173,16 @@ void ApplyModeToClient(int client, int victim, trollMode mode, TrollModifer modi
|
|||
ShowActivity(client, "activated troll mode \"%s\" on %N. ", TROLL_MODES_NAMES[mode], victim);
|
||||
//If instant fire mod not provided (aka instead of no modifiers which equals both) OR repeat turned on, set bit:
|
||||
if((modifiers | TrollMod_InstantFire) != TrollMod_InstantFire || ((modifiers | TrollMod_Repeat) == TrollMod_Repeat)) {
|
||||
iTrollUsers[victim] |= 1 << (view_as<int>(mode) - 1);
|
||||
g_iTrollUsers[victim] |= 1 << (view_as<int>(mode) - 1);
|
||||
}
|
||||
}
|
||||
|
||||
bool HasTrollMode(int client, trollMode mode) {
|
||||
return ((iTrollUsers[client] >> view_as<int>(mode) - 1) & 1) == 1;
|
||||
return ((g_iTrollUsers[client] >> view_as<int>(mode) - 1) & 1) == 1;
|
||||
}
|
||||
|
||||
void ToggleTrollMode(int client, trollMode mode) {
|
||||
iTrollUsers[client] ^= 1 << view_as<int>(mode) -1;
|
||||
g_iTrollUsers[client] ^= 1 << view_as<int>(mode) -1;
|
||||
}
|
||||
|
||||
void TurnOffTrollMode(int client, trollMode mode) {
|
||||
|
@ -176,7 +192,7 @@ void TurnOffTrollMode(int client, trollMode mode) {
|
|||
}
|
||||
|
||||
void ResetClient(int victim, bool wipe = true) {
|
||||
if(wipe) iTrollUsers[victim] = Troll_Reset;
|
||||
if(wipe) g_iTrollUsers[victim] = Troll_Reset;
|
||||
SetEntityGravity(victim, 1.0);
|
||||
SetEntPropFloat(victim, Prop_Send, "m_flLaggedMovementValue", 1.0);
|
||||
SDKUnhook(victim, SDKHook_WeaponCanUse, Event_ItemPickup);
|
||||
|
|
|
@ -26,15 +26,17 @@ public Plugin myinfo =
|
|||
version = PLUGIN_VERSION,
|
||||
url = ""
|
||||
};
|
||||
//HANDLES
|
||||
Handle hThrowTimer;
|
||||
//CONVARS
|
||||
ConVar hVictimsList, hThrowItemInterval, hAutoPunish;
|
||||
bool bTrollTargets[MAXPLAYERS+1], lateLoaded;
|
||||
int itrollMode = 0; //troll mode. 0 -> Slosdown | 1 -> Higher Gravity | 2 -> CameTooEarly | 3 -> UziRules
|
||||
//BOOLS
|
||||
bool lateLoaded; //Is plugin late loaded
|
||||
bool bChooseVictimAvailable = false; //For charge player feature, is it available?
|
||||
//INTEGERS
|
||||
int g_iAmmoTable; //Loads the ammo table to get ammo amounts
|
||||
int gChargerVictim = -1; //For charge player feature
|
||||
|
||||
int g_iAmmoTable;
|
||||
int gChargerVictim = -1;
|
||||
|
||||
bool bChooseVictimAvailable = false;
|
||||
|
||||
#include "feedthetrolls.inc"
|
||||
|
||||
|
@ -59,23 +61,28 @@ public void OnPluginStart() {
|
|||
hVictimsList.AddChangeHook(Change_VictimList);
|
||||
hThrowItemInterval = CreateConVar("sm_ftt_throw_interval", "30", "The interval in seconds to throw items. 0 to disable", FCVAR_NONE, true, 0.0);
|
||||
hThrowItemInterval.AddChangeHook(Change_ThrowInterval);
|
||||
hAutoPunish = CreateConVar("sm_autopunish_mode", "0", "Setup automatic punishment of players. Add bits together. 0: Disabled, 1: Early Crescendos", FCVAR_NONE, true, 0.0);
|
||||
hAutoPunish = CreateConVar("sm_ftt_autopunish_mode", "0", "Setup automatic punishment of players. Add bits together. 0: Disabled, 1: Early Crescendos", FCVAR_NONE, true, 0.0);
|
||||
|
||||
RegAdminCmd("sm_ftl", Command_ListTheTrolls, ADMFLAG_ROOT, "Lists all the trolls currently ingame.");
|
||||
RegAdminCmd("sm_ftm", Command_ListModes, ADMFLAG_ROOT, "Lists all the troll modes and their description");
|
||||
RegAdminCmd("sm_ftr", Command_ResetUser, ADMFLAG_ROOT, "Resets user of any troll effects.");
|
||||
RegAdminCmd("sm_fta", Command_ApplyUser, ADMFLAG_ROOT, "Apply a troll mod to a player, or shows menu if no parameters.");
|
||||
|
||||
AutoExecConfig(true, "l4d2_feedthetrolls");
|
||||
|
||||
if(lateLoaded) {
|
||||
UpdateTrollTargets();
|
||||
CreateTimer(MAIN_TIMER_INTERVAL_S, Timer_Main, _, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
|
||||
HookEntityOutput("func_button", "OnPressed", Event_ButtonPress);
|
||||
}
|
||||
HookEntityOutput("func_button", "OnPressed", Event_ButtonPress);
|
||||
}
|
||||
public void OnPluginEnd() {
|
||||
UnhookEntityOutput("func_button", "OnPressed", Event_ButtonPress);
|
||||
}
|
||||
public void OnMapEnd() {
|
||||
UnhookEntityOutput("func_button", "OnPressed", Event_ButtonPress);
|
||||
}
|
||||
public void OnMapStart() {
|
||||
HookEntityOutput("func_button", "OnPressed", Event_ButtonPress);
|
||||
CreateTimer(MAIN_TIMER_INTERVAL_S, Timer_Main, _, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
|
||||
}
|
||||
public void OnClientAuthorized(int client, const char[] auth) {
|
||||
|
@ -83,12 +90,8 @@ public void OnClientAuthorized(int client, const char[] auth) {
|
|||
TestForTarget(client, auth);
|
||||
}
|
||||
}
|
||||
public void OnClientDisconnect(int client) {
|
||||
bTrollTargets[client] = false;
|
||||
}
|
||||
// #region evrnts
|
||||
public void Change_VictimList(ConVar convar, const char[] oldValue, const char[] newValue) {
|
||||
UpdateTrollTargets();
|
||||
}
|
||||
public void Change_ThrowInterval(ConVar convar, const char[] oldValue, const char[] newValue) {
|
||||
//If a throw timer exists (someone has mode 11), destroy & recreate w/ new interval
|
||||
|
@ -125,7 +128,7 @@ public Action Command_ResetUser(int client, int args) {
|
|||
}
|
||||
for (int i = 0; i < target_count; i++)
|
||||
{
|
||||
ResetClient(target_list[i]);
|
||||
ResetClient(target_list[i], true);
|
||||
ShowActivity(client, "reset troll effects on \"%N\". ", target_list[i]);
|
||||
}
|
||||
}
|
||||
|
@ -189,8 +192,8 @@ public Action Command_ListModes(int client, int args) {
|
|||
public Action Command_ListTheTrolls(int client, int args) {
|
||||
int count = 0;
|
||||
for(int i = 1; i < MaxClients; i++) {
|
||||
if(IsClientConnected(i) && IsPlayerAlive(i) && iTrollUsers[i] > 0) {
|
||||
int modes = iTrollUsers[i], modeCount = 0;
|
||||
if(IsClientConnected(i) && IsPlayerAlive(i) && g_iTrollUsers[i] > 0) {
|
||||
int modes = g_iTrollUsers[i], modeCount = 0;
|
||||
char modeListArr[TROLL_MODE_COUNT][32];
|
||||
for(int mode = 1; mode < TROLL_MODE_COUNT; mode++) {
|
||||
//If troll mode exists:
|
||||
|
@ -453,7 +456,7 @@ public Action Timer_Main(Handle timer) {
|
|||
static int loop;
|
||||
for(int i = 1; i < MaxClients; i++) {
|
||||
if(IsClientConnected(i) && IsClientInGame(i) && IsPlayerAlive(i)) {
|
||||
switch(iTrollUsers[i]) {
|
||||
switch(g_iTrollUsers[i]) {
|
||||
case Troll_SlowDrain:
|
||||
if(loop % 4 == 0) {
|
||||
int hp = GetClientHealth(i);
|
||||
|
@ -533,38 +536,6 @@ void ThrowAllItems(int victim) {
|
|||
}
|
||||
|
||||
|
||||
bool ApplyModeToTargets() {
|
||||
int users = 0;
|
||||
for(int i=1; i < MaxClients; i++) {
|
||||
if(bTrollTargets[i]) {
|
||||
users++;
|
||||
//clear effects from previous troll:
|
||||
SetEntityGravity(i, 1.0);
|
||||
SetEntPropFloat(i, Prop_Send, "m_flLaggedMovementValue", 1.0);
|
||||
|
||||
if(itrollMode == 0) { //slow mode, apply slow down affects
|
||||
SetEntPropFloat(i, Prop_Send, "m_flLaggedMovementValue", 0.8);
|
||||
}else if(itrollMode == 1) { //higher gravity
|
||||
SetEntityGravity(i, 1.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
//Stop loop if no one is being affected.
|
||||
return (users == 0) ? true : false;
|
||||
|
||||
}
|
||||
void UpdateTrollTargets() {
|
||||
for(int i = 1; i <= MaxClients; i++) {
|
||||
bTrollTargets[i] = false;
|
||||
if(IsClientInGame(i) && IsClientAuthorized(i)) {
|
||||
if(!IsFakeClient(i)) {
|
||||
char auth[64];
|
||||
GetClientAuthId(i, AuthId_Steam2, auth, sizeof(auth));
|
||||
TestForTarget(i, auth);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
bool TestForTarget(int client, const char[] auth) {
|
||||
char targets[32][8];
|
||||
char raw_targets[64];
|
||||
|
@ -575,7 +546,6 @@ bool TestForTarget(int client, const char[] auth) {
|
|||
#if defined debug
|
||||
PrintToServer("[Debug] Troll target detected with id %d and steamid %s", client, auth);
|
||||
#endif
|
||||
bTrollTargets[client] = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue