Не выводится строка с цифрами при использовании write_string()

Сообщения
6
Реакции
1
Здравствуйте! Мне необходимо поменять сообщение statusText, все отлично работает, но если строка начинается с цифр, то она вообще не выводится. Как это можно исправить?

Такой код выведет строку "my text":
C#:
message_begin(MSG_ONE_UNRELIABLE, msgStatusText, _, id);
write_byte(0);
write_string("my text");
message_end();
А такой код ничего не выведет, хотя строка для вывода указана:
C#:
message_begin(MSG_ONE_UNRELIABLE, msgStatusText, _, id);
write_byte(0);
write_string("322my text");
message_end();
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
попробуй использовать форматирование текста

Код:
new szMessage[64]
formatex(szMessage, charsmax(szMessage), "332 hp");

message_begin(MSG_ONE_UNRELIABLE, msgStatusText, _, id);
write_byte(0);
write_string(szMessage);
message_end();
 
Сообщения
6
Реакции
1
Limbooc, тоже самое, не выводит( Если заменить на строку "hp 322", то все нормально отрабатывает.
 
Последнее редактирование:

AUF

Сообщения
91
Реакции
8
Big Mac, вот
C++:
new MsgText[64]
formatex(MsgText, charsmax(MsgText), "Ваш текст")
MsgStatusText(id, MsgText)

stock MsgStatusText(index, message[])
{
    const mStatusText = 106
    emessage_begin(MSG_ONE_UNRELIABLE, mStatusText, .player = index)
    ewrite_byte(index)
    ewrite_string(message)
    emessage_end()
}
 
Последнее редактирование:
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
AUF, а зачем ему твоё const mSayText = 76? По его мегасе можно понять (msgStatusText), что это другое тык
 
Последнее редактирование:
Сообщения
6
Реакции
1
Code_0xABC,
Код:
#include <amxmodx>
#include <amxmisc>
#include <engine>

new msgStatusText;

public plugin_init() {
    register_event("StatusValue", "showDistance", "be", "1=2", "2!0");
    msgStatusText = get_user_msgid("StatusText");
}

public showDistance(id) {
    new target, body;
    new str[64];
    get_user_aiming(id, target, body, 9999);
    new units = get_entity_distance(id, target);
    
    num_to_str(units, str, 10);
    
    message_begin(MSG_ONE_UNRELIABLE, msgStatusText, _, id);
    write_byte(0);
    write_string(str);
    message_end();
}
Хочу, чтобы при наведении прицела на игрока, отображалась дистанция до него.
6 Апр 2024
AUF, не работает это(
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Big Mac,в эвенте, второй аргумент и есть на кого наведен прицел.
 
Последнее редактирование:
Сообщения
673
Реакции
242
Помог
11 раз(а)
Код:
public showDistance(id)
{
    new iTarget = read_data(2);

    new units = get_entity_distance(id, iTarget);

    client_print(id, print_center, "%d метров", units);
}
Big Mac,используй стандартные стоки от Amxx
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
Code_0xABC, ну если так;

Код:
new g_iSyncMainDeadInformer

public plugin_init()
{
    register_event("StatusValue", "Event_StatusValueShow", "be", "1=2", "2!0");
    register_event("StatusValue", "Event_StatusValueHide", "be", "1=1", "2=0");
    g_iSyncMainDeadInformer = CreateHudSyncObj();
}

public Event_StatusValueShow(pId)
{
    new iTarget = read_data(2);
    set_hudmessage(102, 69, 0, -1.0, 0.8, 0, 0.0, 10.0, 0.0, 0.0, -1);
    ShowSyncHudMsg(pId, g_iSyncMainDeadInformer, "%n^nHP: %d | AP: %d",iTarget, get_user_health(iTarget), get_user_armor(iTarget));
}

public Event_StatusValueHide(id) ClearSyncHud(id, g_iSyncMainDeadInformer);
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Limbooc, думаю стоит все таки проверить на коннект, да и дистанция не получена и я бы добавил как в том топике цвет команды)
 

AUF

Сообщения
91
Реакции
8
Переделывал под свои нужды когда-то
Дистанцию щас добавил
Код от serfreeman1337
C++:
#include <amxmodx>
#include <engine>
#tryinclude <lrs_csstats>

#define PLUGIN "LRS: Status Info"
#define AUTHOR "serfreeman1337, AcE"
#define VERSION "0.2"

const mStatusText = 106
new CVAR_ENEMY[128], CVAR_FRIEND[128]

enum _:isTpl
{
    TPL_DIS
    #if defined _lrs_csstats_included
    ,TPL_EXP, TPL_EXPNEED, TPL_LEVEL, TPL_MAXLEVEL, TPL_RANK
    #endif
}

new isTplFormat[isTpl]

new tplForm[][] =
{
    "<dis>"
    #if defined _lrs_csstats_included
    ,"<exp>", "<nxp>", "<lvl>", "<mvl>", "<rnk>"
    #endif
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    bind_pcvar_string(create_cvar("lrs_status_enemy", "1 Враг: %p2, Дистанция: <dis>"), CVAR_ENEMY, charsmax(CVAR_ENEMY))
    bind_pcvar_string(create_cvar("lrs_status_friend", "1 Друг: %p2, HP %i3%%, Дистанция: <dis>"), CVAR_FRIEND, charsmax(CVAR_FRIEND))
    register_event_ex("StatusValue", "Show_Status", RegisterEvent_Single | RegisterEvent_OnlyAlive | RegisterEvent_OnlyHuman, "1=2", "2!0")
}

public plugin_cfg()
{
    for (new i; i < isTpl; ++ i)
    {
        if (contain(CVAR_FRIEND, tplForm[i]))
            isTplFormat[i] |= (1<<0)

        if (contain(CVAR_ENEMY, tplForm[i]))
            isTplFormat[i] |= (1<<1)
    }
}

public Show_Status(id)
{
    new targetId = read_data(2)
    new isEnemy = get_user_team(id) != get_user_team(targetId)

    new statusTxt[128]
    copy(statusTxt, 127, isEnemy ? CVAR_ENEMY : CVAR_FRIEND)

    if (!tplFormat(id, targetId, statusTxt, 127, isEnemy))
        return

    message_begin(MSG_ONE, mStatusText, .player = id)
    write_byte(0)
    write_string(statusTxt)
    message_end()
}

public tplFormat(id, targetId, statusTxt[], statusLen, isEnemy)
{
    new tmp[32]

    #if defined _lrs_csstats_included
    new aStats[LRS_MAX_DATA]
    if (!lrs_get_player_stats_thread(targetId, aStats))
        return 0
    #endif

    for (new i; i < isTpl; ++ i)
    {
        if (isTplFormat[i] & (1<<isEnemy))
        {
            switch(i)
            {
                case TPL_DIS: formatex(tmp, 31, "%d", get_entity_distance(id, targetId))

                #if defined _lrs_csstats_included
                case TPL_EXP: formatex(tmp, 31, "%d", aStats[LRS_EXP])
                case TPL_EXPNEED: formatex(tmp, 31, "%d", aStats[LRS_NEXT_LVL])
                case TPL_LEVEL: formatex(tmp, 31, "%d", aStats[LRS_LVL])
                case TPL_MAXLEVEL: formatex(tmp, 31, "%d", lrs_get_max_lvl())
                case TPL_RANK: formatex(tmp, 31, "%s", aStats[LRS_LVL_NAME])
                #endif
            }
            replace_all(statusTxt, statusLen, tplForm[i], tmp)
        }
    }
    replace_all(statusTxt, statusLen, "\n", "^n")
    return 1
}
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
Code_0xABC, тут уже волен ТС, скинул пример реализации а проверки уже....., отдельная история и тема)
 
