SourceMod Прошу проверить на ошибки.

Тема в разделе "Программирование / Скриптинг", создана пользователем Primo, 29 янв 2014.

  1. Primo

    Primo Где мои манеры

    Сообщения:
    1.190
    Симпатии:
    307
    Доброго времени суток.
    Я занимался скриптингом на amxmodx и только сегодня перешол на sourcemod.
    Написал достаточно простой плагин, но не уверен, что он работает, т.к. не во всех функциях sm разобрался.

    И еще. Я не знаю как исправляется ошибка:
    Error 100: function prototypes do not match

    Warning'и прошу не брать в серьёз. Брал переменную ClientID для будущих нужд.

    PHP:
    #include <sourcemod>
      
    new GameValue
    new UserID
    new UserIDT
    new ClientID
     
    public Plugin:myinfo =
    {
        
    name "VErtoe MiniMode",
        
    author "Primo",
        
    description "Random modes",
        
    version "1.0",
    }
     
    public 
    OnPluginStart()
    {
        
    HookEvent("round_start"VErtoe_Round_Start);
        
    HookEvent("player_spawned"VErtoe_PlayerSpawn);
        
    RegAdminCmd("ghost_on"Command_ghoston);
        
    RegConsoleCmd("ghost_off"Command_ghostoff);
    }

    public 
    VErtoe_Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    UserID GetEventInt(event"userid")
        
    ClientID GetClientOfUserId(UserID)
        
    //GameValue = GetRandomInt(0, 1);
        
    if(GameValue == 1)
        {
            
    PrintCenterTextAll("Активирован режим призраков")
        }
    }

    public 
    VErtoe_Round_End(Handle:event, const String:name[], bool:dontBroadcast)
    {
        return;
    }

    public 
    GhostGame()
    {
        
    SetEntityRenderMode(UserIDTRenderMode:RENDER_TRANSCOLOR);  
        
    SetEntityRenderColor(UserIDT2552552550); 
    }
    public 
    VErtoe_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if(
    GameValue == 1)
        {
            if(
    GetClientTeam(UserID) == 2)
            {
                
    UserIDT GetEventInt(event"userid")
                
    GhostGame();
            }
        }
        return;
    }

    public 
    Command_ghoston(clientargs)
    {
        
    GameValue 1
        
    return;
    }

    public 
    Command_ghostoff(clientargs)
    {
        
    GameValue 0
        
    return;
    }

    P.S. Если есть ошибки, а они точно есть, то прошу писать без грубостей...
     
  2. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.973
    Симпатии:
    2.980
    Primo,
    PHP:
    public VErtoe_Round_Start(Handle:event, const String:name[], bool:dontBroadcast

        
    UserID GetEventInt(event"userid"
        
    ClientID GetClientOfUserId(UserID
        
    //GameValue = GetRandomInt(0, 1); 
        
    if(GameValue == 1
        { 
            
    PrintCenterTextAll("Активирован режим призраков"
        } 
    }
    Ты не можешь получить индекс клиента из хандла эвента старта раунда.

    PHP:
    HookEvent("player_spawned"VErtoe_PlayerSpawn);
    Нет такого эвента, есть player_spawn.

    PHP:
    public VErtoe_Round_End(Handle:event, const String:name[], bool:dontBroadcast

        return; 
    }
    Это что вообще?

    PHP:
    public GhostGame() 

        
    SetEntityRenderMode(UserIDTRenderMode:RENDER_TRANSCOLOR);   
        
    SetEntityRenderColor(UserIDT2552552550);  
    }
    Ты не передал аргумента, чтобы присваивать ему цвет.

    PHP:
    public Command_ghoston(clientargs

        
    GameValue 
        
    return; 


    public 
    Command_ghostoff(clientargs

        
    GameValue 
        
    return; 
    return Plugin_Handled; пиши. И еще это Action
    PHP:
     RegAdminCmd("ghost_on"Command_ghoston); 
    Нет 3-го аргумента - флага доступа.
    Исправленый код:
    PHP:
    #include <sourcemod> 
       
    new GameValue 
      
    public Plugin:myinfo 

        
    name "VErtoe MiniMode"
        
    author "Primo"
        
    description "Random modes"
        
    version "1.0"

      
    public 
    OnPluginStart() 

        
    HookEvent("round_start"VErtoe_Round_Start); 
        
    HookEvent("player_spawn"VErtoe_PlayerSpawn); 
        
    RegAdminCmd("ghost_on"Command_ghostonADMFLAG_BAN); 
        
    RegAdminCmd("ghost_off"Command_ghostoffADMFLAG_BAN); 


    public 
    VErtoe_Round_Start(Handle:event, const String:name[], bool:dontBroadcast

        if(
    GameValue == 1PrintCenterTextAll("Активирован режим призраков"


    public 
    GhostGame(client

        
    SetEntityRenderMode(clientRenderMode:RENDER_TRANSCOLOR);   
        
    SetEntityRenderColor(client2552552550);  


    public 
    VErtoe_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast

        if(
    GameValue == 1
        {
            new 
    client GetClientOfUserId(GetEventInt(event"userid"))
            if(
    GetClientTeam(client) == 2GhostGame(client); 
        } 


    public 
    Action:Command_ghoston(clientargs

        
    GameValue 
        
    return Plugin_Handled


    public 
    Action:Command_ghostoff(clientargs

        
    GameValue 
        
    return Plugin_Handled
     
    Primo и Серый™ нравится это.
  3. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Primo, спаун игрока - player_spawn (а не player_spawned)

    UserID = GetEventInt(event, "userid")
    ClientID = GetClientOfUserId(UserID)

    Традиционно userid нигде не используется, поэтому сразу обычно делают client = GetClientOfUserId(GetEventInt(event, "userid"))
    В RoundStart нет никакого userid, нужно в playerspawn это делать


    SetEntityRenderMode, SetEntityRenderColor, GetClientTeam, и вообще почти все функции, использующие ID игрока - в них надо ClientId а не UserId передавать

    function prototypes do not match - это на какую строчку ругается?
     
  4. Primo

    Primo Где мои манеры

    Сообщения:
    1.190
    Симпатии:
    307
    Я использовал традиционную wiki по Sourcemod, там был эвент player_spawned, ну он так назывался...
    Спасибо за уделённое время.

    Добавлено через 5 часов 13 минут
    Ошибки понял, разобрался.
    Но не разобрался кое в чем. При данном коде должен, по идеи, при спавне террорист становится невидимым, если GameValue = 1, также писать в чат соответствующее сообщение, но это не работает.
    PHP:
    #include <sourcemod> 
       
    new GameValue 
      
    public Plugin:myinfo 

        
    name "VErtoe MiniMode"
        
    author "Primo"
        
    description "Random modes"
        
    version "1.0"

      
    public 
    OnPluginStart() 

        
    HookEvent("round_start"VErtoe_Round_Start); 
        
    HookEvent("player_spawned"VErtoe_PlayerSpawn); 
        
    RegAdminCmd("ghost_on"Command_ghostonADMFLAG_BAN); 
        
    RegAdminCmd("ghost_off"Command_ghostoffADMFLAG_BAN); 


    public 
    VErtoe_Round_Start(Handle:event, const String:name[], bool:dontBroadcast

        if(
    GameValue == 1PrintCenterTextAll("Активирован режим призраков"


    public 
    VErtoe_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast

        if(
    GameValue == 1
        {
            new 
    client GetClientOfUserId(GetEventInt(event"userid"))
            if(
    GetClientTeam(client) == 2)
            {
                
    PrintToChatAll("Активирован режим призраков, террористы будут призраками");
                
    SetEntityRenderMode(clientRenderMode:RENDER_TRANSCOLOR);   
                
    SetEntityRenderColor(client2552552550);  
            }
        } 


    public 
    Action:Command_ghoston(clientargs

        
    PrintToChatAll("Активирован режим призраков");
        
    GameValue 
        
    return Plugin_Handled


    public 
    Action:Command_ghostoff(clientargs

        
    PrintToChatAll("Деактивирован режим призраков");
        
    GameValue 
        
    return Plugin_Handled
    }
     
    Последнее редактирование: 30 янв 2014
  5. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.973
    Симпатии:
    2.980
    Это наоборот видимый
    PHP:
    SetEntityRenderColor(client2552552550);
    Вот
    PHP:
    SetEntityRenderColor(client0000);
     
    Primo нравится это.
  6. Primo

    Primo Где мои манеры

    Сообщения:
    1.190
    Симпатии:
    307
    Хорошо. Но а то, что
    PHP:
    PrintToChatAll("Активирован режим призраков, террористы будут призраками");
    должно писаться всегда, когда кто-то спавнится за террористов?
     
  7. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.973
    Симпатии:
    2.980
    PHP:
        HookEvent("player_spawn"VErtoe_PlayerSpawn);  
    Говорили уже
     
  8. Primo

    Primo Где мои манеры

    Сообщения:
    1.190
    Симпатии:
    307
    Я пишу для cs go, и, как говорит wiki, там player_spawned

    Wiki
     
  9. NagarD

    NagarD

    Сообщения:
    412
    Симпатии:
    170
    Там прозрачность нулевая, т.ч. там всё равно, черная или белая будет модель.

    Primo, там нету ничего что должно не работать, больше склоняюсь в евенту спавна. Замени на
    PHP:
    HookEvent("player_spawn"VErtoe_PlayerSpawn);
    и увидишь что все работает
     
    Primo нравится это.
  10. Primo

    Primo Где мои манеры

    Сообщения:
    1.190
    Симпатии:
    307
    Тогда чем регулировать прозрачность, если прозрачным не становятся таким способом?
     
  11. NagarD

    NagarD

    Сообщения:
    412
    Симпатии:
    170
    это rgba (red green blue alfa) значение. alfa - прозрачность. Поставь 125 и увидишь полупрозрачного белого игрока.
     
  12. Primo

    Primo Где мои манеры

    Сообщения:
    1.190
    Симпатии:
    307
    Это я всё знаю, но проблема в том, что прозрачность не устанавливается, или я что-то не так делаю...
     
  13. wanted241

    wanted241 Real-Gamer.Ru

    Сообщения:
    783
    Симпатии:
    355
    Не работает в КС гоу прозрачность!
     
  14. Primo

    Primo Где мои манеры

    Сообщения:
    1.190
    Симпатии:
    307
    Сказали бы сразу...

    Тогда другой вопрос.
    Как я понял, функция, отвечающая за удаление оружия - RemovePlayerItem(client, item);?

    Если это так, то 2 аргумент указывать слот игрока или определённое оружие weapon_*? Мне нужно, чтобы все оружия пропадали.
     
  15. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.973
    Симпатии:
    2.980
    Оффтоп
     
  16. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Не забывай, что есть ивенты, общие для всех игр (в том числе и для CS:GO) и они перечислены отдельно - https://wiki.alliedmods.net/Generic_Source_Events#player_spawn
     
    Primo нравится это.
  17. Primo

    Primo Где мои манеры

    Сообщения:
    1.190
    Симпатии:
    307
    Какой функцией можно проверить на бота? Т.е. является ли игрок ботом или нет.

    Нужно отсеять ботов от людей, а функции найти не могу. Под носом вертится только IsClientAuthorized
     
  18. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.973
    Симпатии:
    2.980
    Primo нравится это.
  19. Primo

    Primo Где мои манеры

    Сообщения:
    1.190
    Симпатии:
    307
    Попробую

    Добавлено через 16 часов 54 минуты
    Знает ли кто, как вызывать функцию ClientCommand(client, "r_screenoverlay *.vmt") безc sv_cheats 1?
     
    Последнее редактирование: 1 фев 2014