PDA

Просмотр полной версии : [Вопрос] Сборник моих вопросов (ч2)



Sp1ke
12.08.2016, 15:10
Доброго времени суток.
1. Первая проблема у меня с анимацией, при ее проигрывании она видна только игроку, который использует ее.
Пример: Когда игрок встает на чекпоинт ему проигрывается анимация, она видна только ему, а для остальных игроков он просто стоит на месте.
Примечание: анимации предварительно подгружаются при коннекте игрока и срабатывают с первого раза, пробовал проигрывать несколько раз. Синхронизация в последнем аргументе установлена на "1".
Анимация:
ApplyAnimation(playerid, "BOMBER", "BOM_PLANT", 3.0, 0, 0, 0, 0, 5000, 1);
2. Не срабатывает проверка на float значение, а именно в том месте где нужно обнулить до 0.0, пробовал разные вариации кода и толку 0.
Примечание: при создании автомобиля я даю 1.1 бензина и потом в ежесекундном таймере отнимаю по 0.01
Код:
vehid = GetPlayerVehicleID(i);
printf("Сначала: %f", VehicleInfo[vehid][Fuel]);
if(VehicleInfo[vehid][Engine] == VEHICLE_PARAMS_ON)
{
if(VehicleInfo[vehid][Fuel] >= 1.0)
{
VehicleInfo[vehid][Fuel] -= 0.01;
printf("Вычитаем: %f", VehicleInfo[vehid][Fuel]);
if(_:VehicleInfo[vehid][Fuel] == _:0.99)
{
printf("В проверке: %f", VehicleInfo[vehid][Fuel]);
SCM(i, -1, "В вашем авто закончилось топливо");
EngineStatus(vehid, VEHICLE_PARAMS_OFF);
printf("В проверке2: %f", VehicleInfo[vehid][Fuel]);
UpdateEngineStatusForSpeedometr(i, vehid);
VehicleInfo[vehid][Fuel] = 0.0;
printf("В проверке3: %f", VehicleInfo[vehid][Fuel]);
}
}
}
printf("После проверки: %f", VehicleInfo[vehid][Fuel]);
В логах сервера:
[13:51:05] Сначала: 1.100000
[13:51:05] Вычитаем: 1.090000
[13:51:05] После проверки: 1.090000
[13:51:06] Сначала: 1.090000
[13:51:06] Вычитаем: 1.080000
[13:51:06] После проверки: 1.080000
[13:51:07] Сначала: 1.080000
[13:51:07] Вычитаем: 1.070000
[13:51:07] После проверки: 1.070000
[13:51:08] Сначала: 1.070000
[13:51:08] Вычитаем: 1.060000
[13:51:08] После проверки: 1.060000
[13:51:09] Сначала: 1.060000
[13:51:09] Вычитаем: 1.050000
[13:51:09] После проверки: 1.050000
[13:51:10] Сначала: 1.050000
[13:51:10] Вычитаем: 1.040000
[13:51:10] После проверки: 1.040000
[13:51:11] Сначала: 1.040000
[13:51:11] Вычитаем: 1.030000
[13:51:11] После проверки: 1.030000
[13:51:12] Сначала: 1.030000
[13:51:12] Вычитаем: 1.020000
[13:51:12] После проверки: 1.020000
[13:51:13] Сначала: 1.020000
[13:51:13] Вычитаем: 1.010000
[13:51:13] После проверки: 1.010000
[13:51:14] Сначала: 1.010000
[13:51:14] Вычитаем: 1.000000
[13:51:14] После проверки: 1.000000
[13:51:15] Сначала: 1.000000
[13:51:15] Вычитаем: 0.990000
[13:51:15] После проверки: 0.990000
[13:51:16] Сначала: 0.990000
[13:51:16] После проверки: 0.990000
[13:51:17] Сначала: 0.990000
[13:51:17] После проверки: 0.990000
[13:51:18] Сначала: 0.990000
[13:51:18] После проверки: 0.990000
[13:51:19] Сначала: 0.990000
[13:51:19] После проверки: 0.990000
[13:51:20] Сначала: 0.990000
[13:51:20] После проверки: 0.990000
[13:51:21] Сначала: 0.990000
[13:51:21] После проверки: 0.990000
[13:51:22] Сначала: 0.990000
[13:51:22] После проверки: 0.990000
[13:51:23] Сначала: 0.990000
[13:51:23] После проверки: 0.990000
3. Много видел постов о том, что плагин mysql обрабатывает все в отдельном потоке, но скрипт выполняется же в одном потоке?
Можно ли использовать массив, например для форматирования sql запроса и сообщения для игрока в одной функции/блоке?