Сообщения
6
Реакции
1
Big Mac,в эвенте, второй аргумент и есть на кого наведен прицел.
на кого прицел наведен узнать не проблема, в коде это есть. Проблема в выводе чисел в статусе.
6 Апр 2024
Limbooc, это реализация для вывода худ, а задача вывести сообщение именно в статусе, не через худ.
6 Апр 2024
Переделывал под свои нужды когда-то
Дистанцию щас добавил
Код от serfreeman1337
C++:
#include <amxmodx>
#include <engine>
#tryinclude <lrs_csstats>

#define PLUGIN "LRS: Status Info"
#define AUTHOR "serfreeman1337, AcE"
#define VERSION "0.2"

const mStatusText = 106
new CVAR_ENEMY[128], CVAR_FRIEND[128]

enum _:isTpl
{
    TPL_DIS
    #if defined _lrs_csstats_included
    ,TPL_EXP, TPL_EXPNEED, TPL_LEVEL, TPL_MAXLEVEL, TPL_RANK
    #endif
}

new isTplFormat[isTpl]

new tplForm[][] =
{
    "<dis>"
    #if defined _lrs_csstats_included
    ,"<exp>", "<nxp>", "<lvl>", "<mvl>", "<rnk>"
    #endif
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    bind_pcvar_string(create_cvar("lrs_status_enemy", "1 Враг: %p2, Дистанция: <dis>"), CVAR_ENEMY, charsmax(CVAR_ENEMY))
    bind_pcvar_string(create_cvar("lrs_status_friend", "1 Друг: %p2, HP %i3%%, Дистанция: <dis>"), CVAR_FRIEND, charsmax(CVAR_FRIEND))
    register_event_ex("StatusValue", "Show_Status", RegisterEvent_Single | RegisterEvent_OnlyAlive | RegisterEvent_OnlyHuman, "1=2", "2!0")
}

