PDA

Просмотр полной версии : [Вопрос] Кислород



Desulaid
14.06.2015, 01:38
Дело в том, что мне необходима функция, которая манипулирует кислородом. Есть ли такая? Просто найти не смог :(

Daniel_Cortez
14.06.2015, 05:32
мне необходима функция, которая манипулирует кислородом
О чём вы, это же SA:MP.

Тут только делать свой велосипед со своей полоской уровня кислорода (текстдрав) вместо стандартной, отниманием ХП при опустошении полоски и подсчётом времени, когда у игрока кончится настоящий кислород (чтобы прекратить самому отнимать у него ХП).
Вот такой вот костыль. Равно, как и многие другие "нестандартные решения" в SA:MP.

Desulaid
14.06.2015, 08:43
О чём вы, это же SA:MP.

Тут только делать свой велосипед со своей полоской уровня кислорода (текстдрав) вместо стандартной, отниманием ХП при опустошении полоски и подсчётом времени, когда у игрока кончится настоящий кислород (чтобы прекратить самому отнимать у него ХП).
Вот такой вот костыль. Равно, как и многие другие "нестандартные решения" в SA:MP.

Опять свои велосипеды строить. Это все равно что ввести в функцию понятие как ID объекта оружия, не сделав функцию получения этого объекта.


https://pp.vk.me/c628526/v628526974/21c7/snJvEGgWP40.jpg
нестандартные решения


Осталось придумать, при каком условии показывать этот ТД и как убрать рудиментарный индикатор :D

Daniel_Cortez
14.06.2015, 10:14
Осталось придумать, при каком условии показывать этот ТД и как убрать рудиментарный индикатор :D
Вы это всерьёз чтоль? Что ж, флаг вам в руки.
Забыл сказать, время, через которое у игрока закончится кислород (настоящий) должно зависеть от FPS игрока (можно узнать через GetPlayerDrunkLevel, но не сразу, а минимум через секунду, с помощью таймера - можете подрисовать ещё один костыль).
И мне очень интересно, как вы собираетесь узнавать, находится ли игрок под водой, чтобы потом учитывать то время окончания настоящего кислорода.
Ниже 0.0 по оси Z воды может и не быть (пример: угольный разрез к западу от Лас-Вентураса), а анимацию плавания можно подделать с помощью Cleo-скриптов.

Desulaid
14.06.2015, 11:35
Вы это всерьёз чтоль? Что ж, флаг вам в руки.
Забыл сказать, время, через которое у игрока закончится кислород (настоящий) должно зависеть от FPS игрока (можно узнать через GetPlayerDrunkLevel, но не сразу, а минимум через секунду, с помощью таймера - можете подрисовать ещё один костыль).
И мне очень интересно, как вы собираетесь узнавать, находится ли игрок под водой, чтобы потом учитывать то время окончания настоящего кислорода.
Ниже 0.0 по оси Z воды может и не быть (пример: угольный разрез к западу от Лас-Вентураса), а анимацию плавания можно подделать с помощью Cleo-скриптов.

Да я начну отсчет от получения на пикапе. Так будет проще

Daniel_Cortez
14.06.2015, 13:23
Да я начну отсчет от получения на пикапе. Так будет проще
Речь шла о времени, когда у игрока закончится настоящий кислород (иначе может возникнуть ситуация, когда у игрока закончится и настоящий воздух, и server-side, из-за чего будет отниматься вдвое больше ХП). Или вы собираетесь расставить over9000over9000 пикапов над водой по всей карте? В таком случае, подрисуйте на картинке ещё 2 костыля, как раз педалей не хватает.

$continue$
14.06.2015, 13:26
Вы это всерьёз чтоль? Что ж, флаг вам в руки.
Забыл сказать, время, через которое у игрока закончится кислород (настоящий) должно зависеть от FPS игрока (можно узнать через GetPlayerDrunkLevel, но не сразу, а минимум через секунду, с помощью таймера - можете подрисовать ещё один костыль).
И мне очень интересно, как вы собираетесь узнавать, находится ли игрок под водой, чтобы потом учитывать то время окончания настоящего кислорода.
Ниже 0.0 по оси Z воды может и не быть (пример: угольный разрез к западу от Лас-Вентураса), а анимацию плавания можно подделать с помощью Cleo-скриптов.

а если поставить АЧ? :?
И тогда анимку проверять в воде

Daniel_Cortez
14.06.2015, 14:39
а если поставить АЧ? :?
И тогда анимку проверять в воде
Как вы будете однозначно определять нахождение игрока в воде?

Gressie
14.06.2015, 14:46
Как вы будете однозначно определять нахождение игрока в воде?

IsPlayerInWater(playerid) (http://pro-pawn.ru/showthread.php?4738-IsPlayerInWater(playerid))

Разве нет?

Desulaid
14.06.2015, 19:25
IsPlayerInWater(playerid) (http://pro-pawn.ru/showthread.php?4738-IsPlayerInWater(playerid))

Разве нет?

ооо

Daniel_Cortez
14.06.2015, 19:51
IsPlayerInWater(playerid) (http://pro-pawn.ru/showthread.php?4738-IsPlayerInWater(playerid))

Разве нет?

http://ihost.pro-pawn.ru/image.php?di=DBT7
http://ihost.pro-pawn.ru/image.php?di=UYVE
http://ihost.pro-pawn.ru/image.php?di=AIY4
http://ihost.pro-pawn.ru/image.php?di=0E2I
http://ihost.pro-pawn.ru/image.php?di=8PYR
http://ihost.pro-pawn.ru/image.php?di=96XA
http://ihost.pro-pawn.ru/image.php?di=FCUG
http://ihost.pro-pawn.ru/image.php?di=FBFM
http://ihost.pro-pawn.ru/image.php?di=106G
http://ihost.pro-pawn.ru/image.php?di=T4XF


Nope.

Gressie
26.06.2015, 15:15
А что если:

stock isAWaterPlayer(playerid) // 0 - не в воде, 1 - на воде, 2 - под водой
{
if(GetPlayerAnimationIndex(playerid))
{
new tanimlib[5], tanimname[16];
GetAnimationName(GetPlayerAnimationIndex(playerid), tanimlib, 4, tanimname, 15);
if(!strcmp(tanimlib, "SWIM"))
{
if(!strcmp(tanimname, "Swim_Glide", true) || !strcmp(tanimname, "Swim_Dive_Under", true) || !strcmp(tanimname, "Swim_Under", true)) return 2;
else return 1;
}
}
return 0;
}

Daniel_Cortez
26.06.2015, 19:50
А что если:

stock isAWaterPlayer(playerid) // 0 - не в воде, 1 - на воде, 2 - под водой
{
if(GetPlayerAnimationIndex(playerid))
{
new tanimlib[5], tanimname[16];
GetAnimationName(GetPlayerAnimationIndex(playerid), tanimlib, 4, tanimname, 15);
if(!strcmp(tanimlib, "SWIM"))
{
if(!strcmp(tanimname, "Swim_Glide", true) || !strcmp(tanimname, "Swim_Dive_Under", true) || !strcmp(tanimname, "Swim_Under", true)) return 2;
else return 1;
}
}
return 0;
}
Во-первых, можно было просто получить ID анимации и юзануть switch.
Во-вторых, анимки можно подделать с помощью читов.

Gressie
27.06.2015, 00:40
Как вариант от OKStyle:

stock IsPlayerInWater(playerid)
{
if(IsPlayerInAnyVehicle(playerid)) return 0;
new animlib[32], animname[32];
GetAnimationName(GetPlayerAnimationIndex(playerid), animlib, sizeof(animlib), animname, sizeof(animname));
return (strfind(animname, "swim", true) != -1 || strfind(animname, "water", true) != -1) ? 1 : 0;
}

L0ndl3m
27.06.2015, 13:48
Не вижу разницы между вариантом OKStyle и твоим: в обоих вариантах используется функция GetAnimationName.
Зачем это нужно вообще в данном случае, если как было выше сказано можно было использовать функцию для получения индекса анимации: GetPlayerAnimationIndex?

Да и в варианте OkStyle много чего ненужного: два массива которые можно было воссоединить в один; тернарное выражение здесь можно было и не использовать.

Предложу свой вариант:


IsPlayerInWater(playerid)
{
switch(GetPlayerAnimationIndex(playerid))
{
case 958, 959, 1538, 1539, 1543:
return (GetPlayerWeapon(playerid) != 46);
}
return 0;
}

Niko_Grey
28.06.2015, 20:02
Не вижу разницы между вариантом OKStyle и твоим: в обоих вариантах используется функция GetAnimationName.
Зачем это нужно вообще в данном случае, если как было выше сказано можно было использовать функцию для получения индекса анимации: GetPlayerAnimationIndex?

Да и в варианте OkStyle много чего ненужного: два массива которые можно было воссоединить в один; тернарное выражение здесь можно было и не использовать.

Предложу свой вариант:


IsPlayerInWater(playerid)
{
switch(GetPlayerAnimationIndex(playerid))
{
case 958, 959, 1538, 1539, 1543:
return (GetPlayerWeapon(playerid) != 46);
}
return 0;
}


И какая разница? Анимации все равно можно подменить с помощью читов...

Gressie
28.06.2015, 22:51
И какая разница? Анимации все равно можно подменить с помощью читов...

Согласен)...