PDA

Просмотр полной версии : [Include] TDW Vehicle Libraries



VVWVV
13.10.2016, 00:00
TDW Vehicle Libraries

Описание:

Коллекция библиотек для работы с любым транспортным средством. Основной целью данных библиотек является увеличение функционала в SA:MP.

Документация:


Библиотеки:
НазваниеОписание
tdw_vdamageПредставляет функции для работы с визуальными повреждениями.
tdw_vdataБиблиотека представляет основные данные о транспортном средстве: начальную точку (x, y, z координаты, а также угол поворота),
время возрождения, номер модели и текущий цвет.
tdw_vdetailВ отличие от tdw_vdata данная библиотека предоставляет дополнительную информацию о транспортном средстве: номер покрасочных работ, последнего водителя.
tdw_vdwosПредоставляет функционал для изменения состояний дверей и окон.
Библиотека работает только с версии 0.3.7.
tdw_viteratorБиблиотека создает итератор для транспортных средств.
Для её работы необходимо подключить библиотеку foreach.
tdw_vmathСодержит разнообразные функции для вычислений скорости, расположение персонажа относительно транспортного средства и т.д.
tdw_vnplateПозволяет изменить или получить текущее значение номерного знака.
tdw_vsa_dataСодержит статическую информацию о всех видах транспортного средства: название, тип, максимальная скорость, категория.
tdw_vsa_handlingСодержит статическую информацию из файла handling.cfg. Данный файл хранит большое количество информации о транспортном средстве.
tdw_vtdataОсновная цель библиотеки - хранить статическую информацию о внешних модификация (т.е. тюнинге)
tdw_vutilsПредоставляет полезные функции для работы с транспортным средством.
Статические системы:
tdw_vxneonПредоставляет набор функции для работы с неоновыми лампами.
tdw_vxplightСодержит функции для добавления проблесковых маячков.
tdw_vxsignalsДобавляет поворотники для транспортного средства.
Динамические системы:
tdw_vyboostПозволяет ускорить транспортное средство.
tdw_vydriftДобавляет автовызываемую функцию, которая вызывается при прохождении поворотов с управляемым заносом (см. дрифт (https://ru.wikipedia.org/wiki/%D0%94%D1%80%D0%B8%D1%84%D1%82)).
tdw_vyengineПредоставляет систему управления двигателем транспортного средства.
tdw_vyfuelСодержит систему для вычисления расхода топлива.
tdw_vylimitСистема для ограничения скорости передвижения транспортного средства.
tdw_vylockПозволяет закрывать или открывать транспортное средство.
tdw_vymileageВычисляет километрах транспортного средства.
tdw_vyradarДобавляет систему радаров. Они отслеживают максимальную скорость, после чего, если скорость была превышена, система вызывает автовызываемую функцию.


Скачать:

github (https://github.com/TDW-org/samp-include-vehicle)

Установка:

Перейдите в репозиторий на github (ссылка выше).
Для скачивания на открывшейся странице нажмите на кнопку "Clone or download" (зелёного цвета) и в открывшемся меню - "Download ZIP".
Все файлы библиотеки перемести в папку '/pawno/includes/'.
Скомпилировать изменённые вами скрипты.


Благодарности:

Nexius (идея для библиотеки)
ziggi (Реализация функции DestroyVehicleSafe; Некоторые фиксы для функций)
Geebrox (исправление некоторых ошибок, тестирование систем)
Glant (исправление некоторых ошибок, дополнение к функциям)



Автор: VVWVV (http://pro-pawn.ru/member.php?4348)
Распространяется по лицензии ZLIB.

ziggi
14.10.2016, 21:32
Заметил ошибку в DestroyVehicleSafe (PR делать лень):
Функция должна возвращать по ссылке параметр vehicleid, тогда эта функция будет работать.
То есть так:

stock DestroyVehicleSafe(&vehicleid)

P.S. Без списка функций, конечно, непонятно что есть и что можно использовать.

VVWVV
14.10.2016, 21:39
Заметил ошибку в DestroyVehicleSafe (PR делать лень):
Функция должна возвращать по ссылке параметр vehicleid, тогда эта функция будет работать.
То есть так:

stock DestroyVehicleSafe(&vehicleid)

Хм, действительно.

UPD: Добавил.



P.S. Без списка функций, конечно, непонятно что есть и что можно использовать.


Функций очень много... Хотя, все исправлю.

ziggi
14.10.2016, 21:44
Функций очень много... Хотя, все исправлю.

Просто если ты делаешь библиотеку для себя, то да, это не обязательно. Но когда люди не понимают как это использовать, то они вряд ли будут этим пользоваться. Просто сделай список всех функций в README без описания (я сам часто так делаю), ибо при грамотном наименовании функций и параметров оно не нужно.

VVWVV
14.10.2016, 21:52
Просто если ты делаешь библиотеку для себя, то да, это не обязательно. Но когда люди не понимают как это использовать, то они вряд ли будут этим пользоваться. Просто сделай список всех функций в README без описания (я сам часто так делаю), ибо при грамотном наименовании функций и параметров оно не нужно.

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

Однако, спасибо за совет!

UPD: Добавил.

Geebrox
19.10.2016, 05:30
Библиотека очень полезная, взял себе в проект, спасибо.

1. Можете исправить GetVehicelColor на GetVehicleColor?
2. Было бы очень круто если бы добавили параметры к каждой функции в описании,
к примеру SetVehicleColor(vehicleid, &color1, &color2);
3. Зачем нужен CreateVehicleEx я так и не понял

А так все остальное просто СУПЕР

VVWVV
19.10.2016, 08:43
1. Можете исправить GetVehicelColor на GetVehicleColor?

Исправил.

Geebrox
20.10.2016, 04:40
Исправил.
Забыли изменить в описании


И еще:


tdw_vehicle/system/3dtext_label.inc(76 -- 79) : warning 213: tag mismatch

Вы забыли пропустить playerid:


Streamer:

CreateDynamic3DTextLabel(const text[], color, Float:x, Float:y, Float:z, Float:drawdistance,
attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1,
/*Ошибка тут*/playerid = -1, Float:streamdistance = STREAMER_3D_TEXT_LABEL_SD,
STREAMER_TAG_AREA areaid = STREAMER_TAG_AREA -1)

Ваш код:

TDW_g_sVDynamic@LabelIds[vehicleid] = CreateDynamic3DTextLabel(label, color,
offset_x, offset_y, offset_z, drawdistance, _, vehicleid, _:testLos,
virtualworld, interiorid, /*Ошибка тут*/streamdistance
);


Решение если кому интересно:


Вариант 1:

TDW_g_sVDynamic@LabelIds[vehicleid] = CreateDynamic3DTextLabel(label, color,
offset_x, offset_y, offset_z, drawdistance, _, vehicleid, _:testLos,
virtualworld, interiorid, .streamdistance = streamdistance
);

Вариант 2:

TDW_g_sVDynamic@LabelIds[vehicleid] = CreateDynamic3DTextLabel(label, color,
offset_x, offset_y, offset_z, drawdistance, _, vehicleid, _:testLos,
virtualworld, interiorid, _, streamdistance
);

Geebrox
20.10.2016, 07:18
Ошибка №2:



tdw_vehicle/system/3dtext_label.inc(113) : error 017: undefined symbol "UpdateDynamic3DTextLabel"


Решение:


Нужно открыть инклуд 3dtext_label.inc далее ищем: UpdateDynamic3DTextLabel (для поиска используйте ctrl+f) и меняем на UpdateDynamic3DTextLabelText

VVWVV
20.10.2016, 08:27
Забыли изменить в описании


И еще:


tdw_vehicle/system/3dtext_label.inc(76 -- 79) : warning 213: tag mismatch

Вы забыли пропустить playerid:


Streamer:

CreateDynamic3DTextLabel(const text[], color, Float:x, Float:y, Float:z, Float:drawdistance,
attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1,
/*Ошибка тут*/playerid = -1, Float:streamdistance = STREAMER_3D_TEXT_LABEL_SD,
STREAMER_TAG_AREA areaid = STREAMER_TAG_AREA -1)

Ваш код:

TDW_g_sVDynamic@LabelIds[vehicleid] = CreateDynamic3DTextLabel(label, color,
offset_x, offset_y, offset_z, drawdistance, _, vehicleid, _:testLos,
virtualworld, interiorid, /*Ошибка тут*/streamdistance
);


Решение если кому интересно:


Вариант 1:

TDW_g_sVDynamic@LabelIds[vehicleid] = CreateDynamic3DTextLabel(label, color,
offset_x, offset_y, offset_z, drawdistance, _, vehicleid, _:testLos,
virtualworld, interiorid, .streamdistance = streamdistance
);

Вариант 2:

TDW_g_sVDynamic@LabelIds[vehicleid] = CreateDynamic3DTextLabel(label, color,
offset_x, offset_y, offset_z, drawdistance, _, vehicleid, _:testLos,
virtualworld, interiorid, _, streamdistance
);



Ошибка №2:



tdw_vehicle/system/3dtext_label.inc(113) : error 017: undefined symbol "UpdateDynamic3DTextLabel"


Решение:


Нужно открыть инклуд 3dtext_label.inc далее ищем: UpdateDynamic3DTextLabel (для поиска используйте ctrl+f) и меняем на UpdateDynamic3DTextLabelText

Исправил.

Glant
31.10.2016, 21:25
Добавьте пару очень полезных функций из плагина YSF:

native GetVehicleSpawnInfo(vehicleid, &Float:fX, &Float:fY, &Float:fZ, &Float:fRot, &color1, &color2);
native SetVehicleSpawnInfo(vehicleid, modelid, Float:fX, Float:fY, Float:fZ, Float:fAngle, color1, color2, respawntime = -2, interior = -2);

VVWVV
31.10.2016, 22:10
Добавьте пару очень полезных функций из плагина YSF:

native GetVehicleSpawnInfo(vehicleid, &Float:fX, &Float:fY, &Float:fZ, &Float:fRot, &color1, &color2);
native SetVehicleSpawnInfo(vehicleid, modelid, Float:fX, Float:fY, Float:fZ, Float:fAngle, color1, color2, respawntime = -2, interior = -2);

Добавил (коммит (https://github.com/TDW-org/samp-include-vehicle/commit/3d86db1ffed9318b27d1afa429cf9563f4ce7955))

Glant
01.11.2016, 21:23
DestroyVehicle(vehicleid);
CreateVehicle(TDW_g_sVehicleData[vehicleid][ei_modelid], x, y, z, rot, color1, color2, respawn_delay, TDW_g_sVehicleSiren{vehicleid}


Я так понимаю при вызове функции транспорт обновляется сразу же?

Функция из YSF работает по принципу нативной функции SetSpawnInfo(), при вызове которой изменения запоминаются, и вступают в силу при следующем спавне

Было бы хорошо, если бы вы сделали таким же образом

ziggi
01.11.2016, 21:40
DestroyVehicle(vehicleid);
CreateVehicle(TDW_g_sVehicleData[vehicleid][ei_modelid], x, y, z, rot, color1, color2, respawn_delay, TDW_g_sVehicleSiren{vehicleid}


Я так понимаю при вызове функции транспорт обновляется сразу же?

Функция из YSF работает по принципу нативной функции SetSpawnInfo(), при вызове которой изменения запоминаются, и вступают в силу при следующем спавне

Было бы хорошо, если бы вы сделали таким же образом

Не получится, YSF меняет значения в памяти сервера, к которым "у простых смертных" доступа нет.

Glant
01.11.2016, 22:07
Не получится, YSF меняет значения в памяти сервера, к которым "у простых смертных" доступа нет.

это понятно, но можно же сделать все в переменных

к примеру, в функции просто сохранять значения в переменные, а в OnVehicleSpawn сверять их и пересоздавать транспорт

VVWVV
01.11.2016, 22:35
Не получится, YSF меняет значения в памяти сервера, к которым "у простых смертных" доступа нет.



DestroyVehicle(vehicleid);
CreateVehicle(TDW_g_sVehicleData[vehicleid][ei_modelid], x, y, z, rot, color1, color2, respawn_delay, TDW_g_sVehicleSiren{vehicleid}


Я так понимаю при вызове функции транспорт обновляется сразу же?

Функция из YSF работает по принципу нативной функции SetSpawnInfo(), при вызове которой изменения запоминаются, и вступают в силу при следующем спавне

Было бы хорошо, если бы вы сделали таким же образом

Добавил (коммит (https://github.com/TDW-org/samp-include-vehicle/commit/e5afb3273c040043bc8a69b7b3742c40dd4ef8ef))

P.S.: Возможно, что я что-то мог упустил.

ziggi
01.11.2016, 23:02
Добавил (коммит (https://github.com/TDW-org/samp-include-vehicle/commit/e5afb3273c040043bc8a69b7b3742c40dd4ef8ef))

P.S.: Возможно, что я что-то мог упустил.

Реализация через OnVehicleDeath буден не очень хорошо смотреться. Транспорт будет после смерти сразу исчезать, чего не происходит в игре. Особенно это будет выглядеть плохо после попадания пустого транспорта в воду.

VVWVV
01.11.2016, 23:26
Реализация через OnVehicleDeath буден не очень хорошо смотреться. Транспорт будет после смерти сразу исчезать, чего не происходит в игре. Особенно это будет выглядеть плохо после попадания пустого транспорта в воду.

Я знаю. Буду использовать таймер.

UPD: Решил использовать OnVehicleSpawn.

Glant
02.11.2016, 14:37
Есть какие-то подводные камни в юзании OnVehicleSpawn?
Учитывая первоначальное решение использовать другой паблик, а потом таймер

VVWVV
02.11.2016, 15:53
Есть какие-то подводные камни в юзании OnVehicleSpawn?
Учитывая первоначальное решение использовать другой паблик, а потом таймер

Наоборот. Как выяснилось, связка "таймер + OnVehicleDeath" не даёт нужного результата. А если вы говорите про мой первоначальный выбор, то тут я сглупил, т.к думал, что OnVehicleSpawn работает не сразу.

KrutoyKrosch
02.11.2016, 19:38
Это просто ахрененая вещь

Geebrox
06.11.2016, 02:04
Это просто ахрененая вещь

Хех, не такая и уж. Я тоже рано радовался.

Проблема в том, что при использование этого инклуда транспорт (любой) на сервере начинает странно себя ввести, с трудностью передвигается, словно на него подвешен груз с 1к тонн. Сначала думал что я сам что то накосячил при использование этого инклуда, после просто подключил в чистый мод и проблема опять дала о себе знать.

P.S. Автору: Вы проверяли на работоспособность этих функций? Может проблема в моем компьютере

VVWVV
06.11.2016, 02:26
Хех, не такая и уж. Я тоже рано радовался.

Проблема в том, что при использование этого инклуда транспорт (любой) на сервере начинает странно себя ввести, с трудностью передвигается, словно на него подвешен груз с 1к тонн. Сначала думал что я сам что то накосячил при использование этого инклуда, после просто подключил в чистый мод и проблема опять дала о себе знать.

P.S. Автору: Вы проверяли на работоспособность этих функций? Может проблема в моем компьютере

Если у вас лагает сервер, то это не значит, что не работает какая-то функция. Однако, я не отрицаю, что что-то его может тормозить. Выясню причину - отпишу.
Кроме того, хотелось бы спросить, какой инклюд вы подключали, что сервер стал сильно лагать?

Причиной может повлиять инклюд vhs_limiter, который устанавливает скорость всех автомобилей на нуль. Да, это ошибка, и я её исправил.

Geebrox
06.11.2016, 14:18
Подключал все инклюды. Но странно что визуальное повреждение и состояние дверей, окон авто не работают, сохраняю -> перезапускаю сервер -> транспорт спавнится как новый, хотя я все параметры беру из бд и через функции присваиваю

VVWVV
06.11.2016, 15:24
Подключал все инклюды. Но странно что визуальное повреждение и состояние дверей, окон авто не работают, сохраняю -> перезапускаю сервер -> транспорт спавнится как новый, хотя я все параметры беру из бд и через функции присваиваю

Возможно, что что-то у вас с сохранением. Вы можете показать, как вы сохраняете, а также загружаете информацию? Как минимум, я должен понять, что происходит.

UPD: Сделал некоторые фиксы.

vh_dstatus:
http://ihost.pro-pawn.ru/image.php?dm=Y4GB (http://ihost.pro-pawn.ru/?pm=Y4GB)

Geebrox
06.11.2016, 18:01
SetVehiclePanelsStatus(vehicleid,
cache_get_field_content_int(i, "front_left_panel"),
cache_get_field_content_int(i, "front_right_panel"),
cache_get_field_content_int(i, "rear_left_panel"),
cache_get_field_content_int(i, "rear_right_panel"),
cache_get_field_content_int(i, "windshield"),
cache_get_field_content_int(i, "front_bumper"),
cache_get_field_content_int(i, "rear_bumper"));
SetVehicleDoorsStatus(vehicleid,
cache_get_field_content_int(i, "bonnet_door"),
cache_get_field_content_int(i, "boot_door"),
cache_get_field_content_int(i, "driver_door"),
cache_get_field_content_int(i, "passenger_door"));
SetVehicleLightsStatus(vehicleid,
cache_get_field_content_int(i, "front_left_light"),
cache_get_field_content_int(i, "front_right_light"),
cache_get_field_content_int(i, "back_lights"));
SetVehicleTiresStatus(vehicleid,
cache_get_field_content_int(i, "rear_right_tire"),
cache_get_field_content_int(i, "front_right_tire"),
cache_get_field_content_int(i, "rear_left_tire"),
cache_get_field_content_int(i, "front_left_tire"));
SetVehicleParamsCarDoors(vehicleid,
cache_get_field_content_int(i, "door_driver"),
cache_get_field_content_int(i, "door_passenger"),
cache_get_field_content_int(i, "door_backleft"),
cache_get_field_content_int(i, "door_backright"));
SetVehicleParamsCarWindows(vehicleid,
cache_get_field_content_int(i, "window_driver"),
cache_get_field_content_int(i, "window_passenger"),
cache_get_field_content_int(i, "window_backleft"),
cache_get_field_content_int(i, "window_backright"));


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

в бд все по 0 сохраняется, да даже просто так проверил -> сделал команду что бы показывала статистику повреждение авто -> все функции возвращают 0

VVWVV
06.11.2016, 19:08
SetVehiclePanelsStatus(vehicleid,
cache_get_field_content_int(i, "front_left_panel"),
cache_get_field_content_int(i, "front_right_panel"),
cache_get_field_content_int(i, "rear_left_panel"),
cache_get_field_content_int(i, "rear_right_panel"),
cache_get_field_content_int(i, "windshield"),
cache_get_field_content_int(i, "front_bumper"),
cache_get_field_content_int(i, "rear_bumper"));
SetVehicleDoorsStatus(vehicleid,
cache_get_field_content_int(i, "bonnet_door"),
cache_get_field_content_int(i, "boot_door"),
cache_get_field_content_int(i, "driver_door"),
cache_get_field_content_int(i, "passenger_door"));
SetVehicleLightsStatus(vehicleid,
cache_get_field_content_int(i, "front_left_light"),
cache_get_field_content_int(i, "front_right_light"),
cache_get_field_content_int(i, "back_lights"));
SetVehicleTiresStatus(vehicleid,
cache_get_field_content_int(i, "rear_right_tire"),
cache_get_field_content_int(i, "front_right_tire"),
cache_get_field_content_int(i, "rear_left_tire"),
cache_get_field_content_int(i, "front_left_tire"));
SetVehicleParamsCarDoors(vehicleid,
cache_get_field_content_int(i, "door_driver"),
cache_get_field_content_int(i, "door_passenger"),
cache_get_field_content_int(i, "door_backleft"),
cache_get_field_content_int(i, "door_backright"));
SetVehicleParamsCarWindows(vehicleid,
cache_get_field_content_int(i, "window_driver"),
cache_get_field_content_int(i, "window_passenger"),
cache_get_field_content_int(i, "window_backleft"),
cache_get_field_content_int(i, "window_backright"));


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

в бд все по 0 сохраняется, да даже просто так проверил -> сделал команду что бы показывала статистику повреждение авто -> все функции возвращают 0

Обновите версию.

Geebrox
06.11.2016, 19:42
Обновите версию.

Хорошо, но я пока что не использую эту библиотеку, но думаю буду...
После вышеперечисленных проблем, переписал всю систему авто заново под свои функции

VVWVV
06.11.2016, 19:50
Хорошо, но я пока что не использую эту библиотеку, но думаю буду...
После вышеперечисленных проблем, переписал всю систему авто заново под свои функции

Вы, наверное, заметили, что нигде не указана версия библиотеки, это потому, что на самом деле, конкретная версия -- бета. То есть, все функции требуется тщательно проверить на содержание багов. Однако есть, некоторые системы, которые проверены, и могут хорошо функционировать.

Geebrox
06.11.2016, 20:09
Вы, наверное, заметили, что нигде не указана версия библиотеки, это потому, что на самом деле, конкретная версия -- бета. То есть, все функции требуется тщательно проверить на содержание багов. Однако есть, некоторые системы, которые проверены, и могут хорошо функционировать.

Да да, я тщательно все функции проверяю (но не использую в проекте). О найденных новых ошибках сообщу

Geebrox
08.11.2016, 00:34
Ошибка 3dtext_label.inc строка 79

http://i.imgur.com/dQVaryT.jpg

VVWVV
08.11.2016, 08:02
Ошибка 3dtext_label.inc строка 79

http://i.imgur.com/dQVaryT.jpg

А что, собственно, не так? Код нормально компилируется, в игре тоже все правильно устанавливается.

Glant
08.11.2016, 21:32
Можно пример?


Впрочем, можно воспользоваться флагом '-i<путь>' для указания альтернативного пути для библиотек.

VVWVV
08.11.2016, 21:45
Можно пример?

Вроде бы работает во всех компиляторах (не проверял в PAWN 4.0). Кроме того, я проверил только на компиляторах для окон (Windows).



-i<полный путь до файла>


Допустим:


-iC:/SomethingFolder/pawn/include/<папка с библиотекой>


Данный флаг можно использовать несколько раз.

Glant
08.11.2016, 21:49
это я как понимаю пишется в pawn.cfg?

VVWVV
08.11.2016, 21:49
это я как понимаю пишется в pawn.cfg?

Вроде бы, да. Я использую ST3, а он обращается к компилятору pawncc.

Glant
08.11.2016, 21:53
А каков тогда будет порядок подключения всех инклудов?
Например сначала подключаются из .pwn файла, а затем указанный в pawn.cfg?

VVWVV
08.11.2016, 21:54
А каков тогда будет порядок подключения всех инклудов?
Например сначала подключаются из .pwn файла, а затем указанный в pawn.cfg?

Нет, они не подключаются автоматически. Это лишь путь до инклюдов.

Glant
08.11.2016, 21:57
Нет, они не подключаются автоматически. Это лишь путь до инклюдов.

Аа, дак он определяет путь для подключения в моде всех инклудов?
А по умолчанию этот путь определен как папка /pawno/include?

VVWVV
08.11.2016, 22:23
Аа, дак он определяет путь для подключения в моде всех инклудов?
А по умолчанию этот путь определен как папка /pawno/include?

Да, но вы также можете подключать разное количество папок.

DeimoS
09.11.2016, 11:31
Можно ещё прямо в моде указать прямой путь до файла через #include ""
То бишь:

#include "D:\projects\sa-mp\zanuda sa-mp\sources\lib\foreach.inc"

KrutoyKrosch
10.11.2016, 03:15
Я бы на твоем месте дописал бы еще #include "../", потому что я тоже кинул библиотеку не в стандартную папку и везде пришлось дописывать

DeimoS
10.11.2016, 04:04
Я бы на твоем месте дописал бы еще #include "../", потому что я тоже кинул библиотеку не в стандартную папку и везде пришлось дописывать

Всё так и задумано: я использую Sublime Text и все стандартные инклуды хранятся прямо в директории с компилятором. А вот сторонние (в том числе и самописаные) уже раскиданы по папкам с проектами.

Вот так это выглядит на данный момент
http://i.imgur.com/6WuouQT.png
Но я хочу заняться рефакторингом, как только появится время, ибо сейчас во многих инклудах каша + сами инклуды немного не по нужным местам раскиданы/не так названы. Это так, тестовый вариант древовидного структурирования мода :)

Glant
10.11.2016, 19:03
Есть несколько вопросов, но не хочется спешить с Pull Request'ом.

1) В системе все инклуды подключаются через '/', а не обратный, и в данном случае файлы он как-бы октрывает, но информацию внутри просто-напросто не считывает. Например, объявлен какой-либо макрос, который используется в "дочернем" инклуде, а там ошибка. Поменял на '\' - все ок

2) в detect все инклуды имеют одноименные название с оригинальными, из-за чего компилятор открывает их, но также просто не считывает внутренние данные, все исправляется, если задать другое название

Компилятор официальный

VVWVV
10.11.2016, 19:39
Есть несколько вопросов, но не хочется спешить с Pull Request'ом.

1) В системе все инклуды подключаются через '/', а не обратный, и в данном случае файлы он как-бы октрывает, но информацию внутри просто-напросто не считывает. Например, объявлен какой-либо макрос, который используется в "дочернем" инклуде, а там ошибка. Поменял на '\' - все ок

2) в detect все инклуды имеют одноименные название с оригинальными, из-за чего компилятор открывает их, но также просто не считывает внутренние данные, все исправляется, если задать другое название

Компилятор официальный

Буду рад, если вы отправите PR, ибо времени на исправления нет. Насколько я понял, вторая проблема тесно связана с этой темой (https://github.com/Zeex/pawn/issues/107).

VVWVV
10.12.2016, 19:43
Добавлены новые библиотеки и системы. Кроме того, добавил документацию к этим системам.

Новые библиотеки:

vhs_mileage
vhs_neon
vhs_policelights
vhs_signals
vhs_engine
vhs_lock
vhs_radar
vhs_booster
vhs_drift

SergGrey
04.02.2017, 18:20
У меня появилась проблема. Возможно эт я криворукий, хотя я пробовал исправить, но не получилось. Суть проблемы в том, что при подключении двух инклудов одновременно(проверял только на tdw_vdetail и tdw_vdata) работает функция из первого, но не работает из второго. Таким образом у меня работает GetVehiclePaintjobId, но не работает GetVehicleColor и наоборот. Пытался отрубать у второго инклуда погдрузку core, но не помогло. В чём проблема?

VVWVV
04.02.2017, 18:40
У меня появилась проблема. Возможно эт я криворукий, хотя я пробовал исправить, но не получилось. Суть проблемы в том, что при подключении двух инклудов одновременно(проверял только на tdw_vdetail и tdw_vdata) работает функция из первого, но не работает из второго. Таким образом у меня работает GetVehiclePaintjobId, но не работает GetVehicleColor и наоборот. Пытался отрубать у второго инклуда погдрузку core, но не помогло. В чём проблема?

Воспользуйтесь более-менее рабочей версией (https://github.com/TDW-org/samp-include-vehicle/releases), ибо сейчас я пытаюсь сделать реструктуризацию модулей.

SergGrey
04.02.2017, 19:06
Воспользуйтесь более-менее рабочей версией (https://github.com/TDW-org/samp-include-vehicle/releases), ибо сейчас я пытаюсь сделать реструктуризацию модулей.

Помогло. Огромное спасибо

SergGrey
04.02.2017, 21:09
У меня появился вопрос. Вот я решил сменить измерение скорости в спидометре на то, что в инклуде vs_math, но при тесте по прямой дороге infernus развивает скорость примерно 90, remington 68, но с помощью инклуда vs_handling мы получаем макс скорость 240 и 160. Я что-то не так делаю или есть какие-то ограничения или ещё что-то?

VVWVV
04.02.2017, 22:25
У меня появился вопрос. Вот я решил сменить измерение скорости в спидометре на то, что в инклуде vs_math, но при тесте по прямой дороге infernus развивает скорость примерно 90, remington 68, но с помощью инклуда vs_handling мы получаем макс скорость 240 и 160. Я что-то не так делаю или есть какие-то ограничения или ещё что-то?

Закончил реструктуризацию модулей, поэтому вы можете скачать новую версию.

SergGrey
04.02.2017, 23:00
Сейчас потестил и как мне кажется, стоит снизить множитель со 180 до 171 примерно(на remington при 171 множителе скорость достигалась 159-160 с округлением до целого числа в меньшую сторону), может даже чуть ниже, но эт лично моё мнение:D

ziggi
04.02.2017, 23:21
Сейчас потестил и как мне кажется, стоит снизить множитель со 180 до 171 примерно(на remington при 171 множителе скорость достигалась 159-160 с округлением до целого числа в меньшую сторону), может даже чуть ниже, но эт лично моё мнение:D

180 - стандартное значение для GTA SA, а игра на то и игра, ей нельзя быть слишком реальной.

SergGrey
04.02.2017, 23:26
Ааа, а я думал 180 вручную подбирали, тогда извиняюсь. Просто сравнивал заявленную максимальную скорость со скоростью на спидометре, а на нём она превосходила заявленную

ziggi
05.02.2017, 01:44
Ааа, а я думал 180 вручную подбирали, тогда извиняюсь. Просто сравнивал заявленную максимальную скорость со скоростью на спидометре, а на нём она превосходила заявленную

На скорость ещё FPS может влиять, поэтому значения отличаются.

SergGrey
05.02.2017, 02:08
На скорость ещё FPS может влиять, поэтому значения отличаются.
Ну вряд ли при 60 кадров это влияло, ну да ладно.

Закончил реструктуризацию модулей, поэтому вы можете скачать новую версию.
Обнаружил ошибку в tdw_vyfuel.inc "pawno\include\tdw_vyfuel.inc(295) : warning 213: tag mismatch". Не работает функция GetVehicleFuel

ziggi
05.02.2017, 03:56
Ну вряд ли при 60 кадров это влияло, ну да ладно.

GTA SA писалась для 30 кадров, ибо на приставках того времени больше было не получить. Более того, на сколько мне известно, многие в SA-MP ограничивают FPS, чтобы быстрее бегать, плавать и так далее.

[ForD]
05.02.2017, 10:00
Ааа, а я думал 180 вручную подбирали, тогда извиняюсь. Просто сравнивал заявленную максимальную скорость со скоростью на спидометре, а на нём она превосходила заявленную

Может дело в спидометре?

SergGrey
05.02.2017, 13:52
GTA SA писалась для 30 кадров, ибо на приставках того времени больше было не получить. Более того, на сколько мне известно, многие в SA-MP ограничивают FPS, чтобы быстрее бегать, плавать и так далее.
Воу, как много я не знал:D. Лично я играю без ограничения. Но спорить мне бессмысленно, ибо я в этом не разбираюсь:D

;82165']Может дело в спидометре?
Навряд ли, спидометр использовал чисто функцию GetVehicleSpeed с параметром километров и округлялось до целого числа в меньшую сторону

SergGrey
05.02.2017, 23:14
Вопрос, а при каких условиях срабатывает функция OnVehicleMileageUpdate? То что при обновлении милимитража эт понятно, но в то же время не понятно:D. При использовании системы бензина из инклуда всё норм работало, но когда переписал свою систему и закинул её в этот паблик в моде, а не в инклуде, то бензин почему-то не изменяется. Вот код:

public OnVehicleMileageUpdate(vehicleid)
{
new engine,lights,alarm,doors,bonnet,boot,objective;
if(PlayerCar[vehicleid][pcEngine]==1)
{
if(PlayerCar[vehicleid][pcFuel]<=0.1)
{
GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(vehicleid,0,lights,alarm,doors,bonnet,boot,objective);
PlayerCar[vehicleid][pcFuel] = 0.0;
PlayerCar[vehicleid][pcEngine]=0;
}
else
{
PlayerCar[vehicleid][pcFuel]-=(GetVehicleSpeed(vehicleid) + 0.1)/TDW_VEHICLE_FUEL_FLOAT;
}
}
return 1;
}

VVWVV
05.02.2017, 23:46
Вопрос, а при каких условиях срабатывает функция OnVehicleMileageUpdate? То что при обновлении милимитража эт понятно, но в то же время не понятно:D. При использовании системы бензина из инклуда всё норм работало, но когда переписал свою систему и закинул её в этот паблик в моде, а не в инклуде, то бензин почему-то не изменяется. Вот код:

public OnVehicleMileageUpdate(vehicleid)
{
new engine,lights,alarm,doors,bonnet,boot,objective;
if(PlayerCar[vehicleid][pcEngine]==1)
{
if(PlayerCar[vehicleid][pcFuel]<=0.1)
{
GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(vehicleid,0,lights,alarm,doors,bonnet,boot,objective);
PlayerCar[vehicleid][pcFuel] = 0.0;
PlayerCar[vehicleid][pcEngine]=0;
}
else
{
PlayerCar[vehicleid][pcFuel]-=(GetVehicleSpeed(vehicleid) + 0.1)/TDW_VEHICLE_FUEL_FLOAT;
}
}
return 1;
}

Вероятно, что в вашем коде ошибка. Тем не менее, почему вы используете свой код, а не предложенный в библиотеке?

UPD: Исправил. Спасибо! Ошибка заключалась в том, что создавалась неправильная рекурсия из-за неправильного перехвата функции.

SergGrey
06.02.2017, 01:22
Вероятно, что в вашем коде ошибка. Тем не менее, почему вы используете свой код, а не предложенный в библиотеке?

UPD: Исправил. Спасибо! Ошибка заключалась в том, что создавалась неправильная рекурсия из-за неправильного перехвата функции.

Не хочу в готовый инклуд добавлять свой говно код:D. Да и для сохранения топлива машин для бд приходится использовать не только топливо из инклуда, но ещё и переменную постоянно обновлять. Как по мне, более правильнее сразу на одной переменной всё делать. А, ну ещё с движком пришлось париться, чтобы всё работало так, как я задумал, но в конечно счёте я понял, что эт слишком мутарно и легче взять ваш код и переписать его под себя. И спасибо за быстрые исправления багов)

Glant
19.02.2017, 15:14
А почему Get/SetVehicleSpawnInfo убрали?

VVWVV
19.02.2017, 15:24
А почему Get/SetVehicleSpawnInfo убрали?

Я не знаю в какую библиотеку их определить. Вы можете использовать старую версию библиотеки.

DeimoS
21.07.2017, 16:56
Большинство ссылок в описании битые

VVWVV
21.07.2017, 21:57
Большинство ссылок в описании битые

К сожалению, да. На следующей неделе все исправлю, ибо пока меня нет дома))

DCPSHER
16.05.2018, 22:40
Возник вопрос по библиотеке "tdw_vmath". В описании упоминается "расположение персонажа относительно транспортного средства", однако просмотрев все функции библиотеке в исходном коде на GitHub'е, я не нашел функции, реализующей данное действие.

Существует ли она, и если да, то как до нее добраться?

VVWVV
17.05.2018, 16:21
Возник вопрос по библиотеке "tdw_vmath". В описании упоминается "расположение персонажа относительно транспортного средства", однако просмотрев все функции библиотеке в исходном коде на GitHub'е, я не нашел функции, реализующей данное действие.

Существует ли она, и если да, то как до нее добраться?

Насколько я помню, она была, но из-за изменения структуры библиотеки была утеряна. Очевидно, что её можно найти в истории изменений. Тем не менее, данная функция реализуется довольно быстро.

DCPSHER
17.05.2018, 22:03
Насколько я помню, она была, но из-за изменения структуры библиотеки была утеряна. Очевидно, что её можно найти в истории изменений. Тем не менее, данная функция реализуется довольно быстро.

К сожалению, дальше этого коммита, когда была еще другая структура организации файлов https://github.com/tdworg/samp-include-vehicle/blob/77243c5cdbfde6685238cb26730449726e4b70ea/tdw_vehicle/utils/math.inc вглубь я не нашел
Копнул все таки еще чуть глубже, нашел еще более старый файл math_functions.inc https://github.com/tdworg/samp-include-vehicle/blob/bef0f85b0339a0e58690e7ee251a31fd613c2bfb/tdw_vehicle/utils/math_functions.inc , однако тоже не нашел в нем нужной информации.

Не могли бы вы подсказать, как реализовать это, если это довольно быстро?

Быть может, также, я неправильно понимаю значение данного описания? Мне необходима функция, вычисляющая расположение персонажа на сиденье внутри машины, т.к. если брать GetPlayerPos - координаты будут просто координатами центра машины

VVWVV
17.05.2018, 22:25
К сожалению, дальше этого коммита, когда была еще другая структура организации файлов https://github.com/tdworg/samp-include-vehicle/blob/77243c5cdbfde6685238cb26730449726e4b70ea/tdw_vehicle/utils/math.inc вглубь я не нашел
Копнул все таки еще чуть глубже, нашел еще более старый файл math_functions.inc https://github.com/tdworg/samp-include-vehicle/blob/bef0f85b0339a0e58690e7ee251a31fd613c2bfb/tdw_vehicle/utils/math_functions.inc , однако тоже не нашел в нем нужной информации.

Не могли бы вы подсказать, как реализовать это, если это довольно быстро?

Быть может, также, я неправильно понимаю значение данного описания? Мне необходима функция, вычисляющая расположение персонажа на сиденье внутри машины, т.к. если брать GetPlayerPos - координаты будут просто координатами центра машины

Нет, это была другая функция, определяющая позицию игрока относительно т/c. Для функции, которую описали вы потребуется значительно больше времени, поскольку придётся вычислять на какое сиденье сел игрок (GetPlayerVehicleSeat), а после использовать специальные координаты, которые будут высчитываться относительно центра т/c. Высчитать специальные относительные координаты очень сложно и долго.

DCPSHER
17.05.2018, 23:16
Нет, это была другая функция, определяющая позицию игрока относительно т/c. Для функции, которую описали вы потребуется значительно больше времени, поскольку придётся вычислять на какое сиденье сел игрок (GetPlayerVehicleSeat), а после использовать специальные координаты, которые будут высчитываться относительно центра т/c. Высчитать специальные относительные координаты очень сложно и долго.

Вот в этом-то и суть, что подобное довольно непросто реализовать из-за разности расположения сидений в разных моделях.
Я как раз и начал изучать вашу библиотеку поэтому, надеясь, что возможно в ней найдется это сокровище, что мне нужно.
Что ж, спасибо за ответы! Рад был общению

DeimoS
18.05.2018, 11:26
DCPSHER, советую тебе загуглить реализацию вида от первого лица при помощи Pawn. Там как раз и идёт вычисление положения сидений: правда никогда не проверял насколько точно. В любом случае, код из тех скриптов можно взять как основу

DCPSHER
21.05.2018, 01:01
DeimoS, да, именно так, уже пошел в эту сторону. Там вычисляется через ModelInfo, в ней хранятся координаты передних и задних сидений, но только их центр, поэтому вычисляются от середины еще в обе стороны координаты точного места.
В принципе для всего, кроме автобуса, и может быть чего еще, будет годно работать.
Благодарю за отклик и советы!