XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
NCrashed

offline
Опыт: 13,553
Активность:
Баг системы поездов
Специально для LIC я создал систему движения поездов, с ускорением/замедлением, остановками и т.п. Но после конечного дебага оставался не совсем понятный недочет. Пожалуйста помогите разобраться в причинах его возникновения. Я понимаю, что мы все не телепаты, поэтому придется ознакомить всех с устройством системы и с ее кодом. Само описание бага находится после описания самой системы.

Описание системы


1. Существуют "точки маршрута" - области, по которым ориентируется движение поезда.
(Зеленые на рисунке)
DEAD URL

2.Этих областей мало не мало 51+- 3 штук поэтому пришлось создать для них базу данных. (см. 2.txt)

Как видите для удобства записи данных я использую SCV и присваиваю каждому ректу свой номер. Для любителей оптимизации сообщаю, что это безобразие долго в памяти не храниться =).

3. Вот это необходимые функции для работы системы. Они понадобятся ниже. (см. 3.txt)

4. Инициализация (какое умное слово) системы: (Главное не испугайтесь при первом просмотре) (4.txt)

5. Теперь сам движок поезда (благодарю тех, кто дочитал до сюда) (см. 5.txt)

6. Не буду описывать триггеры посадки, высадки и камеры.

Баг


Проблема заключается в развороте. Он то сам функционирует нормально, но при первом прохождении (на рисунке) поезд замирает на 9 секунд и баг больше не повторяется. Этот эффект нужно убрать. Конкретный номер региона 49.
DEAD URL

P.S


Спасибо всем, кто попытается мне помочь. Я не против, если кто-то будет использовать эту систему, но обязательно оповестите меня об этом.
Какие-то части системы пока не используются (ISPovorot), но обязательно будут реализованы в финальной версии системы.
Прикрепленные файлы
Тип файла: txt 2.txt (1.6 Кбайт, 12 просмотров )
Тип файла: txt 3.txt (824 байт, 8 просмотров )
Тип файла: txt 4.txt (9.3 Кбайт, 11 просмотров )
Тип файла: txt 5.txt (5.4 Кбайт, 10 просмотров )

Отредактировано ShadoW DaemoN, 19.10.2008 в 15:28.
Старый 18.10.2008, 01:25
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
думаю, без хотя бы минимальной карты-примера с присутствием бага, дела не будет
Старый 18.10.2008, 01:34
J
expert
offline
Опыт: 48,447
Активность:
чето ужасное нагромождение всего, ифы лупы как иголки из подушки торчат, куча location которых вообще не должно быть, мне кажется все можно реализовать намного проще и понятнее... ну я по диагонале посмотрел вроде большую част кода более мение понянта... ща еще глаза пощуру мб замечу че...

Jon добавил:
эх.. нет, мне вообще все ненравится, выложи карту, я тебе пряим на ней попробую код оптимизить и заодно увижу где ошибка
Старый 18.10.2008, 02:06
Toadcop

offline
Опыт: 54,313
Активность:
джон, диод нумеро 2 xD ...
ну кстати это относительный вопрос про поезд... можно его и альтернативно реализовать напр вейпоинтами... и даже кастомным передвижением =)
Старый 18.10.2008, 02:23
user_jasser

offline
Опыт: 232
Активность:
Цитата:
Проблема заключается в развороте. Он то сам функционирует нормально, но при первом прохождении (на рисунке) поезд замирает на 9 секунд и баг больше не повторяется. Этот эффект нужно убрать. Конкретный номер региона 49.


это скорей проблема твоей логики и ошибка в алгоритме...убрать за тебя ошибку это значит переписать весь код заново, а по сабжу : чтото эти функции мне не нравяться::

Код:
// восстановление свойств остановки. вынесено в отдельную
// функцию, потому что wait  не работал в следующей
function Recover takes rect r returns nothing
call PolledWait(20)
call set_object_bparam(r, "O",true)
endfunction

//главная функция остановки
function Ost takes rect r returns nothing
call DisableTrigger(gg_trg_PoezdSys)
call set_object_bparam(r, "O",false)
call PolledWait(15)
call EnableTrigger(gg_trg_PoezdSys)
call Recover(r)
endfunction
Старый 18.10.2008, 03:43
adic3x

offline
Опыт: 108,439
Активность:
код неоптимальный и того запутанный, ректы, локации и т.д. втопку. кеш мб туда же)
Старый 18.10.2008, 08:55
NCrashed

