Написание плагинов

Vit_ amin

Добрая душа
Сообщения
1,565
Реакции
749
Да я думаю можно как-то и через files.inc, наверное
По факту - тоже костыли
P.S. Надо смотреть реализацию метода KeyValues::SaveToFile и сравнить его с функциналом из SourceMod - есть ли разница или это нюанс работы метода из движка
C-подобный:
bool KeyValues::SaveToFile( IBaseFileSystem *filesystem, const char *resourceName, const char *pathID, bool sortKeys /*= false*/, bool bAllowEmptyString /*= false*/, bool bCacheResult /*= false*/ )
Возможно параметр bAllowEmptyString - разрешает/запрещает нужный вам фунционал, но это не точно (требует изучения)
Как вариант - вызывать KeyValues методы из движка по сигнатурам и сравнивать способ работы
 
Последнее редактирование:

7pElllHuK

Участник
Сообщения
1,558
Реакции
557
Всем доброе утро, подскажите пожалуйста как вывести свой текст под прицелом игрока в 34 ксс
1763971246562.png
 

Synd1qate

Участник
Сообщения
904
Реакции
375

VeNoM`1K =))

Живи и ошибайся. В этом жизнь.
Сообщения
704
Реакции
268
Если не ошибаюсь то переменная mp_playerid отвечает за вывод этого текста
Это просто обозначение , но не сам текст.

mp_playerid 0 // Контролирует информацию которую игрок видит на панели статуса: 0 все имена; 1 только имена игроков своей команды; 2 без имён.
mp_playerid_delay 0.5
mp_playerid_hold 0.25


Как написал @Synd1qate, он прав. Такое идет от клиента.
Я даже не задумывался , чтобы изменить такой текст 😄
 

Synd1qate

Участник
Сообщения
904
Реакции
375
Если не ошибаюсь то переменная mp_playerid отвечает за вывод этого текста
Всё верно, переменная отвечает, но это client.dll
Если бы был хук, как например "HookUserMessage(GetUserMessageId("TextMsg"), MessageHandler, true);", то возможно и поменять возможно было бы, а так думаю увы, может кто умнее и шарит подскажет
1763973460832.png
 

7pElllHuK

Участник
Сообщения
1,558
Реакции
557
Всё верно, переменная отвечает, но это client.dll
Если бы был хук, как например "HookUserMessage(GetUserMessageId("TextMsg"), MessageHandler, true);", то возможно и поменять возможно было бы, а так думаю увы, может кто умнее и шарит подскажет
Посмотреть вложение 122832
Очень надеюсь, но судя по тому что игре дофига лет и никто так и не нашел способ, то скорее всего сделать это попросту нельзя. Но надеюсь все же что найдутся умельцы, туда можно много текста интересного выводить. От рекламы до важных уведомлений которые игрок 100% заметит
 

danil253467

💘Italo-Disco & Neon One Love💘
Сообщения
95
Реакции
52
Всем доброе утро, подскажите пожалуйста как вывести свой текст под прицелом игрока в 34 ксс
Ну может быть, в твоем случае только кастомный худ под прицелом поможет... Выше отметили, что это клиентская сторона
 

Synd1qate

Участник
Сообщения
904
Реакции
375
Очень надеюсь, но судя по тому что игре дофига лет и никто так и не нашел способ, то скорее всего сделать это попросту нельзя. Но надеюсь все же что найдутся умельцы, туда можно много текста интересного выводить. От рекламы до важных уведомлений которые игрок 100% заметит
Да вот только проблема в том, что эта информация показывается только при наведении на игрока, какую там рекламу впихнуть хз
 

7pElllHuK

Участник
Сообщения
1,558
Реакции
557
Да вот только проблема в том, что эта информация показывается только при наведении на игрока, какую там рекламу впихнуть хз
По идее функционал наведения прицела можно обойти. Мб можно через сигнатуры как-то можно получать и дальше выводить свой текст
 

Synd1qate

Участник
Сообщения
904
Реакции
375
По идее функционал наведения прицела можно обойти. Мб можно через сигнатуры как-то можно получать и дальше выводить свой текст
Под это можно использовать худ, хинт, центр
К тому же сие чудо отключается через hud_showtargetid
 

7pElllHuK

Участник
Сообщения
1,558
Реакции
557
Всем добрый вечер. Сделал инклуд для проверки версии игры и вывода текста из нужной библиотеки. Всё готово, кроме работы с клиентмодом.

Проблемы:

1) Текст нужно получать через функцию CM_GetPhrase и хранить в char, а потом уже выводить. Нельзя выводить перевод напрямую.
2) Из-за этого не получается корректно показывать текст всем игрокам, учитывая, играют они с клиентмодом или без. ID игрока получается только один раз в CM_GetPhrase, и потом текст выводится всем одинаково, без нужного префикса CM_.

Как работает в плагине:
public Action Command_Test(int iClient, int iArgs)
{
    int iTeam = 121212;

    char p1[64], p2[64];

    CM_GetPhrase(iClient, "Prefix", p1, sizeof(p1));
    CM_GetPhrase(iClient, "Text", p2, sizeof(p2));

    GPrintToChat(iClient, "%t %t", "Prefix", "Text", iTeam);
   
    return Plugin_Handled;
}
INCLUDE:
stock void GPrintToChat(int iClient, const char[] sFormat, any ...)
{
    if (iClient <= 0 || iClient > MaxClients || !IsClientInGame(iClient)) return;

    char sBuffer[1024];

    SetGlobalTransTarget(iClient);
    VFormat(sBuffer, sizeof(sBuffer), sFormat, 3);

    if (g_iEngine == CSS_v34)
    {
        if (g_bPlayerCM[iClient])
        {
            MC_PrintToChat(iClient, "%s", sBuffer);
            C_PrintToChat(iClient, "%s", sBuffer);
        }
       
        else CPrintToChat(iClient, "%s", sBuffer);
    }
   
    else if (g_iEngine == CSS_v92) MCPrintToChat(iClient, "%s", sBuffer);
    else if (g_iEngine == CSGO) CGOPrintToChat(iClient, "%s", sBuffer);
    else PrintToChat(iClient, "%s", sBuffer);
}


stock void CM_GetPhrase(int iClient, const char[] sPhrase, char[] sOut, int iMaxlen)
{
    if (g_iEngine == CSS_v34 && g_bPlayerCM[iClient])
    {
        char sCM[128];
        Format(sCM, sizeof(sCM), "CM_%s", sPhrase);

        if (TranslationPhraseExists(sCM))
        {
            strcopy(sOut, iMaxlen, sCM);
            return;
        }
    }

    strcopy(sOut, iMaxlen, sPhrase);
}

stock void GPrintToChatAll(const char[] sFormat, any ...)
{
    char sBuffer[1024];

    for (int i = 1; i <= MaxClients; i++)
    {
        if (!IsClientInGame(i) || IsFakeClient(i)) continue;

        SetGlobalTransTarget(i);
        VFormat(sBuffer, sizeof(sBuffer), sFormat, 2);

        GPrintToChat(i, "%s", sBuffer);
    }
}

Задача:
Нужно сделать функцию GPrintToChat, которая будет автоматически добавлять префикс CM_ к фразе из перевода для указанного игрока, если у него есть клиентмод.
 
Последнее редактирование:
Сверху Снизу