vovandolg
12.08.2016, 19:05
С анимацией такая же трабла была, как то после изменений в инклуде не замечал сбоев каких либо или вот таких багов, вот в общем:


//a_players.inc
//forcesync был равен 0, сделал 1
native ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 1);

- - - Добавлено - - -


нужно обнулить до 0.0

if(VehicleInfo[vehid][Fuel] >= 1.0)
И как ты обнулить до 0.0 хочешь если у тебя проверка стоит когда бензин равен 1.0 или больше, то есть 0.9 будет или 0.99 а дальше не будет ливать твой бензинчик
Возможно надо вот так:

if(VehicleInfo[vehid][Fuel] > 0.0)

_lizard
12.08.2016, 20:20
С анимацией такая же трабла была, как то после изменений в инклуде не замечал сбоев каких либо или вот таких багов, вот в общем:


//a_players.inc
//forcesync был равен 0, сделал 1
native ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 1);


Я просто оставлю это здесь
http://i.imgur.com/341Ww97.png
Forcesync - необязательный параметр, который по-умолчанию равен нулю.

vovandolg
12.08.2016, 20:45
Я просто оставлю это здесь
http://i.imgur.com/341Ww97.png
Forcesync - необязательный параметр, который по-умолчанию равен нулю.

необязательный параметр если ты с ботами играть собрался:sarcastic:

Daniel_Cortez
13.08.2016, 01:06
С анимацией такая же трабла была, как то после изменений в инклуде не замечал сбоев каких либо или вот таких багов, вот в общем:


//a_players.inc
//forcesync был равен 0, сделал 1
native ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 1);
Изменять стандартные инклуды? Серьёзно? -_-

Sp1ke
13.08.2016, 02:09
С анимацией такая же трабла была, как то после изменений в инклуде не замечал сбоев каких либо или вот таких багов, вот в общем:


//a_players.inc
//forcesync был равен 0, сделал 1
native ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 1);

- - - Добавлено - - -



if(VehicleInfo[vehid][Fuel] >= 1.0)
И как ты обнулить до 0.0 хочешь если у тебя проверка стоит когда бензин равен 1.0 или больше, то есть 0.9 будет или 0.99 а дальше не будет ливать твой бензинчик
Возможно надо вот так:

if(VehicleInfo[vehid][Fuel] > 0.0)

Сложно понять логический смысл кода? Если fuel равна 1.0 или больше, то я отнимаю 0.01 и вот уже потом не срабатывает проверка на то, что если в машине 0.99 бензина то бензин должен обнулиться

vovandolg
13.08.2016, 02:28
Так, а почему бы не так сделать?


if(VehicleInfo[vehid][Fuel] == 0.99)

Что вообще даёт этот префикс _:?

Sp1ke
13.08.2016, 02:32
Так, а почему бы не так сделать?


if(VehicleInfo[vehid][Fuel] == 0.99)

Что вообще даёт этот префикс _:?

Так тоже не работает, я пробовал по разному.
Прочитай эту тему: http://pro-pawn.ru/showthread.php?12323-floatcmp

vovandolg
13.08.2016, 02:39
А если так чисто для интереса влепить туда после девяток 4 нуля будет работать?

- - - Добавлено - - -



vehid = GetPlayerVehicleID(i);
printf("Сначала: %f", VehicleInfo[vehid][Fuel]);
if(VehicleInfo[vehid][Engine] == VEHICLE_PARAMS_ON)
{
if(_:VehicleInfo[vehid][Fuel] >= _:1.0)
{
VehicleInfo[vehid][Fuel] -= 0.01;
printf("Вычитаем: %f", VehicleInfo[vehid][Fuel]);
if(_:VehicleInfo[vehid][Fuel] < _:1.0)
{
printf("В проверке: %f", VehicleInfo[vehid][Fuel]);
SCM(i, -1, "В вашем авто закончилось топливо");
EngineStatus(vehid, VEHICLE_PARAMS_OFF);
printf("В проверке2: %f", VehicleInfo[vehid][Fuel]);
UpdateEngineStatusForSpeedometr(i, vehid);
VehicleInfo[vehid][Fuel] = 0.0;
printf("В проверке3: %f", VehicleInfo[vehid][Fuel]);
}
}
}
printf("После проверки: %f", VehicleInfo[vehid][Fuel]);

