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

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

  1. OFFSprings

    OFFSprings

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

    R1KO Рукоблуд с машинными кодами Супермодератор

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

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

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

    OFFSprings

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

    R1KO Рукоблуд с машинными кодами Супермодератор

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

    OFFSprings

    Сообщения:
    14
    Симпатии:
    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 Рукоблуд с машинными кодами Супермодератор

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

    PainteR

    Сообщения:
    70
    Симпатии:
    30
    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

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

    PainteR

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

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.164
    Симпатии:
    2.457
    Разве что для реверса:
    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 Рукоблуд с машинными кодами Супермодератор

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

    Оффтоп
     
  13. AlmazON

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.164
    Симпатии:
    2.457
    Оффтоп
    Вот ещё варианты, получше:
    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. PainteR

    PainteR

    Сообщения:
    70
    Симпатии:
    30
    Я изначально так и делал:
    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

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