Вопрос по разработке плагина HUD информации об игроках

Сообщения
34
Реакции
1
Здравствуйте. Пытаюсь разработать плагин модификации плагина AES, для вывода HUD информации об игроке при наведении на него. Столкнулся с некоторыми проблемами связанными с компилацией и ошибками.
Проблема связана с выводом именно звания игрока. Пытаюсь выводить, иногда вместо звания показывает цифры 14 и 208. Пожалуйста помогите и уточните где я могу ошибаться? (

C++:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csx>

#include <aes_main>

#define PLUGIN "AES: HUD Player Info"
#define VERSION    "1.0"
#define AUTHOR "Somon"

// #pragma semicolon 1

new g_FriendOnly
new g_Levels[33][36]


public plugin_init( )
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    g_FriendOnly = register_cvar("aim_friendo", "0");
    
    register_event("StatusValue", "EventStatusValue", "b", "1>0", "2>0");
}

public EventStatusValue(const id)
{
if(!is_user_bot(id) && is_user_connected(id))
    {
    new sName[32], sOsef[8], iType = read_data(1), iData = read_data(2);
    // new iRank = get_user_stats(iData, sOsef, sOsef)

    
    
    get_user_name(iData, sName, 31);
    
    new player_level = aes_get_player_level(iData);
    // new zvanie = aes_get_level_name(player_level,31,iData);
    // new aStats[AES_ST_END]
    new zvanie2 = aes_get_level_name(player_level,g_Levels[iData],31);
    
    if(iType == 3 || !g_FriendOnly && iType == 1) return;

    if(cs_get_user_team(iData) == CS_TEAM_T)
    {
        set_hudmessage(255, 0, 0, -0.40, 1.0, 0, 2.0, 2.0);
        show_hudmessage(id,"%s ^nЗвание: %d ^nHP: %d / AP: %d", sName, zvanie2, get_user_health(iData), get_user_armor(iData));
    }
    if(cs_get_user_team(iData) == CS_TEAM_CT)
    {
        
        set_hudmessage(0, 128, 255, -0.40, 1.0, 0, 2.0, 2.0);
        show_hudmessage(id,"%s ^nЗвание: %d ^nHP: %d / AP: %d", sName, zvanie2, get_user_health(iData), get_user_armor(iData));
    }
    }
}
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Somon007, строка 38, неизвестный твоему плагину натив aes_get_player_level(iData).
 
Последнее редактирование:
Сообщения
34
Реакции
1
Code_0xABC, присутствует все нужное и натив в том числе в компиляторе тоже есть.
 
Сообщения
34
Реакции
1
Somon007, доработал немножко код плагина:

Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csx>

#include <aes_v>



#define PLUGIN "AES: HUD Player Info"
#define VERSION    "1.0"
#define AUTHOR "Somon"

// #pragma semicolon 1

new g_FriendOnly
new g_status_sync
new playerLevel[33][64]
new levelName[64]

public plugin_init( )
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    g_FriendOnly = register_cvar("aim_friendo", "0");
    
    register_event("StatusValue", "EventStatusValue", "be", "1=2", "2!0");
    register_event("StatusValue", "hideStatus", "be", "1=1", "2=0");
    
    g_status_sync = CreateHudSyncObj()
}

public hideStatus(id)
{
    ClearSyncHud(id, g_status_sync)
}

public EventStatusValue(const id)
{

  if(!is_user_bot(id) && is_user_connected(id))
   {
    new sName[32], iType = read_data(1), iData = read_data(2);
    // new iRank = get_user_stats(iData, sOsef, sOsef)
    
    get_user_name(iData, sName, 31);
    new player_level = aes_get_player_level(iData)
    
    if(player_level || !playerLevel[iData][0]){
        // new aStats[AES_ST_END]
        // aes_get_player_stats(iData,aStats)
        // aes_get_level_name(aStats[AES_ST_LEVEL],g_Levels[iData],35)
        // aes_get_level_name(player_level,playerLevel[iData],charsmax(playerLevel[]),iData)
        aes_get_level_name(player_level,levelName,charsmax(levelName),iData)
    }
    
    
    
    if(iType == 3 || !g_FriendOnly && iType == 1) return;

    if(cs_get_user_team(iData) == CS_TEAM_T)
    {
        set_hudmessage(255, 0, 0, -1.0, 0.35, 1, 0.01, 3.0, 0.01, 0.01);
        ShowSyncHudMsg(id, g_status_sync, "%s ^nЗвание: %d ^nHP: %d / AP: %d", sName, playerLevel[iData], get_user_health(iData), get_user_armor(iData));
    }
    if(cs_get_user_team(iData) == CS_TEAM_CT)
    {
        set_hudmessage(0, 128, 255, -1.0, 0.35, 1, 0.01, 3.0, 0.01, 0.01);
        ShowSyncHudMsg(id, g_status_sync, "%s ^nЗвание: %d ^nHP: %d / AP: %d", sName, playerLevel[iData], get_user_health(iData), get_user_armor(iData));
    }
   }
}
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Somon007, расскажи мне про параметры функуии aes_get_level_name(player_level,levelName,charsmax(levelName),iData) Из инклуида aes_v
Код:
/**
* Returns level name for level num.
*
* @param level            level number
* @param level[]        Buffer to copy level name output to
* @param len            Maximum size of buffer
* @param idLang            language id
*
* @return                 len
*/
native aes_get_level_name(level,level_name[],len,idLang = LANG_SERVER);
У тебя iData - это айди игрока на кого смотрит, a 4 параметр может принимать значение
#define LANG_SERVER 0
#define LANG_PLAYER -1
Если параметр не указывать, то примет значение LANG_SERVER
Теперь с плагина действия натива
Код:
public _aes_get_level_name(plugin,params)
{
    new level = get_param(1);
    new len = get_param(3);
    new idLang = get_param(4);

    if(level > levels_count)
        level = levels_count - 1;

    new LangKey[10],levelName[AES_MAX_LEVEL_LENGTH];

    formatex(LangKey,charsmax(LangKey),"LVL_%d",level + 1);
    len = formatex(levelName,len,"%L",idLang,LangKey);

    set_string(2,levelName,len);

    return len;
}
 
Последнее редактирование:
Сообщения
34
Реакции
1
Code_0xABC, правильно, список званий идёт и берет с LANG_SERVER. В том и проблема что я могу вывести ID званий (уже прогресс) но у меня не получается вытащить названия по ID звания.
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Somon007, с помощью aes_get_player_level ты получаешь уровень игрока, далее с помощью aes_get_level_name, ты записываешь в массив само звание с пощью получившего рание уровня игрока, 4 параметр нужен для мультиязычности этого сообщения
 
Сообщения
34
Реакции
1
Code_0xABC, пытался) почему-то вместо названия по уровню звания пишет 208 всем званиям. Сам удивлен.
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Покажи как ты получаешь имя? Ты понимаешь или нет, что для строки нужен спцификатор %s?
10 Апр 2024
Код:
#include <amxmodx>
#include <aes_v>
#include <cstrike>

#define PLUGIN "AES: HUD Player Info"
#define VERSION    "1.0"
#define AUTHOR "Somon"

const LEN_BUFFER = 32;

new g_FriendOnly;

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR);

    g_FriendOnly = register_cvar("aim_friendo", "0");
    register_event("StatusValue", "EVENT_StatusValue", "b", "1>0", "2>0");
}

public EVENT_StatusValue(const id) {
    if(!is_user_bot(id) && is_user_alive(id)) {
        new iType = read_data(1);
    
        if(iType == 3 || (!g_FriendOnly && iType == 1))
            return;
        
        new
            pPurpose = read_data(2),
            szBuffer[LEN_BUFFER +1],
            Len = aes_get_level_name(aes_get_player_level(pPurpose), szBuffer, LEN_BUFFER);

        if(!Len)
            return;

        new                                                                             
            iColor[3],
            CsTeams:eTeamPurpose = cs_get_user_team(pPurpose);

        if(eTeamPurpose == CS_TEAM_T)
            iColor[0] = 255;

        else if(eTeamPurpose == CS_TEAM_CT) {
            iColor[1] = 128;
            iColor[2] = 255;
        }

        set_hudmessage(iColor[0], iColor[1], iColor[2], -0.40, 1.0, 0, 2.0, 2.0);
        show_hudmessage(id, "%n ^nЗвание: %s ^nHP: %d / AP: %d", pPurpose, szBuffer, get_user_health(pPurpose), get_user_armor(pPurpose));
    }
}
 
Последнее редактирование:
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Ну и желательно эти проверки переместить выше, после получения первого аргумента, в избежании лишних действий
iType == 3 || (!g_FriendOnly && iType == 1)
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Somon007, плюс ко всему худ сделай как в твоем примере, и лови второй евент с другими параметрами, для удаления сообщения, если игрок отвернулся
 
Сообщения
34
Реакции
1
Code_0xABC, сделал уже и задачу которая убирает худ при отведении прицела тоже. Все работает, спасибо большое)
 
Сообщения
34
Реакции
1
Code_0xABC, там ещё доработать нужно пару деталей связанных с определение друга/врага. Завтра уже доделаю код и скину потом + информация об оружии. [Звание, жизнь, броня, оружие для друзей; звание и оружие для всех].
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу