Member
Join Date: Aug 2018
Location: India
|
12-24-2018
, 10:41
Re: Knife Models
|
#123
|
Quote:
Originally Posted by OciXCrom
It's much work, I don't fell like doing it. I made a transformation of this plugin that you can use for other weapons. Here's the code:
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <formatin>
#define PLUGIN_VERSION "1.4"
#define MAX_SKINS 30
enum _:Info
{
Name[32],
VModel[128],
PModel[128],
Flag
}
enum _:Weapon
{
Name[16],
NameLower[16],
weapon_id[20],
CSW_ID
}
new g_eSkins[MAX_SKINS][Info]
new g_eWeapon[Weapon]
new g_eSkinsNum
new g_iSkin[33]
new g_szDefaultV[32]
new g_szDefaultP[32]
new g_iSayText
public plugin_init()
{
register_plugin(formatin("%s Models", g_eWeapon[Name]), PLUGIN_VERSION, "OciXCrom")
register_cvar("CRXWeaponModels", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
register_event("CurWeapon", "OnSelectWeapon", "be", "1=1", formatin("2=%i", g_eWeapon[CSW_ID]))
register_clcmd(formatin("say /%s", g_eWeapon[NameLower]), "ShowMenu")
register_clcmd(formatin("say_team /%s", g_eWeapon[NameLower]), "ShowMenu")
g_iSayText = get_user_msgid("SayText")
}
public plugin_precache()
{
new szWeapon[32]
get_plugin(-1, szWeapon, charsmax(szWeapon))
replace(szWeapon, charsmax(szWeapon), "crx_", "")
replace(szWeapon, charsmax(szWeapon), "_models.amxx", "")
copy(g_eWeapon[Name], charsmax(g_eWeapon[Name]), szWeapon)
strtolower(szWeapon)
copy(g_eWeapon[NameLower], charsmax(g_eWeapon[NameLower]), szWeapon)
formatex(g_eWeapon[weapon_id], charsmax(g_eWeapon[weapon_id]), "weapon_%s", szWeapon)
g_eWeapon[CSW_ID] = get_weaponid(g_eWeapon[weapon_id])
register_dictionary("WeaponModels.txt")
if(!g_eWeapon[CSW_ID])
set_fail_state(formatin("%L", LANG_SERVER, "WM_INVALID_WEAPON", g_eWeapon[weapon_id]))
formatex(g_szDefaultV, charsmax(g_szDefaultV), "models/v_%s.mdl", g_eWeapon[NameLower])
formatex(g_szDefaultP, charsmax(g_szDefaultP), "models/p_%s.mdl", g_eWeapon[NameLower])
/*log_amx("Name: %s", g_eWeapon[Name])
log_amx("NameLower: %s", g_eWeapon[NameLower])
log_amx("weapon_id: %s", g_eWeapon[weapon_id])
log_amx("CSW_ID: %i", g_eWeapon[CSW_ID])*/
ReadFile()
}
ReadFile()
{
new szConfigsName[256], szFilename[256]
get_configsdir(szConfigsName, charsmax(szConfigsName))
formatex(szFilename, charsmax(szFilename), "%s/%sModels.ini", szConfigsName, g_eWeapon[Name])
new iFilePointer = fopen(szFilename, "rt")
if(iFilePointer)
{
new szData[300], szFlag[2]
while(!feof(iFilePointer))
{
fgets(iFilePointer, szData, charsmax(szData))
trim(szData)
switch(szData[0])
{
case EOS, ';': continue
default:
{
parse(szData, g_eSkins[g_eSkinsNum][Name], charsmax(g_eSkins[][Name]), g_eSkins[g_eSkinsNum][VModel], charsmax(g_eSkins[][VModel]),
g_eSkins[g_eSkinsNum][PModel], charsmax(g_eSkins[][PModel]), szFlag, charsmax(szFlag))
if(!is_blank(g_eSkins[g_eSkinsNum][VModel]))
precache_model(g_eSkins[g_eSkinsNum][VModel])
if(!is_blank(g_eSkins[g_eSkinsNum][PModel]))
precache_model(g_eSkins[g_eSkinsNum][PModel])
g_eSkins[g_eSkinsNum][Flag] = is_blank(szFlag) ? ADMIN_ALL : read_flags(szFlag)
szFlag[0] = EOS
g_eSkinsNum++
}
}
}
fclose(iFilePointer)
}
}
public ShowMenu(id)
{
new szTitle[128]
formatex(szTitle, charsmax(szTitle), "%L", id, "WM_MENU_TITLE", g_eWeapon[Name])
new iMenu = menu_create(szTitle, "MenuHandler")
for(new iFlags = get_user_flags(id), i; i < g_eSkinsNum; i++)
{
if(g_eSkins[i][Flag] == ADMIN_ALL || iFlags & g_eSkins[i][Flag])
menu_additem(iMenu, formatin("%s %s", g_eSkins[i][Name], g_iSkin[id] == i ? formatin("%L", id, "WM_MENU_SELECTED") : formatin("")))
else
menu_additem(iMenu, formatin("%s %L", g_eSkins[i][Name], id, "WM_MENU_VIP_ONLY"), .paccess = g_eSkins[i][Flag])
}
if(menu_pages(iMenu) > 1)
menu_setprop(iMenu, MPROP_TITLE, formatin("%s%L", szTitle, id, "WM_MENU_TITLE_PAGE"))
menu_display(id, iMenu)
return PLUGIN_HANDLED
}
public MenuHandler(id, iMenu, iItem)
{
if(iItem != MENU_EXIT)
{
if(g_iSkin[id] == iItem)
ColorChat(id, "%L", id, "WM_CHAT_ALREADY")
else
{
g_iSkin[id] = iItem
if(is_user_alive(id) && get_user_weapon(id) == g_eWeapon[CSW_ID])
OnSelectWeapon(id)
ColorChat(id, "%L", id, "WM_CHAT_SELECTED", g_eSkins[iItem][Name])
}
}
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
public client_putinserver(id)
g_iSkin[id] = 0
public OnSelectWeapon(id)
{
if(is_blank(g_eSkins[g_iSkin[id]][VModel]))
set_pev(id, pev_viewmodel2, g_szDefaultV)
else set_pev(id, pev_viewmodel2, g_eSkins[g_iSkin[id]][VModel])
if(is_blank(g_eSkins[g_iSkin[id]][PModel]))
set_pev(id, pev_weaponmodel2, g_szDefaultP)
else set_pev(id, pev_weaponmodel2, g_eSkins[g_iSkin[id]][PModel])
}
bool:is_blank(szString[])
return szString[0] == EOS
ColorChat(const id, const szInput[], any:...)
{
new iPlayers[32], iCount = 1
static szMessage[191]
vformat(szMessage, charsmax(szMessage), szInput, 3)
format(szMessage[0], charsmax(szMessage), "%L %s", id ? id : LANG_PLAYER, "WM_CHAT_PREFIX", g_eWeapon[Name], szMessage)
replace_all(szMessage, charsmax(szMessage), "!g", "^4")
replace_all(szMessage, charsmax(szMessage), "!n", "^1")
replace_all(szMessage, charsmax(szMessage), "!t", "^3")
if(id)
iPlayers[0] = id
else
get_players(iPlayers, iCount, "ch")
for(new i; i < iCount; i++)
{
if(is_user_connected(iPlayers[i]))
{
message_begin(MSG_ONE_UNRELIABLE, g_iSayText, _, iPlayers[i])
write_byte(iPlayers[i])
write_string(szMessage)
message_end()
}
}
}
The plugin needs to be named crx_<WEAPON NAME HERE>_models.amxx. So, if you want models for ak47, you will name the plugin crx_AK47_models.amxx. The command will be /ak47 and the config file configs/AK47Models.ini. Inside it you can add models like this:
PHP Code:
"Cool AK47" "v_model.mdl" "p_model.mdl" "flag"
Also, the lang file located in data/lang/WeaponModels.txt:
PHP Code:
[en]
WM_CHAT_PREFIX = !g[%s Models]!n
WM_CHAT_ALREADY = This skin is already selected!
WM_CHAT_SELECTED = You have selected the skin !g%s
WM_MENU_TITLE = \y< \rChoose your %s model \y>
WM_MENU_TITLE_PAGE = ^n\r-- \yPage:\r
WM_MENU_SELECTED = \y~ \rSELECTED \y~
WM_MENU_VIP_ONLY = \y~ \rVIP \y~
WM_INVALID_WEAPON = Invalid weapon ^"%s^"
[mk]
WM_CHAT_PREFIX = !g[%s Models]!n
WM_CHAT_ALREADY = Ovoj skin vekje e izbran!
WM_CHAT_SELECTED = Go izbra skinot !g%s
WM_MENU_TITLE = \y< \rIzberi model za %s \y>
WM_MENU_TITLE_PAGE = ^n\r-- \yStranica:\r
WM_MENU_SELECTED = \y~ \rIZBRAN \y~
WM_MENU_VIP_ONLY = \y~ \rVIP \y~
WM_INVALID_WEAPON = Nevalidno oruzhje ^"%s^"
[bg]
WM_CHAT_PREFIX = !g[%s Models]!n
WM_CHAT_ALREADY = Tozi skin veche e izbran!
WM_CHAT_SELECTED = Izbra skina !g%s
WM_MENU_TITLE = \y< \rIzberi model za %s \y>
WM_MENU_TITLE_PAGE = ^n\r-- \yStranica:\r
WM_MENU_SELECTED = \y~ \rIZBRAN \y~
WM_MENU_VIP_ONLY = \y~ \rVIP \y~
WM_INVALID_WEAPON = Nevalidno orujie ^"%s^"
If you want another weapon, copy the plugin + the .ini file and change its name, for example crx_M4A1_models.amxx and M4A1Models.ini.
|
Can You Provide #include <formatin> !! I cant find that include file ..
__________________
|
|