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

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
//SourceMod Batch Compiler
// by the SourceMod Dev Team


//// teg_bonus.sp
// C:\Users\¤щўяш\Desktop\teg_bonus.sp(3) : error 001: expected token: ";", but found "-identifier-"
// C:\Users\¤щўяш\Desktop\teg_bonus.sp(8) : error 021: symbol already defined: "void"
// C:\Users\¤щўяш\Desktop\teg_bonus.sp(8) : error 017: undefined symbol "hEvent"
// C:\Users\¤щўяш\Desktop\teg_bonus.sp(8) : error 029: invalid expression, assumed zero
// C:\Users\¤щўяш\Desktop\teg_bonus.sp(8) : fatal error 127: too many error messages on one line
//
// Compilation aborted.
// 5 Errors.
//
// Compilation Time: 0,36 sec
// ----------------------------------------

Press enter to exit ...
Написал на новом синтаксисе, старый не знаю)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
SM1.6.3:
#pragma semicolon 1

#define BONUS_TAG    "hlmod.net"    // Тег в нике, за который выдаётся бонусные здоровье и броня
#define BONUS_HP    110                // Количество здоровья при спавне игрока, у которого присутствует тег в нике
#define BONUS_AP    110                // Количество брони при спавне игрока, у которого присутствует тег в нике

new String:sBuffer[MAX_NAME_LENGTH];

public OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
}

public Event_Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(client && IsClientInGame(client) && !IsFakeClient(client) && GetClientTeam(client) > 1
    && GetClientName(client, sBuffer, sizeof(sBuffer)) && StrContains(sBuffer, BONUS_TAG, true) != -1)
    {
        SetEntityHealth(client, BONUS_HP);
        SetEntProp(client, Prop_Send, "m_ArmorValue", BONUS_AP);
    }
}
Ну и на новом синтаксисе:
SM1.8+:
#pragma semicolon 1
#pragma newdecls required

static const char
    BONUS_TAG[]    = "hlmod.net";    // Тег в нике, за который выдаётся бонусные здоровье и броня
static const int
    BONUS_HP    = 110,            // Количество здоровья при спавне игрока, у которого присутствует тег в нике
    BONUS_AP    = 110;            // Количество брони при спавне игрока, у которого присутствует тег в нике

char
    sBuffer[MAX_NAME_LENGTH];

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(client && IsClientInGame(client) && !IsFakeClient(client) && GetClientTeam(client) > 1
    && GetClientName(client, sBuffer, sizeof(sBuffer)) && StrContains(sBuffer, BONUS_TAG, true) != -1)
    {
        SetEntityHealth(client, BONUS_HP);
        SetEntProp(client, Prop_Send, "m_ArmorValue", BONUS_AP);
    }
}
 
Последнее редактирование:

Yurka_Bear

Участник
Сообщения
61
Реакции
4
SM1.6.3:
#pragma semicolon 1

#define BONUS_TAG    "hlmod.net"    // Тег в нике, за который выдаётся бонусные здоровье и броня
#define BONUS_HP    110                // Количество здоровья при спавне игрока, у которого присутствует тег в нике
#define BONUS_AP    110                // Количество брони при спавне игрока, у которого присутствует тег в нике

new String:sBuffer[MAX_NAME_LENGTH];

public OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
}

public Event_Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(client && IsClientInGame(client) && !IsFakeClient(client) && GetClientTeam(client) > 1
    && GetClientName(client, sBuffer, sizeof(sBuffer)) && StrContains(sBuffer, BONUS_TAG, true) != -1)
    {
        SetEntProp(client, Prop_Send, "m_iHealth", BONUS_HP);
        SetEntProp(client, Prop_Send, "m_iArmor", BONUS_AP);
    }
}
Ну и на новом синтаксисе:
SM1.8+:
#pragma semicolon 1
#pragma newdecls required

static const char
    BONUS_TAG[]    = "hlmod.net";    // Тег в нике, за который выдаётся бонусные здоровье и броня
static const int
    BONUS_HP    = 110,            // Количество здоровья при спавне игрока, у которого присутствует тег в нике
    BONUS_AP    = 110;            // Количество брони при спавне игрока, у которого присутствует тег в нике

