forked from UNLOZE/sm-plugins
Added DisguisePlugin, FunSuperAdmin and PropSpawner. Changed the flag used in them to g
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
"models"
|
||||
{
|
||||
"0"
|
||||
{
|
||||
"name" "Rock"
|
||||
"model" "models/props/de_inferno/de_inferno_boulder_01.mdl"
|
||||
}
|
||||
"1"
|
||||
{
|
||||
"name" "Antlion"
|
||||
"model" "models/antlion.mdl"
|
||||
}
|
||||
"2"
|
||||
{
|
||||
"name" "Barricade"
|
||||
"model" "models/props_wasteland/barricade001a.mdl"
|
||||
}
|
||||
"3"
|
||||
{
|
||||
"name" "Barrel"
|
||||
"model" "models/props_c17/oildrum001.mdl"
|
||||
}
|
||||
"4"
|
||||
{
|
||||
"name" "Beware of Dog Sign"
|
||||
"model" "models/props_lab/bewaredog.mdl"
|
||||
}
|
||||
"5"
|
||||
{
|
||||
"name" "Bicycle"
|
||||
"model" "models/props_junk/bicycle01a.mdl"
|
||||
}
|
||||
"6"
|
||||
{
|
||||
"name" "Cactus"
|
||||
"model" "models/props/de_inferno/cactus.mdl"
|
||||
}
|
||||
"7"
|
||||
{
|
||||
"name" "Wine Barrel"
|
||||
"model" "models/props/de_inferno/wine_barrel.mdl"
|
||||
}
|
||||
"8"
|
||||
{
|
||||
"name" "Zombie"
|
||||
"model" "models/zombie/classic.mdl"
|
||||
}
|
||||
"9"
|
||||
{
|
||||
"name" "Crow"
|
||||
"model" "models/crow.mdl"
|
||||
}
|
||||
"10"
|
||||
{
|
||||
"name" "Fern"
|
||||
"model" "models/props/cs_militia/fern01.mdl"
|
||||
}
|
||||
"11"
|
||||
{
|
||||
"name" "Float"
|
||||
"model" "models/props/de_nuke/lifepreserver.mdl"
|
||||
}
|
||||
"12"
|
||||
{
|
||||
"name" "Flower Barrel"
|
||||
"model" "models/props/de_inferno/flower_barrel.mdl"
|
||||
}
|
||||
"13"
|
||||
{
|
||||
"name" "Fruit Crate"
|
||||
"model" "models/props/de_inferno/crate_fruit_break.mdl"
|
||||
}
|
||||
"14"
|
||||
{
|
||||
"name" "Headcrab"
|
||||
"model" "models/headcrabclassic.mdl"
|
||||
}
|
||||
"15"
|
||||
{
|
||||
"name" "Mysterious Man"
|
||||
"model" "models/player.mdl"
|
||||
}
|
||||
"16"
|
||||
{
|
||||
"name" "Pigeon"
|
||||
"model" "models/pigeon.mdl"
|
||||
}
|
||||
"17"
|
||||
{
|
||||
"name" "Seagull"
|
||||
"model" "models/seagull.mdl"
|
||||
}
|
||||
"18"
|
||||
{
|
||||
"name" "Poison Headcrab"
|
||||
"model" "models/headcrabblack.mdl"
|
||||
}
|
||||
"19"
|
||||
{
|
||||
"name" "Small Statue"
|
||||
"model" "models/props_combine/breenbust.mdl"
|
||||
}
|
||||
"20"
|
||||
{
|
||||
"name" "Snowman Head"
|
||||
"model" "models/props/cs_office/snowman_face.mdl"
|
||||
}
|
||||
"21"
|
||||
{
|
||||
"name" "Turret"
|
||||
"model" "models/combine_turrets/floor_turret.mdl"
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,322 @@
|
||||
#pragma semicolon 1
|
||||
#include <sourcemod>
|
||||
#include <sdktools>
|
||||
|
||||
public Plugin myinfo =
|
||||
{
|
||||
name = "Disguise Plugin",
|
||||
author = "Moltard / LightningZLaser",
|
||||
description = "A plugin to disguise players",
|
||||
version = "0.1",
|
||||
url = "https://steamcommunity.com/id/0123456789ABC/"
|
||||
};
|
||||
|
||||
Menu g_MainMenu = null;
|
||||
Menu g_ModelsMenu = null;
|
||||
Menu g_PlayerMenuD = null;
|
||||
Menu g_PlayerMenuU = null;
|
||||
|
||||
KeyValues g_Models;
|
||||
|
||||
int DisguiseStatus[MAXPLAYERS + 1] = 0; // List of players that have a disguise
|
||||
char DisguisePickedOption[MAXPLAYERS + 1][32]; // Save the model id selected by the admin
|
||||
char OriginalPlayerModel[MAXPLAYERS + 1][128]; // Save the playermodel of the player before changing it
|
||||
|
||||
|
||||
public void OnPluginStart()
|
||||
{
|
||||
LoadTranslations("common.phrases");
|
||||
char sModelsFile[PLATFORM_MAX_PATH];
|
||||
BuildPath(Path_SM, sModelsFile, sizeof(sModelsFile), "configs/DisguisePlugin.cfg");
|
||||
|
||||
if(!FileExists(sModelsFile))
|
||||
{
|
||||
SetFailState("Could not find config: \"%s\"", sModelsFile);
|
||||
return;
|
||||
}
|
||||
|
||||
g_Models = new KeyValues("models");
|
||||
if(!g_Models.ImportFromFile(sModelsFile))
|
||||
{
|
||||
delete g_Models;
|
||||
SetFailState("ImportFromFile() failed!");
|
||||
return;
|
||||
}
|
||||
g_Models.Rewind(); // Go back to the root node
|
||||
|
||||
HookEvent("round_start", OnRoundStart, EventHookMode_PostNoCopy);
|
||||
RegAdminCmd("sm_disguise", Command_MainMenu, ADMFLAG_CHANGEMAP); //g
|
||||
}
|
||||
|
||||
public void OnMapStart()
|
||||
{
|
||||
g_Models.Rewind();
|
||||
g_MainMenu = BuildMainMenu();
|
||||
g_ModelsMenu = BuildModelsMenu();
|
||||
g_PlayerMenuD = InitPlayerMenu(true);
|
||||
g_PlayerMenuU = InitPlayerMenu(false);
|
||||
}
|
||||
|
||||
public void OnMapEnd()
|
||||
{
|
||||
if (g_MainMenu != null)
|
||||
{
|
||||
delete(g_MainMenu);
|
||||
g_MainMenu = null;
|
||||
}
|
||||
if (g_ModelsMenu != null)
|
||||
{
|
||||
delete(g_ModelsMenu);
|
||||
g_ModelsMenu = null;
|
||||
}
|
||||
if (g_PlayerMenuD != null)
|
||||
{
|
||||
delete(g_PlayerMenuD);
|
||||
g_PlayerMenuD = null;
|
||||
}
|
||||
if (g_PlayerMenuU != null)
|
||||
{
|
||||
delete(g_PlayerMenuU);
|
||||
g_PlayerMenuU = null;
|
||||
}
|
||||
}
|
||||
|
||||
public OnRoundStart(Handle event, const String:name[], bool dontBroadcast)
|
||||
{
|
||||
for (int i = 1; i <= (GetMaxClients()); i++)
|
||||
{
|
||||
if (IsValidEntity(i))
|
||||
{
|
||||
DisguiseStatus[i] = 0;
|
||||
OriginalPlayerModel[i] = "";
|
||||
DisguisePickedOption[i] = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void OnClientDisconnect(int client){
|
||||
DisguiseStatus[client] = 0;
|
||||
OriginalPlayerModel[client] = "";
|
||||
DisguisePickedOption[client] = "";
|
||||
}
|
||||
|
||||
/* ----------------------------------- */
|
||||
|
||||
Menu BuildMainMenu(){
|
||||
Menu menu = new Menu(MainMenuHandler);
|
||||
menu.SetTitle("Disguise Plugin");
|
||||
menu.AddItem("menu_disguise", "Disguise Player");
|
||||
menu.AddItem("menu_undisguise", "Undisguise Player");
|
||||
menu.ExitButton = true;
|
||||
return menu;
|
||||
}
|
||||
|
||||
|
||||
Menu BuildModelsMenu(){
|
||||
|
||||
g_Models.Rewind(); // Go back to the root node
|
||||
Menu menu;
|
||||
menu = new Menu(ModelsMenuHandler);
|
||||
menu.SetTitle("Select Disguise");
|
||||
menu.AddItem("menu_undisguise", "Undisguise");
|
||||
|
||||
for(int i = 0; i < 100000; i++){
|
||||
char sName[32]; char sIndex[11];
|
||||
IntToString(i,sIndex, sizeof(sIndex)); // Index i of the model
|
||||
if (!(g_Models.JumpToKey(sIndex, false))) // if the key doesnt exist
|
||||
break; // we stop the loop
|
||||
g_Models.GetString("name", sName, sizeof(sName)); // Name of the model
|
||||
menu.AddItem(sIndex,sName);
|
||||
g_Models.GoBack(); // First sub key of the model category
|
||||
}
|
||||
|
||||
g_Models.Rewind(); // Go back to the root node
|
||||
menu.ExitBackButton = true;
|
||||
menu.ExitButton = true;
|
||||
return menu;
|
||||
}
|
||||
|
||||
/* ----------------------------------- */
|
||||
|
||||
Menu InitPlayerMenu(bool bl_disguise){
|
||||
Menu menu = null;
|
||||
if(bl_disguise){
|
||||
menu = new Menu(DisguiseHandle);
|
||||
menu.SetTitle("Select Player to Disguise");
|
||||
}
|
||||
else{
|
||||
menu = new Menu(UndisguiseHandle);
|
||||
menu.SetTitle("Select Player to Undisguise");
|
||||
}
|
||||
menu.ExitBackButton = true;
|
||||
menu.ExitButton = true;
|
||||
return menu;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void BuildPlayerMenu(bool bl_disguise){
|
||||
|
||||
if(bl_disguise){ // If we come from the Disguise menu
|
||||
g_PlayerMenuD.RemoveAllItems();
|
||||
}
|
||||
else{ // If we come from the Undisguise
|
||||
g_PlayerMenuU.RemoveAllItems();
|
||||
}
|
||||
for (int i = 1; i <= GetMaxClients(); i++)
|
||||
{
|
||||
if ((IsClientInGame(i)) && IsPlayerAlive(i))
|
||||
{
|
||||
char sIndex[11];
|
||||
IntToString(GetClientSerial(i),sIndex, sizeof(sIndex)); // Serial of the player
|
||||
|
||||
char playerName[64]; char labelName[64];
|
||||
GetClientName(i, playerName, sizeof(playerName));
|
||||
if (DisguiseStatus[i] == 1)
|
||||
{
|
||||
Format(labelName,sizeof(labelName),"[DISGUISED] %s",playerName); // [DISGUISED] Name
|
||||
}
|
||||
else if (DisguiseStatus[i] == 0)
|
||||
{
|
||||
labelName = playerName; // Name
|
||||
}
|
||||
if(bl_disguise){ // If we come from the Disguise menu
|
||||
g_PlayerMenuD.AddItem(sIndex,labelName);
|
||||
}
|
||||
else{ // If we come from the Undisguise
|
||||
g_PlayerMenuU.AddItem(sIndex,labelName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ----------------------------------- */
|
||||
|
||||
public Action Command_MainMenu(int client, int args)
|
||||
{
|
||||
g_MainMenu.Display(client, MENU_TIME_FOREVER);
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public MainMenuHandler(Menu menu, MenuAction action, int client, int param2)
|
||||
{
|
||||
char info[32];
|
||||
menu.GetItem(param2, info, sizeof(info)); // Get the string of the picked option
|
||||
switch(action) {
|
||||
case(MenuAction_Select):
|
||||
{
|
||||
if(StrEqual(info, "menu_disguise")){
|
||||
g_ModelsMenu.Display(client, MENU_TIME_FOREVER);
|
||||
}
|
||||
else if(StrEqual(info, "menu_undisguise")){
|
||||
BuildPlayerMenu(false);
|
||||
g_PlayerMenuU.Display(client, MENU_TIME_FOREVER);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ModelsMenuHandler(Menu menu, MenuAction action, int client, int param2)
|
||||
{
|
||||
char info[32];
|
||||
menu.GetItem(param2, info, sizeof(info)); // Get the string of the picked option
|
||||
switch(action) {
|
||||
case(MenuAction_Select):
|
||||
{
|
||||
if(StrEqual(info, "menu_undisguise"))
|
||||
{
|
||||
BuildPlayerMenu(false);
|
||||
g_PlayerMenuU.Display(client, MENU_TIME_FOREVER);
|
||||
}
|
||||
else{
|
||||
// Info has the index of the model
|
||||
DisguisePickedOption[client] = info; // we set the index selected by the admin
|
||||
|
||||
BuildPlayerMenu(true);
|
||||
g_PlayerMenuD.Display(client, MENU_TIME_FOREVER);
|
||||
}
|
||||
}
|
||||
case(MenuAction_Cancel):
|
||||
{
|
||||
if(param2 == MenuCancel_ExitBack) {
|
||||
g_MainMenu.Display(client, MENU_TIME_FOREVER);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public DisguiseHandle(Menu menu, MenuAction action, int client, int param2)
|
||||
{
|
||||
char info[32]; // serial id of the player
|
||||
menu.GetItem(param2, info, sizeof(info)); // Get the string of the picked option
|
||||
switch(action) {
|
||||
case(MenuAction_Select):
|
||||
{
|
||||
int serialId = StringToInt(info);
|
||||
int playerId = GetClientFromSerial(serialId); // 0 if invalid
|
||||
if ((IsClientInGame(playerId)) && (IsPlayerAlive(playerId)) && playerId != 0){
|
||||
if(g_Models.JumpToKey(DisguisePickedOption[client], false)){
|
||||
if (DisguiseStatus[playerId] == 0){ // We set the status of the player to disguised
|
||||
GetClientModel(playerId, OriginalPlayerModel[playerId], 128);
|
||||
DisguiseStatus[playerId] = 1;
|
||||
}
|
||||
char sModelName[64];
|
||||
g_Models.GetString("name", sModelName, sizeof(sModelName)); // Name of the model
|
||||
|
||||
char sModelPath[128];
|
||||
g_Models.GetString("model", sModelPath, sizeof(sModelPath)); // Path of the model
|
||||
|
||||
PrecacheModel(sModelPath, false);
|
||||
SetEntityModel(playerId, sModelPath);
|
||||
|
||||
ShowActivity2(client, "\x01[SM] \x04", "\x01disguised %N (Model: \x04%s\x01).",playerId,sModelName);
|
||||
LogAction(client, -1, "\"%L\" disguised \"%L\" (Model: %s).", client,playerId,sModelName);
|
||||
}
|
||||
g_Models.Rewind();
|
||||
}
|
||||
BuildPlayerMenu(true);
|
||||
g_PlayerMenuD.Display(client, MENU_TIME_FOREVER); // Display again the player menu
|
||||
}
|
||||
case(MenuAction_Cancel):
|
||||
{
|
||||
if(param2 == MenuCancel_ExitBack) {
|
||||
DisguisePickedOption[client] = "";
|
||||
g_ModelsMenu.Display(client, MENU_TIME_FOREVER);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public UndisguiseHandle(Menu menu, MenuAction action, int client, int param2)
|
||||
{
|
||||
char info[32]; // serial id of the player
|
||||
menu.GetItem(param2, info, sizeof(info)); // Get the string of the picked option
|
||||
switch(action) {
|
||||
case(MenuAction_Select):
|
||||
{
|
||||
int serialId = StringToInt(info);
|
||||
int playerId = GetClientFromSerial(serialId); // 0 if invalid
|
||||
if ((IsClientInGame(playerId)) && (IsPlayerAlive(playerId)) && playerId != 0){
|
||||
if (DisguiseStatus[playerId] == 0){ // We set the status of the player to disguised
|
||||
PrintToChat(client, "\x01[SM]\x04 Player is not disguised");
|
||||
}
|
||||
else if (DisguiseStatus[playerId] == 1)
|
||||
{
|
||||
PrecacheModel(OriginalPlayerModel[playerId], false);
|
||||
SetEntityModel(playerId, OriginalPlayerModel[playerId]);
|
||||
DisguiseStatus[playerId] = 0;
|
||||
ShowActivity2(client, "\x01[SM] \x04", "\x01undisguised %N.",playerId);
|
||||
LogAction(client, -1, "\"%L\" undisguised \"%L\".", client,playerId);
|
||||
}
|
||||
}
|
||||
BuildPlayerMenu(false);
|
||||
g_PlayerMenuU.Display(client, MENU_TIME_FOREVER); // Display again the player menu
|
||||
}
|
||||
case(MenuAction_Cancel):
|
||||
{
|
||||
if(param2 == MenuCancel_ExitBack) {
|
||||
g_MainMenu.Display(client, MENU_TIME_FOREVER);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user