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

Как вывести лвл в HUD

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

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

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

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

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

Как вывести лвл в HUD

Сообщение ajiadb » 15 мар 2019, 18:59

Помогите, не показывает в HUD опыт и лвл.
Или как вывести его в hud?
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <zombieplague>
#include <zp_level_system>

#define is_user_valid_connected(%1) (1 <= %1 <= g_maxplayers && g_isconnected[%1])
#define is_user_valid_alive(%1) (1 <= %1 <= g_maxplayers && g_isalive[%1])
#define is_user_valid(%1) (1 <= %1 <= g_maxplayers)

#define MYSQL_SAVE    // MySQL сохранение
//#define NVAULT_SAVE // Nvault сохранение

#define HUD // Показывает худ опыта
#define LUP // Screen-fade, когда обновляется уровень.

#if defined MYSQL_SAVE
#include <sqlx>
#endif
#if defined NVAULT_SAVE
#include <nvault>
#endif

//Опыт для каждого уровня  1    2    3    4      5        6    7     8      9       10   11    12    13    14    15    16    17    18    19    20    21     22   23    24     25   26    27     28    29    30    31    32    33    34    35    36    37    38    39    40   50    51    52    53   54   55   56   57   58   59    60
new const Level_Exp[51] = {110020030040050060070080090010001100120013001400150016001700180019002000210022002300240025002600270028002900300031003200330034003500360037003800390040004100420043004400450046004700480049005000}
new 
g_level[51], g_exp[51],  g_next_exp[50], string[21], exp[3][33]

new const 
level_up[] = "zombie_plague/levelup.wav"

new g_maxplayersd_expFloat:g_PlayerDamage[33]
new 
pcvar_damage[10]

#if defined NVAULT_SAVE
new g_vault
#endif

#if defined MYSQL_SAVE

#define SQL_HOST        "46.174.49.4" // host name
#define SQL_USER        "ajiadb_bans6"
#define SQL_PASSWORD    "3apmmj7z"
#define SQL_DATABASE    "ajiadb_bans6"
#define SQL_TABLENAME    "zp_level_system"

new Handle:MYSQL_Tuple
new Handle:MYSQL_Connect
new g_szQuery[512]; 

new 
boolUserLoaded[33];
new 
UserSteamID[33][34];
#endif