char
    sBuffer[MAX_NAME_LENGTH];

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(client && IsClientInGame(client) && !IsFakeClient(client) && GetClientTeam(client) > 1
    && GetClientName(client, sBuffer, sizeof(sBuffer)) && StrContains(sBuffer, BONUS_TAG, true) != -1)
    {
        SetEntProp(client, Prop_Send, "m_iHealth", BONUS_HP);
        SetEntProp(client, Prop_Send, "m_iArmor", BONUS_AP);
    }
}
Хп добавляет, только вот модуль sm_spawn_protection его перебивает, и обнуляет спустя секундку( столько стоит у меня защита при спавне) попробовал вообще убрать защиту, перестало хп давать вообще(. И броня кстати не работает, не выдает. Только 100
Сообщения автоматически склеены:

SM1.6.3:
#pragma semicolon 1

#define BONUS_TAG    "hlmod.net"    // Тег в нике, за который выдаётся бонусные здоровье и броня
#define BONUS_HP    110                // Количество здоровья при спавне игрока, у которого присутствует тег в нике
#define BONUS_AP    110                // Количество брони при спавне игрока, у которого присутствует тег в нике

new String:sBuffer[MAX_NAME_LENGTH];

public OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
}

public Event_Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(client && IsClientInGame(client) && !IsFakeClient(client) && GetClientTeam(client) > 1
    && GetClientName(client, sBuffer, sizeof(sBuffer)) && StrContains(sBuffer, BONUS_TAG, true) != -1)
    {
        SetEntProp(client, Prop_Send, "m_iHealth", BONUS_HP);
        SetEntProp(client, Prop_Send, "m_iArmor", BONUS_AP);
    }
}
Ну и на новом синтаксисе:
SM1.8+:
#pragma semicolon 1
#pragma newdecls required

static const char
    BONUS_TAG[]    = "hlmod.net";    // Тег в нике, за который выдаётся бонусные здоровье и броня
static const int
    BONUS_HP    = 110,            // Количество здоровья при спавне игрока, у которого присутствует тег в нике
    BONUS_AP    = 110;            // Количество брони при спавне игрока, у которого присутствует тег в нике

