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

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

Ответ
 
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Respawn на джассе.
Итак, после длительного мучения с call polledwait(xx) и соответсвующими глюками решил сделать респавн героев через таймеры и функции. итого получилось следующее (внимание, я не джассер а лишь гуишник мееелкими шажками осваивающий джасс).
Итого, добавил функции (незнаю, рабочие или нет):
function respally takes unit u returns nothing
call ReviveHeroLoc( u , GetRectCenter(gg_rct_Hero_allie_respawn), true )
call CameraSetupApplyForPlayer( true, gg_cam_Camera_001, GetOwningPlayer(u), 0.80 )
endfunction
function respundead takes unit u returns nothing
call ReviveHeroLoc( u , GetRectCenter(gg_rct_HeroRespUndead), true )
call CameraSetupApplyForPlayer( true, gg_cam_Camera_011, GetOwningPlayer(u), 0.80 )
endfunction
далее, для вызова данных функций использую следующие действия:
local unit u = GetTriggerUnit()
local timer = CreateTimer
call CreateTimer(t)
далее гуишный изен на проверку пренадлежности к одной из двух противоборствующих фракций и код запуска таймера:
call TimerStart(t, ( I2R(GetHeroLevel(GetTriggerUnit())) * 3.00 ) ), false, respundead(u))
call TimerStart(t, ( I2R(GetHeroLevel(GetTriggerUnit())) * 3.00 ) ), false, respally(u))
Вопрос, тут есть ошибки? если есть то укажите на них.
Старый 13.04.2010, 21:01
XOR

offline
Опыт: 38,159
Активность:
смотри систему agentex'a тогда уж =)
Старый 13.04.2010, 21:02
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
я слишком плохо знаю джасс что бы разобрать данную систему
Старый 13.04.2010, 21:13
DioD

offline
Опыт: 45,134
Активность:
повышай уровень знаний тогда.
вы бы не допускали эти самые ошибки если бы прочитали хоть одну статью по джаз, так что всё в ваших руках.
Старый 13.04.2010, 21:34
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
читал, слишком много там того что я не могу понять покачто, как например в статье от сергея уже огнемет я не могу разобрать.
Старый 13.04.2010, 21:39
DioD

offline
Опыт: 45,134
Активность:
читайте до тех пор пока не поймёте.
Старый 13.04.2010, 21:50
silumin

offline
Опыт: 11,153
Активность:
Ошибок до чёртиков, но в общем ход мысли правельный..
» Код
Код:
function respally takes nothing returns nothing
local timer t = GetExpiredTimer()  // Получаем истёкший таймер
local unit u = LoadUnitHandle(<твоя хеш-таблица>,GetHandleId(t),0) // Загружаем юнита из хеш-таблицы по хэндлу таймера
call ReviveHeroLoc( u , GetRectCenter(gg_rct_Hero_allie_respawn), true )
call CameraSetupApplyForPlayer( true, gg_cam_Camera_001, GetOwningPlayer(u), 0.80 )
call FlushChildHashtable(<твоя хеш-таблица>,GetHandleId(t)) // Чистим хеш-таблицу
call DestroyTimer(t) // Убиваем таймер
set t = null // Затираем ссылку на убитый таймер
set u = null // Затираем ссылку на юнита
endfunction

function respundead takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = LoadUnitHandle(<твоя хеш-таблица>,GetHandleId(t),0)
call ReviveHeroLoc( u , GetRectCenter(gg_rct_HeroRespUndead), true )
call CameraSetupApplyForPlayer( true, gg_cam_Camera_011, GetOwningPlayer(u), 0.80 )
call FlushChildHashtable(<твоя хеш-таблица>,GetHandleId(t))
call DestroyTimer(t)
set t = null
set u = null
endfunction

// для вызова данных функций нужно использовать следующее

local unit u = GetTriggerUnit()
local timer t = CreateTimer()
call SaveUnitHandle(<твоя хеш-таблица>,GetHandleId(t),0,u) // Сохраняем юнита в хеш-таблицу по хендлу созданного таймера

// А дале в зависимости от принадлежности юнита к стороне

call TimerStart(t,GetHeroLevel(u)*3.0,function respally)
// Или
call TimerStart(t,GetHeroLevel(u)*3.0,function respundead)

// Помимо всего прочего не забудь инициализировать Хеш-таблицу где-нибудь вначале игры

set <твоя хеш-таблица> = InitHashtable()

Отредактировано silumin, 14.04.2010 в 00:33.
Старый 13.04.2010, 22:42
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
спасибо за код, остался один минус, выдает ошибку следующего содержания:
Invalid numbers of arguments
c cылкой на строчку
call FlushChildHashtable(GetHandleId(t))
для хэштаблицы использовал
udg_hash
и собственно везде где была ссылка на хэш - её вписал. а что делать с этими строчками?
FKoFF добавил:
кошмар, то ли у меня совсем кривые руки, то ли еще в чем то дело. вообщем как итог, после получаса мучений с данным кодом у меня выдает 6к ошибок, если триггер на респавн включен, если же он выключен - ошибок не выдает.
Что делать?
Старый 13.04.2010, 23:47
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
про ошибку: call FlushChildHashtable(GetHandleId(t), udg_hash)
bee добавил:
если выдаст ошибку поменяй аргументы местами.
Старый 14.04.2010, 00:10
silumin

offline
Опыт: 11,153
Активность:
FKoFF, ну да точно, не указал аргумент, бывает...
bee, в хт-функциях 1й аргумент - всегда ссылка на хеш-таблицу. Я так запомнил.

По ошибке:..
call FlushChildHashtable(udg_hash, GetHandleId(t))
Старый 14.04.2010, 00:30
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
что то тут не так.... вообщем импортировал код в карту, после этого при попытке сохранить компилятор объявил функцию на создание ГУИШНОГО таймера (для отображения в мультибоарде) - нерабочей.
Это ладно, сделал отдельный триггер на создание этого самого таймера при смерти юнита.
После этого при попытке сохранить компилятор порадовал меня ошибкой с сылкой на строчку
set u = null
в конце триггера. Ктонибудь может объяснить что это за барабашки такие?
FKoFF добавил:
после set u = null компилятор объявил строчку set t = null так же нерабочей, и вообщем то послее её удаления начал объявлять нерабочими все функции без перебору которые относятся к триггеру (даже строчку =============)
FKoFF добавил:
так, все, вроде после часового мучения заставил это работать. всем спасибо. )
Старый 14.04.2010, 01:35
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
FKoFF, вероятно у тебя нет Jass New Gen Pack
Старый 14.04.2010, 12:50
Ответ

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

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

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

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



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