Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

[hats]Аналог или оптимизация

Статус пользователя stefkone
сообщение 12.12.2013, 14:00
Сообщение #1


Иконка группы

Стаж: 19 лет

Сообщений: 1711
Благодарностей: 1130
Полезность: 1068

Доброго дня
Помогите найти аналог данному плагину или помогите оптимизировать его (Нагрузка от него 30%)
Не пользуюсь функциями Give_Hat и Remove_Hat
Плагин не много отличается от того что в паблике, есть функция выдачи определенной шапки под определенный флаг
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>

new g_bwEnt[33]

#define PLUG_NAME "Team Hats"
#define PLUG_AUTH "trofian"
#define PLUG_VERS "1.0"

#define menusize 1024

#define HATS_PATH "models/hats"

new HatFile[128]
new MenuPages, TotalHats
new CurrentMenu[33]

new UserHaveHatWith[33] = 'o' // s - skin, m - two models, n - normal hat, o - not connected
new UserHatModel[33][256]

#define MAX_HATS 64
new HATMDL[MAX_HATS][128]
new HATNAME[MAX_HATS][128]
new HATFLAG[MAX_HATS]

public plugin_init()
{
register_plugin(PLUG_NAME, PLUG_VERS, PLUG_AUTH)
register_menucmd(register_menuid(" Меню шляп"),(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", -1, "Shows Knife menu")
register_clcmd("hats", "ShowMenu", -1, "Shows Knife menu")
register_event("ResetHUD", "ResetHUD", "be")
}

public ResetHUD(id) set_task(2.0, "reload_hat", id)

public reload_hat(id)
{
if(!is_user_alive(id))
return

new CsTeams:team = cs_get_user_team(id)

if(!pev_valid(g_bwEnt[id]))
return

if(UserHaveHatWith[id] == 's')
{
if(team == CS_TEAM_CT)
set_pev(g_bwEnt[id], pev_skin, 1)
else if(team == CS_TEAM_T)
set_pev(g_bwEnt[id], pev_skin, 0)
}
if(UserHaveHatWith[id] == 'm')
{
new hatmodel[256]

if(team == CS_TEAM_CT)
formatex(hatmodel, charsmax(hatmodel), "%s/c_%s", HATS_PATH, UserHatModel[id])
else if(team == CS_TEAM_T)
formatex(hatmodel, charsmax(hatmodel), "%s/t_%s", HATS_PATH, UserHatModel[id])

engfunc(EngFunc_SetModel, g_bwEnt[id], hatmodel)
}
}

public ShowMenu(id)
{
CurrentMenu[id] = 1
ShowHats(id)
return PLUGIN_HANDLED
}

public ShowHats(id)
{
new keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)

new szMenuBody[menusize + 1], WpnID
new nLen = format(szMenuBody, menusize, " Меню шляп^n")

// Get Hat Names And Add Them To The List
for (new hatid=0; hatid < 8; hatid++) {
WpnID = ((CurrentMenu[id] * 8) + hatid - 8)
if (WpnID < TotalHats) {
new hatText[256]
if(WpnID > 0)
{
if(HATNAME[WpnID][0] == 's')
format(hatText, charsmax(hatText), "\y%s \w[\rцвет команды\w]", HATNAME[WpnID][1])
else if(HATNAME[WpnID][0] == 'm')
format(hatText, charsmax(hatText), "\y%s \w[\rмодель команды\w]", HATNAME[WpnID][1])
else if(HATFLAG[WpnID] && !(get_user_flags(id) & HATFLAG[WpnID]))
format(hatText, charsmax(hatText), "\d%s", HATNAME[WpnID])
else
format(hatText, charsmax(hatText), "\w%s", HATNAME[WpnID])
}
else
format(hatText, charsmax(hatText), "\y%s", HATNAME[WpnID])
nLen += format(szMenuBody[nLen], menusize-nLen, "^n\r %i. %s",hatid + 1,hatText)
}
}

// Next Page And Previous/Close
if (CurrentMenu[id] == MenuPages) {
nLen += format(szMenuBody[nLen], menusize-nLen, "^n^n\d9. Следующая")
} else {
nLen += format(szMenuBody[nLen], menusize-nLen, "^n^n\r9.\w Следующая")
}

if (CurrentMenu[id] > 1) {
nLen += format(szMenuBody[nLen], menusize-nLen, "^n\r0.\w Предудыщая")
} else {
nLen += format(szMenuBody[nLen], menusize-nLen, "^n\r0.\w Выход")
}
show_menu(id, keys, szMenuBody, -1)
return PLUGIN_HANDLED
}
public MenuCommand(id, key)
{
switch(key)
{
case 8: //9 - [Next Page]
{
if (CurrentMenu[id] < MenuPages) CurrentMenu[id]++
ShowHats(id)
return PLUGIN_HANDLED
}
case 9: //0 - [Close]
{
CurrentMenu[id]--
if (CurrentMenu[id] > 0) ShowHats(id)
return PLUGIN_HANDLED
}
default:
{
new HatID = ((CurrentMenu[id] * 8) + key - 8)
if (HatID < TotalHats)
{
if(HATFLAG[HatID] && !(get_user_flags(id) & HATFLAG[HatID]))
{
ShowHats(id)
return PLUGIN_HANDLED
}
Set_Hat(id,HatID,id)
}
}
}
return PLUGIN_HANDLED
}

public plugin_precache()
{
new cfgDir[32]
get_configsdir(cfgDir,31)
formatex(HatFile,63,"%s/HatList.ini",cfgDir)
command_load()

for (new i = 1; i < TotalHats; ++i) {
if(HATNAME[i][0] == 'm')
{
new CurrFile[256]

formatex(CurrFile, charsmax(CurrFile), "%s/t_%s", HATS_PATH, HATMDL[i])
if(file_exists(CurrFile)) precache_model(CurrFile)

formatex(CurrFile, charsmax(CurrFile), "%s/c_%s", HATS_PATH, HATMDL[i])
if(file_exists(CurrFile)) precache_model(CurrFile)
}
else
{
new CurrFile[256]
formatex(CurrFile, charsmax(CurrFile), "%s/%s", HATS_PATH, HATMDL[i])

if (file_exists (CurrFile))
{
precache_model(CurrFile)
server_print("Precached %s",CurrFile)
}
else
server_print("Failed to precache %s",CurrFile)
}
}
}

public client_connect(id)
{
if(g_bwEnt[id] > 0) engfunc(EngFunc_RemoveEntity,g_bwEnt[id])
g_bwEnt[id] = 0
}

public client_disconnect(id)
{
if(g_bwEnt[id] > 0) engfunc(EngFunc_RemoveEntity,g_bwEnt[id])
g_bwEnt[id] = 0
UserHaveHatWith[id] = 'o'
formatex(UserHatModel[id], 255, "!NULL")
}

public Give_Hat(id)
{
new smodelnum[5], name[32]
read_argv(1,name,31)
read_argv(2,smodelnum,4)

new player = cmd_target(id,name,2)
if (!player) {
print_col_chat(id, "!yИгрок с таким именем не найден")
return PLUGIN_HANDLED
}

new imodelnum = (str_to_num(smodelnum))
if (imodelnum > MAX_HATS) return PLUGIN_HANDLED

Set_Hat(player,imodelnum,id)

return PLUGIN_CONTINUE
}

public Remove_Hat(id)
{
for (new i = 0; i < get_maxplayers(); ++i) {
if (is_user_connected(i) && g_bwEnt[i] > 0) {
engfunc(EngFunc_RemoveEntity,g_bwEnt[i])
g_bwEnt[i] = 0
}
}
client_print(id,print_chat,"Removed hats from everyone.")
return PLUGIN_CONTINUE
}

public Set_Hat(player,imodelnum,targeter)
{
new name[32]
get_user_name(player, name, 31)

if (HATFLAG[imodelnum] && !(get_user_flags(targeter) & HATFLAG[imodelnum]))
{
print_col_chat(targeter, "!yНет доступа к этой шапке", name)
return
}
if (imodelnum == 0)
{
if(g_bwEnt[player] > 0) engfunc(EngFunc_RemoveEntity,g_bwEnt[player])
g_bwEnt[player] = 0
print_col_chat(targeter, "!yШапка снята с !t%s", name)
}
else
{
if(g_bwEnt[player] < 1)
{
g_bwEnt[player] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if(g_bwEnt[player] > 0)
{
UserHaveHatWith[player] = 'n'
new mdlName[256]
new CsTeams:team = cs_get_user_team(player)

formatex(UserHatModel[player], 255, "%s", HATMDL[imodelnum])

set_pev(g_bwEnt[player], pev_movetype, MOVETYPE_FOLLOW)
set_pev(g_bwEnt[player], pev_aiment, player)
set_pev(g_bwEnt[player], pev_rendermode, kRenderNormal)
set_pev(g_bwEnt[player], pev_renderamt, 0.0)

if(HATNAME[imodelnum][0] == 'm')
{
UserHaveHatWith[player] = 'm'

if(team == CS_TEAM_CT)
formatex(mdlName, charsmax(mdlName), "%s/c_%s", HATS_PATH, HATMDL[imodelnum])
else if(team == CS_TEAM_T)
formatex(mdlName, charsmax(mdlName), "%s/t_%s", HATS_PATH, HATMDL[imodelnum])

engfunc(EngFunc_SetModel, g_bwEnt[player], mdlName)
}
else
{
format(mdlName, charsmax(mdlName), "%s/%s", HATS_PATH, HATMDL[imodelnum])

engfunc(EngFunc_SetModel, g_bwEnt[player], mdlName)
}

if(HATNAME[imodelnum][0] == 's')
{
UserHaveHatWith[player] = 's'

if(team == CS_TEAM_CT)
set_pev(g_bwEnt[player], pev_skin, 1)
else if(team == CS_TEAM_T)
set_pev(g_bwEnt[player], pev_skin, 0)
}
}
} else {
UserHaveHatWith[player] = 'n'
new mdlName[256]
new CsTeams:team = cs_get_user_team(player)
formatex(UserHatModel[player], 255, "%s", HATMDL[imodelnum])

if(HATNAME[imodelnum][0] == 'm')
{
UserHaveHatWith[player] = 'm'
if(team == CS_TEAM_CT)
formatex(mdlName, charsmax(mdlName), "%s/c_%s", HATS_PATH, HATMDL[imodelnum])
else if(team == CS_TEAM_T)
formatex(mdlName, charsmax(mdlName), "%s/t_%s", HATS_PATH, HATMDL[imodelnum])

engfunc(EngFunc_SetModel, g_bwEnt[player], mdlName)
}
else
{
formatex(mdlName, charsmax(mdlName), "%s/%s", HATS_PATH, HATMDL[imodelnum])

engfunc(EngFunc_SetModel, g_bwEnt[player], mdlName)
}

if(HATNAME[imodelnum][0] == 's')
{
UserHaveHatWith[player] = 's'

if(team == CS_TEAM_CT)
set_pev(g_bwEnt[player], pev_skin, 1)
else if(team == CS_TEAM_T)
set_pev(g_bwEnt[player], pev_skin, 0)
}
}
if(HATNAME[imodelnum][0] == 's' || HATNAME[imodelnum][0] == 'm')
print_col_chat(targeter, "!t%s!y, вы надели шапку !g%s", name,HATNAME[imodelnum][1])
else
print_col_chat(targeter, "!t%s!y, вы надели шапку !g%s", name,HATNAME[imodelnum])
}
}

public command_load()
{
if(file_exists(HatFile))
{
HATMDL[0] = ""
HATNAME[0] = "Снять шапку^n"
TotalHats = 1
new sfLineData[128]
new file = fopen(HatFile,"rt")
while(file && !feof(file))
{
fgets(file,sfLineData,127)

// Skip Comment and Empty Lines
if (containi(sfLineData,";") > -1) continue

// BREAK IT UP!
new asddsa[10]
parse(sfLineData, HATMDL[TotalHats],40, HATNAME[TotalHats],40, asddsa,10)
HATFLAG[TotalHats] = read_flags(asddsa)
if (equal(asddsa, "") || equal(asddsa, "0") || equal(asddsa, "z"))
HATFLAG[TotalHats] = 0

TotalHats += 1
if(TotalHats >= MAX_HATS)
{
server_print("Reached hat limit")
break
}
}
if(file) fclose(file)
}
MenuPages = floatround((TotalHats / 8.0), floatround_ceil)
server_print("Loaded %i hats, Generated %i pages)",TotalHats,MenuPages)
}

stock print_col_chat(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!y", "^1") // Default Color
replace_all(msg, 190, "!t", "^3") // Team Color

if (id)
players[0] = id
else
get_players(players, count, "ch")

{
for ( new i = 0; i < count; i++ )
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя mazdan
сообщение 12.12.2013, 14:04
Сообщение #2


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

нагрузка 30% от чего? от двух тонн?


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя stefkone
сообщение 12.12.2013, 14:10
Сообщение #3


Иконка группы

Стаж: 19 лет

Сообщений: 1711
Благодарностей: 1130
Полезность: 1068

Цитата(mazdan @ 12.12.2013, 15:04) *
нагрузка 30% от чего? от двух тонн?

в смысле?
Я о нагрузки цп

С ним
CPU In Out Uptime Users FPS Players
87.60 177.04 262.36 911 1293 47.92 31


без него
CPU In Out Uptime Users FPS Players
50.0(округлил) 177.04 262.36 911 1293 47.92 31
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 12.12.2013, 14:22
Сообщение #4


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

stefkone, это понятно, просто без данных об игроках и графиках звучит как-то дико.
Кроме RessetHUD ничего страшного не видно там мне, но я в этом нуб совсем


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 12.12.2013, 14:43
Сообщение #5
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

stefkone, я тебе уже говорил, что попробовать сервер без какого-то одного плагина - ещё не всё. Диагностика для определения проблемных плагинов не требует много мозгов, но требует определённых усилий и времени.
В плагине, конечно, есть, что улучшить, но и в текущем виде грузить там нечему. Т.е. на чистом сервере он будет работать збс.

Конфликты с плагинами решать надо, пока не найдётся такой, с кем все конфликтуют. У тебя с моделями каша, это уже как месяц известно.
И тут себе можешь помочь только ты сам, если не собираешься на форум приват выкидывать)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: