Поставил себе на Deathrun сервер плагин Adminka.amxx. Он как бы работает, но сервер часто падает по его вине. А понять почему и решить это - не хватает знаний.
Потому остается только к Вам обращаться за помощью.
Вот лог ошибок:
- Код: Выделить всё
L 12/07/2016 - 17:25:48: Start of error session.
L 12/07/2016 - 17:25:48: Info (map "deathrun_4life_rmk") (file "addons/amxmodx/logs/error_20161207.log")
L 12/07/2016 - 17:25:48: [FAKEMETA] Invalid entity
L 12/07/2016 - 17:25:48: [AMXX] Displaying debug trace (plugin "Adminka.amxx")
L 12/07/2016 - 17:25:48: [AMXX] Run time error 10: native error (native "set_pdata_int")
L 12/07/2016 - 17:25:48: [AMXX] [0] Adminka.sma::StartAdminWeapon (line 605)
L 12/07/2016 - 17:48:14: [FAKEMETA] Invalid entity
L 12/07/2016 - 17:48:14: [AMXX] Displaying debug trace (plugin "Adminka.amxx")
L 12/07/2016 - 17:48:14: [AMXX] Run time error 10: native error (native "set_pdata_int")
L 12/07/2016 - 17:48:14: [AMXX] [0] Adminka.sma::StartAdminWeapon (line 605)
L 12/07/2016 - 17:52:46: Start of error session.
L 12/07/2016 - 17:52:46: Info (map "deathrun_letsgo2_click21") (file "addons/amxmodx/logs/error_20161207.log")
L 12/07/2016 - 17:52:46: [FAKEMETA] Invalid entity
L 12/07/2016 - 17:52:46: [AMXX] Displaying debug trace (plugin "Adminka.amxx")
L 12/07/2016 - 17:52:46: [AMXX] Run time error 10: native error (native "set_pdata_int")
L 12/07/2016 - 17:52:46: [AMXX] [0] Adminka.sma::StartAdminWeapon (line 605)
L 12/07/2016 - 18:52:57: [FAKEMETA] Invalid entity
L 12/07/2016 - 18:52:57: [AMXX] Displaying debug trace (plugin "Adminka.amxx")
L 12/07/2016 - 18:52:57: [AMXX] Run time error 10: native error (native "set_pdata_int")
L 12/07/2016 - 18:52:57: [AMXX] [0] Adminka.sma::StartAdminWeapon (line 605)
L 12/07/2016 - 20:00:36: Start of error session.
L 12/07/2016 - 20:00:36: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20161207.log")
L 12/07/2016 - 20:00:36: [FAKEMETA] Invalid entity
L 12/07/2016 - 20:00:36: [AMXX] Displaying debug trace (plugin "Adminka.amxx")
L 12/07/2016 - 20:00:36: [AMXX] Run time error 10: native error (native "set_pdata_int")
L 12/07/2016 - 20:00:36: [AMXX] [0] Adminka.sma::StartAdminWeapon (line 605)
Может кто-нибудь исправить эту проблему? Желательно с поправкой самого меню, чтобы бессмертие (8 пункт в меню) давалось на какое-то время, секунд 25, например, а не бесконечно.
Или вообще, если вы знаете подобный плагин но с более легким кодом и лучшим функционалом, то поделитесь, пожалуйста. А то я сколько не искал в инете, ничего толкового не нашел.
Вот и сам исходник:
- Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <fun>
#include <fakemeta>
#include <engine>
#include <ColorChat>
#define PLUGIN "AdminMenu"
#define VERSION "1.0"
#define AUTHOR "bublik"
new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
new Grava[33]
new Speed[33]
new Godmode[33]
new gSpawn[33]
new gMoney[33]
new BhopMax[33]
new JampMax[33]
new BhopMaximum[33]
new Twojump[33]
new gSpeedWeapon[33]
new jumpnum[33]
new bool:dojump[33] = false
new name[33]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_menu("Menu 1", keys, "func_menu")
register_menu("Menu_2", keys, "func_menu2")
register_cmd("adminmenu", "AdminMenu")
register_cmd("amxmodmenu", "amxmodmenu")
RegisterHam(Ham_Spawn, "player", "PlayerAdminSpawn",1)
register_event("HLTV", "round_start", "a", "1=0", "2=0")
RegisterHam(Ham_Spawn, "player", "SpawnPlayer",1)
register_event("CurWeapon", "WeaponChange", "be", "1=1")
register_forward(FM_PlayerPostThink, "PostThink")
register_forward(FM_PlayerPreThink, "PreThink")
}
public plugin_precache()
{
precache_sound("adminmenu/dr_respawn.wav" )
precache_sound("adminmenu/dr_money.wav" )
precache_model("models/player/vip/vip.mdl");
}
public SpawnPlayer(id)
{
BhopMaximum[id] = false
BhopMax[id] = false
Speed[id] = false
Grava[id] = false
Twojump[id] = false
JampMax[id] = false
gSpeedWeapon[id] = false
Godmode[id] = false
set_task(1.0, "player_model", id)
}
public round_start()
{
for(new id = 1;id <= get_maxplayers(); id++)
{
gSpawn[id] = 5
gMoney[id] = 1
}
}
public AdminMenu(id)
{
static menu[650], iLen
iLen = 0
if(get_user_flags(id) & ADMIN_LEVEL_H)
{
iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\yАдминМеню \d v1.0^nВы: \yАдмин \r| \dПользуйся на здоровье \y:D^n^n");
}
else
{
iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\yАдминМеню \d v1.0^nВы: \yИгрок \r| \dЦена Админки: \y200р^n^n");
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
if(is_user_alive(id) || gSpawn[id] == 0 || GetAliveCt() < 2)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d1. Воскреснуть: \w[\r%d\w]^n", gSpawn[id])
keys &= ~MENU_KEY_1
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \wВоскреснуть: \w[\r%d\w]^n", gSpawn[id])
keys |= MENU_KEY_1
}
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d1. Воскреснуть: \w[\r0\w]^n", gSpawn[id])
keys &= ~MENU_KEY_1
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
if(BhopMax[id])
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \wУскоритель: \yВкл^n")
keys |= MENU_KEY_2
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \wУскоритель: \rвыкл^n")
keys |= MENU_KEY_2
}
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d2. Ускоритель: \rвыкл^n")
keys &= ~MENU_KEY_2
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
if(JampMax[id])
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \wДвойной Прыжок: \yВкл^n")
keys |= MENU_KEY_3
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \wДвойной Прыжок: \rвыкл^n")
keys |= MENU_KEY_3
}
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d3. Двойной Прыжок: \rвыкл^n")
keys &= ~MENU_KEY_3
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
if(gMoney[id] == 0)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d4. Деньги: \y50000 \w[\r%d\w]^n^n", gMoney[id])
keys &= ~MENU_KEY_4
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \wДеньги: \y50000\w \w[\r%d\w]^n^n", gMoney[id])
keys |= MENU_KEY_4
}
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d4. Деньги: 50000 \w[\r0\w]^n^n", gMoney[id])
keys &= ~MENU_KEY_4
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
if(cs_get_user_team(id) & CS_TEAM_CT)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \wКоманда игрока: \r[\yКонтер террорист\r]^n")
keys |= MENU_KEY_5
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \wКоманда игрока: \r[\yТеррорист\r]^n")
keys |= MENU_KEY_5
}
}
else
{
if( cs_get_user_team( id ) & CS_TEAM_CT )
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d5. Команда игрока: \r[\yКонтер террорист\r]^n")
keys &= ~MENU_KEY_5
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d5. Команда игрока: \r[\yТеррорист\r]^n")
keys &= ~MENU_KEY_5
}
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
if(Grava[id])
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \wГравитация: \yВкл^n")
keys |= MENU_KEY_6
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \wГравитация: \rвыкл^n")
keys |= MENU_KEY_6
}
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d6. Гравитация: \rвыкл^n")
keys &= ~MENU_KEY_6
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
if(Speed[id])
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \wСкорость: \yВкл^n")
keys |= MENU_KEY_7
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \wСкорость: \rвыкл^n")
keys |= MENU_KEY_7
}
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d7. Скорость: \rвыкл^n")
keys &= ~MENU_KEY_7
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
if(Godmode[id])
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r8. \wБессмертие: \yВкл^n")
keys |= MENU_KEY_8
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r8. \wБессмертие: \rвыкл^n")
keys |= MENU_KEY_8
}
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d8. Бессмертие: \rвыкл^n")
keys &= ~MENU_KEY_8
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r9. \wAmx Mod Menu^n")
keys |= MENU_KEY_9
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d9. Amx Mod Menu^n")
keys &= ~MENU_KEY_9
}
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "^n\r0. \wЗакрыть^n")
keys |= MENU_KEY_0
show_menu(id, keys, menu, -1, "Menu 1");
return PLUGIN_HANDLED
}
public func_menu(id, key)
{
switch(key)
{
case 0:
{
if(gSpawn[id] == 0)
{
return PLUGIN_CONTINUE
}
else
{
ExecuteHam(Ham_CS_RoundRespawn, id)
gSpawn[id] = gSpawn[id] -1
AdminMenu(id)
get_user_name(id, name, 31)
ColorChat(0, GREEN, "[AdminMenu]^x01 Администратор^x03 %s^x04 Воскреснул", name)
emit_sound(id, CHAN_VOICE, "adminmenu/dr_respawn.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
case 1:
{
if(!BhopMax[id])
{
BhopMaximum[id] = true
BhopMax[id] = true
}
else
{
BhopMaximum[id] = false
BhopMax[id] = false
}
AdminMenu(id)
}
case 2:
{
if(!JampMax[id])
{
Twojump[id] = true
JampMax[id] = true
}
else
{
Twojump[id] = false
JampMax[id] = false
}
AdminMenu(id)
}
case 3:
{
if(gMoney[id] == 0)
{
return PLUGIN_CONTINUE
}
else
{
cs_set_user_money(id, cs_get_user_money(id) + 50000)
gMoney[id] = gMoney[id] -1
AdminMenu(id)
get_user_name(id, name, 31)
ColorChat(0, GREEN, "[AdminMenu]^x01 Администратор^x03 %s ^x01взял^x04 50000$", name)
emit_sound(id, CHAN_VOICE, "adminmenu/dr_money.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
case 4:
{
if( cs_get_user_team( id ) & CS_TEAM_T )
{
get_user_name(id, name, 31)
ColorChat(id, GREEN, "[AdminMenu]^x03 %s^x04 Ты Контр Террорист", name)
cs_set_user_team(id, 2)
}
else
{
if( cs_get_user_team( id ) & CS_TEAM_CT )
{
ColorChat(id, GREEN, "[AdminMenu]^x03 %s^x04 Ты Террорист", name)
cs_set_user_team(id, 1)
}
}
AdminMenu(id)
}
case 5:
{
if(!Grava[id])
{
set_user_gravity(id, 0.5)
Grava[id] = true
}
else
{
set_user_gravity(id, 0.0)
Grava[id] = false
}
AdminMenu(id)
}
case 6:
{
if(!Speed[id])
{
set_user_maxspeed(id,400.0)
Speed[id] = true
gSpeedWeapon[id] = true
}
else
{
set_user_maxspeed(id,250.0)
Speed[id] = false
gSpeedWeapon[id] = false
}
AdminMenu(id)
}
case 7:
{
if(!Godmode[id])
{
set_user_godmode(id,1)
Godmode[id] = true
}
else
{
set_user_godmode(id,0)
Godmode[id] = false
}
AdminMenu(id)
}
case 8:
{
amxmodmenu(id)
}
}
return PLUGIN_HANDLED
}
public client_PreThink(id)
{
if(!BhopMaximum[id])
return PLUGIN_CONTINUE
entity_set_float(id, EV_FL_fuser2, 0.0)
if(entity_get_int(id, EV_INT_button) & 2)
{
new flags = entity_get_int(id, EV_INT_flags)
if(flags & FL_WATERJUMP)
return PLUGIN_CONTINUE
if(entity_get_int(id, EV_INT_waterlevel) >= 2)
return PLUGIN_CONTINUE
if(!(flags & FL_ONGROUND))
return PLUGIN_CONTINUE
new Float:vecVelocity[3]
entity_get_vector(id, EV_VEC_velocity, vecVelocity)
vecVelocity[0] *= 1.15;
vecVelocity[1] *= 1.15;
entity_set_vector(id, EV_VEC_velocity, vecVelocity);
entity_set_int(id, EV_INT_gaitsequence, 6) // Play the Jump Animation
}
return PLUGIN_CONTINUE
}
public PreThink(id)
{
if(Twojump[id])
{
if(!is_user_alive(id)) return PLUGIN_CONTINUE
new nbut = pev(id, pev_button)
new obut = pev(id, pev_oldbuttons)
if((nbut & IN_JUMP) && !(pev(id, pev_flags) & FL_ONGROUND) && !(obut & IN_JUMP))
{
if(jumpnum[id] < 1)
{
dojump[id] = true
jumpnum[id]++
return PLUGIN_CONTINUE
}
}
if((nbut & IN_JUMP) && (pev(id, pev_flags) & FL_ONGROUND))
{
jumpnum[id] = 0
return PLUGIN_CONTINUE
}
}
return PLUGIN_CONTINUE
}
public PostThink(id)
{
if(Twojump[ id ])
{
if(!is_user_alive(id)) return PLUGIN_CONTINUE
if(dojump[id] == true)
{
new Float:velocity[3]
pev(id, pev_velocity, velocity)
velocity[2] = random_float(295.0,305.0)
set_pev(id, pev_velocity, velocity)
dojump[id] = false
return PLUGIN_CONTINUE
}
}
return PLUGIN_CONTINUE
}
public WeaponChange(id)
{
if(gSpeedWeapon[id])
{
set_user_maxspeed(id, 400.0)
}
}
public amxmodmenu(id)
{
static menu[650], iLen
iLen = 0
iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\yАдминКа^n^n");
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \wКикнуть^n")
keys |= MENU_KEY_1
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \wКикнуть^n")
keys &= ~MENU_KEY_1
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \wЗабанить^n")
keys |= MENU_KEY_2
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \wЗабанить^n")
keys &= ~MENU_KEY_2
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \wСтукнуть\r/\wУбить^n")
keys |= MENU_KEY_3
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \wСтукнуть/r//wУбить^n")
keys &= ~MENU_KEY_3
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \wКоманда игрока^n")
keys |= MENU_KEY_4
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \wКоманда игрока^n")
keys &= ~MENU_KEY_4
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \wСменить карту^n")
keys |= MENU_KEY_5
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \wСменить карту^n")
keys &= ~MENU_KEY_5
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \wГолосование за смену карты^n")
keys |= MENU_KEY_6
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \wГолосование за смену карты^n")
keys &= ~MENU_KEY_6
}
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \wСделать рестарт^n")
keys |= MENU_KEY_7
}
else
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \wСделать рестарт^n")
keys &= ~MENU_KEY_7
}
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r8. \wАдмин меню^n")
keys |= MENU_KEY_8
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "^n\r0. \wЗакрыть^n")
keys |= MENU_KEY_9
show_menu(id, keys, menu, -1, "Menu_2");
return PLUGIN_HANDLED
}
public func_menu2(id, key)
{
switch(key)
{
case 0: client_cmd(id, "amx_kickmenu")
case 1: client_cmd(id, "amx_banmenu")
case 2: client_cmd(id, "amx_slapmenu")
case 3: client_cmd(id, "amx_teammenu")
case 4: client_cmd(id, "amx_mapmenu")
case 5: client_cmd(id, "amx_votemapmenu")
case 6:
{
server_cmd("sv_restartround 1")
new name[32]
get_user_name(id, name, 31)
ColorChat(0, GREEN, "[AdminMenu] ^x01Администратор^x03 %s^x01 сделал рестарт", name)
}
case 7: server_cmd("adminmenu")
}
}
//=================================[В начале раунда даётся Гранаты и писталет elita]========================================
public PlayerAdminSpawn(id)
{
if(get_user_flags(id) & ADMIN_BAN)
{
set_task(1.0, "StartAdminWeapon", id)
}
}
public StartAdminWeapon(id)
{
if(cs_get_user_team(id) & CS_TEAM_CT)
{
give_item(id, "weapon_flashbang");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_hegrenade");
give_item(id, "weapon_smokegrenade");
give_item(id, "weapon_elite");
set_pdata_int(get_pdata_cbase(id, 373), 51, 100, 4);
}
}
stock GetAliveCt()
{
new CountCt, i
for(i = 1; i <= get_maxplayers(); i++)
if(is_user_alive(i) && is_user_connected(i) && get_user_team(i) == 2)
CountCt++
return CountCt
}
public player_model(id)
{
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
if(is_user_alive(id))
{
cs_set_user_model(id,"vip");
}
}
}
Название темы скорректировано // Subb98