mirror of
https://github.com/Jackzmc/sourcemod-plugins.git
synced 2025-05-06 16:43:21 +00:00
Implement combos
This commit is contained in:
parent
fbd432fc1c
commit
ebad0b40d2
7 changed files with 166 additions and 10 deletions
60
scripting/include/feedthetrolls/combos.inc
Normal file
60
scripting/include/feedthetrolls/combos.inc
Normal file
|
@ -0,0 +1,60 @@
|
|||
|
||||
ArrayList combos;
|
||||
|
||||
enum struct SpecifiedTroll {
|
||||
int id;
|
||||
trollModifier mod;
|
||||
int flags;
|
||||
}
|
||||
enum struct TrollCombo {
|
||||
char name[32];
|
||||
ArrayList trolls;
|
||||
|
||||
void AddTroll(const char[] name, int flags = 0, trollModifier mod = TrollMod_Invalid) {
|
||||
int id = GetTrollID(name);
|
||||
if(mod == TrollMod_Invalid) mod = Trolls[id].GetDefaultMod();
|
||||
SpecifiedTroll troll;
|
||||
troll.id = id;
|
||||
troll.mod = mod;
|
||||
troll.flags = flags;
|
||||
this.trolls.PushArray(troll, sizeof(troll));
|
||||
}
|
||||
|
||||
void Activate(int client, int target) {
|
||||
for(int i = 0; i < this.trolls.Length; i++) {
|
||||
SpecifiedTroll troll;
|
||||
this.trolls.GetArray(i, troll, sizeof(troll));
|
||||
Trolls[troll.id].Activate(target, client, troll.mod, troll.flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCombo(TrollCombo combo, const char[] name) {
|
||||
strcopy(combo.name, sizeof(combo.name), name);
|
||||
combo.trolls = new ArrayList(sizeof(SpecifiedTroll));
|
||||
combos.PushArray(combo, sizeof(combo));
|
||||
}
|
||||
|
||||
void SetupsTrollCombos() {
|
||||
combos = new ArrayList(sizeof(TrollCombo));
|
||||
|
||||
TrollCombo combo;
|
||||
SetupCombo(combo, "Magnet Galore");
|
||||
combo.AddTroll("Special Magnet");
|
||||
combo.AddTroll("Tank Magnet");
|
||||
combo.AddTroll("Witch Magnet");
|
||||
|
||||
SetupCombo(combo, "Tank Run Noob");
|
||||
combo.AddTroll("Slow Speed");
|
||||
combo.AddTroll("Tank Magnet");
|
||||
|
||||
SetupCombo(combo, "Nuclear");
|
||||
combo.AddTroll("Slow Speed");
|
||||
combo.AddTroll("Special Magnet");
|
||||
combo.AddTroll("Tank Magnet");
|
||||
combo.AddTroll("Witch Magnet");
|
||||
combo.AddTroll("Reverse FF", .flags=2);
|
||||
combo.AddTroll("Vomit Player");
|
||||
|
||||
PrintToServer("[FTT] Loaded %d troll combos", combos.Length);
|
||||
}
|
|
@ -224,7 +224,7 @@ public Action Command_ResetUser(int client, int args) {
|
|||
public Action Command_ApplyUser(int client, int args) {
|
||||
if(args < 1) {
|
||||
SilentMenuSelected[client] = false;
|
||||
ShowTrollMenu(client);
|
||||
ShowTrollMenu(client, false);
|
||||
}else{
|
||||
char arg1[32], arg2[16];
|
||||
GetCmdArg(1, arg1, sizeof(arg1));
|
||||
|
@ -266,10 +266,39 @@ public Action Command_ApplyUser(int client, int args) {
|
|||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public Action Command_ApplyComboTrolls(int client, int args) {
|
||||
if(args < 1) {
|
||||
ShowTrollMenu(client, true);
|
||||
}else{
|
||||
char arg1[32];
|
||||
GetCmdArg(1, arg1, sizeof(arg1));
|
||||
|
||||
static char target_name[MAX_TARGET_LENGTH];
|
||||
int target_list[1], target_count;
|
||||
bool tn_is_ml;
|
||||
if ((target_count = ProcessTargetString(
|
||||
arg1,
|
||||
client,
|
||||
target_list,
|
||||
1,
|
||||
COMMAND_FILTER_NO_MULTI,
|
||||
target_name,
|
||||
sizeof(target_name),
|
||||
tn_is_ml)) <= 0
|
||||
&& target_list[0] > 0) {
|
||||
/* This function replies to the admin with a failure message */
|
||||
ReplyToTargetError(client, target_count);
|
||||
return Plugin_Handled;
|
||||
}
|
||||
ShowTrollCombosMenu(client, target_list[0]);
|
||||
}
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public Action Command_ApplyUserSilent(int client, int args) {
|
||||
if(args < 1) {
|
||||
SilentMenuSelected[client] = true;
|
||||
ShowTrollMenu(client);
|
||||
ShowTrollMenu(client, false);
|
||||
}else{
|
||||
char arg1[32], arg2[16];
|
||||
GetCmdArg(1, arg1, sizeof(arg1));
|
||||
|
|
|
@ -80,10 +80,49 @@ public int ChoosePlayerHandler(Menu menu, MenuAction action, int param1, int par
|
|||
delete menu;
|
||||
}
|
||||
|
||||
public int ChoosePlayerHandlerForCombos(Menu menu, MenuAction action, int client, int param2) {
|
||||
if (action == MenuAction_Select) {
|
||||
static char info[8];
|
||||
menu.GetItem(param2, info, sizeof(info));
|
||||
int userid = StringToInt(info);
|
||||
int victim = GetClientOfUserId(userid);
|
||||
|
||||
if(victim == 0) {
|
||||
ReplyToCommand(victim, "FTT: Could not acquire player");
|
||||
return;
|
||||
}
|
||||
|
||||
ShowTrollCombosMenu(client, userid);
|
||||
} else if (action == MenuAction_End)
|
||||
delete menu;
|
||||
}
|
||||
|
||||
public int ChooseComboHandler(Menu menu, MenuAction action, int client, int param2) {
|
||||
if (action == MenuAction_Select) {
|
||||
static char info[16];
|
||||
menu.GetItem(param2, info, sizeof(info));
|
||||
static char str[2][8];
|
||||
ExplodeString(info, "|", str, 2, 8, false);
|
||||
int userid = StringToInt(str[0]);
|
||||
int victim = GetClientOfUserId(userid);
|
||||
int comboID = StringToInt(str[1]);
|
||||
|
||||
if(victim == 0) {
|
||||
ReplyToCommand(client, "FTT: Could not acquire player");
|
||||
return;
|
||||
}
|
||||
|
||||
static TrollCombo combo;
|
||||
combos.GetArray(comboID, combo, sizeof(combo));
|
||||
combo.Activate(client, victim);
|
||||
} else if (action == MenuAction_End)
|
||||
delete menu;
|
||||
}
|
||||
|
||||
static int iMenuVictimID[MAXPLAYERS+1];
|
||||
public int ChooseCategoryHandler(Menu menu, MenuAction action, int param1, int param2) {
|
||||
if (action == MenuAction_Cancel && param2 == MenuCancel_ExitBack)
|
||||
ShowTrollMenu(param1);
|
||||
ShowTrollMenu(param1, false);
|
||||
else if (action == MenuAction_Select) {
|
||||
static char info[32];
|
||||
menu.GetItem(param2, info, sizeof(info));
|
||||
|
@ -299,8 +338,32 @@ void SetupCategoryMenu(int client, int victimUserID) {
|
|||
categoryMenu.Display(client, 0);
|
||||
}
|
||||
|
||||
void ShowTrollMenu(int client) {
|
||||
Menu menu = new Menu(ChoosePlayerHandler);
|
||||
void ShowTrollCombosMenu(int client, int victimUserID) {
|
||||
Menu comboMenu = new Menu(ChooseComboHandler);
|
||||
static char id[32];
|
||||
Format(id, sizeof(id), "%N: Choose troll combo", GetClientOfUserId(victimUserID));
|
||||
comboMenu.SetTitle(id);
|
||||
|
||||
static TrollCombo combo;
|
||||
|
||||
if(combos.Length == 0) {
|
||||
ReplyToCommand(client, "FTT: No troll combos available");
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0; i < combos.Length; i++) {
|
||||
combos.GetArray(i, combo, sizeof(combo));
|
||||
Format(id, sizeof(id), "%d|%d", victimUserID, i);
|
||||
comboMenu.AddItem(id, combo.name);
|
||||
}
|
||||
|
||||
comboMenu.ExitButton = true;
|
||||
comboMenu.ExitBackButton = true;
|
||||
comboMenu.Display(client, 0);
|
||||
}
|
||||
|
||||
void ShowTrollMenu(int client, bool isComboList) {
|
||||
Menu menu = isComboList ? new Menu(ChoosePlayerHandlerForCombos) : new Menu(ChoosePlayerHandler);
|
||||
menu.SetTitle("Choose a player to troll");
|
||||
static char userid[8], display[32];
|
||||
for(int i = 1; i <= MaxClients; i++) {
|
||||
|
|
|
@ -34,9 +34,9 @@ bool ToggleMarkPlayer(int client, int target) {
|
|||
ShowActivityEx(client, "[FTT] ", "unmarked %N as troll", target);
|
||||
return true;
|
||||
}else{
|
||||
AdminId admin_client = GetUserAdmin(client);
|
||||
AdminId admin_target = GetUserAdmin(target);
|
||||
if(admin_client != INVALID_ADMIN_ID && admin_target == INVALID_ADMIN_ID ) {
|
||||
bool isClientAdmin = GetUserAdmin(client) != INVALID_ADMIN_ID;
|
||||
bool isTargetAdmin = GetUserAdmin(target) != INVALID_ADMIN_ID;
|
||||
if(isClientAdmin && !isTargetAdmin) {
|
||||
Call_StartForward(g_PlayerMarkedForward);
|
||||
Call_PushCell(client);
|
||||
Call_PushCell(target);
|
||||
|
|
|
@ -95,6 +95,7 @@ void SetupTrolls() {
|
|||
Trolls[i].activeFlagClients[j] = -1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void AddMagnetFlags(int index) {
|
||||
|
|
|
@ -45,6 +45,7 @@ char steamids[MAXPLAYERS+1][64];
|
|||
|
||||
#include <feedthetrolls/base>
|
||||
#include <feedthetrolls/trolls>
|
||||
#include <feedthetrolls/combos>
|
||||
#include <feedthetrolls/specials>
|
||||
#include <feedthetrolls/misc>
|
||||
#include <feedthetrolls/commands>
|
||||
|
|
|
@ -45,6 +45,7 @@ public void OnPluginStart() {
|
|||
REPLACEMENT_PHRASES = new StringMap();
|
||||
LoadPhrases();
|
||||
SetupTrolls();
|
||||
SetupsTrollCombos();
|
||||
|
||||
// Witch target overwrite stuff:
|
||||
|
||||
|
@ -73,7 +74,8 @@ public void OnPluginStart() {
|
|||
RegAdminCmd("sm_ftas", Command_ApplyUserSilent, ADMFLAG_CHEATS, "Apply a troll mod to a player, or shows menu if no parameters.");
|
||||
RegAdminCmd("sm_ftt", Command_FeedTheTrollMenu, ADMFLAG_KICK, "Opens a list that shows all the commands");
|
||||
RegAdminCmd("sm_mark", Command_MarkPendingTroll, ADMFLAG_KICK, "Marks a player as to be banned on disconnect");
|
||||
RegAdminCmd("sm_ftc", Command_FeedTheCrescendoTroll, ADMFLAG_KICK, "Applies a manual punish on the last crescendo activator");
|
||||
RegAdminCmd("sm_ftp", Command_FeedTheCrescendoTroll, ADMFLAG_KICK, "Applies a manual punish on the last crescendo activator");
|
||||
RegAdminCmd("sm_ftc", Command_ApplyComboTrolls, ADMFLAG_KICK, "Applies predefined combinations of trolls");
|
||||
RegAdminCmd("sm_witch_attack", Command_WitchAttack, ADMFLAG_CHEATS, "Makes all witches target a player");
|
||||
RegAdminCmd("sm_insta", Command_InstaSpecial, ADMFLAG_KICK, "Spawns a special that targets them, close to them.");
|
||||
RegAdminCmd("sm_instaface", Command_InstaSpecialFace, ADMFLAG_KICK, "Spawns a special that targets them, right in their face.");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue