Русское сообщество по скриптингу

Lite_Rank_System без функции (работа с чатом)

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Lite_Rank_System без функции (работа с чатом)

Сообщение Mr.PolaZ » 20 апр 2018, 13:10

Доброго времени суток дорогие товарищи и гости сообщества.
Я решил немного переделать плагин Lite_Rank_System (система званий),
решил полностью убрать работу с чатом, кроме оповещения о получении нового звания.
Компиляция плагина прошла успешно, но появилась ошибка:
Код: Выделить всё
threadtools.cpp (2968) : Assertion Failed: Failed to create thread (error 0xc)

подскажите пожалуйста, в чём может быть проблема?

Вот переделанный исходник (вырезана работа с чатом)
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csstats>
#include <csx>
#include <fakemeta>
#include <fun>

//#define STATUS_VALUE // Показывать звание игрока при наведении прицела (Включено по умолчанию)
//#define PREFIX  // Включить префиксы Админа и Випа (Включено по умолчанию, закомментируйте если хотите выключить)
#define HUD_UPD 1.0  // Через сколько секунд обновлять информер

#if defined PREFIX
#define ADMIN_PREFIX ADMIN_BAN   // Флаг для префикса админа (по умолчанию флаг d)
#define VIP_PREFIX ADMIN_LEVEL_H   // Флаг для префикса випа (по умолчанию флаг t)
#endif




#define PLUGIN "Lite Rank System"
#define VERSION "2.3"
#define AUTHOR "xoymiii"

#define TASKID_INFO 7777

new PlayerXP[33], PlayerLevel[33], g_MsgHud, levelUp[33]
#if defined STATUS_VALUE
enum _:MAX_TYPES
{
    TYPE_NONE,
    TYPE_RELATION,
    TYPE_PLAYER
}
enum
{
    LOOK_FRIEND = 1,
    LOOK_ENEMY,
    LOOK_HOSTAGE
}
enum _:MAX_REPLACES
{
    RE_HP,
    RE_RANK,
    RE_NAME
}
new const Replaces[MAX_REPLACES][] =
{
    "%hp%",
    "%rank%",
    "%name%"
}
new status_value[MAX_TYPES], gStatusText
#endif
new g_XPvalue, g_XPheadshot, g_Bomb, g_XPc4def, g_XPc4pl, g_Bonus
new g_XPv
, g_XPhead, g_B, g_Def, g_Pl, g_Bon
new bool
:bonus_blocked
new g_Levels
new LEVELS
[22]
new const CLASSES[][] = { "I_1", "I_1", "I_2", "I_3", "I_4", "I_5", "I_6", "I_7", "I_8", "I_9", "I_10", "I_11", "I_12", "I_13", "I_14", "I_15", "I_16", "I_17", "I_18", "I_19", "I_20", "I_21" }    
new g_oldrank
[33], maxrank
                       
public plugin_init
() 
{
    register_plugin(PLUGIN, VERSION, AUTHOR)    
    register_dictionary
("Lite_Rank_System.txt" )
    
    register_event
("DeathMsg", "EventDeath", "a", "1>0")
    register_logevent( "RoundStart", 2, "1=Round_Start" )

    set_task(HUD_UPD, "Info", TASKID_INFO, "", 0, "b")
    
    g_MsgHud 
= CreateHudSyncObj()
    #if defined STATUS_VALUE
    gStatusText = get_user_msgid("StatusText")
    register_event("StatusValue", "StatusValueShow", "be")
    #endif
    
    g_XPvalue 
= register_cvar("lrs_xp_value", "1")
    g_Bomb = register_cvar("lrs_bomb", "1")
    g_XPc4def = register_cvar("lrs_xp_c4def", "4")
    g_XPc4pl = register_cvar("lrs_xp_c4pl", "3")
    g_XPheadshot = register_cvar("lrs_xp_hs", "2")
    g_Levels = register_cvar("lrs_levels", "0 10 20 30 50 100 150 200 250 300 350 400 500 600 700 800 1000 1200 1500 2000 2500")
    g_Bonus = register_cvar("lrs_bonus", "1")
    register_srvcmd("lrs_lockmap", "lockmap")
    
    new const szRegisterClmd
[][] =
    {
        "say /rus",    "LangRus",
        "say /eng",    "LangEng",
        "say",        "Say",
        "say_team",    "SayTeam"
    }
    for(new a; a < sizeof szRegisterClmd; a += 2)
        register_clcmd(szRegisterClmd[a],szRegisterClmd[+ 1])        
}

public plugin_cfg()
{
    
    new configsDir
[64]
    get_configsdir(configsDir, 63)
    server_cmd("exec %s/Lite_Rank_System.cfg", configsDir)        
    
    g_XPv 
= get_pcvar_num(g_XPvalue)    
    g_B 
= get_pcvar_num(g_Bomb)    
    g_Def 
= get_pcvar_num(g_XPc4def)
    g_Pl = get_pcvar_num(g_XPc4pl)
    g_XPhead = get_pcvar_num(g_XPheadshot)
    g_Bon = get_pcvar_num(g_Bonus)
    
    set_task
(1.0, "LoadSettings")
}
///////////////// BLOCK MAP BONUS /////////////////////
public lockmap()
{
    new getmap[32],map[32]
    read_args(getmap,31)
    remove_quotes(getmap)
    
    get_mapname
(map,31)
    
    if
(!strcmp(getmap,map))
    {
        bonus_blocked = true
    
}
    else
    
{ 
            bonus_blocked 
= false    
    
}    
}
/////////////////////// RANK, LEVEL i td... ////////////////////    
public LoadSettings() 
{
    new i, LVL[22][16], cvLevels[256]
        
    get_pcvar_string
(g_Levels, cvLevels, 255)
    trim(cvLevels)
    parse(cvLevels, LVL[0], 15, LVL[1], 15, LVL[2], 15, LVL[3], 15, LVL[4], 15, LVL[5], 15, LVL[6], 15, LVL[7], 15, LVL[8], 15, LVL[9], 15, LVL[10], 15, LVL[11], 15, LVL[12], 15, LVL[13], 15, LVL[14], 15, LVL[15], 15, LVL[16], 15, LVL[17], 15, LVL[18], 15, LVL[19], 15, LVL[20], 15, LVL[21], 15)
    
    for 
(= 0; i < 21; i++)
        LEVELS[i+1] = str_to_num(LVL[i])

    return PLUGIN_HANDLED
}

public checkLvl(id) 
{
        new Name[32]
    get_user_name(id, Name, 31)
    
    if
(id > 0 && id < 33) 
    
{
        if (PlayerLevel[id] <= 0)
            PlayerLevel[id] = 1
            
        if 
(PlayerLevel[id] < 21) 
        
{
            while(PlayerXP[id] >= LEVELS[PlayerLevel[id]+1]) 
            
{
                PlayerLevel[id]++
                levelUp[id] = 1                
                ChatColor
(0, "%L %L", LANG_PLAYER,"LRS_TAG", LANG_PLAYER,"NEW_LEVEL", Name, LANG_PLAYER,CLASSES[PlayerLevel[id]])
            }
        }
    }    
}

public EventDeath() 
{
    new iKiller = read_data(1)
    new iVictim = read_data(2)
    
    if
(iKiller != iVictim && get_pdata_int(iKiller, 114) != get_pdata_int(iVictim, 114) && is_user_connected(iKiller) && PlayerLevel[iKiller] < 21) 
    
{
        if (g_XPhead > 1) 
        
{
            if(read_data(3))
                PlayerXP[iKiller] += g_XPv * g_XPhead
            else
                PlayerXP
[iKiller] += g_XPv
        
}
        else
            PlayerXP
[iKiller] += g_XPv

        checkLvl
(iKiller)
    }                                 
    return PLUGIN_CONTINUE
}

public bomb_explode(id)
{
        if(g_Pl < 1 || g_B != 1)
        return

        PlayerXP
[id] += g_Pl
        checkLvl
(id)
}

public bomb_defused(id) 
{
        if(g_Def < 1 || g_B != 1)
        return

        PlayerXP
[id] += g_Def
        checkLvl
(id)
}

public client_putinserver(id)     
    set_task
(1.0, "load_client_data", id)

public load_client_data(id) 
{
    if(!is_user_connected(id))
        return PLUGIN_HANDLED

    new stats
[8], bodyhits[8], stats2[4]
    get_user_stats(id, stats, bodyhits)
    get_user_stats2(id, stats2)
    
    if 
(g_XPhead > 1 && g_B != 0)
        PlayerXP[id] = ((stats[2] * g_XPhead + ((stats[0] - stats[2]) * g_XPv)) + (stats2[1] * g_Def + stats2[3] * g_Pl))
    else if (g_XPhead <= 1 && g_B != 0)
        PlayerXP[id] = (stats[0] * g_XPv + (stats2[1] * g_Def + stats2[3] * g_Pl))
    else if (g_XPhead > 1 && g_B == 0)
        PlayerXP[id] = (stats[2] * g_XPhead + ((stats[0] - stats[2]) * g_XPv))
    else
        PlayerXP
[id] = stats[0] * g_XPv

    for
(new i = 1; i <= 21; i++) 
    
{
        if (< 21) 
        
{
            if (PlayerXP[id] >= LEVELS[i] && PlayerXP[id] < LEVELS[i+1])
                PlayerLevel[id] = i
        
}
        else 
        
{
            if (PlayerXP[id] >= LEVELS[21])
                PlayerLevel[id] = 21
        
}
    }
    return PLUGIN_HANDLED
}
///////////////////////////////////////////////////////////////////////////

#if defined STATUS_VALUE
public StatusValueShow(id)
{
    new num = read_data(1)
    if( num <= 0 || num >= MAX_TYPES )
    return
    
    new update 
= status_value[num] = read_data(2)
    new live = is_user_alive(id)
    switch( num )
    {
        case TYPE_RELATION:
        {
            if( !update && live )
            {
                message_begin( MSG_ONE_UNRELIABLE, gStatusText, _, id )
        write_byte( 0 )
        write_string( "" )
        message_end()
        }
    }
    case TYPE_PLAYER:
    {
        if( live )
        {
            new message[192]
            
            switch
( status_value[TYPE_RELATION] )
            {
                case LOOK_FRIEND:
                {
                    copy(message, charsmax(message), "Друг: %name% HP: %hp% Звание: %rank%")
                }
                case LOOK_ENEMY: 
                
{
            copy(message, charsmax(message), "Враг: %name% Звание: %rank%")
            }
            case LOOK_HOSTAGE: 
            
{
            return
            
}
        }
        EditMessage( message, update, true, get_user_health( update ) )
        
        message_begin
( MSG_ONE_UNRELIABLE, gStatusText, _, id )
        write_byte( 0 )
        write_string( message )
        message_end()
        }
    }
    }                
}

EditMessage( message[192], player, bool:status_text, hp )
{
    new temp[35]
    
    if
( is_user_alive( player ) )
    {
        for( new i; i<MAX_REPLACES; i++ )
        {
            switch( i )
            {
                case RE_HP:
                {
                    num_to_str(hp, temp, charsmax(temp))
                }
                case RE_RANK:
                {
                    format(temp, charsmax(temp), "%L", LANG_PLAYER,CLASSES[PlayerLevel[player]])
                }
                case RE_NAME:
                {
                    if(status_text)
            copy(temp, charsmax(temp), "%p2")
            else
            get_user_name
(player, temp, charsmax(temp))
        }
        default:
        {
            copy(temp, charsmax(temp), "")
        }
        }
        replace(message, charsmax(message), Replaces[i], temp)
    }
    }
    trim(message)
}
#endif
    
public RoundStart
()
{
        maxrank = get_statsnum()  
        
        if
(g_Bon == 1)
        {
            if(!bonus_blocked)
            {
                static Players[32], Count
                new id
        
                get_players
(Players, Count, "ach")
        
                for
(new i = 0; i < Count; i++)
                {
                    id = Players[i] 
        
                    if
(levelUp[id] == 1)
                {  
                GetWeapon
(id)
                levelUp[id] = 0
                
}
            }
        }
    }
}

public GetWeapon(id)
{
    new szText[700 char]
    formatex( szText, charsmax( szText ), "%L", id, "TITLE")
    new menu = menu_create( szText, "gw_menu" )

    formatex( szText, charsmax( szText ), "AK47")
    menu_additem( menu, szText, "1", 0 )

    formatex( szText, charsmax( szText ), "M4A1")
    menu_additem( menu, szText, "2", 0 )

    formatex( szText, charsmax( szText ), "AWP")
    menu_additem( menu, szText, "3", 0 )

    formatex( szText, charsmax( szText ), "FAMAS")
    menu_additem( menu, szText, "4", 0 )

    menu_setprop( menu, MPROP_EXIT, MEXIT_ALL )
    menu_display( id, menu,0)
    return PLUGIN_CONTINUE
}
public gw_menu(id,menu,item)
{
    if( item == MENU_EXIT )
    {
        return PLUGIN_HANDLED
    
}
    
    new data
[ 6 ], iName[ 64 ], access, callback
    menu_item_getinfo
( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback )
    new key = str_to_num( data )
    switch( key )
    {
        case 1:
        {
            give_item(id,"weapon_ak47")
            cs_set_user_bpammo( id, CSW_AK47, 90)
        }
        case 2:
        {
            give_item(id,"weapon_m4a1")
            cs_set_user_bpammo( id, CSW_M4A1, 90)
        }
        case 3:
        {
            give_item(id,"weapon_awp")
            cs_set_user_bpammo( id, CSW_AWP, 30)
        }
        case 4:
        {
            give_item(id,"weapon_famas")
            cs_set_user_bpammo( id, CSW_FAMAS, 90)
        }
    }
    
    give_item
(id,"weapon_smokegrenade")
    give_item(id,"weapon_flashbang")
    give_item(id,"weapon_hegrenade")
    cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM)
    
    ChatColor
(id, "%L %L", LANG_PLAYER,"LRS_TAG", LANG_PLAYER,"BONUS")
    
    return PLUGIN_HANDLED
}
////////////////// INFORMER ///////////////////////    
public Info() 
{
    static Players[32], Count, buffer[192], len
    new id
, id2, Name2[32], live, osef[8]           
    get_players
(Players, Count, "ch")                                                                   

    for
(new i = 0; i < Count; i++) 
    
{
        id = Players[i]
        live = is_user_alive(id)
        id2 = pev(id, pev_iuser2)
        get_user_name(id2, Name2, 31)        
        g_oldrank
[id] = get_user_stats(id, osef, osef) 
        
        if
(!live) 
    
{                                                    
        if
(id2 > 0) 
        
{                                        
            if
(PlayerLevel[id2] < 21) 
        
{
            len = format(buffer, charsmax(buffer), "%L: %s", LANG_PLAYER,"A_NAME", Name2)
            len += format(buffer[len], charsmax(buffer) - len, "^n%L:", LANG_PLAYER,"ZVANIE")
            len += format(buffer[len], charsmax(buffer) - len, " %L", LANG_PLAYER,CLASSES[PlayerLevel[id2]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d", LANG_PLAYER,"PL_XP",PlayerXP[id2])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d", LANG_PLAYER,"RANK", g_oldrank[id2])
        }
        else 
        
{
            len = format(buffer, charsmax(buffer), "%L: %s", LANG_PLAYER,"A_NAME", Name2)
            len += format(buffer[len], charsmax(buffer) - len, "^n%L:",LANG_PLAYER,"ZVANIE")
            len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,CLASSES[PlayerLevel[id2]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %L",LANG_PLAYER,"PL_XP", LANG_PLAYER,"PL_MAX")
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d", LANG_PLAYER,"RANK", g_oldrank[id2])
        }                    
        
}
        else 
        
{
        if(PlayerLevel[id] < 21) 
        
{
            len = format(buffer, charsmax(buffer) - len, "%L: %L", LANG_PLAYER,"ZVANIE", LANG_PLAYER,CLASSES[PlayerLevel[id]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d",LANG_PLAYER,"PL_XP",PlayerXP[id])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d", LANG_PLAYER,"RANK", g_oldrank[id])
        }
        else 
        
{
            len = format(buffer, charsmax(buffer) - len, "%L: %L", LANG_PLAYER,"ZVANIE", LANG_PLAYER,CLASSES[PlayerLevel[id]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_MAX")
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d", LANG_PLAYER,"RANK", g_oldrank[id])
        }
        }
    }
    else 
    
{
        if((PlayerLevel[id] < 21) && live) 
        
{
            len = format(buffer, charsmax(buffer), "%L", LANG_PLAYER,CLASSES[PlayerLevel[id]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d %L %d", LANG_PLAYER,"PL_XP",PlayerXP[id], LANG_PLAYER,"IZ", LEVELS[PlayerLevel[id]+1])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d %L %d", LANG_PLAYER,"RANK", g_oldrank[id], LANG_PLAYER,"IZ", maxrank)
        }
        else 
        
{
            len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,CLASSES[PlayerLevel[id]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %L",LANG_PLAYER,"PL_XP", LANG_PLAYER,"PL_MAX")
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d %L %d", LANG_PLAYER,"RANK", g_oldrank[id], LANG_PLAYER,"IZ", maxrank)
        }
    }
    set_hudmessage(255, 255, 255, 0.01, 0.19, 0, 0.0, HUD_UPD, _, _, -1)
    ShowSyncHudMsg(id, g_MsgHud, "%s", buffer)
    }
    return PLUGIN_CONTINUE
}
////////////////// STOCK //////////////////////       
stock ChatColor(const id, const input[], any:...)
{
    new count = 1, players[32]
    static msg[192]
    vformat(msg, 191, input, 3)
   
    replace_all
(msg, 191, "!g", "^4") // Green Color
    replace_all(msg, 191, "!y", "^1") // Default Color
    replace_all(msg, 191, "!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()
            }
        }
    }
}
/////////////////////////////////////////////////////////////   


Вот то что вырезал
Код: Выделить всё
new const szRegisterClmd[][] =
    {
        "say /rus",    "LangRus",
        "say /eng",    "LangEng",
        "say",        "Say",
        "say_team",    "SayTeam"
    }
    for(new a; a < sizeof szRegisterClmd; a += 2)
        register_clcmd(szRegisterClmd[a],szRegisterClmd[+ 1])


и (вырезал)
Код: Выделить всё
/////////////////// CHAT /////////////////////
public LangRus(id)
{
    if(!iPlayerRus[id])
    {
        iPlayerRus[id] = true
        PrintMsg
(id, 0, "^4Русский ^1чат активирован!")
    }
    else PrintMsg(id, 0, "^3Русский ^1чат уже активирован!")
}
 
public LangEng
(id)
{
    if(iPlayerRus[id])
    {
        iPlayerRus[id] = false
        PrintMsg
(id, 0, "^4Английский ^1чат активирован!")
    }
    else PrintMsg(id, 0, "^3Английский ^1чат уже активирован!")
}

public Say(id)
    return SayHandler(id, false)
    
public SayTeam
(id)
    return SayHandler(id, true)

public SayHandler(id, bool:is_say_team)
{
    read_args(szMessage, charsmax(szMessage))
    remove_quotes(szMessage)
    if(!szMessage[0] || szMessage[0] == '/') return PLUGIN_HANDLED_MAIN 
    replace_all2
(szMessage, charsmax(szMessage), "%", "")
    if(!iPlayerRusInfo[id])
    {
        if(!iPlayerRus[id])
        {
            iPlayerRusInfo[id] = true
            PrintMsg
(id, 0, "^1У Вас есть возможность писать ^3по-русски. ^1Наберите ^4/rus ^1или ^4/eng ^1для переключения.")
        }
    }
    if(iPlayerRus[id])
    {    
        for
(new i; i < sizeof eng; i++)
            replace_all2(szMessage, charsmax(szMessage), eng[i], rus[i])
    }
    new szFormatedMsg[191], szLen, szName[32], iAlive = is_user_alive(id), iTeam = get_pdata_int(id, 114)
    
    get_user_name
(id, szName, charsmax(szName))
    if(is_say_team)
    {
        switch(iTeam)
        {
            case 1: szLen = formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg), "%s(Команде) ", iAlive ? "^1" : "^1*УБИТ* ")
            case 2: szLen = formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg), "%s(Команде) ", iAlive ? "^1" : "^1*УБИТ* ")
            case 3: szLen = formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg), "^1(Наблюдатель) ")
        }
    }
    else 
    
{
        if(iTeam == 3) szLen = formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg), "^1(Наблюдатель) ")
        else szLen = formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "%s", iAlive ? "^1" : "^1*УБИТ* ")
    }    
 
        
#if defined PREFIX
        new iFlags = get_user_flags(id)       
    if
(iFlags & ADMIN_PREFIX)
        szLen += formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "%L [^3%L^1] ^3%s^1 :^4 ", LANG_PLAYER, "ADMIN", LANG_PLAYER, CLASSES[PlayerLevel[id]], szName)
    else if(iFlags & VIP_PREFIX)
        szLen += formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "%L [^3%L^1] ^3%s^1 : ", LANG_PLAYER, "VIP", LANG_PLAYER, CLASSES[PlayerLevel[id]], szName)        
    else            
        szLen 
+= formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "[^3%L^1] ^3%s^1 : ", LANG_PLAYER, CLASSES[PlayerLevel[id]], szName)
    #else            
        szLen += formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "[^3%L^1] ^3%s^1 : ", LANG_PLAYER, CLASSES[PlayerLevel[id]], szName)    
    
#endif
        
    szLen 
+= formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "%s", szMessage)    

    static players
[32], pcount; get_players(players, pcount, "c")
    if(is_say_team)
    {
        for(new i; i < pcount; i++)
            if(get_user_flags(players[i]) & ADMIN_BAN || (iTeam == get_user_team(players[i]) && iAlive == is_user_alive(players[i])))
                PrintMsg(players[i], id, szFormatedMsg)
    }
    else
    
{
        for(new i; i < pcount; i++)
            PrintMsg(players[i], id, szFormatedMsg)
    }
    return PLUGIN_HANDLED
}

stock PrintMsg(const iReceiver, const iSender, const szMessage[], any:...)
{
    new szMsg[191]
    vformat(szMsg, charsmax(szMsg), szMessage, 4)
    message_begin(MSG_ONE_UNRELIABLE, 76, _, iReceiver)
    write_byte(iSender ? iSender : iReceiver)
    write_string(szMsg)
    message_end()
}

stock replace_all2(string[], len, const what[], const with[])
{
    new pos
    if
((pos = contain(string, what)) == -1) return 0
    new total
, with_len = strlen(with), diff = strlen(what) - with_len, total_len = strlen(string), temp_pos
    while
(total_len + with_len < len && replace(string[pos], len - pos, what, with) != 0)
    {
        total++
        pos += with_len
        total_len 
-= diff
        if 
(pos >= total_len) break
        temp_pos 
= contain(string[pos], what)
        if (temp_pos == -1) break
        pos 
+= temp_pos
    
}
    return total
}
/////////////////////////////////////////////////////////////////////////////  


Вот оригинальный исходник
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csstats>
#include <fakemeta>
#include <fun>

//#define STATUS_VALUE // Показывать звание игрока при наведении прицела (Выключено по умолчанию)
#define PREFIX  // Включить префиксы Админа и Випа (Включено по умолчанию, закомментируйте если хотите выключить)
#define HUD_UPD 10.0  // Через сколько секунд обновлять информер (по умолчанию стоит 10 секунд), если значение меньше, то соответственно нагрузка больше

#if defined PREFIX
#define ADMIN_PREFIX ADMIN_BAN   // Флаг для префикса админа (по умолчанию флаг d)
#define VIP_PREFIX ADMIN_LEVEL_H   // Флаг для префикса випа (по умолчанию флаг t)
#endif

new szMessage[191]
new iPlayerRus[33], iPlayerRusInfo[33]

#define PLUGIN "Lite Rank System"
#define VERSION "2.2b"
#define AUTHOR "xoymiii"

#define TASKID_INFO 7777

new round_count
new PlayerXP
[33], PlayerLevel[33], g_MsgHud, levelUp[33]
#if defined STATUS_VALUE
new g_MsgHud2
#endif
new g_XPvalue, g_XPheadshot, g_Bomb, g_XPc4def, g_XPc4pl, g_MinPlayers
new g_Levels
, bonus, g_Smoke, g_Flash, g_He, g_Armor, g_Bonus_Smoke, g_Bonus_Flash, g_Bonus_Flash2, g_Bonus_He, g_Bonus_Armor, g_Money, g_Bonus_Money, g_Lvl_Money, g_Block_Map
new Array
:g_array_block_bonus
new bool
:bonus_blocked
new LEVELS
[31]
new const CLASSES[][] = { "I_1", "I_1", "I_2", "I_3", "I_4", "I_5", "I_6", "I_7", "I_8", "I_9", "I_10", "I_11", "I_12", "I_13", "I_14", "I_15", "I_16", "I_17", "I_18", "I_19", "I_20", "I_21", "I_22", "I_23", "I_24", "I_25", "I_26", "I_27", "I_28", "I_29", "I_30" }
new const eng[][]={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","{","}",":",'"',"<",">","~","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","[","]",";","'",",",".","`","?","/","@","$","^^","&"}
new const rus[][]={"Ф","И","С","В","У","А","П","Р","Ш","О","Л","Д","Ь","Т","Щ","З","Й","К","Ы","Е","Г","М","Ц","Ч","Н","Я","Х","Ъ","ж","Э","Б","Ю","Ё","ф","и","с","в","у","а","п","р","ш","о","л","д","ь","т","щ","з","й","к","ы","е","г","м","ц","ч","н","я","х","ъ","ж","э","б","ю","ё",",",".","'",";", ":","?"}    
enum _
:CVARS {g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11,g12,g13,g14,g15,g16,g17,g18,g19,g20}
new pcv[CVARS]
new g_oldrank[33], maxrank
                       
public plugin_init
() 
{
    register_plugin(PLUGIN, VERSION, AUTHOR)    
    register_dictionary
("Lite_Rank_System.txt" )
    
    register_event
("DeathMsg", "EventDeath", "a", "1>0")
    register_event("HLTV", "RoundStart", "a", "1=0", "2=0")
    register_event("TextMsg","RoundRestart","a","2&#Game_w")

    set_task(HUD_UPD, "Info", TASKID_INFO, "", 0, "b")
    
    g_MsgHud 
= CreateHudSyncObj()
    #if defined STATUS_VALUE
    register_event("StatusValue", "StatusValueShow", "be", "1=2", "2!0")
    register_event("StatusValue", "StatusValueHide", "be", "1=1", "2=0")
    g_MsgHud2 = CreateHudSyncObj()
    #endif
    
    g_array_block_bonus 
= ArrayCreate(32, 1)
    
    g_XPvalue 
= register_cvar("lrs_xp_value", "1")
    g_Bomb = register_cvar("lrs_bomb", "1")
    g_MinPlayers = register_cvar("lrs_min_players", "3")
    g_XPc4def = register_cvar("lrs_xp_c4def", "3")
    g_XPc4pl = register_cvar("lrs_xp_c4pl", "3")
    g_XPheadshot = register_cvar("lrs_xp_hs", "1")
    g_Levels = register_cvar("lrs_levels", "0 10 20 30 50 100 150 200 250 300 350 400 500 600 700 800 1000 1200 1500 2000 2500 3000 3500 4000 4500 5000 5500 6000 6500 7000")
    bonus = register_cvar("lrs_bonus", "1")
    g_Block_Map = register_cvar("lrs_block_map", "1")
    g_Smoke = register_cvar("lrs_smoke", "1")
    g_Flash = register_cvar("lrs_flash", "1")
    g_He = register_cvar("lrs_he", "1")
    g_Armor = register_cvar("lrs_armor", "1")
    g_Money = register_cvar("lrs_money", "1")
    g_Bonus_Smoke = register_cvar("lrs_b_smoke", "10")
    g_Bonus_Flash = register_cvar("lrs_b_flash", "15")
    g_Bonus_Flash2 = register_cvar("lrs_b_flash2", "17")
    g_Bonus_He = register_cvar("lrs_b_he", "20")
    g_Bonus_Armor = register_cvar("lrs_b_armor", "22")
    g_Lvl_Money = register_cvar("lrs_lvl_money", "25")
    g_Bonus_Money = register_cvar("lrs_b_money", "1000")
    register_concmd("lrs_lockmap", "MapConst", ADMIN_RCON, "Lock Map. <map>")
    
    new const szRegisterClmd
[][] =
    {
        "say /rus",    "LangRus",
        "say /eng",    "LangEng",
        "say",        "Say",
        "say_team",    "SayTeam"
    }
    for(new a; a < sizeof szRegisterClmd; a += 2)
        register_clcmd(szRegisterClmd[a],szRegisterClmd[+ 1])
}

public plugin_cfg()
{
    new configsDir[64]
    get_localinfo("amxx_configsdir", configsDir, 63)
    server_cmd("exec %s/Lite_Rank_System.cfg", configsDir)
    
    pcv
[g1] = get_pcvar_num(g_XPvalue)
    pcv[g2] = get_pcvar_num(g_Bomb)
    pcv[g3] = get_pcvar_num(g_MinPlayers)
    pcv[g4] = get_pcvar_num(g_XPc4def)
    pcv[g5] = get_pcvar_num(g_XPc4pl)
    pcv[g6] = get_pcvar_num(g_XPheadshot)
    pcv[g7] = get_pcvar_num(bonus)
    pcv[g8] = get_pcvar_num(g_Block_Map)
    pcv[g9] = get_pcvar_num(g_Smoke)
    pcv[g10] = get_pcvar_num(g_Flash)
    pcv[g11] = get_pcvar_num(g_He)
    pcv[g12] = get_pcvar_num(g_Armor)
    pcv[g13] = get_pcvar_num(g_Money)
    pcv[g14] = get_pcvar_num(g_Bonus_Smoke)
    pcv[g15] = get_pcvar_num(g_Bonus_Flash)
    pcv[g16] = get_pcvar_num(g_Bonus_Flash2)
    pcv[g17] = get_pcvar_num(g_Bonus_He)
    pcv[g18] = get_pcvar_num(g_Bonus_Armor)
    pcv[g19] = get_pcvar_num(g_Lvl_Money)
    pcv[g20] = get_pcvar_num(g_Bonus_Money)        
    
    BlockMapBonus
()
    LoadSettings()
}

///////////////// BLOCK MAP BONUS /////////////////////
public BlockMapBonus() 
{
    if(pcv[g8]) 
    
{
        new Map[32]
        new block_bonus[32]
        get_mapname(Map, 31)
        for(new i = 0; i < ArraySize(g_array_block_bonus); i++)
        {           
            ArrayGetString
(g_array_block_bonus, i, block_bonus, 31)          
            if
(equal(Map, block_bonus))
            {
                bonus_blocked = true
                break
            
}
            else
                bonus_blocked 
= false
        
}
    }
}

public MapConst(id, level, cid)
{
    if(!cmd_access(id, level, cid, 2))
        return PLUGIN_HANDLED
        
    new arg
[32]
    read_argv(1, arg, 31)
    ArrayPushString(g_array_block_bonus, arg)
    
    return PLUGIN_HANDLED
}
///////////////////////////////////////////////////////////////////

/////////////////// CHAT /////////////////////
public LangRus(id)
{
    if(!iPlayerRus[id])
    {
        iPlayerRus[id] = true
        PrintMsg
(id, 0, "^4Русский ^1чат активирован!")
    }
    else PrintMsg(id, 0, "^3Русский ^1чат уже активирован!")
}
 
public LangEng
(id)
{
    if(iPlayerRus[id])
    {
        iPlayerRus[id] = false
        PrintMsg
(id, 0, "^4Английский ^1чат активирован!")
    }
    else PrintMsg(id, 0, "^3Английский ^1чат уже активирован!")
}

public Say(id)
    return SayHandler(id, false)
    
public SayTeam
(id)
    return SayHandler(id, true)

public SayHandler(id, bool:is_say_team)
{
    read_args(szMessage, charsmax(szMessage))
    remove_quotes(szMessage)
    if(!szMessage[0] || szMessage[0] == '/') return PLUGIN_HANDLED_MAIN 
    replace_all2
(szMessage, charsmax(szMessage), "%", "")
    if(!iPlayerRusInfo[id])
    {
        if(!iPlayerRus[id])
        {
            iPlayerRusInfo[id] = true
            PrintMsg
(id, 0, "^1У Вас есть возможность писать ^3по-русски. ^1Наберите ^4/rus ^1или ^4/eng ^1для переключения.")
        }
    }
    if(iPlayerRus[id])
    {    
        for
(new i; i < sizeof eng; i++)
            replace_all2(szMessage, charsmax(szMessage), eng[i], rus[i])
    }
    new szFormatedMsg[191], szLen, szName[32], iAlive = is_user_alive(id), iTeam = get_pdata_int(id, 114)
    
    get_user_name
(id, szName, charsmax(szName))
    if(is_say_team)
    {
        switch(iTeam)
        {
            case 1: szLen = formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg), "%s(Команде) ", iAlive ? "^1" : "^1*УБИТ* ")
            case 2: szLen = formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg), "%s(Команде) ", iAlive ? "^1" : "^1*УБИТ* ")
            case 3: szLen = formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg), "^1(Наблюдатель) ")
        }
    }
    else 
    
{
        if(iTeam == 3) szLen = formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg), "^1(Наблюдатель) ")
        else szLen = formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "%s", iAlive ? "^1" : "^1*УБИТ* ")
    }    
 
        
#if defined PREFIX
        new iFlags = get_user_flags(id)       
    if
(iFlags & ADMIN_PREFIX)
        szLen += formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "%L [^3%L^1] ^3%s^1 :^4 ", LANG_PLAYER, "ADMIN", LANG_PLAYER, CLASSES[PlayerLevel[id]], szName)
    else if(iFlags & VIP_PREFIX)
        szLen += formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "%L [^3%L^1] ^3%s^1 : ", LANG_PLAYER, "VIP", LANG_PLAYER, CLASSES[PlayerLevel[id]], szName)        
    else            
        szLen 
+= formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "[^3%L^1] ^3%s^1 : ", LANG_PLAYER, CLASSES[PlayerLevel[id]], szName)
    #else            
        szLen += formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "[^3%L^1] ^3%s^1 : ", LANG_PLAYER, CLASSES[PlayerLevel[id]], szName)    
    
#endif
        
    szLen 
+= formatex(szFormatedMsg[szLen], charsmax(szFormatedMsg) - szLen, "%s", szMessage)    

    static players
[32], pcount; get_players(players, pcount, "c")
    if(is_say_team)
    {
        for(new i; i < pcount; i++)
            if(get_user_flags(players[i]) & ADMIN_BAN || (iTeam == get_user_team(players[i]) && iAlive == is_user_alive(players[i])))
                PrintMsg(players[i], id, szFormatedMsg)
    }
    else
    
{
        for(new i; i < pcount; i++)
            PrintMsg(players[i], id, szFormatedMsg)
    }
    return PLUGIN_HANDLED
}

stock PrintMsg(const iReceiver, const iSender, const szMessage[], any:...)
{
    new szMsg[191]
    vformat(szMsg, charsmax(szMsg), szMessage, 4)
    message_begin(MSG_ONE_UNRELIABLE, 76, _, iReceiver)
    write_byte(iSender ? iSender : iReceiver)
    write_string(szMsg)
    message_end()
}

stock replace_all2(string[], len, const what[], const with[])
{
    new pos
    if
((pos = contain(string, what)) == -1) return 0
    new total
, with_len = strlen(with), diff = strlen(what) - with_len, total_len = strlen(string), temp_pos
    while
(total_len + with_len < len && replace(string[pos], len - pos, what, with) != 0)
    {
        total++
        pos += with_len
        total_len 
-= diff
        if 
(pos >= total_len) break
        temp_pos 
= contain(string[pos], what)
        if (temp_pos == -1) break
        pos 
+= temp_pos
    
}
    return total
}
/////////////////////////////////////////////////////////////////////////////

/////////////////////// RANK, LEVEL i td... ////////////////////    
public LoadSettings() 
{
    new i, cvLevels[256], LVL[31][16]

    get_pcvar_string(g_Levels, cvLevels, 255)
    trim(cvLevels)
    parse(cvLevels, LVL[0], 15, LVL[1], 15, LVL[2], 15, LVL[3], 15, LVL[4], 15, LVL[5], 15, LVL[6], 15, LVL[7], 15, LVL[8], 15, LVL[9], 15, LVL[10], 15, LVL[11], 15, LVL[12], 15, LVL[13], 15, LVL[14], 15, LVL[15], 15, LVL[16], 15, LVL[17], 15, LVL[18], 15, LVL[19], 15, LVL[20], 15, LVL[21], 15, LVL[22], 15, LVL[23], 15, LVL[24], 15, LVL[25], 15, LVL[26], 15, LVL[27], 15, LVL[28], 15, LVL[29], 15, LVL[30], 15)
    
    for 
(= 0; i < 30; i++)
        LEVELS[i+1] = str_to_num(LVL[i])

    return PLUGIN_HANDLED
}

public checkLvl(id) 
{
        new Name[32]
    get_user_name(id, Name, 31)
    
    if
(id > 0 && id < 33) 
    
{
        if (PlayerLevel[id] <= 0)
            PlayerLevel[id] = 1
            
        if 
(PlayerLevel[id] < 30) 
        
{
            while(PlayerXP[id] >= LEVELS[PlayerLevel[id]+1]) 
            
{
                PlayerLevel[id]++
                levelUp[id] = 1                
                ChatColor
(0, "%L %L", LANG_PLAYER,"LRS_TAG", LANG_PLAYER,"NEW_LEVEL", Name, LANG_PLAYER,CLASSES[PlayerLevel[id]])
            }
        }
    }    
}

public EventDeath() 
{
    new iKiller = read_data(1)
    new iVictim = read_data(2)
    
    if
(iKiller != iVictim && get_pdata_int(iKiller, 114) != get_pdata_int(iVictim, 114) && is_user_connected(iKiller) && PlayerLevel[iKiller] < 30) 
    
{
        if (pcv[g6]) 
        
{
            if(read_data(3))
                PlayerXP[iKiller] += pcv[g1] * 2
            else
                PlayerXP
[iKiller] += pcv[g1]
        }
        else
            PlayerXP
[iKiller] += pcv[g1]

        checkLvl(iKiller)
    }                                 
    return PLUGIN_CONTINUE
}

public bomb_explode(id)
{
   if(pcv[g5] < 1 || pcv[g2] != 1)
    return

   if
(get_playersnum() <= pcv[g3])
   {  
         ChatColor
(id, "%L", LANG_PLAYER,"MIN_PLAYERS")
   } 
   else 
   
{
         PlayerXP[id] += pcv[g5]
   }
}

public bomb_defused(id) 
{
   if(pcv[g4] < 1 || pcv[g2] != 1)
    return

   if
(get_playersnum() <= pcv[g3])
   {  
         ChatColor
(id, "%L", LANG_PLAYER,"MIN_PLAYERS")
   } 
   else 
   
{
         PlayerXP[id] += pcv[g4]
   }
}

public client_putinserver(id)     
    set_task
(1.0, "load_client_data", id)

public load_client_data(id) 
{
    if(!is_user_connected(id))
        return PLUGIN_HANDLED

    new stats
[8], bodyhits[8], stats2[4]
    get_user_stats(id, stats, bodyhits)

    if (pcv[g4])
        get_user_stats2(id, stats2)
    
    if 
(pcv[g6])
        PlayerXP[id] = ((stats[2]*+ (stats[0] - stats[2])) + (stats2[1]*+ stats2[3]*3)) * pcv[g1]
    else
        PlayerXP
[id] = (stats2[1]*+ stats2[3]*+ stats[0]) * pcv[g1]

    for(new i = 1; i <= 30; i++) 
    
{
        if (< 30) 
        
{
            if (PlayerXP[id] >= LEVELS[i] && PlayerXP[id] < LEVELS[i+1])
                PlayerLevel[id] = i
        
}
        else 
        
{
            if (PlayerXP[id] >= LEVELS[30])
                PlayerLevel[id] = 30
        
}
    }
    return PLUGIN_HANDLED
}
///////////////////////////////////////////////////////////////////////////

#if defined STATUS_VALUE
public StatusValueShow(id)
{
    new name[32], pid = read_data(2)
    get_user_name(pid, name, 31)
    
    if
(get_pdata_int(id, 114) == get_pdata_int(pid, 114))
    {
        set_hudmessage(255, 127, 0, -1.0, 0.6, 1, 0.01, 3.0, 0.01, 0.01, -1)
        ShowSyncHudMsg(id, g_MsgHud2, "Ник: %s ^n%L: %L", name, LANG_PLAYER, "ZVANIE", LANG_PLAYER, CLASSES[PlayerLevel[pid]])
    }
}

public StatusValueHide(id)
    ClearSyncHud(id, g_MsgHud2)
#endif

/////////////////// BONUS //////////////////
public RoundRestart(id)
    round_count = 1
    
public RoundStart
()
{
   round_count++
   maxrank = get_statsnum()

   if(!pcv[g7] || bonus_blocked) return
       
   static Players
[32], Count
   new id
, Money
   
   get_players
(Players, Count, "ach")
     
   for
(new i = 0; i < Count; i++)
   {
       id = Players[i]
       Money = cs_get_user_money(id) 
       
       if
(round_count > 2)
       {
           if(pcv[g9] && PlayerLevel[id] >= pcv[g14])
              give_item(id,"weapon_smokegrenade")
              
           if
(pcv[g10] && PlayerLevel[id] >= pcv[g15])
              give_item(id,"weapon_flashbang")
              
           if
(pcv[g10] && PlayerLevel[id] >= pcv[g16])
              give_item(id,"weapon_flashbang")
              
           if
(pcv[g11] && PlayerLevel[id] >= pcv[g17])
              give_item(id,"weapon_hegrenade")
              
           if
(pcv[g12] && PlayerLevel[id] >= pcv[g18])
              cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM)
              
           if
(pcv[g13] && PlayerLevel[id] >= pcv[g19])
           {
              if(Money < 5000)
              {
                 cs_set_user_money(id, Money + pcv[g20])
                 ChatColor(id, "%L %L", LANG_PLAYER, "LRS_TAG", LANG_PLAYER, "BONUS_MONEY", pcv[g20])
              }
           }  
        
}        
    
}
}
//////////////////////////////////////////////////////////////

////////////////// INFORMER ///////////////////////    
public Info() 
{
    static Players[32], Count, buffer[192], len
    new id
, id2, Name2[32], live, osef[8]           
    get_players
(Players, Count, "ch")                                                                   

    for
(new i = 0; i < Count; i++) 
    
{
        id = Players[i]
        live = is_user_alive(id)
        id2 = pev(id, pev_iuser2)
        get_user_name(id2, Name2, 31)        
        g_oldrank
[id] = get_user_stats(id, osef, osef) 
        
        if
(!live) 
    
{                                                    
        if
(id2 > 0) 
        
{                                        
            if
(PlayerLevel[id2] < 30) 
        
{
            len = format(buffer, charsmax(buffer), "%L: %s", LANG_PLAYER,"A_NAME", Name2)
            len += format(buffer[len], charsmax(buffer) - len, "^n%L:", LANG_PLAYER,"ZVANIE")
            len += format(buffer[len], charsmax(buffer) - len, " %L", LANG_PLAYER,CLASSES[PlayerLevel[id2]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d", LANG_PLAYER,"PL_XP",PlayerXP[id2])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d", LANG_PLAYER,"RANK", g_oldrank[id2])
        }
        else 
        
{
            len = format(buffer, charsmax(buffer), "%L: %s", LANG_PLAYER,"A_NAME", Name2)
            len += format(buffer[len], charsmax(buffer) - len, "^n%L:",LANG_PLAYER,"ZVANIE")
            len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,CLASSES[PlayerLevel[id2]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %L",LANG_PLAYER,"PL_XP", LANG_PLAYER,"PL_MAX")
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d", LANG_PLAYER,"RANK", g_oldrank[id2])
        }                    
        
}
        else 
        
{
        if(PlayerLevel[id] < 30) 
        
{
            len = format(buffer, charsmax(buffer) - len, "%L: %L", LANG_PLAYER,"ZVANIE", LANG_PLAYER,CLASSES[PlayerLevel[id]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d",LANG_PLAYER,"PL_XP",PlayerXP[id])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d", LANG_PLAYER,"RANK", g_oldrank[id])
        }
        else 
        
{
            len = format(buffer, charsmax(buffer) - len, "%L: %L", LANG_PLAYER,"ZVANIE", LANG_PLAYER,CLASSES[PlayerLevel[id]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_MAX")
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d", LANG_PLAYER,"RANK", g_oldrank[id])
        }
        }
    }
    else 
    
{
        if((PlayerLevel[id] < 30) && live) 
        
{
            len = format(buffer, charsmax(buffer), "%L", LANG_PLAYER,CLASSES[PlayerLevel[id]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d %L %d", LANG_PLAYER,"PL_XP",PlayerXP[id], LANG_PLAYER,"IZ", LEVELS[PlayerLevel[id]+1])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d %L %d", LANG_PLAYER,"RANK", g_oldrank[id], LANG_PLAYER,"IZ", maxrank)
        }
        else 
        
{
            len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,CLASSES[PlayerLevel[id]])
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %L",LANG_PLAYER,"PL_XP", LANG_PLAYER,"PL_MAX")
            len += format(buffer[len], charsmax(buffer) - len, "^n%L: %d %L %d", LANG_PLAYER,"RANK", g_oldrank[id], LANG_PLAYER,"IZ", maxrank)
        }
    }
    set_hudmessage(255, 255, 255, 0.01, 0.19, 0, 0.0, HUD_UPD, _, _, -1)
    ShowSyncHudMsg(id, g_MsgHud, "%s", buffer)
    }
    return PLUGIN_CONTINUE
}
/////////////////////////////////////////////////////////////////

////////////////// STOCK //////////////////////    
stock ChatColor(const id, const input[], any:...)
{
    new count = 1, players[32]
    static msg[192]
    vformat(msg, 191, input, 3)
   
    replace_all
(msg, 191, "!g", "^4") // Green Color
    replace_all(msg, 191, "!y", "^1") // Default Color
    replace_all(msg, 191, "!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()
            }
        }
    }
}
/////////////////////////////////////////////////////////////   
Аватара пользователя
Mr.PolaZ
 
Сообщения: 67
Зарегистрирован: 13 мар 2018, 14:36
Благодарил (а): 37 раз.
Поблагодарили: 2 раз.

Re: Lite_Rank_System без функции (работа с чатом)

Сообщение 00x1 » 20 апр 2018, 13:32

Mr.PolaZ, а с чего вы взяли, что данная ошибка связана именно с подобным плагином?
Ошибка означает, что невозможно создать поток. Возможно, стартовая карта прописана два раза: в строке запуска, либо в строке запуска и в server.cfg
Есть ли в server.cfg параметр map "название карты" ?
Проверьте параметры в строке запуска.
Аватара пользователя
00x1
 
Сообщения: 32
Зарегистрирован: 16 апр 2018, 03:17
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Lite_Rank_System без функции (работа с чатом)

Сообщение Mr.PolaZ » 20 апр 2018, 13:37

Нет, такой строки в server.cfg не имеется.
Дело в том что я убрал эту ошибку методом отключения данного плагина, при неактивном плагине лог чистый. :-)

Стартовая карта прописана только в Web чати (панель управления сервером)
Аватара пользователя
Mr.PolaZ
 
Сообщения: 67
Зарегистрирован: 13 мар 2018, 14:36
Благодарил (а): 37 раз.
Поблагодарили: 2 раз.

Re: Lite_Rank_System без функции (работа с чатом)

Сообщение 00x1 » 20 апр 2018, 13:51

Mr.PolaZ, если плагин без ваших изменений используете, то все нормально?
Аватара пользователя
00x1
 
Сообщения: 32
Зарегистрирован: 16 апр 2018, 03:17
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Lite_Rank_System без функции (работа с чатом)

Сообщение Mr.PolaZ » 20 апр 2018, 14:05

Да да, всё хорошо.

Дело в том что при использовании чистого плагина идёт конфликт с плагином Lite_Translit.
Я перепробовал множество ранговых систем и эта как раз то-что нужно за исключением вот этой чат-функции.
Аватара пользователя
Mr.PolaZ
 
Сообщения: 67
Зарегистрирован: 13 мар 2018, 14:36
Благодарил (а): 37 раз.
Поблагодарили: 2 раз.

Re: Lite_Rank_System без функции (работа с чатом)

Сообщение Mr.PolaZ » 21 апр 2018, 13:21

В логе есть такая ошибка, подскажите пожалуйста с чем она может быть связана?

Lite_Rank_System.amxx debug в plugins.ini стоит

Код: Выделить всё
L 04/21/2018 - 11:07:39: [AMXX] Displaying debug trace (plugin "Lite_Rank_System.amxx")
L 04/21/2018 - 11:07:39: [AMXX] Run time error 19: function not found 
L 04
/21/2018 - 11:07:39: [AMXX]    [0] 2c358009ab21f29d2affe0be115bf896.sma::plugin_init (line 114)
Аватара пользователя
Mr.PolaZ
 
Сообщения: 67
Зарегистрирован: 13 мар 2018, 14:36
Благодарил (а): 37 раз.
Поблагодарили: 2 раз.

Re: Lite_Rank_System без функции (работа с чатом)

Сообщение Stimul » 21 апр 2018, 14:16

Mr.PolaZ, в первом посте точно переделанный исходник?
Ибо это не вырезано:
Код: Выделить всё
new const szRegisterClmd[][] =
{
    "say /rus",    "LangRus",
    "say /eng",    "LangEng",
    "say",        "Say",
    "say_team",    "SayTeam"
}
for(
new a; a < sizeof szRegisterClmd; a += 2)
    register_clcmd(szRegisterClmd[a],szRegisterClmd[+ 1])

Из-за чего и происходит ошибка.
Аватара пользователя
Stimul
 
Сообщения: 3582
Зарегистрирован: 04 янв 2012, 19:51
Благодарил (а): 192 раз.
Поблагодарили: 1163 раз.
Опыт программирования: Больше трех лет

Re: Lite_Rank_System без функции (работа с чатом)

Сообщение Mr.PolaZ » 21 апр 2018, 14:24

Ой, простите пожалуйста, я позже вырезал эту часть кода и скомпилировал.

Осталась только ошибка в логе
Код: Выделить всё
L 04/21/2018 13:15:01: [AMXXDisplaying debug trace (plugin "Lite_Rank_System.amxx")
L 04/21/2018 13:15:01: [AMXXRun time error 19: function not found 
L 04
/21/2018 13:15:01: [AMXX]    [02c358009ab21f29d2affe0be115bf896.sma::plugin_init (line 114
Аватара пользователя
Mr.PolaZ
 
Сообщения: 67
Зарегистрирован: 13 мар 2018, 14:36
Благодарил (а): 37 раз.
Поблагодарили: 2 раз.

Re: Lite_Rank_System без функции (работа с чатом)

Сообщение Stimul » 21 апр 2018, 15:04

Mr.PolaZ, конечный исходник файлом прикрепи. В первом посте кроме того, что я указал, все зарегистрированные функции есть.
Аватара пользователя
Stimul
 
Сообщения: 3582
Зарегистрирован: 04 янв 2012, 19:51
Благодарил (а): 192 раз.
Поблагодарили: 1163 раз.
Опыт программирования: Больше трех лет

Re: Lite_Rank_System без функции (работа с чатом)

Сообщение Mr.PolaZ » 21 апр 2018, 20:12

конечно, держите


Время 1:11 am :-)

Только что обнаружил что система не может найти функцию "LangRus"



потом такая же ситуация при запуске следующей карты
Код: Выделить всё
L 04/21/2018 - 23:23:21: Start of error session.
L 04/21/2018 - 23:23:21: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20180421.log")
L 04/21/2018 - 23:23:21: Function "LangRus" was not found
L 04
/21/2018 - 23:23:21: [AMXX] Displaying debug trace (plugin "Lite_Rank_System.amxx")
L 04/21/2018 - 23:23:21: [AMXX] Run time error 19: function not found 
L 04
/21/2018 - 23:23:21: [AMXX]    [0] 2c358009ab21f29d2affe0be115bf896.sma::plugin_init (line 114)


Код: Выделить всё
L 04/21/2018 - 23:30:56: Start of error session.
L 04/21/2018 - 23:30:56: Info (map "$2000$") (file "addons/amxmodx/logs/error_20180421.log")
L 04/21/2018 - 23:30:56: Function "LangRus" was not found
L 04
/21/2018 - 23:30:56: [AMXX] Displaying debug trace (plugin "Lite_Rank_System.amxx")
L 04/21/2018 - 23:30:56: [AMXX] Run time error 19: function not found 
L 04
/21/2018 - 23:30:56: [AMXX]    [0] 2c358009ab21f29d2affe0be115bf896.sma::plugin_init (line 114)


и так далее, происходит при смене карты :-)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Mr.PolaZ
 
Сообщения: 67
Зарегистрирован: 13 мар 2018, 14:36
Благодарил (а): 37 раз.
Поблагодарили: 2 раз.


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

cron