Просмотр полной версии : [Include] TDW Vehicle Libraries
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.
Заметил ошибку в DestroyVehicleSafe (PR делать лень):
Функция должна возвращать по ссылке параметр vehicleid, тогда эта функция будет работать.
То есть так:
stock DestroyVehicleSafe(&vehicleid)
P.S. Без списка функций, конечно, непонятно что есть и что можно использовать.
Заметил ошибку в DestroyVehicleSafe (PR делать лень):
Функция должна возвращать по ссылке параметр vehicleid, тогда эта функция будет работать.
То есть так:
stock DestroyVehicleSafe(&vehicleid)
Хм, действительно.
UPD: Добавил.
P.S. Без списка функций, конечно, непонятно что есть и что можно использовать.
Функций очень много... Хотя, все исправлю.
Функций очень много... Хотя, все исправлю.
Просто если ты делаешь библиотеку для себя, то да, это не обязательно. Но когда люди не понимают как это использовать, то они вряд ли будут этим пользоваться. Просто сделай список всех функций в README без описания (я сам часто так делаю), ибо при грамотном наименовании функций и параметров оно не нужно.
Просто если ты делаешь библиотеку для себя, то да, это не обязательно. Но когда люди не понимают как это использовать, то они вряд ли будут этим пользоваться. Просто сделай список всех функций в README без описания (я сам часто так делаю), ибо при грамотном наименовании функций и параметров оно не нужно.
Да, действительно. Правильно написанный код сам себя комментирует. Всегда стараюсь соблюдать данную практику при разработке, ибо она очень помогает.
Однако, спасибо за совет!
UPD: Добавил.
Библиотека очень полезная, взял себе в проект, спасибо.
1. Можете исправить GetVehicelColor на GetVehicleColor?
2. Было бы очень круто если бы добавили параметры к каждой функции в описании,
к примеру SetVehicleColor(vehicleid, &color1, &color2);
3. Зачем нужен CreateVehicleEx я так и не понял
А так все остальное просто СУПЕР
1. Можете исправить GetVehicelColor на GetVehicleColor?
Исправил.
Исправил.
Забыли изменить в описании
И еще:
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
Забыли изменить в описании
И еще:
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
Исправил.
Добавьте пару очень полезных функций из плагина 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);
Добавьте пару очень полезных функций из плагина 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))
DestroyVehicle(vehicleid);
CreateVehicle(TDW_g_sVehicleData[vehicleid][ei_modelid], x, y, z, rot, color1, color2, respawn_delay, TDW_g_sVehicleSiren{vehicleid}
Я так понимаю при вызове функции транспорт обновляется сразу же?
Функция из YSF работает по принципу нативной функции SetSpawnInfo(), при вызове которой изменения запоминаются, и вступают в силу при следующем спавне
Было бы хорошо, если бы вы сделали таким же образом
DestroyVehicle(vehicleid);
CreateVehicle(TDW_g_sVehicleData[vehicleid][ei_modelid], x, y, z, rot, color1, color2, respawn_delay, TDW_g_sVehicleSiren{vehicleid}
Я так понимаю при вызове функции транспорт обновляется сразу же?
Функция из YSF работает по принципу нативной функции SetSpawnInfo(), при вызове которой изменения запоминаются, и вступают в силу при следующем спавне
Было бы хорошо, если бы вы сделали таким же образом
Не получится, YSF меняет значения в памяти сервера, к которым "у простых смертных" доступа нет.
Не получится, YSF меняет значения в памяти сервера, к которым "у простых смертных" доступа нет.
это понятно, но можно же сделать все в переменных
к примеру, в функции просто сохранять значения в переменные, а в OnVehicleSpawn сверять их и пересоздавать транспорт
Не получится, 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.: Возможно, что я что-то мог упустил.
Добавил (коммит (https://github.com/TDW-org/samp-include-vehicle/commit/e5afb3273c040043bc8a69b7b3742c40dd4ef8ef))
P.S.: Возможно, что я что-то мог упустил.
Реализация через OnVehicleDeath буден не очень хорошо смотреться. Транспорт будет после смерти сразу исчезать, чего не происходит в игре. Особенно это будет выглядеть плохо после попадания пустого транспорта в воду.
Реализация через OnVehicleDeath буден не очень хорошо смотреться. Транспорт будет после смерти сразу исчезать, чего не происходит в игре. Особенно это будет выглядеть плохо после попадания пустого транспорта в воду.
Я знаю. Буду использовать таймер.
UPD: Решил использовать OnVehicleSpawn.
Есть какие-то подводные камни в юзании OnVehicleSpawn?
Учитывая первоначальное решение использовать другой паблик, а потом таймер
Есть какие-то подводные камни в юзании OnVehicleSpawn?
Учитывая первоначальное решение использовать другой паблик, а потом таймер
Наоборот. Как выяснилось, связка "таймер + OnVehicleDeath" не даёт нужного результата. А если вы говорите про мой первоначальный выбор, то тут я сглупил, т.к думал, что OnVehicleSpawn работает не сразу.
KrutoyKrosch
02.11.2016, 19:38
Это просто ахрененая вещь
Это просто ахрененая вещь
Хех, не такая и уж. Я тоже рано радовался.
Проблема в том, что при использование этого инклуда транспорт (любой) на сервере начинает странно себя ввести, с трудностью передвигается, словно на него подвешен груз с 1к тонн. Сначала думал что я сам что то накосячил при использование этого инклуда, после просто подключил в чистый мод и проблема опять дала о себе знать.
P.S. Автору: Вы проверяли на работоспособность этих функций? Может проблема в моем компьютере
Хех, не такая и уж. Я тоже рано радовался.
Проблема в том, что при использование этого инклуда транспорт (любой) на сервере начинает странно себя ввести, с трудностью передвигается, словно на него подвешен груз с 1к тонн. Сначала думал что я сам что то накосячил при использование этого инклуда, после просто подключил в чистый мод и проблема опять дала о себе знать.
P.S. Автору: Вы проверяли на работоспособность этих функций? Может проблема в моем компьютере
Если у вас лагает сервер, то это не значит, что не работает какая-то функция. Однако, я не отрицаю, что что-то его может тормозить. Выясню причину - отпишу.
Кроме того, хотелось бы спросить, какой инклюд вы подключали, что сервер стал сильно лагать?
Причиной может повлиять инклюд vhs_limiter, который устанавливает скорость всех автомобилей на нуль. Да, это ошибка, и я её исправил.
Подключал все инклюды. Но странно что визуальное повреждение и состояние дверей, окон авто не работают, сохраняю -> перезапускаю сервер -> транспорт спавнится как новый, хотя я все параметры беру из бд и через функции присваиваю
Подключал все инклюды. Но странно что визуальное повреждение и состояние дверей, окон авто не работают, сохраняю -> перезапускаю сервер -> транспорт спавнится как новый, хотя я все параметры беру из бд и через функции присваиваю
Возможно, что что-то у вас с сохранением. Вы можете показать, как вы сохраняете, а также загружаете информацию? Как минимум, я должен понять, что происходит.
UPD: Сделал некоторые фиксы.
vh_dstatus:
http://ihost.pro-pawn.ru/image.php?dm=Y4GB (http://ihost.pro-pawn.ru/?pm=Y4GB)
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
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
Обновите версию.
Обновите версию.
Хорошо, но я пока что не использую эту библиотеку, но думаю буду...
После вышеперечисленных проблем, переписал всю систему авто заново под свои функции
Хорошо, но я пока что не использую эту библиотеку, но думаю буду...
После вышеперечисленных проблем, переписал всю систему авто заново под свои функции
Вы, наверное, заметили, что нигде не указана версия библиотеки, это потому, что на самом деле, конкретная версия -- бета. То есть, все функции требуется тщательно проверить на содержание багов. Однако есть, некоторые системы, которые проверены, и могут хорошо функционировать.
Вы, наверное, заметили, что нигде не указана версия библиотеки, это потому, что на самом деле, конкретная версия -- бета. То есть, все функции требуется тщательно проверить на содержание багов. Однако есть, некоторые системы, которые проверены, и могут хорошо функционировать.
Да да, я тщательно все функции проверяю (но не использую в проекте). О найденных новых ошибках сообщу
Ошибка 3dtext_label.inc строка 79
http://i.imgur.com/dQVaryT.jpg
Ошибка 3dtext_label.inc строка 79
http://i.imgur.com/dQVaryT.jpg
А что, собственно, не так? Код нормально компилируется, в игре тоже все правильно устанавливается.
Можно пример?
Впрочем, можно воспользоваться флагом '-i<путь>' для указания альтернативного пути для библиотек.
Можно пример?
Вроде бы работает во всех компиляторах (не проверял в PAWN 4.0). Кроме того, я проверил только на компиляторах для окон (Windows).
-i<полный путь до файла>
Допустим:
-iC:/SomethingFolder/pawn/include/<папка с библиотекой>
Данный флаг можно использовать несколько раз.
это я как понимаю пишется в pawn.cfg?
это я как понимаю пишется в pawn.cfg?
Вроде бы, да. Я использую ST3, а он обращается к компилятору pawncc.
А каков тогда будет порядок подключения всех инклудов?
Например сначала подключаются из .pwn файла, а затем указанный в pawn.cfg?
А каков тогда будет порядок подключения всех инклудов?
Например сначала подключаются из .pwn файла, а затем указанный в pawn.cfg?
Нет, они не подключаются автоматически. Это лишь путь до инклюдов.
Нет, они не подключаются автоматически. Это лишь путь до инклюдов.
Аа, дак он определяет путь для подключения в моде всех инклудов?
А по умолчанию этот путь определен как папка /pawno/include?
Аа, дак он определяет путь для подключения в моде всех инклудов?
А по умолчанию этот путь определен как папка /pawno/include?
Да, но вы также можете подключать разное количество папок.
Можно ещё прямо в моде указать прямой путь до файла через #include ""
То бишь:
#include "D:\projects\sa-mp\zanuda sa-mp\sources\lib\foreach.inc"
KrutoyKrosch
10.11.2016, 03:15
Я бы на твоем месте дописал бы еще #include "../", потому что я тоже кинул библиотеку не в стандартную папку и везде пришлось дописывать
Я бы на твоем месте дописал бы еще #include "../", потому что я тоже кинул библиотеку не в стандартную папку и везде пришлось дописывать
Всё так и задумано: я использую Sublime Text и все стандартные инклуды хранятся прямо в директории с компилятором. А вот сторонние (в том числе и самописаные) уже раскиданы по папкам с проектами.
Вот так это выглядит на данный момент
http://i.imgur.com/6WuouQT.png
Но я хочу заняться рефакторингом, как только появится время, ибо сейчас во многих инклудах каша + сами инклуды немного не по нужным местам раскиданы/не так названы. Это так, тестовый вариант древовидного структурирования мода :)
Есть несколько вопросов, но не хочется спешить с Pull Request'ом.
1) В системе все инклуды подключаются через '/', а не обратный, и в данном случае файлы он как-бы октрывает, но информацию внутри просто-напросто не считывает. Например, объявлен какой-либо макрос, который используется в "дочернем" инклуде, а там ошибка. Поменял на '\' - все ок
2) в detect все инклуды имеют одноименные название с оригинальными, из-за чего компилятор открывает их, но также просто не считывает внутренние данные, все исправляется, если задать другое название
Компилятор официальный
Есть несколько вопросов, но не хочется спешить с Pull Request'ом.
1) В системе все инклуды подключаются через '/', а не обратный, и в данном случае файлы он как-бы октрывает, но информацию внутри просто-напросто не считывает. Например, объявлен какой-либо макрос, который используется в "дочернем" инклуде, а там ошибка. Поменял на '\' - все ок
2) в detect все инклуды имеют одноименные название с оригинальными, из-за чего компилятор открывает их, но также просто не считывает внутренние данные, все исправляется, если задать другое название
Компилятор официальный
Буду рад, если вы отправите PR, ибо времени на исправления нет. Насколько я понял, вторая проблема тесно связана с этой темой (https://github.com/Zeex/pawn/issues/107).
Добавлены новые библиотеки и системы. Кроме того, добавил документацию к этим системам.
Новые библиотеки:
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, но не помогло. В чём проблема?
У меня появилась проблема. Возможно эт я криворукий, хотя я пробовал исправить, но не получилось. Суть проблемы в том, что при подключении двух инклудов одновременно(проверял только на 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. Я что-то не так делаю или есть какие-то ограничения или ещё что-то?
У меня появился вопрос. Вот я решил сменить измерение скорости в спидометре на то, что в инклуде vs_math, но при тесте по прямой дороге infernus развивает скорость примерно 90, remington 68, но с помощью инклуда vs_handling мы получаем макс скорость 240 и 160. Я что-то не так делаю или есть какие-то ограничения или ещё что-то?
Закончил реструктуризацию модулей, поэтому вы можете скачать новую версию.
SergGrey
04.02.2017, 23:00
Сейчас потестил и как мне кажется, стоит снизить множитель со 180 до 171 примерно(на remington при 171 множителе скорость достигалась 159-160 с округлением до целого числа в меньшую сторону), может даже чуть ниже, но эт лично моё мнение:D
Сейчас потестил и как мне кажется, стоит снизить множитель со 180 до 171 примерно(на remington при 171 множителе скорость достигалась 159-160 с округлением до целого числа в меньшую сторону), может даже чуть ниже, но эт лично моё мнение:D
180 - стандартное значение для GTA SA, а игра на то и игра, ей нельзя быть слишком реальной.
SergGrey
04.02.2017, 23:26
Ааа, а я думал 180 вручную подбирали, тогда извиняюсь. Просто сравнивал заявленную максимальную скорость со скоростью на спидометре, а на нём она превосходила заявленную
Ааа, а я думал 180 вручную подбирали, тогда извиняюсь. Просто сравнивал заявленную максимальную скорость со скоростью на спидометре, а на нём она превосходила заявленную
На скорость ещё FPS может влиять, поэтому значения отличаются.
SergGrey
05.02.2017, 02:08
На скорость ещё FPS может влиять, поэтому значения отличаются.
Ну вряд ли при 60 кадров это влияло, ну да ладно.
Закончил реструктуризацию модулей, поэтому вы можете скачать новую версию.
Обнаружил ошибку в tdw_vyfuel.inc "pawno\include\tdw_vyfuel.inc(295) : warning 213: tag mismatch". Не работает функция GetVehicleFuel
Ну вряд ли при 60 кадров это влияло, ну да ладно.
GTA SA писалась для 30 кадров, ибо на приставках того времени больше было не получить. Более того, на сколько мне известно, многие в SA-MP ограничивают FPS, чтобы быстрее бегать, плавать и так далее.
Ааа, а я думал 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;
}
Вопрос, а при каких условиях срабатывает функция 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. Да и для сохранения топлива машин для бд приходится использовать не только топливо из инклуда, но ещё и переменную постоянно обновлять. Как по мне, более правильнее сразу на одной переменной всё делать. А, ну ещё с движком пришлось париться, чтобы всё работало так, как я задумал, но в конечно счёте я понял, что эт слишком мутарно и легче взять ваш код и переписать его под себя. И спасибо за быстрые исправления багов)
А почему Get/SetVehicleSpawnInfo убрали?
А почему Get/SetVehicleSpawnInfo убрали?
Я не знаю в какую библиотеку их определить. Вы можете использовать старую версию библиотеки.
Большинство ссылок в описании битые
Большинство ссылок в описании битые
К сожалению, да. На следующей неделе все исправлю, ибо пока меня нет дома))
Возник вопрос по библиотеке "tdw_vmath". В описании упоминается "расположение персонажа относительно транспортного средства", однако просмотрев все функции библиотеке в исходном коде на GitHub'е, я не нашел функции, реализующей данное действие.
Существует ли она, и если да, то как до нее добраться?
Возник вопрос по библиотеке "tdw_vmath". В описании упоминается "расположение персонажа относительно транспортного средства", однако просмотрев все функции библиотеке в исходном коде на GitHub'е, я не нашел функции, реализующей данное действие.
Существует ли она, и если да, то как до нее добраться?
Насколько я помню, она была, но из-за изменения структуры библиотеки была утеряна. Очевидно, что её можно найти в истории изменений. Тем не менее, данная функция реализуется довольно быстро.
Насколько я помню, она была, но из-за изменения структуры библиотеки была утеряна. Очевидно, что её можно найти в истории изменений. Тем не менее, данная функция реализуется довольно быстро.
К сожалению, дальше этого коммита, когда была еще другая структура организации файлов 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 - координаты будут просто координатами центра машины
К сожалению, дальше этого коммита, когда была еще другая структура организации файлов 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. Высчитать специальные относительные координаты очень сложно и долго.
Нет, это была другая функция, определяющая позицию игрока относительно т/c. Для функции, которую описали вы потребуется значительно больше времени, поскольку придётся вычислять на какое сиденье сел игрок (GetPlayerVehicleSeat), а после использовать специальные координаты, которые будут высчитываться относительно центра т/c. Высчитать специальные относительные координаты очень сложно и долго.
Вот в этом-то и суть, что подобное довольно непросто реализовать из-за разности расположения сидений в разных моделях.
Я как раз и начал изучать вашу библиотеку поэтому, надеясь, что возможно в ней найдется это сокровище, что мне нужно.
Что ж, спасибо за ответы! Рад был общению
DCPSHER, советую тебе загуглить реализацию вида от первого лица при помощи Pawn. Там как раз и идёт вычисление положения сидений: правда никогда не проверял насколько точно. В любом случае, код из тех скриптов можно взять как основу
DeimoS, да, именно так, уже пошел в эту сторону. Там вычисляется через ModelInfo, в ней хранятся координаты передних и задних сидений, но только их центр, поэтому вычисляются от середины еще в обе стороны координаты точного места.
В принципе для всего, кроме автобуса, и может быть чего еще, будет годно работать.
Благодарю за отклик и советы!
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot