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

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

Ответ
 
avatarDr
Neophyte
offline
Опыт: 6,474
Активность:
Hashtable 1.24c
Что-нибудь изменили в хештаблицах с ц? Долго не мог понять, почему не работает простенький триггер с хешем. Проверял по 10 раз всё, должно работать.
Конкретно интересуют функции Save...Handle(), Load...Handle() и GetHandleId().
Старый 26.12.2009, 22:19
Nekit1234007

offline
Опыт: 11,916
Активность:
Всё работает. В ц ничего с таблицами не делали.
Старый 26.12.2009, 22:20
avatarDr
Neophyte
offline
Опыт: 6,474
Активность:
Может и я такой дурак. Тогда вопрос:
» Триггер 1
local unit u
local integer ut='wol0'
local rect r=Rect(-192,-7680,572,-6336)
set u=CreateUnit(Player(12),ut,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r)​,GetRectMaxY(r)),GetRandomReal(0,360))
call SaveRectHandle(Ht[0],GetHandleId(u),S2I("respawn"),r)
» Триггер 2
local unit u
local rect r=LoadRectHandle(Ht[0],GetHandleId(GetTriggerUnit()),S2I("respawn"))
set u=CreateUnit(Player(12),GetUnitTypeId(GetTriggerUnit()),GetRandomReal(GetRectMinX(r),GetRectMaxX(r))​,GetRandomReal(GetRectMinY(r),GetRectMaxY(r)),GetRandomReal(0,360))
Инициируется так:
call TriggerRegisterPlayerUnitEvent(gg_trg_Respawning,Player(12),EVENT_PLAYER_UNIT_DEATH,null)
Проблема: рект не загружается, юнит появляется в середине карты (Раньше работал правильно, пока я что-то не испортил).
Прошу высшие силы простить меня, что не стал плодить темы и спросил тут.

Отредактировано avatarDr, 26.12.2009 в 22:51.
Старый 26.12.2009, 22:28
Nekit1234007

offline
Опыт: 11,916
Активность:
В первом триггере переменная юнит есть, а самого юнита нет О_О.
Старый 26.12.2009, 22:40
avatarDr
Neophyte
offline
Опыт: 6,474
Активность:
Исправил.
ut - локалка unittype, она известна.
Вру, ut - integer. А зачем вообще хендл юниттайп? Где он используется?
Старый 26.12.2009, 22:51
XOR

offline
Опыт: 38,159
Активность:
UNIT_TYPE_HERO например...
Старый 26.12.2009, 23:04
avatarDr
Neophyte
offline
Опыт: 6,474
Активность:
Аа, понятно. И всё же, помогите ошибку найти. Кодик небольшой, а не работает.
Старый 26.12.2009, 23:20
Nekit1234007

offline
Опыт: 11,916
Активность:
Рект создаётся раньше чем умирает юнит? Создаётся ли он вообще?
Старый 26.12.2009, 23:35
avatarDr
Neophyte
offline
Опыт: 6,474
Активность:
Ты про какой из триггеров? Если подробно, то это система ревайва юнитов в заданных ректах.
1 триггер создаёт n юнитов в ректе r и привязывает им в хеш этот рект.
2-ой отслеживает их смерть, загружает их рект, создаёт в нём нового юнита и сохраняет ему этот рект. Раньше система работала идеально, теперь что-то косячит.
Старый 26.12.2009, 23:40
Nekit1234007

offline
Опыт: 11,916
Активность:
Тогда так, первый триггер точно выполняется раньше второго?
Старый 26.12.2009, 23:43
avatarDr
Neophyte
offline
Опыт: 6,474
Активность:
Выполняется с инициализацией. Создаёт всё правильно, в нужном месте.
Старый 26.12.2009, 23:46
Nekit1234007

offline
Опыт: 11,916
Активность:
Попробуй ифами выдавать сообщения, ведь сэйв и лоад возвращают булин.

Nekit1234007 добавил:
Если что, эти булины говорят, сохранилось\загрузилось или нет.
Старый 26.12.2009, 23:50
avatarDr
Neophyte
offline
Опыт: 6,474
Активность:
if SaveRectHandle(Ht[0],GetHandleId(u),S2I("respawn"),r) then
	call Text
endif
if LoadRectHandle(Ht[0],GetHandleId(GetTriggerUnit()),S2I("respawn")) then
	call Text
endif
Я правильно тебя понял?
Старый 26.12.2009, 23:56
Nekit1234007

offline
Опыт: 11,916
Активность:
Да.

Nekit1234007 добавил:
*ушёл спать, ответа не ждать.*
Старый 27.12.2009, 00:02
avatarDr
Neophyte
offline
Опыт: 6,474
Активность:
Проблема в инициализации таблицы. Я её поменял из ГУИ-шной в вЖассовую, видимо некорректно.
Триггер с глобалками:
globals
hashtable array Ht
endglobals
Инициируемый в начале триггер:
function Hashtable takes nothing returns nothing
    set Ht[0]=InitHashtable()
endfunction
Чего не хватает?
Или 2 триггер должен быть в коде карты?
Мультиборд нормально работает, сделан аналогично.
Старый 27.12.2009, 00:06
Skino

offline
Опыт: 4,683
Активность:
Создай триггер с название All и вставь теда этот код, если карта откроется, то и таблица инициирована.
globals
hashtable JY
endglobals

function InitTrig_All takes nothing returns nothing
set JY=InitHashtable()
call FogEnable(false)
call FogMaskEnable(false)
endfunction
Триггер должен быть самым первым.
Старый 27.12.2009, 00:15
avatarDr
Neophyte
offline
Опыт: 6,474
Активность:
Перед тем как я это сделаю, позволь вопрос:
Как снятие тумана войны поможет инициировать таблицу?
И-ха. Посредством Brainstorm-а проблема решена. Всем спасибо, все свободны.

Отредактировано avatarDr, 27.12.2009 в 00:28.
Старый 27.12.2009, 00:22
Ответ

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

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

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

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



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