Логические операции.

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

  1. OFFSprings

    OFFSprings

    Сообщения:
    12
    Симпатии:
    0
    Мне хотелось бы узнать что нибудь о применении логических операторов в Sourcepawn.
     
  2. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
  3. gibs

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

    Сообщения:
    536
    Симпатии:
    133
    Логические операторы во всех языках имеют одну и ту же самую логику.
    Вот таблицы истинности - ссылка
     
  4. OFFSprings

    OFFSprings

    Сообщения:
    12
    Симпатии:
    0
    Меня чувак учит программировать ,он мне дал задание написать плагин который прибавляет хп так,
    100
    101
    ...
    105
    104
    ...
    100
    И дал мне подсказку использовать
    PHP:
     bool jumpmax=false;
    [
    И далешье я потерянный :(
     
    Последнее редактирование: 29 сен 2015
  5. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    OFFSprings, ну как я понял цикл, а потом цикл в обратном направлении.
     
  6. OFFSprings

    OFFSprings

    Сообщения:
    12
    Симпатии:
    0
    Вот намутил.
    Скомпилировался удачно.
    Но мне кажется он и одновременно будет и присваивать хп другому клиенту.Хотя регистрация id идет при прыжке.
    PHP:
    #include <sourcemod>

    public OnPluginStart()
    {
        
    HookEvent("player_jump",OnPlayerJump);
    }

    public 
    Action:OnPlayerJump(Handle:event,const String:name[],bool dontBroadcast)
    {
        
    int    client=GetClientOfUserId(GetEventInt(event,"userid"));
        
    int    hp=GetClientHealth(client);
        
    bool jumpmax=false;
        
    int S=0;
        
    S++;
        
    SetEntityHealth(client,hp+S);
        if (
    S==&& jumpmax==false)
        {
           
    jumpmax=true;
           
    SetEntityHealth(client,hp-1);
        }
        else if (
    S==&& jumpmax==true)
        {
            
    jumpmax=false;
            
    SetEntityHealth(client,hp+1);
        }
    }
    .

    Добавлено через 10 минут
    Исправил.
     
    Последнее редактирование: 30 сен 2015
  7. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    OFFSprings, тебе нужно использовать глобальные переменные для каждого игрока.
     
  8. loginivan

    loginivan

    Сообщения:
    45
    Симпатии:
    8
    PHP:
    #include <sourcemod>

    new boolg_bJumpMax false;
    new 
    g_iS 0;

    public 
    OnPluginStart()
    {
        
    HookEvent("player_jump",OnPlayerJump);
    }

    public 
    Action:OnPlayerJump(Handle:hEvent,const String:sName[],bool bDontBroadcast)
    {
        new 
    iClient GetClientOfUserId(GetEventInt(hEvent,"userid"));
        new 
    iHp GetClientHealth(iClient);
        
        if (
    g_iS && g_bJumpMax == false)
        {
            
    SetEntityHealth(iClient,iHp++);
            
    g_iS++;
            if(
    g_iS == 4)
            {    
                
    g_bJumpMax true;
            }
        }
        else if (
    g_iS && g_bJumpMax == true)
        {
            
    SetEntityHealth(iClient,iHp--);
            
    g_iS--;
            if(
    g_iS == 0)
            {
                
    g_bJumpMax false;
            }
        }
    }   [/
    SPOILER]
     
    Последнее редактирование: 1 окт 2015
  9. OFFSprings

    OFFSprings

    Сообщения:
    12
    Симпатии:
    0
    loginivan а если хп будет 63?
     
  10. loginivan

    loginivan

    Сообщения:
    45
    Симпатии:
    8
    Если тебе нужно hp+5...hp-5, можно просто создать глобальную переменную которая будет счетчиком.
     
    Последнее редактирование: 1 окт 2015
  11. AlmazON

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

    Сообщения:
    4.507
    Симпатии:
    1.961
    Разве что для реверса:
    PHP:
    #include <sourcemod>

    bool g_bReverse[MAXPLAYERS+1];

    public 
    OnPluginStart()  HookEvent("player_jump"OnPlayerJump);

    public 
    OnPlayerJump(Handle:event,const String:name[],bool dontBroadcast)
    {
        
    int    client=GetClientOfUserId(GetEventInt(event,"userid")), hp=GetClientHealth(client);
        
    SetEntityHealth(clientg_bReverse[client] ? (g_bReverse[client] = hp 105) ? hp+1:hp-1:(g_bReverse[client] = hp <= 100) ? hp+1:hp-1);
    }
    Если более 105, то будет снижать с каждым прыжком до 100, а потом поднимать до 105 и обратно.
    Если менее 100, то поднимет до 105, далее - по циклу.
    В коде чётко обозначен нужный диапазон в виде цифр 100 и 105. Оффтоп
     
  12. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.978
    Это и имел ввиду. А вообще тз не понятное для меня.

    Оффтоп
     
  13. AlmazON

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

    Сообщения:
    4.507
    Симпатии:
    1.961
    Оффтоп
    Вот ещё варианты, получше:
    PHP:
    #include <sourcemod>

    bool g_bReverse[MAXPLAYERS+1];

    public 
    OnPluginStart()  HookEvent("player_jump"OnPlayerJump);

    public 
    OnPlayerJump(Handle:event,const String:name[],bool dontBroadcast)
    {
        
    int    client=GetClientOfUserId(GetEventInt(event,"userid")), hp=GetClientHealth(client);
        
    SetEntityHealth(clientg_bReverse[client] && (g_bReverse[client] = hp 105) || (g_bReverse[client] = hp <= 100) ? hp+1:hp-1);
    }
    PHP:
    #include <sourcemod>

    bool g_bReverse[MAXPLAYERS+1];

    public 
    OnPluginStart()  HookEvent("player_jump"OnPlayerJump);

    public 
    OnPlayerJump(Handle:event,const String:name[],bool dontBroadcast)
    {
        
    int    client=GetClientOfUserId(GetEventInt(event,"userid")), hp=GetClientHealth(client);
        
    SetEntityHealth(client, (g_bReverse[client] = g_bReverse[client] && hp 105 || hp <= 100) ? hp+1:hp-1);
    }
     
  14. loginivan

    loginivan

    Сообщения:
    45
    Симпатии:
    8
    Я изначально так и делал:
    PHP:
        if (iHp 105 && bJumpMax == false)
        {
            
    SetEntityHealth(iClient,iHp++);
            if(
    iHp == 105)
            {    
                
    bJumpMax true;
            }
        }
        else if (
    iHp 100 && bJumpMax == true)
        {
            
    SetEntityHealth(iClient,iHp--);
            if(
    iHp == 100)
            {
                
    bJumpMax false;
            }
        }
    Но что-то я теперь не понимаю что ему нужно
     
  15. AlmazON

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

    Сообщения:
    4.507
    Симпатии:
    1.961
    Выглядит плохо. Как минимум, это сделано, как если бы играл всего 1 игрок на сервере, не более. Будет 2 и больше, то будут учтены чужие прыжки.