public plugin_cfg()
{
    for (new i; i < isTpl; ++ i)
    {
        if (contain(CVAR_FRIEND, tplForm[i]))
            isTplFormat[i] |= (1<<0)

        if (contain(CVAR_ENEMY, tplForm[i]))
            isTplFormat[i] |= (1<<1)
    }
}

public Show_Status(id)
{
    new targetId = read_data(2)
    new isEnemy = get_user_team(id) != get_user_team(targetId)

    new statusTxt[128]
    copy(statusTxt, 127, isEnemy ? CVAR_ENEMY : CVAR_FRIEND)

    if (!tplFormat(id, targetId, statusTxt, 127, isEnemy))
        return

    message_begin(MSG_ONE, mStatusText, .player = id)
    write_byte(0)
    write_string(statusTxt)
    message_end()
}

public tplFormat(id, targetId, statusTxt[], statusLen, isEnemy)
{
    new tmp[32]

    #if defined _lrs_csstats_included
    new aStats[LRS_MAX_DATA]
    if (!lrs_get_player_stats_thread(targetId, aStats))
        return 0
    #endif

    for (new i; i < isTpl; ++ i)
    {
        if (isTplFormat[i] & (1<<isEnemy))
        {
            switch(i)
            {
                case TPL_DIS: formatex(tmp, 31, "%d", get_entity_distance(id, targetId))

                #if defined _lrs_csstats_included
                case TPL_EXP: formatex(tmp, 31, "%d", aStats[LRS_EXP])
                case TPL_EXPNEED: formatex(tmp, 31, "%d", aStats[LRS_NEXT_LVL])
                case TPL_LEVEL: formatex(tmp, 31, "%d", aStats[LRS_LVL])
                case TPL_MAXLEVEL: formatex(tmp, 31, "%d", lrs_get_max_lvl())
                case TPL_RANK: formatex(tmp, 31, "%s", aStats[LRS_LVL_NAME])
                #endif
            }
            replace_all(statusTxt, statusLen, tplForm[i], tmp)
        }
    }
    replace_all(statusTxt, statusLen, "\n", "^n")
    return 1
}
спасибо, попробую) После отпишусь.
 

AUF

Сообщения
91
Реакции
8
Big Mac, в ut-8 без bom сохрани плагин а то русский текст корявым будет.
 
Сообщения
6
Реакции
1
AUF, тут тоже самое, что и у меня. Если вывод начинается не с цифры все норм, если, допустим в строке 34 заменить
Код:
 bind_pcvar_string(create_cvar("lrs_status_friend", "1 Друг: %p2, HP %i3%%, Дистанция: <dis>"), CVAR_FRIEND, charsmax(CVAR_FRIEND))