public plugin_init()
{
    
register_plugin("[ZP]Level System""6.0""Dambas")

    
RegisterHam(Ham_Killed"player""fw_PlayerKilled")
    
RegisterHam(Ham_TakeDamage"player""fwTakeDamage")

    
register_logevent("RoundStart"2"1=Round_Start")
    
    
pcvar_damage[0] = register_cvar("zp_dmg_for_xp""500"// Сколько урона надо нанести для того что бы получить 1 опыт
    
pcvar_damage[1] = register_cvar("zp_give_xp_for_dmg""1"// Сколько опыта получит id за нанесенный урон
    
pcvar_damage[2] = register_cvar("zp_give_for_kill_nem""10"// Сколько получит id за убийство немезиды
    
pcvar_damage[3] = register_cvar("zp_give_for_kill_sur""10"// Сколько получит id за убийство выжевшего
    
pcvar_damage[4] = register_cvar("zp_give_for_kill_last""10"// Сколько получит id за убийство последнего человека
    
pcvar_damage[5] = register_cvar("zp_give_for_kill""5"// Сколько получит id-человек, за убийство зомби
    
    
pcvar_damage[6] = register_cvar("zp_give_zombie""1"// Сколько получит зомби за убийство человека
    
pcvar_damage[7] = register_cvar("zp_give_nemesis""1"// Сколько получит Немезида за убийство человека
    
pcvar_damage[8] = register_cvar("zp_give_surv""1"// Сколько получит Выживший за убийство зомби
    
pcvar_damage[9] = register_cvar("zp_give_lasthum""10"// Сколько получит Последний человек за убийство зомби
    
    
g_maxplayers get_maxplayers()
    
    
#if defined NVAULT_SAVE
    
g_vault nvault_open("zp_level_system")
    
#endif
}

public 
plugin_precache() 

    
precache_sound(level_up


public 
plugin_natives()
{
    
register_native("zp_level""native_level"1)
    
register_native("zp_exp""native_exp"1)
    
register_native("zp_next_level_exp""native_zp_next_level_exp"1)
    
    
register_native("zp_get_user_exp""native_zp_get_user_exp"1)
    
register_native("zp_set_user_exp""native_zp_set_user_exp"1)
}

public 
plugin_cfg()
{
    new 
cfgdir[32]
    
get_configsdir(cfgdircharsmax(cfgdir))
    
server_cmd("exec %s/zp_level_system.cfg"cfgdir)
    
    
#if defined MYSQL_SAVE
    
SQL_LoadDebug();
    
#endif
}

public 
client_connect(id)
{
    if ( 
is_user_bot(id) )
        return
        
    
g_level[id] = 1
    
    
#if defined NVAULT_SAVE
    
LoadData(id)
    
#endif
}

public 
client_putinserver(id)
{
    
#if defined MYSQL_SAVE
    
LoadData(id)
    
#endif
    
set_task(3.0"func_change_exp"id)
}

public 
client_disconnect(id)
{
    
#if defined NVAULT_SAVE
    
SaveData(id)
    
#endif
    
    #if defined MYSQL_SAVE
    
if(!UserLoaded[id])
        return;
    
    
formatex(g_szQuerycharsmax(g_szQuery), "UPDATE `%s` SET `lvl` = '%d', `exp` = '%d' WHERE `%s`.`SteamID` = '%s';"SQL_TABLENAMEg_level[id], g_exp[id], SQL_TABLENAMEUserSteamID[id])
    
SQL_ThreadQuery(MYSQL_Tuple"SQL_Thread"g_szQuery)
    
#endif
    
    
g_exp[id] = 0
    g_level
[id] = 0
    g_next_exp
[id] = 0
    
    exp
[0][id] = 0
    exp
[1][id] = 0
    exp
[2][id] = 0
    
    remove_task
(id)
}

public 
plugin_end()
{
    
#if defined NVAULT_SAVE
    
nvault_close(g_vault)
    
#endif
    
    #if defined MYSQL_SAVE
    
if(MYSQL_Tuple
        
SQL_FreeHandle(MYSQL_Tuple)
    
    if(
MYSQL_Connect
        
SQL_FreeHandle(MYSQL_Connect)
    
#endif
}

#if defined MYSQL_SAVE
public SQL_LoadDebug() 
{
    new 
szError[512]
    new 
iErrorCode
    
    MYSQL_Tuple 
SQL_MakeDbTuple(SQL_HOSTSQL_USERSQL_PASSWORDSQL_DATABASE)
    
MYSQL_Connect SQL_Connect(MYSQL_TupleiErrorCodeszErrorcharsmax(szError))
    
    if(
MYSQL_Connect == Empty_Handle)
        
set_fail_state(szError)
    
    if(!
SQL_TableExists(MYSQL_ConnectSQL_TABLENAME))
    {
        new 
Handle:hQueries
        
new szQuery[512]
        
        
formatexszQuerycharsmax(szQuery), "CREATE TABLE IF NOT EXISTS `%s` (SteamID VARCHAR(32) CHARACTER SET cp1250 COLLATE cp1250_general_ci NOT NULL, lvl INT NOT NULL, exp INT NOT NULL, PRIMARY KEY (SteamID))"SQL_TABLENAME)
        
hQueries SQL_PrepareQuery(MYSQL_ConnectszQuery)
        
        if( !
SQL_Execute(hQueries))
        {
            
SQL_QueryError(hQueriesszErrorcharsmax(szError))
            
set_fail_state(szError)
        }
        
SQL_FreeHandle(hQueries)
    }
    
SQL_QueryAndIgnore(MYSQL_Connect"SET NAMES utf8")
}

public 
SQL_QueryiStateHandlehQueryszError[], iErrorCodeiParams[], iParamsSize)
{
    switch(
iState)
    {
        case 
TQUERY_CONNECT_FAILEDlog_amx("Load - Could not connect to SQL database. [%d] %s"iErrorCodeszError)
        case 
TQUERY_QUERY_FAILEDlog_amx("Load Query failed. [%d] %s"iErrorCodeszError)
    }
    
    new 
id iParams[0]
    
UserLoaded[id] = true
    
    
if(SQL_NumResults(hQuery) < 1)
    {
        if(
equal(UserSteamID[id], "ID_PENDING"))
            return 
PLUGIN_HANDLED
        formatex
(g_szQuerycharsmax(g_szQuery), "INSERT INTO `%s` (`SteamID`, `lvl`, `exp`) VALUES ('%s', '%d', '%d');"SQL_TABLENAMEUserSteamID[id], g_level[id], g_exp[id])
        
SQL_ThreadQuery(MYSQL_Tuple"SQL_Thread"g_szQuery)
        
        return 
PLUGIN_HANDLED;
    }
    else
    {
        
g_level[id] = SQL_ReadResult(hQuery1)
        
g_exp[id] = SQL_ReadResult(hQuery2)
    }
    
    return 
PLUGIN_HANDLED;
}

public 
LoadData(id)
{
    
    if(!
is_user_connected(id))
        return;
    
    new 
iParams[1]
    
iParams[0] = id
    
    get_user_authid
(idUserSteamID[id], charsmax(UserSteamID[]))
    
    
formatex(g_szQuerycharsmax(g_szQuery), "SELECT * FROM `%s` WHERE (`%s`.`SteamID` = '%s')"SQL_TABLENAMESQL_TABLENAMEUserSteamID[id])
    
SQL_ThreadQuery(MYSQL_Tuple"SQL_Query"g_szQueryiParamssizeof iParams)
}

public 
SQL_Thread(iStateHandlehQueryszError[], iErrorCodeiParams[], iParamsSize)
{
    if(
iState == 0)
        return;
    
    
log_amx("SQL Error: %d (%s)"iErrorCodeszError)
}
#endif



#if defined NVAULT_SAVE
public SaveData(id)
{
    new 
AuthID[35]
    
get_user_authid(id,AuthID,34)
 
    new 
vaultkey[64],vaultdata[256]
    
format(vaultkey,63,"%s",AuthID)
    
format(vaultdata,255,"%i#%i#%i#",g_exp[id],g_level[id],g_next_exp[id])
    
nvault_set(g_vault,vaultkey,vaultdata)
    
    return 
PLUGIN_CONTINUE;
}
public 
LoadData(id)
{
    new 
AuthID[35]
    
get_user_authid(id,AuthID,34)
 
    new 
vaultkey[64],vaultdata[256]
    
format(vaultkey,63,"%s",AuthID)
    
format(vaultdata,255,"%i#%i#%i#",g_exp[id],g_level[id],g_next_exp[id])
    
nvault_get(g_vault,vaultkey,vaultdata,255)
 
    
replace_all(vaultdata255"#"" ")
 
    new 
playerxp[32], playerlevel[32], playernextexp[32]
 
    
parse(vaultdataplayerxp31playerlevel31)
 
    
g_exp[id] = str_to_num(playerxp)
    
g_level[id] = str_to_num(playerlevel)
    
g_next_exp[id] = str_to_num(playernextexp)
 
    return 
PLUGIN_CONTINUE;
}
#endif


public func_change_exp (id)
{
    
d_exp zp_get_user_exp(id)
    
    
exp[0][id] = d_exp
    exp
[1][id] = d_exp
    exp
[2][id] = d_exp
    
    
#if defined HUD
    
set_task(1.0,"change_exp",id,_,_,"b")
    
#endif
}

public 
change_exp(id
{
    if(
cs_get_user_team(id) == CS_TEAM_SPECTATOR && is_user_connected(id))
        return 
PLUGIN_HANDLED

    exp
[1][id] = zp_get_user_exp(id)
    
    if(
exp[1][id] != exp[2][id]) 
    {
        if(
exp[1][id] > exp[2][id]) 
        {
            
d_exp exp[1][id] - exp[2][id]
            
format(string,charsmax(string),"[+%d Опыт]"d_exp)
        }
        
        
exp[2][id] = exp[1][id]
        
        
set_hudmessage(255152470.570.5706.03.0,1,1,4)
        
show_hudmessage(id"%s"string)
    }
    return 
PLUGIN_HANDLED;
}

public 
fwTakeDamage(idinflictorattackerFloat:damage

    if(!
is_user_connected(attacker))
    return;
    
    if(
zp_get_user_zombie(attacker) || zp_get_user_survivor(attacker) || zp_get_user_nemesis(attacker))
    return;
    
    if(
g_level[attacker] > Level_Exp[id])
    return;

    
g_PlayerDamage[attacker] += damage
    
    
if(g_PlayerDamage[attacker] >= get_pcvar_float(pcvar_damage[0]))
    {    
        
g_exp[attacker] += get_pcvar_num(pcvar_damage[1])    
        
change_exp(id)
        
g_PlayerDamage[attacker] -= get_pcvar_float(pcvar_damage[0])
    }
    
check_level(attacker)
}

public 
fw_PlayerKilled(idkiller)
{
    
menu_cancel(id)
    if(!
is_user_alive(killer))
    return;    

    if(
g_level[killer] > Level_Exp[id])
    return;    

    if(
zp_get_user_nemesis(id))
    
g_exp[killer] += get_pcvar_num(pcvar_damage[2])

    else if(
zp_get_user_survivor(id))
    
g_exp[killer] += get_pcvar_num(pcvar_damage[3])

    else if(
zp_get_user_last_human(id))
    
g_exp[killer] += get_pcvar_num(pcvar_damage[4])

    else if(
zp_get_user_zombie(killer))
    
g_exp[killer] += get_pcvar_num(pcvar_damage[6])

    else if(
zp_get_user_nemesis(killer))
    
g_exp[killer] += get_pcvar_num(pcvar_damage[7])
    
    else if(
zp_get_user_survivor(killer))
    
g_exp[killer] += get_pcvar_num(pcvar_damage[8])
    
    else if(
zp_get_user_last_human(killer))
    
g_exp[killer] += get_pcvar_num(pcvar_damage[9])

    else
    
g_exp[killer] += get_pcvar_num(pcvar_damage[5])

    
check_level(killer)
}

public 
check_level(id)
{
    if(!
is_user_connected(id))
        return 
PLUGIN_HANDLED;
    
    new 
MAX_LVL sizeof Level_Exp 1;
    
    if (
g_exp[id] > Level_Exp[MAX_LVL] - )
        return 
PLUGIN_HANDLED;
    
    
    if( 
g_exp[id] >= Level_Expg_level[id]])
    {
        if ( 
g_level[id] < MAX_LVL g_level[id]++
        
emit_sound(idCHAN_STREAMlevel_up1.0ATTN_NORM0PITCH_NORM)
        
#if defined LUP
        
message_begin(MSG_ONEget_user_msgid("ScreenFade"), {000}, id)
        
write_short(<< 11)
        
write_short(<< 11)
        
write_short(0x0001)
        
write_byte(255// r
        
write_byte(255//g
        
write_byte(0//b
        
write_byte(110// alpha
        
message_end()
        
#endif
        
ChatColor(id"!g[ZP]!yТы достиг !g%d !yровня."g_level[id]) 
        
g_exp[id] = 0
    
}
    
    return 
PLUGIN_HANDLED;
}

public 
RoundStart() 
{
    new 
players[32], numi
    get_players 
playersnum )
    
    for( 
i=1numi++ ) 
    {
        
exp[0][players[i]] = zp_get_user_exp(players[i])
    }
    
    
#if defined MYSQL_SAVE
    
for( new id 1id <= 32id++ )
    {
        if(!
is_user_connected(id))
            continue;
        
        if(!
UserLoaded[id])
            return;
        
        
formatex(g_szQuerycharsmax(g_szQuery), "UPDATE `%s` SET `lvl` = '%d', `exp` = '%d' WHERE `%s`.`SteamID` = '%s';"SQL_TABLENAMEg_level[id], g_exp[id], SQL_TABLENAMEUserSteamID[id])
        
SQL_ThreadQuery(MYSQL_Tuple"SQL_Thread"g_szQuery)
    }
    
#endif
}

public 
native_level(id)
{
    return 
g_level[id];
}

public 
native_exp(id)
{
    return 
g_exp[id];
}

public 
native_zp_next_level_exp(id)
{
    return 
Level_Exp[g_level[id]];
}

public 
native_zp_get_user_exp(id)
{
    if (!
is_user_valid(id))
    {
        
log_error(AMX_ERR_NATIVE"[ZP] Invalid Player (%d)"id)
        return -
1;
    }
    
    return 
g_exp[id];
}

public 
native_zp_set_user_exp(idamount)
{
    if (!
is_user_valid(id))
    {
        return 
false;
    }
    
    
g_exp[id] = amount
    check_level
(id)
    return 
true;
}

stock ChatColor(const id, const input[], any:...)
{
    new 
count 1players[32]
    static 
msg[191]
    
vformat(msg190input3)
    
    
replace_all(msg190"!g""^4"
    
replace_all(msg190"!y""^1"
    
replace_all(msg190"!r""^3"
    
replace_all(msg190"!b""^0")
    
    if (
idplayers[0] = id; else get_players(playerscount"ch")
    {
        for (new 
0counti++)
        {
            if (
is_user_connected(players[i]))
            {
                
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), {0,0,0}, players[i])
                
write_byte(players[i]);
                
write_string(msg);
                
message_end();
            }
        }
    }
}

stock boolSQL_TableExists(HandlehDataBase, const szTable[])
{
    new 
HandlehQuery SQL_PrepareQuery(hDataBase"SELECT * FROM information_schema.tables WHERE table_name = '%s' LIMIT 1;"szTable)
    new 
szError[512]
    
    if(!
SQL_Execute(hQuery))
    {
        
SQL_QueryError(hQueryszErrorcharsmax(szError))
        
set_fail_state(szError)
    }
    else if( !
SQL_NumResults(hQuery))
    {
        
SQL_FreeHandle(hQuery)
        return 
false;
    }
    
SQL_FreeHandle(hQuery)
    return 
true;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/
 
Аватара пользователя
ajiadb
 
Сообщения: 3
Зарегистрирован: 24 мар 2014, 15:40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6

Re: Как вывести лвл в HUD

Сообщение R0mz1k » 15 мар 2019, 20:33

Вывод информации у тебя и так в HUD
Аватара пользователя
R0mz1k
 
Сообщения: 20
Зарегистрирован: 30 июл 2014, 12:55
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: Как вывести лвл в HUD

Сообщение артист666 » 15 мар 2019, 21:58

Код: Выделить всё
string[21]


У тебя вообще что это за дичь?
Зачем она глобальная? Где в неё записыватся строка?
Ты сам что-то ковырял/добавлял?

Единственная строка, где идёт запись:
Код: Выделить всё
format(string,charsmax(string),"[+%d Опыт]"d_exp


И та в условии, а если оно не сработает, то игрок получит сообщение другого игрока.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Как вывести лвл в HUD

Сообщение ajiadb » 16 мар 2019, 13:09

артист666 писал(а):
Код: Выделить всё
string[21


У тебя вообще что это за дичь?
Зачем она глобальная? Где в неё записыватся строка?
Ты сам что-то ковырял/добавлял?

Единственная строка, где идёт запись:
Код: Выделить всё
format(string,charsmax(string),"[+%d Опыт]", d_exp)


И та в условии, а если оно не сработает, то игрок получит сообщение другого игрока.

Нет, ни чего не трогал, он был такой.
Писано было, что есть внутри, вывод в худ, но ни чего нету, когда ставлю.
Вот сюда и пришел, как то сделать отдельно или внутри его поправить.
Буду очень благодарен)
Аватара пользователя
ajiadb
 
Сообщения: 3
Зарегистрирован: 24 мар 2014, 15:40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6


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

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

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