AlliedModders Donor
|
02-04-2009
, 22:14
Re: Model Menu
|
#288
|
This works for DOD: Source, without models.ini
However everyone can access the models
Can someone add custom 6 / t flag for members to access.
Code:
#include <sourcemod>
#include <sdktools>
//class = GetEntProp(client, Prop_Send, "m_iPlayerClass")
//0 = Rifleman
//1 = Assault
//2 = Support
//3 = Sniper
//4 = MG
//5 = Rocket
#define TEAM_AMER 2
#define TEAM_AXIS 3
#define MDL_SNOW_AMER "models/player/fragmasters/stars_camo_american/american_assault.mdl"
#define MDL_SNOW_AXIS "models/player/fragmasters/skimask/american_assault.mdl"
#define MDL_SUMMER_AMER "models/player/fragmasters/pow_soldier/american_assault.mdl"
#define MDL_SUMMER_AXIS "models/player/fragmasters/misfitsdod123/american_assault.mdl"
new Handle:playermodelskv
new Handle:cvarAnnounce = INVALID_HANDLE;
new String:authid[MAXPLAYERS+1][35]
new String: g_modelAmerName[][] =
{
"models/player/american_rifleman.mdl",
"models/player/american_assault.mdl",
"models/player/american_support.mdl",
"models/player/american_sniper.mdl",
"models/player/american_mg.mdl",
"models/player/american_rocket.mdl"
}
new String: g_modelAxisName[][] =
{
"models/player/german_rifleman.mdl",
"models/player/german_assault.mdl",
"models/player/german_support.mdl",
"models/player/german_sniper.mdl",
"models/player/german_mg.mdl",
"models/player/german_rocket.mdl"
}
public Plugin:myinfo =
{
name = "Model Choiser",
author = "-=[SWD]=- AmerKnife",
version = "1.0.0.1",
url = "http://www.polygon4.net/"
};
public OnPluginStart()
{
RegConsoleCmd("sm_models", Menu_Test1);
cvarAnnounce = CreateConVar("sm_modelmenu_announce", "1", "Announcement preferences");
HookEvent("player_spawn", Event_PlayerSpawn, EventHookMode_Post);
new String:file[256];
BuildPath(Path_SM, file, 255, "data/playermodels.ini");
playermodelskv = CreateKeyValues("Models");
FileToKeyValues(playermodelskv, file);
}
public OnClientPutInServer(client)
{
GetClientAuthString( client, authid[client], sizeof(authid[]) );
// Make the announcement in 30 seconds unless announcements are turned off
if(GetConVarBool(cvarAnnounce))
CreateTimer(30.0, TimerAnnounce, client);
}
public Action:TimerAnnounce(Handle:timer, any:client)
{
if(IsClientInGame(client))
PrintToChat(client, "Say !models or /models to set your models preferences");
}
public OnPluginEnd()
{
new String:file[256];
BuildPath(Path_SM, file, 255, "data/playermodels.ini");
KeyValuesToFile(playermodelskv, file);
CloseHandle(playermodelskv);
}
public OnMapStart()
{
new String:file[256];
BuildPath(Path_SM, file, 255, "configs/modeldownloads.ini");
new Handle:fileh = OpenFile(file, "r");
new String:buffer[256];
while (ReadFileLine(fileh, buffer, sizeof(buffer)))
{
new len = strlen(buffer)
if (buffer[len-1] == '\n')
buffer[--len] = '\0';
if (FileExists(buffer))
{
AddFileToDownloadsTable(buffer);
}
if (IsEndOfFile(fileh))
break;
}
PrecacheModel(MDL_SNOW_AMER, true);
PrecacheModel(MDL_SNOW_AXIS, true);
PrecacheModel(MDL_SUMMER_AMER, true);
PrecacheModel(MDL_SUMMER_AXIS, true);
for (new i = 0; i < 6; i++)
{
PrecacheModel(g_modelAmerName[i], true);
PrecacheModel(g_modelAxisName[i], true);
}
}
public Action:Menu_Test1(client, args)
{
new Handle:menu = CreateMenu(MenuHandler1);
SetMenuTitle(menu, "Choise Model");
if (GetClientTeam(client) == TEAM_AMER)
{
AddMenuItem(menu, MDL_SNOW_AMER, "American Camo Model");
AddMenuItem(menu, MDL_SUMMER_AMER, "PoW Soldier Model");
switch(GetEntProp(client, Prop_Send, "m_iPlayerClass"))
{
case 0:
{
AddMenuItem(menu, g_modelAmerName[0], "Standart Model")
}
case 1:
{
AddMenuItem(menu, g_modelAmerName[1], "Standart Model")
}
case 2:
{
AddMenuItem(menu, g_modelAmerName[2], "Standart Model")
}
case 3:
{
AddMenuItem(menu, g_modelAmerName[3], "Standart Model")
}
case 4:
{
AddMenuItem(menu, g_modelAmerName[4], "Standart Model")
}
case 5:
{
AddMenuItem(menu, g_modelAmerName[5], "Standart Model")
}
}
}
else if (GetClientTeam(client) == TEAM_AXIS)
{
AddMenuItem(menu, MDL_SNOW_AXIS, "Ski Masked Model");
AddMenuItem(menu, MDL_SUMMER_AXIS, "Misfits Model");
switch(GetEntProp(client, Prop_Send, "m_iPlayerClass"))
{
case 0:
{
AddMenuItem(menu, g_modelAxisName[0], "Standart Model")
}
case 1:
{
AddMenuItem(menu, g_modelAxisName[1], "Standart Model")
}
case 2:
{
AddMenuItem(menu, g_modelAxisName[2], "Standart Model")
}
case 3:
{
AddMenuItem(menu, g_modelAxisName[3], "Standart Model")
}
case 4:
{
AddMenuItem(menu, g_modelAxisName[4], "Standart Model")
}
case 5:
{
AddMenuItem(menu, g_modelAxisName[5], "Standart Model")
}
}
}
SetMenuExitButton(menu, true);
DisplayMenu(menu, client, 20);
return Plugin_Handled
}
//Handle:DefaultAmerPatch(client)
//{
// switch(GetEntProp(client, Prop_Send, "m_iPlayerClass"))
// {
// case 0:{ return g_modelAmerName[0];}
// case 1:{ return g_modelAmerName[1];}
// case 2:{ return g_modelAmerName[2];}
// case 3:{ return g_modelAmerName[3];}
// case 4:{ return g_modelAmerName[4];}
// case 5:{ return g_modelAmerName[5];}
// }
// return g_modelAmerName[0]
//}
//Handle:DefaultAxisPatch(client)
//{
//
// switch(GetEntProp(client, Prop_Send, "m_iPlayerClass"))
// {
// case 0:{ return g_modelAxisName[0]; }
// case 1:{ return g_modelAxisName[1]; }
// case 2:{ return g_modelAxisName[2]; }
// case 3:{ return g_modelAxisName[3]; }
// case 4:{ return g_modelAxisName[4]; }
// case 5:{ return g_modelAxisName[5]; }
// }
// return g_modelAxisName[0]
//}
public MenuHandler1(Handle:menu, MenuAction:action, param1, param2)
{
if (action == MenuAction_Select)
{
new String:info[256];
new bool:found = GetMenuItem(menu, param2, info, sizeof(info));
//PrintToConsole(param1, "You selected item: %d (found? %d info: %s)", param2, found, info)
if (!found)
return
KvJumpToKey(playermodelskv, authid[param1], true);
if (GetClientTeam(param1) == TEAM_AMER)
{
KvSetString(playermodelskv, "Team1", info);
}
else if (GetClientTeam(param1) == TEAM_AXIS)
{
KvSetString(playermodelskv, "Team2", info);
}
KvRewind(playermodelskv);
if(IsModelPrecached(info))
{
SetEntityModel(param1, info);
SetEntityRenderColor(param1, 255, 255, 255, 255);
}
}
else if (action == MenuAction_End)
{
CloseHandle(menu);
}
}
public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
new String:model[256];
new client = GetClientOfUserId(GetEventInt(event, "userid"));
KvJumpToKey(playermodelskv,authid[client],true);
if (GetClientTeam(client) == TEAM_AMER)
{
KvGetString(playermodelskv, "Team1", model, sizeof(model));
}
else if (GetClientTeam(client) == TEAM_AXIS)
{
KvGetString(playermodelskv, "Team2", model, sizeof(model));
}
if (!StrEqual(model,"") && IsModelPrecached(model))
{
SetEntityModel(client, model);
SetEntityRenderColor(client, 255, 255, 255, 255);
}
KvRewind(playermodelskv);
}
This also works for DOD:Source with models.ini
Can someone fix this code, and add a option for " default skin" and to be used with custom6 / t flag users.
Code:
#include <sourcemod>
#include <sdktools>
//need a player spawn function to reset models every round
//also need to load and save players current models selection ( t & ct) from kv
new Handle:mainmenu
new Handle:kv
new Handle:playermodelskv
new Handle:cvarAnnounce = INVALID_HANDLE;
new String:authid[MAXPLAYERS+1][35]
#define TEAM2 1
#define TEAM1 0
#define PLUGIN_VERSION "0.14"
public Plugin:myinfo =
{
name = "Model Menu",
author = "pRED*",
description = "Menu to select player models",
version = PLUGIN_VERSION,
url = "http://www.sourcemod.net/"
};
public OnPluginStart()
{
RegConsoleCmd("sm_models",Command_Model)
CreateConVar("sm_modelmenu_version", PLUGIN_VERSION, "Super Commands Version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY)
cvarAnnounce = CreateConVar("sm_modelmenu_announce", "1", "Announcement preferences");
HookEvent("player_spawn", Event_PlayerSpawn, EventHookMode_Post)
new String:file[256]
BuildPath(Path_SM, file, 255, "data/playermodels.ini")
playermodelskv = CreateKeyValues("Models")
FileToKeyValues(playermodelskv, file)
}
public Action:TimerAnnounce(Handle:timer, any:client)
{
if(IsClientInGame(client))
PrintToChat(client, "Say !models or /models to set your models preferences");
}
public OnPluginEnd()
{
new String:file[256]
BuildPath(Path_SM, file, 255, "data/playermodels.ini")
KeyValuesToFile(playermodelskv, file)
CloseHandle(playermodelskv)
}
public OnMapStart()
{
//open precache file and add everything to download table
new String:file[256]
BuildPath(Path_SM, file, 255, "configs/modeldownloads.ini")
new Handle:fileh = OpenFile(file, "r")
new String:buffer[256]
while (ReadFileLine(fileh, buffer, sizeof(buffer)))
{
new len = strlen(buffer)
if (buffer[len-1] == '\n')
buffer[--len] = '\0'
if (FileExists(buffer))
{
AddFileToDownloadsTable(buffer)
}
if (IsEndOfFile(fileh))
break
}
}
public OnMapEnd()
{
CloseHandle(kv)
CloseHandle(mainmenu)
}
public OnClientPutInServer(client)
{
GetClientAuthString(client, authid[client], sizeof(authid[]))
mainmenu = BuildMainMenu()
// Make the announcement in 30 seconds unless announcements are turned off
if(GetConVarBool(cvarAnnounce))
CreateTimer(60.0, TimerAnnounce, client);
}
Handle:BuildMainMenu()
{
/* Create the menu Handle */
new Handle:menu = CreateMenu(Menu_Group)
kv = CreateKeyValues("Commands")
new String:file[256]
BuildPath(Path_SM, file, 255, "configs/models.ini")
FileToKeyValues(kv, file)
if (!KvGotoFirstSubKey(kv))
{
return INVALID_HANDLE
}
decl String:buffer[30]
decl String:path[100]
do
{
KvGetSectionName(kv, buffer, sizeof(buffer))
AddMenuItem(menu,buffer,buffer)
KvJumpToKey(kv, "Team1")
KvGotoFirstSubKey(kv)
do
{
KvGetString(kv, "path", path, sizeof(path),"")
if (FileExists(path))
{
PrecacheModel(path,true)
AddFileToDownloadsTable(path)
}
} while (KvGotoNextKey(kv))
KvGoBack(kv)
KvGoBack(kv)
KvJumpToKey(kv, "Team2")
KvGotoFirstSubKey(kv)
do
{
KvGetString(kv, "path", path, sizeof(path),"")
if (FileExists(path))
{
PrecacheModel(path,true)
AddFileToDownloadsTable(path)
}
} while (KvGotoNextKey(kv))
KvGoBack(kv)
KvGoBack(kv)
} while (KvGotoNextKey(kv))
KvRewind(kv)
SetMenuTitle(menu, "Choose a Model")
return menu
}
public Action:Command_Model(client,args)
{
if (mainmenu == INVALID_HANDLE)
{
PrintToConsole(client, "There was an error generating the menu. Check your models.ini file")
return Plugin_Handled
}
DisplayMenu(mainmenu, client, MENU_TIME_FOREVER)
return Plugin_Handled
}
public Menu_Group(Handle:menu, MenuAction:action, param1, param2)
{
// user has selected a model group
if (action == MenuAction_Select)
{
new String:info[30]
/* Get item info */
new bool:found = GetMenuItem(menu, param2, info, sizeof(info))
if (!found)
return
// user selected a group
// advance kv to this group
KvJumpToKey(kv, info)
// check if they have access
new String:group[30]
// check users team
if (GetClientTeam(param1) == 2)
{
KvJumpToKey(kv, "Team1")
}
else if (GetClientTeam(param1) == 3)
{
KvJumpToKey(kv, "Team2")
}
else
return
// build menu
// name - path
KvGotoFirstSubKey(kv)
new Handle:tempmenu = CreateMenu(Menu_Model)
decl String:buffer[30]
decl String:path[256]
do
{
KvGetSectionName(kv, buffer, sizeof(buffer))
KvGetString(kv, "path", path, sizeof(path),"")
AddMenuItem(tempmenu,path,buffer)
} while (KvGotoNextKey(kv))
SetMenuTitle(tempmenu, group)
KvRewind(kv)
DisplayMenu(tempmenu, param1, MENU_TIME_FOREVER)
}
}
public Menu_Model(Handle:menu, MenuAction:action, param1, param2)
{
//user choose a model
if (action == MenuAction_Select)
{
new String:info[256]
new String:group[30]
/* Get item info */
new bool:found = GetMenuItem(menu, param2, info, sizeof(info))
GetMenuTitle(menu, group, sizeof(group))
if (!found)
return
// set users model
//insert magic here.
if (!StrEqual(info,"") && IsModelPrecached(info) && IsClientConnected(param1))
{
LogMessage("Setting Model for client %i: %s",param1,info)
SetEntityModel(param1, info)
//SDKCall(hSetModel, param1, info)
}
KvJumpToKey(playermodelskv,authid[param1],true)
if (GetClientTeam(param1) == 2)
{
KvSetString(playermodelskv, "Team1", info)
KvSetString(playermodelskv, "Team1Group", group)
}
else if (GetClientTeam(param1) == 3)
{
KvSetString(playermodelskv, "Team2", info)
KvSetString(playermodelskv, "Team1Group", group)
}
KvRewind(playermodelskv)
}
if (action == MenuAction_End)
{
CloseHandle(menu)
}
}
public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"))
KvJumpToKey(playermodelskv,authid[client],true)
new String:model[256]
new String:group[30]
if (GetClientTeam(client) == 2)
{
KvGetString(playermodelskv, "Team1", model, sizeof(model))
KvGetString(playermodelskv, "Team1Group", group, sizeof(group))
}
else if (GetClientTeam(client) == 3)
{
KvGetString(playermodelskv, "Team2", model, sizeof(model))
KvGetString(playermodelskv, "Team2Group", group, sizeof(group))
}
if (!StrEqual(model,"") && IsModelPrecached(model))
{
SetEntityModel(client, model)
//SDKCall(hSetModel, client, model)
}
KvRewind(playermodelskv)
}
__________________
Last edited by ph; 02-04-2009 at 22:24.
|
|