PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <colorchat>
#define modelpath "models/czapki"
#define PLUG_TAG "Czapki"
stock fm_set_entity_visibility(index, visible = 1) set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW)
new g_HatEnt[33]
new CurrentHat[33]
new CurrentMenu[33]
new HatFile[160]
new MenuPages, TotalHats
new HATMDL[160][26]
new HATNAME[160][26]
new HATREST[160]
new P_AdminHats, P_RandomJoin
public plugin_init() {
register_plugin(PLUG_TAG, "1.9", "SgtBane")
register_menucmd(register_menuid("\yCzapki: [Strona"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "MenuCommand")
register_clcmd("say /hats", "ShowMenu")
register_clcmd("say /czapki", "ShowMenu")
register_clcmd("say /czapka", "ShowMenu")
P_AdminHats = register_cvar("czapki_vip", "1")
P_RandomJoin = register_cvar("czapki_losowo", "0")
}
public ShowMenu(id) {
CurrentMenu[id] = 1
ShowHats(id)
return PLUGIN_HANDLED
}
public ShowHats(id) {
new szMenuBody[221], WpnID
new nLen = format(szMenuBody, 220, "\yCzapki: [Strona %i/%i]^n", CurrentMenu[id], MenuPages)
new MnuClr[3]
for(new hatid = 0; hatid < 8; hatid++) {
WpnID = ((CurrentMenu[id] * 8) + hatid - 8)
if(WpnID < TotalHats) {
menucolor(id, WpnID, MnuClr)
nLen += format(szMenuBody[nLen], 220-nLen, "^n\r%i.\w%s %s", hatid + 1, MnuClr, HATNAME[WpnID])
}
}
if(CurrentMenu[id] == MenuPages) nLen += format(szMenuBody[nLen], 220-nLen, "^n^n\r9.\w Nastepna strona")
else nLen += format(szMenuBody[nLen], 220-nLen, "^n^n\r9.\w Nastepna strona")
if(CurrentMenu[id] > 1) nLen += format(szMenuBody[nLen], 220-nLen, "^n\r0.\w Poprzednia strona")
else nLen += format(szMenuBody[nLen], 220-nLen, "^n\r0.\w Wyjdz")
show_menu(id, (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), szMenuBody, -1)
return PLUGIN_HANDLED
}
public MenuCommand(id, key) {
switch(key) {
case 8: {
if(CurrentMenu[id] < MenuPages) CurrentMenu[id]++
ShowHats(id)
return PLUGIN_HANDLED
}
case 9: {
CurrentMenu[id]--
if(CurrentMenu[id] > 0) ShowHats(id)
return PLUGIN_HANDLED
}
default: {
new HatID = ((CurrentMenu[id] * 8) + key - 8)
if(HatID < TotalHats) {
if((get_pcvar_num(P_AdminHats) == 0 && HATREST[HatID] == 1) || (get_pcvar_num(P_AdminHats) == 1 && HATREST[HatID] == 1 && get_user_flags(id) & ADMIN_LEVEL_H) || HATREST[HatID] == 0 || (HATREST[HatID] == get_user_team(id) + 1))
Set_Hat(id, HatID, id)
else {
if(HATREST[HatID] == 2 && get_user_team(id) == 2) ColorChat(id, GREEN, "[%s]^x01 Ta czapka jest tylko dla wiezniow!", PLUG_TAG)
else if(HATREST[HatID] == 3 && get_user_team(id) == 1) ColorChat(id, GREEN, "[%s]^x01 Ta czapka jest tylko dla straznikow!", PLUG_TAG)
else ColorChat(id, GREEN, "[%s]^x01 Ta czapka jest tylko dla Vipow!", PLUG_TAG)
}
}
}
}
return PLUGIN_HANDLED
}
public plugin_precache() {
new cfgDir[32]
get_configsdir(cfgDir, 31)
formatex(HatFile, 63, "%s/HatList.ini", cfgDir)
command_load()
new tmpfile [101]
for(new i = 1; i < TotalHats; ++i) {
format(tmpfile, 100, "%s/%s", modelpath, HATMDL[i])
if(file_exists (tmpfile)) {
precache_model(tmpfile)
server_print("[%s] Pobrano: %s", PLUG_TAG, HATMDL[i])
} else server_print("[%s] Nie mozna pobrac: %s", PLUG_TAG, tmpfile)
}
}
public client_putinserver(id) {
if(get_pcvar_num(P_RandomJoin) == 1) Random_Hat(id)
return PLUGIN_CONTINUE
}
public Random_Hat(id) {
new bool:foundrnd = false, cntTry = 0, randID = random_num(1, TotalHats - 1)
while(cntTry < 15 && foundrnd == false) {
randID = random_num(1, TotalHats - 1)
cntTry += 1
if(HATREST[randID] == 0) foundrnd = true
if(HATREST[randID] == 1 && get_user_flags(id) & ADMIN_LEVEL_H) foundrnd = true
if((get_user_team(id) != 0) && HATREST[CurrentHat[id]] == get_user_team(id) + 1) foundrnd = true
}
if(foundrnd == true) Set_Hat(id, randID , 0)
else Set_Hat(id, 0, 0)
return PLUGIN_CONTINUE
}
public Set_Hat(player, imodelnum, targeter) {
new tmpfile[101]
format(tmpfile, 100, "%s/%s", modelpath, HATMDL[imodelnum])
if(imodelnum == 0) {
if(g_HatEnt[player] > 0) fm_set_entity_visibility(g_HatEnt[player], 0)
if(targeter != 0) ColorChat(targeter, GREEN, "[%s]^x01 Zdjales czapke.", PLUG_TAG)
} else if(file_exists(tmpfile)) {
if(g_HatEnt[player] < 1) {
g_HatEnt[player] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if(g_HatEnt[player] > 0) {
set_pev(g_HatEnt[player], pev_movetype, MOVETYPE_FOLLOW)
set_pev(g_HatEnt[player], pev_aiment, player)
set_pev(g_HatEnt[player], pev_rendermode, kRenderNormal)
engfunc(EngFunc_SetModel, g_HatEnt[player], tmpfile)
}
} else engfunc(EngFunc_SetModel, g_HatEnt[player], tmpfile)
CurrentHat[player] = imodelnum
if(targeter != 0) ColorChat(targeter, GREEN, "[%s]^x01 Zalozylesz czapke:^x03 %s", PLUG_TAG, HATNAME[imodelnum])
}
}
public command_load() {
if(file_exists(HatFile)) {
HATMDL[0] = ""
HATNAME[0] = "Zdejmij czapke"
TotalHats = 1
new TempCrapA[2]
new sfLineData[128]
new file = fopen(HatFile, "rt")
while(file && !feof(file)) {
fgets(file, sfLineData, 127)
if (sfLineData[0] == ';' || strlen(sfLineData) < 1 || (sfLineData[0] == '/' && sfLineData[1] == '/')) continue
parse(sfLineData, HATMDL[TotalHats], 25, HATNAME[TotalHats], 25, TempCrapA, 1)
if(TempCrapA[0] == 'A' || TempCrapA[0] == '1') HATREST[TotalHats] = 1
else if(TempCrapA[0] == 'T' || TempCrapA[0] == '2') HATREST[TotalHats] = 2
else if(TempCrapA[0] == 'C' || TempCrapA[0] == '3') HATREST[TotalHats] = 3
else HATREST[TotalHats] = 0
TotalHats += 1
if(TotalHats >= 160) {
server_print("[%s] Przekroczono limit czapek", PLUG_TAG)
break
}
}
if(file) fclose(file)
}
MenuPages = floatround((TotalHats / 8.0), floatround_ceil)
server_print("[%s] Zaladowano %i czapek i stworzono %i stron", PLUG_TAG, TotalHats, MenuPages)
}
menucolor(id, ItemID, MnuClr[3]) {
if(ItemID == CurrentHat[id]) {
MnuClr = "\d"
return
}
if(HATREST[ItemID] != 0) {
if(HATREST[ItemID] == 1 && get_pcvar_num(P_AdminHats) == 1) {
if(get_user_flags(id) & ADMIN_LEVEL_H) MnuClr = "\y"
else MnuClr = "\r"
} else if(HATREST[ItemID] != get_user_team(id) + 1) MnuClr = "\r"
else MnuClr = "\y"
} else MnuClr = "\w"
return
}