Sp1ke
13.08.2016, 03:12
А если так чисто для интереса влепить туда после девяток 4 нуля будет работать?

- - - Добавлено - - -



vehid = GetPlayerVehicleID(i);
printf("Сначала: %f", VehicleInfo[vehid][Fuel]);
if(VehicleInfo[vehid][Engine] == VEHICLE_PARAMS_ON)
{
if(_:VehicleInfo[vehid][Fuel] >= _:1.0)
{
VehicleInfo[vehid][Fuel] -= 0.01;
printf("Вычитаем: %f", VehicleInfo[vehid][Fuel]);
if(_:VehicleInfo[vehid][Fuel] < _:1.0)
{
printf("В проверке: %f", VehicleInfo[vehid][Fuel]);
SCM(i, -1, "В вашем авто закончилось топливо");
EngineStatus(vehid, VEHICLE_PARAMS_OFF);
printf("В проверке2: %f", VehicleInfo[vehid][Fuel]);
UpdateEngineStatusForSpeedometr(i, vehid);
VehicleInfo[vehid][Fuel] = 0.0;
printf("В проверке3: %f", VehicleInfo[vehid][Fuel]);
}
}
}
printf("После проверки: %f", VehicleInfo[vehid][Fuel]);


1. Нет
2. Работает, убрал префиксы _: так как в данном случае они ничем не помогут (статья DC)
Вопрос все еще не решен, это баг или я ошибся в каком-то месте? Так же остались еще 2 вопроса

- - - Добавлено - - -

Примечание: анимация видна всем игрокам в первый раз ее использования, но не видна самому игроку, на котором она используется. Со второго раза наоборот

Sp1ke
13.08.2016, 03:15
Примечание 2х: теперь анимация не видна даже с первого раза ее использования, что за рандом/баг?

vovandolg
13.08.2016, 03:19
1. Нет
2. Работает, убрал префиксы _: так как в данном случае они ничем не помогут (статья DC)
Вопрос все еще не решен, это баг или я ошибся в каком-то месте? Так же остались еще 2 вопроса

- - - Добавлено - - -

Примечание: анимация видна всем игрокам в первый раз ее использования, но не видна самому игроку, на котором она используется. Со второго раза наоборот

Чтобы она видна была игроку с первого раза попробуй при коннекте прогрузить библиотеку этой анимации, а вот второе hz...

- - - Добавлено - - -

Чтобы анимации с первого раза любые воспроизводились нужно прогружать библиотеки до их использования, я это делаю при коннекте.

Sp1ke
13.08.2016, 03:22
Чтобы она видна была игроку с первого раза попробуй при коннекте прогрузить библиотеку этой анимации, а вот второе hz...

- - - Добавлено - - -

Чтобы анимации с первого раза любые воспроизводились нужно прогружать библиотеки до их использования, я это делаю при коннекте.

Прочитай в самом первом посте примечание к анимациям

vovandolg
13.08.2016, 03:30
Покажи все анимации как ты вызывал их с какими параметрами

- - - Добавлено - - -

И всё же попробуй в стандартном инклуде сделать правку как я тебе писал выше)

Daniel_Cortez
13.08.2016, 13:01
if(_:VehicleInfo[vehid][Fuel] >= _:1.0)



Для проверки на равенство/неравенство (==, !=) лучше использовать оператор переопределения тега : и сравнивать оба числа, как целые, минуя вызов нативной функции:

if(_:oper1 == _:oper2)
Внимание! Данную оптимизацию можно использовать только при использовании операторов == и !=. Проверки >, <, >= и <= будут работать неправильно, если привести операнды к целочисленному тегу.

http://pro-pawn.ru/showthread.php?12323
Специально для вас выделил нужное красным.

Sp1ke
15.08.2016, 10:18
Все еще интересует вопрос по поводу анимации и массива

wAx
15.08.2016, 13:56
По поводу топлива, если условие >= 1.0 срабатывает корректно, может остальной код засунуть под условие 'иначе' else?