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

OFFSprings

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

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник

OFFSprings

Участник
Сообщения
14
Реакции
0
Меня чувак учит программировать ,он мне дал задание написать плагин который прибавляет хп так,
100
101
...
105
104
...
100
И дал мне подсказку использовать
PHP:
 bool jumpmax=false;

[
И далешье я потерянный :(
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #5
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==5 && jumpmax==false)
	{
	   jumpmax=true;
	   SetEntityHealth(client,hp-1);
	}
	else if (S==0 && jumpmax==true)
	{
		jumpmax=false;
		SetEntityHealth(client,hp+1);
	}
}
.

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

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #7
OFFSprings, тебе нужно использовать глобальные переменные для каждого игрока.
 

PainteR

Fullstack JavaScript Developer
Сообщения
92
Реакции
99
Вот намутил.
Скомпилировался удачно.
Но мне кажется он и одновременно будет и присваивать хп другому клиенту.Хотя регистрация 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==5 && jumpmax==false)
	{
	   jumpmax=true;
	   SetEntityHealth(client,hp-1);
	}
	else if (S==0 && jumpmax==true)
	{
		jumpmax=false;
		SetEntityHealth(client,hp+1);
	}
}
[/SPOILER]

Добавлено через 10 минут
Исправил.
PHP:
#include <sourcemod>

new bool: g_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 < 4 && g_bJumpMax == false)
    {
        SetEntityHealth(iClient,iHp++);
        g_iS++;
        if(g_iS == 4)
        {    
            g_bJumpMax = true;
        }
    }
    else if (g_iS > 4 && g_bJumpMax == true)
    {
        SetEntityHealth(iClient,iHp--);
        g_iS--;
        if(g_iS == 0)
        {
            g_bJumpMax = false;
        }
    }
}   [/SPOILER]
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
нужно использовать глобальные переменные для каждого игрока
Разве что для реверса:
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+1:hp-1:(g_bReverse[client] = hp <= 100) ? hp+1:hp-1);
}
Если более 105, то будет снижать с каждым прыжком до 100, а потом поднимать до 105 и обратно.
Если менее 100, то поднимет до 105, далее - по циклу.
В коде чётко обозначен нужный диапазон в виде цифр 100 и 105. Оффтоп
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #12
Разве что для реверса:
Это и имел ввиду. А вообще тз не понятное для меня.

Оффтоп
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
лепить в 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) || (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);
}
 

PainteR

Fullstack JavaScript Developer
Сообщения
92
Реакции
99
Если более 105, то будет снижать с каждым прыжком до 100, а потом поднимать до 105 и обратно.
Если менее 100, то поднимет до 105, далее - по циклу.
В коде чётко обозначен нужный диапазон в виде цифр 100 и 105. Оффтоп

Я изначально так и делал:
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;
        }
    }
Но что-то я теперь не понимаю что ему нужно
 
Сверху Снизу