Подправьте код [showdamage]

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

  1. pokypka20

    pokypka20

    Сообщения:
    250
    Симпатии:
    30
    Написал мини-плагин, изредка лупит ошибку в логи.

    PHP:
    #include <sourcemod> 
    #include <zombiereloaded>

    public OnPluginStart() 
    {
        
    HookEvent("player_hurt"Event_OnPlayerHurt);
    }    

    public 
    Event_OnPlayerHurt(Handle:event, const String:name[], bool:silent

        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker")); 
        
        if (
    ZR_IsClientHuman(attacker) && attacker 0
        { 
            
    PrintHintText(attacker"Осталось хп: %d"GetEventInt(event"health")); 
        }

    Ошибка
    PHP:
    L 10/12/2014 13:59:47: [SMNative "ZR_IsClientHuman" reportedInvalid client index. (0)
    L 10/12/2014 13:59:47: [SMDisplaying call stack trace for plugin "showdamage.smx":
    L 10/12/2014 13:59:47: [SM]   [0]  Line 13D:\scripting\showdamage.sp::Event_OnPlayerHurt()
    Как исправить?
     
  2. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Поменяй местами проверки и всё.
     
    pokypka20 нравится это.
  3. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    Оффтоп
    pokypka20, в первую очередь нужно проверять валидность индекса, затем уже клиента. И сначала ставь проверки на которых выше вероятность возврата false.
     
  4. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    AlmazON, ты меня не так понял, имел ввиду что проверки где больше вероятность того, что проверка не будет пройдена (возврат false) нужно ставить первыми.
     
  5. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Понял, поэтому в кавычках false, а спрашиваю о своём. Есть на этот счёт соображения?
    Если &&, а в случае || - наоборот!
     
  6. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    Я думаю это одно и то же.
    Вот смотри:
    PHP:
    if (!peremennaya// Если (peremennaya == 0)

    //Выполняется код. 
    // Иначе выполнение переходит сразу на конец тела.

    if (peremennaya) return; // Если (peremennaya != 0) переходим на конец ф-и
    //Код.
    Вот только я не знаю что быстрее == или !=
     
  7. Vit_ amin

    Vit_ amin BotManager001

    Сообщения:
    1.065
    Симпатии:
    345
    Profile возьми да и посмотри, что быстрее ...
     
  8. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    Vit_ amin, AlmazON, я читал о нем, но не пробывал юзать.
     
    Последнее редактирование: 12 окт 2014
  9. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    Именно.


    https://wiki.alliedmods.net/SourceMod_Profiler
     
    AlmazON нравится это.