char
    sBuffer[MAX_NAME_LENGTH];

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(client && IsClientInGame(client) && !IsFakeClient(client) && GetClientTeam(client) > 1
    && GetClientName(client, sBuffer, sizeof(sBuffer)) && StrContains(sBuffer, BONUS_TAG, true) != -1)
    {
        SetEntProp(client, Prop_Send, "m_iHealth", BONUS_HP);
        SetEntProp(client, Prop_Send, "m_iArmor", BONUS_AP);
    }
}
С хп разобрался, вот брони так и нет(
 
Последнее редактирование:

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Хп добавляет, только вот модуль sm_spawn_protection его перебивает, и обнуляет спустя секундку( столько стоит у меня защита при спавне) попробовал вообще убрать защиту, перестало хп давать вообще(. И броня кстати не работает, не выдает. Только 100
Сообщения автоматически склеены:


С хп разобрался, вот брони так и нет(
замени
SetEntProp(client, Prop_Send, "m_iArmor", BONUS_AP);
на
SetEntProp(client, Prop_Send, "m_ArmorValue", BONUS_AP);
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Всем добрый вечер, дайте пожалуйста рабочий код для проверки на наличие у игрока флага администратора
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
А что, если я скажу обратное?

Проверка на конкретный флаг Проверка является ли игрок администратором.
Проверка в целом, является ли игрок админом Проверка является ли игрок администратором.
сейчас еще раз попробую тогда, мб я пропустил что-то
Сообщения автоматически склеены:

А что, если я скажу обратное?

Проверка на конкретный флаг Проверка является ли игрок администратором.
Проверка в целом, является ли игрок админом Проверка является ли игрок администратором.
Cпасибо, все работает
 
Последнее редактирование:

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
При разделении таких слов számítógép на символы, после чего преобразуя их в строки, учитывая что некоторые из символов многобайтовые, перемешиваю их - получаю у части символов потерю части кода символа, насколько я понял

На выходе:
1688370903239.png


Причем эти вопросы только у букв которые находятся слева символов и всегда именно у них(m, g, p, t), возможно есть и другие буквы, но я проверяю только это слово

C-подобный:
ArrayList word = CreateArray(64);
char temp[3], abs[256];
for(int i = 0; i < strlen(sWord);)
{
    temp[0] = sWord[i];
    if(IsCharMB(sWord[i]))
    {
        temp[1] = sWord[i+1];
        i+=IsCharMB(sWord[i]);
    }
    else i++;

    word.PushString(temp);
}

word.Sort(Sort_Random, Sort_String);

for(int i = 0; i < word.Length; i++)
{
    temp = NULL_STRING;
    word.GetString(i, temp, sizeof(temp));
    StrCat(abs, sizeof(abs), temp);
}

PrintToChatAll("%s", abs);
 
Последнее редактирование:

komashchenko

Идиот
Сообщения
916
Реакции
2,569
При разделении таких слов számítógép на символы, после чего преобразуя их в строки, учитывая что некоторые из символов многобайтовые, перемешиваю их - получаю у части символов потерю части кода символа, насколько я понял

На выходе:
Посмотреть вложение 112838


Причем эти вопросы только у букв которые находятся слева символов и всегда именно у них(m, g, p, t), возможно есть и другие буквы, но я проверяю только это слово

C-подобный:
ArrayList word = CreateArray(64);
char temp[3], abs[256];
for(int i = 0; i < strlen(sWord);)
{
    temp[0] = sWord[i];
    if(IsCharMB(sWord[i]))
    {
        temp[1] = sWord[i+1];
        i+=IsCharMB(sWord[i]);
    }
    else i++;

    word.PushString(temp);
}

word.Sort(Sort_Random, Sort_String);

for(int i = 0; i < word.Length; i++)
{
    temp = NULL_STRING;
    word.GetString(i, temp, sizeof(temp));
    StrCat(abs, sizeof(abs), temp);
}

PrintToChatAll("%s", abs);
Рабочий вариант, уверен можно сделать лучше

C++:
void SortRandomString(char[] szText)
{
    int iTextLen = strlen(szText);
    int[] iTextSymbolPos = new int[iTextLen];
    int iSymbols = 0;
    char[] szTextSorted = new char[iTextLen];
    
    for(int i = 0; i < iTextLen;)
    {
        iTextSymbolPos[iSymbols++] = i;
        i += GetCharBytes(szText[i]);
    }
    
    SortIntegers(iTextSymbolPos, iSymbols, Sort_Random);
    
    for(int i = 0, k = 0; i < iSymbols; i++)
    {
        int iBytes = GetCharBytes(szText[iTextSymbolPos[i]]);
        for(int u = 0; u < iBytes; u++)
        {
            szTextSorted[k++] = szText[iTextSymbolPos[i] + u];
        }
    }
    
    strcopy(szText, iTextLen + 1, szTextSorted);
}
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Всем добрый день, подскажите пожалуйста, как это правильно записать, не могу понять как правильно это сделать
Код:
public Action:GAP_TimerTell(Handle:timer)
{
    TT = 0;
    CT = 0;
    for (new iClient = 1; i <= MaxClients; iClient++)
    {

        if (IsClientInGame(iClient) && IsPlayerAlive(iClient) && GetClientTeam(iClient) == 2)
        {
            TT++;
        }
        else
        {
           for (; iClient <= MaxClients; iClient++)
           {
              if (IsClientInGame(iClient) && IsPlayerAlive(iClient) && GetClientTeam(iClient) == 3)
              {
                CT++;
              }
              break;
           }
        }
    }
    
    if (CM_IsClientModUser(iClient))
    {
        char sMessage[MAX_HUD_MESSAGE_LENGTH*2];
        CFormatHudText(sMessage, sizeof(sMessage), "{gold}T{pink}: {orange}%d {aqua}| {blue}CT: {fullblue}%d", TT, CT);
        {
            Handle hBuffer = StartMessageOne("HudMsg", iClient);
            if (hBuffer)
            {
                BfWriteByte(hBuffer, 1); //channel
                BfWriteFloat(hBuffer, -1.0); //x
                BfWriteFloat(hBuffer, 0.80); //y
                
                BfWriteByte(hBuffer, 255); //r
                BfWriteByte(hBuffer, 0); //g
                BfWriteByte(hBuffer, 0); //b
                BfWriteByte(hBuffer, 255); //a
                
                BfWriteByte(hBuffer, 0); //r
                BfWriteByte(hBuffer, 255); //g
                BfWriteByte(hBuffer, 0); //b
                BfWriteByte(hBuffer, 255); //a
                
                BfWriteByte(hBuffer, 0); //effect
                
                BfWriteFloat(hBuffer, 0.0); //fadein
                BfWriteFloat(hBuffer, 2.0); //fadeout
                
                BfWriteFloat(hBuffer, 3.0); //holdtime
                BfWriteFloat(hBuffer, 0.0); //fxtime
                
                
                BfWriteString(hBuffer, sMessage);
                EndMessage();
            }
        }
    }
    
    else
    {
        PrintHintTextToAll("T: %d | CT: %d", TT, CT);
    }
    
    return Plugin_Continue;
}
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Всем добрый день, подскажите пожалуйста, как это правильно записать, не могу понять как правильно это сделать
Код:
public Action:GAP_TimerTell(Handle:timer)
{
    TT = 0;
    CT = 0;
    for (new iClient = 1; i <= MaxClients; iClient++)
    {

        if (IsClientInGame(iClient) && IsPlayerAlive(iClient) && GetClientTeam(iClient) == 2)
        {
            TT++;
        }
        else
        {
           for (; iClient <= MaxClients; iClient++)
           {
              if (IsClientInGame(iClient) && IsPlayerAlive(iClient) && GetClientTeam(iClient) == 3)
              {
                CT++;
              }
              break;
           }
        }
    }
   
    if (CM_IsClientModUser(iClient))
    {
        char sMessage[MAX_HUD_MESSAGE_LENGTH*2];
        CFormatHudText(sMessage, sizeof(sMessage), "{gold}T{pink}: {orange}%d {aqua}| {blue}CT: {fullblue}%d", TT, CT);
        {
            Handle hBuffer = StartMessageOne("HudMsg", iClient);
            if (hBuffer)
            {
                BfWriteByte(hBuffer, 1); //channel
                BfWriteFloat(hBuffer, -1.0); //x
                BfWriteFloat(hBuffer, 0.80); //y
               
                BfWriteByte(hBuffer, 255); //r
                BfWriteByte(hBuffer, 0); //g
                BfWriteByte(hBuffer, 0); //b
                BfWriteByte(hBuffer, 255); //a
               
                BfWriteByte(hBuffer, 0); //r
                BfWriteByte(hBuffer, 255); //g
                BfWriteByte(hBuffer, 0); //b
                BfWriteByte(hBuffer, 255); //a
               
                BfWriteByte(hBuffer, 0); //effect
               
                BfWriteFloat(hBuffer, 0.0); //fadein
                BfWriteFloat(hBuffer, 2.0); //fadeout
               
                BfWriteFloat(hBuffer, 3.0); //holdtime
                BfWriteFloat(hBuffer, 0.0); //fxtime
               
               
                BfWriteString(hBuffer, sMessage);
                EndMessage();
            }
        }
    }
   
    else
    {
        PrintHintTextToAll("T: %d | CT: %d", TT, CT);
    }
   
    return Plugin_Continue;
}
Что записать то?
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Что записать то?
Ошибки забыл скинуть
Ошибки:
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\include\menus.inc(372) : warning 219: local variable "i" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\include\halflife.inc(442) : warning 219: local variable "i" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\include\clientmod/colors/morecolors.inc(254) : warning 219: local variable "i" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\include\clientmod/colors/morecolors.inc(367) : warning 219: local variable "i" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\include\clientmod/colors/colors.inc(399) : warning 219: local variable "i" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(52) : warning 219: local variable "iClient" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(52) : error 017: undefined symbol "i"
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(52) : error 100: function prototypes do not match
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(72) : warning 217: loose indentation
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(72) : error 017: undefined symbol "iClient"
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(77) : error 017: undefined symbol "iClient"
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(114) : warning 217: loose indentation
//
// 4 Errors.
//
// Compilation Time: 0,52 sec
// ----------------------------------------
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Ошибки забыл скинуть
Ошибки:
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\include\menus.inc(372) : warning 219: local variable "i" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\include\halflife.inc(442) : warning 219: local variable "i" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\include\clientmod/colors/morecolors.inc(254) : warning 219: local variable "i" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\include\clientmod/colors/morecolors.inc(367) : warning 219: local variable "i" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\include\clientmod/colors/colors.inc(399) : warning 219: local variable "i" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(52) : warning 219: local variable "iClient" shadows a variable at a preceding level
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(52) : error 017: undefined symbol "i"
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(52) : error 100: function prototypes do not match
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(72) : warning 217: loose indentation
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(72) : error 017: undefined symbol "iClient"
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(77) : error 017: undefined symbol "iClient"
// D:\Desktop\╩юьяшы ЄюЁ√\1.9 scripting\Team_Info.sp(114) : warning 217: loose indentation
//
// 4 Errors.
//
// Compilation Time: 0,52 sec
// ----------------------------------------
И каким образом понять где ошибки? Когда ошибки идут с фулл файла, а нам скидываешь вырезку
 
Сверху Снизу