Объясните использование команды return

Тема в разделе "Программирование / Скриптинг", создана пользователем 8Ahnenerbe8, 25 июл 2016.

  1. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
    Салют.
    Собственно, вопрос в названии темы.
    Решил немного изменить плагин фонарика, убрал ненужные квары, получилось так:
    PHP:
    #pragma semicolon 1
    #include <sdktools>

    new Handle:g_FlashlightEnable;

    public 
    OnPluginStart()
    {
        
    // ConVar
        
    g_FlashlightEnable CreateConVar("timer_flashlightenable""1""Adds a flashlight in the game"0true0.0true1.0);
      
        
    AddCommandListener(Command_LAW"+lookatweapon");
        
    RegConsoleCmd("sm_flashlight"Command_Flashlight);
    }

    public 
    Action:Command_LAW(int client, const String:command[], int argc)
    {
        if(
    GetConVarBool(g_FlashlightEnable))
        {
            if(
    IsClientInGame(client) && IsPlayerAlive(client))
            {
                
    ToggleFlashlight(client);
            }
            return 
    Plugin_Handled;
        }
    }

    public 
    Action:Command_Flashlight(int clientint args)
    {
        if(
    GetConVarBool(g_FlashlightEnable))
        {
            if(
    IsClientInGame(client) && IsPlayerAlive(client))
            {
                
    ToggleFlashlight(client);
            }
            return 
    Plugin_Handled;
        }
    }

    void ToggleFlashlight(int client)
    {
        
    SetEntProp(clientProp_Send"m_fEffects"GetEntProp(clientProp_Send"m_fEffects") ^ 4);
    }
    Но при компиляции возникалии ошибки(warning):
    PHP:
    warning 209: function "Command_LAW" should return a value
    warning 209
    : function "Command_Flashlight" should return a value
    Из ошибки я понял, что функция требует вернуть значение.
    Странный вопрос, но зачем вообще это нужно?:blink:
    И каким именно параметром возвращать?
    Plugin_Handled?
    Plugin_Continue?
    Исходя из переводов слов, я склоняюсь ко второму варианту, но хотелось бы именно понять, как это работает.
     
  2. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.509
    Симпатии:
    1.962
    Если плагин через квар отключён, игрок не в игре, либо мёртв, то блокировать использование кнопки:
    Блокировать.
    Разрешить.
    Для консольных команд, употреблённых правильно (вместо отлова чата через AddCommandListener, например - неправильно) всегда return Plugin_Handled;
     
  3. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    Павн, как си-подобный язык, много унаследовал от си. К примеру то, что в языке нет процедур, есть только функции. Функция должна возвращать значение согласно своему типу. Если функция имеет тип void, то она не возвращает значение. В данном случае возвращаемое функцией значение определяет действие, которое последует в зависимости от этого самого значения. Предупреждения возникли из-за того, что функция не во всех ситуациях может вернуть значение, а только если значение квара пложительное. Следует дописать в конец коллбека Command_LAW "return Plugin_Continue" и в коллбек Command_Flashlight "return Plugin_Handler" перед закрывающейся скобкой.
     
  4. hitmany

    hitmany

    Сообщения:
    133
    Симпатии:
    34
    Оператор return имеет два назначения. Во-первых, немедленный выход из функции. То есть он осуществляет выход в вызывавший функцию код. Во-вторых, может использоваться для возврата значения.
    Некоторые функции требует возврата значения, такие например как Command_LAW и Command_Flashlight в вашем случае

    Описание операторов return Plugin_

    Оффтоп
     
  5. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
    Всем спасибо за помощь!
     
    Последнее редактирование: 26 июл 2016