на
Код:
 bind_pcvar_string(create_cvar("lrs_status_friend", "1231 Друг: %p2, HP %i3%%, Дистанция: <dis>"), CVAR_FRIEND, charsmax(CVAR_FRIEND))
то строка уже не выводится.
Мне нужно вывести только цифры.
 
Сообщения
6
Реакции
1
Переделывал под свои нужды когда-то
Дистанцию щас добавил
Код от serfreeman1337
C++:
#include <amxmodx>
#include <engine>
#tryinclude <lrs_csstats>

#define PLUGIN "LRS: Status Info"
#define AUTHOR "serfreeman1337, AcE"
#define VERSION "0.2"

const mStatusText = 106
new CVAR_ENEMY[128], CVAR_FRIEND[128]

enum _:isTpl
{
    TPL_DIS
    #if defined _lrs_csstats_included
    ,TPL_EXP, TPL_EXPNEED, TPL_LEVEL, TPL_MAXLEVEL, TPL_RANK
    #endif
}

new isTplFormat[isTpl]

new tplForm[][] =
{
    "<dis>"
    #if defined _lrs_csstats_included
    ,"<exp>", "<nxp>", "<lvl>", "<mvl>", "<rnk>"
    #endif
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    bind_pcvar_string(create_cvar("lrs_status_enemy", "1 Враг: %p2, Дистанция: <dis>"), CVAR_ENEMY, charsmax(CVAR_ENEMY))
    bind_pcvar_string(create_cvar("lrs_status_friend", "1 Друг: %p2, HP %i3%%, Дистанция: <dis>"), CVAR_FRIEND, charsmax(CVAR_FRIEND))
    register_event_ex("StatusValue", "Show_Status", RegisterEvent_Single | RegisterEvent_OnlyAlive | RegisterEvent_OnlyHuman, "1=2", "2!0")
}

public plugin_cfg()
{
    for (new i; i < isTpl; ++ i)
    {
        if (contain(CVAR_FRIEND, tplForm[i]))
            isTplFormat[i] |= (1<<0)

        if (contain(CVAR_ENEMY, tplForm[i]))
            isTplFormat[i] |= (1<<1)
    }
}

public Show_Status(id)
{
    new targetId = read_data(2)
    new isEnemy = get_user_team(id) != get_user_team(targetId)

    new statusTxt[128]
    copy(statusTxt, 127, isEnemy ? CVAR_ENEMY : CVAR_FRIEND)

    if (!tplFormat(id, targetId, statusTxt, 127, isEnemy))
        return

    message_begin(MSG_ONE, mStatusText, .player = id)
    write_byte(0)
    write_string(statusTxt)
    message_end()
}

public tplFormat(id, targetId, statusTxt[], statusLen, isEnemy)
{
    new tmp[32]

    #if defined _lrs_csstats_included
    new aStats[LRS_MAX_DATA]
    if (!lrs_get_player_stats_thread(targetId, aStats))
        return 0
    #endif

    for (new i; i < isTpl; ++ i)
    {
        if (isTplFormat[i] & (1<<isEnemy))
        {
            switch(i)
            {
                case TPL_DIS: formatex(tmp, 31, "%d", get_entity_distance(id, targetId))

                #if defined _lrs_csstats_included
                case TPL_EXP: formatex(tmp, 31, "%d", aStats[LRS_EXP])
                case TPL_EXPNEED: formatex(tmp, 31, "%d", aStats[LRS_NEXT_LVL])
                case TPL_LEVEL: formatex(tmp, 31, "%d", aStats[LRS_LVL])
                case TPL_MAXLEVEL: formatex(tmp, 31, "%d", lrs_get_max_lvl())
                case TPL_RANK: formatex(tmp, 31, "%s", aStats[LRS_LVL_NAME])
                #endif
            }
            replace_all(statusTxt, statusLen, tplForm[i], tmp)
        }
    }
    replace_all(statusTxt, statusLen, "\n", "^n")
    return 1
}
тупанул я, помог твой код, большое тебе спасибо)
 

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

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