offline
Опыт: 13,553
Активность:
user_jasser, весь код переписывать не надо, это сделаю я сам). Эти функции разбились на 2 из-за непонятной причины зацикливания в polledwait, доходит до него и все ни шагу дальше.
Jon подкинь идейку как реализовать иначе. Карта, мягко говоря, выкладываться не может, хотя попробую перенести систему на пустую.
ADOLF был бы код идеальным, я его тогда бы не выложил). "ректы, локации и т.д. втопку. кеш мб туда же)" и как же тогда делать ), что-то все равно придется использовать.
Система работает, даже с таким кодом), но оптимизировать определено надо.
Старый 18.10.2008, 16:23
kvaDrug

offline
Опыт: 1,601
Активность:
Возможно, все дело в том что ты юзаешь SCV. Используй массивы, тогда легче будет отловить баг твоего кода, а не системы SCV.
Локации, ректы - тоже лишнее. Железную дорогу или её участки можно описать функцией.
Оптимизируй по этим двум пунктам, потом разбирайся с багом. Так проще (так для тебя лучше).
Старый 18.10.2008, 17:48
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
NCrashed
Ты выяснил хоть в какой функции у тебя баг? Попробуй расставить дебаговые сообщения в каждой функции с ее названием. Затем если ты найдешь функцию, но не поймешь причину бага, то просто выложи ее и те функции которые она вызывает, думаю тебе помогут.
Старый 18.10.2008, 18:47
NCrashed

offline
Опыт: 13,553
Активность:
kvaDrug, попробую описать это в функции. Но тогда будет тяжелее изменить маршрут поезда, тут передвинул несколько локаций, или добавил новую (и 2 строчки в инициализацию). Массивную систему я не жалую, т.к потом не сумею его уничтожить. Вообще удивляюсь, почему в ждаззе нету функции dispose(); )) так бы от локалок бы исбавлялись.
Hellfim в том то дело, что самостоятельный дебаг ни к чему не привел. Поезд перенаправляется на область 50 и усе стоит, триггер перенаправления или двигающий не сработал не ясно (но это точно не остановка)
Старый 19.10.2008, 10:54
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Описывать путь поезда в функции не имеет смысла в случае его сложности и вариативности. Вывод - юзать вейпоинты вместо локаций, так оптимальнее и удобнее.
Если тебе удобнее хранить данные в кеше - оставляй так, почти все оптимизационные советы носят рекомендательный характер =)
Старый 19.10.2008, 13:56
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Van Damm, чисто для себя, что есть вейпоинты? С англиского переводятся как точки пути, а вот как их сделать?
Старый 19.10.2008, 14:15
adic3x

offline
Опыт: 108,439
Активность:
два массива типа риал, Х и У.
индексы связанны, т.е. вейтПоинт 0 - это первый елементы обоих массивов
Старый 19.10.2008, 19:28
NCrashed

offline
Опыт: 13,553
Активность:
Van Damm а как я буду координаты вбивать, ручками? Если брать координаты центров областей, то легче через области и делать. И потом как я буду отслеживать, когда перенаправлять поезд, ведь он не всегда точно попадает на координаты вейпойнта.
Старый 19.10.2008, 20:18
adic3x

offline
Опыт: 108,439
Активность:
имхо написать два числа в коде куда прооооще чем поставить регион и выровнять его
Старый 19.10.2008, 20:22
NCrashed

offline
Опыт: 13,553
Активность:
ADOLF, это машинный труд: вбить 102 четырёхзначных числа. Легче просто копипастить строки кода и менять номер региона.
Старый 19.10.2008, 21:30
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
А если заставить поезд двигаться по одному типу тайла? Чтоб двигался по там по траве.. =)
Старый 19.10.2008, 21:40
ScorpioT1000
Работаем
online
Опыт: отключен
Цитата:
имхо написать два числа в коде куда прооооще чем поставить регион и выровнять его

Имхо наоборот. Автоматизация рулит, ну и хрен что 20 байт, зато тут быстрей в сто раз
Старый 19.10.2008, 23:07
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
NCrashed, сначала будет долго, а потом просто расширяешь массив, забиваешь значения, чуть-чуть корректируешь код и вуаля, поезд уже шастает по другому маршруту.
Старый 19.10.2008, 23:30
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
зато тут быстрей в сто раз

я с трудом могу представить что бы расстановка на карте региона и его подгонка была быстрее чем копипаст строки кода и вставляние туда двух чисел

опять же смотрите как в ТсХ боты делаются...
Старый 20.10.2008, 20:13
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 05:38.