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

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

Закрытая тема
 
Helpmeplz

offline
Опыт: 11,738
Активность:
Блокирование урона
Есть функция блокирования урона.
Код:
function DamageBlock takes unit u, real dmg returns nothing
   if (GetUnitState(u,UNIT_STATE_LIFE)) <= dmg then
      call SetUnitState(u,UNIT_STATE_LIFE,GetUnitState(u,UNIT_STATE_LIFE) + dmg + 1)
   else
      call SetUnitState(u,UNIT_STATE_LIFE,GetUnitState(u,UNIT_STATE_LIFE) + dmg)
   endif
endfunction

Есть триггер где этот урон отлавливается. Но в первый свой вызов функция DamageBlock почему-то не блокирует ничего, но при дальнейших вызовах все происходит как надо. Сталкивался ли кто-нибудь с таким и как это исправить?
Старый 09.06.2010, 16:12
Rapture

offline
Опыт: 16,634
Активность:
Helpmeplz, я сталкивался, вроде исправить не как нельзя.
хотя не уверен
Старый 09.06.2010, 16:13
Ksan

offline
Опыт: 13,248
Активность:
Helpmeplz, возможно использовать стандартную РОшную "панцирь с шипами", если не все время, то во время 1го вызова функции.
Старый 09.06.2010, 16:35
Doc

offline
Опыт: 63,163
Активность:
Helpmeplz, вообще у меня была мысль сделать некую проверку на полное хп, и потом восстанавливтаь здоровье не в кондишнах а в экшнах.
Старый 09.06.2010, 16:43
StoneHeartis
Kicked by ScorpioT1002
offline
Опыт: 1,009
Активность:
Ksan, панцирь урон возвращяет милишным. уж лучше тогда "Каменные доспехи"
Старый 09.06.2010, 16:44
Ksan

offline
Опыт: 13,248
Активность:
StoneHeartis, да, согласен, каменные лучше. Чет не подумал, но вся фишка в том, что он еще и возвращает, кста "благославление элуны" вместе с шипами норм пойдет.
Старый 09.06.2010, 16:50
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Сталкивался ли кто-нибудь с таким и как это исправить?
сталкивался с таким бредком
именно таже самая фишка, один из дмж сарсов наносит урон, он на него не реагирует, а после начинает, и так на каждого сарса
Ответ пытаюсь найти, но пока все безтолку
Узнать охота из дотца, у дазла, там такая фича если бы была то пол игроков повыдавливала бы себе волосы узнав что бесмертие на 5 сек не пашет
Старый 09.06.2010, 16:59
Doc

offline
Опыт: 63,163
Активность:
AlexKARASb, омг это только потому, что вар не хочет восстанавливать хп, если пытаешься установить значение выше максимального.
DoctorGester добавил:
Или при максимальном хп О_О.
Старый 09.06.2010, 17:01
Ksan

offline
Опыт: 13,248
Активность:
AlexKARASb, опендота на что?
Старый 09.06.2010, 17:02
Doc

offline
Опыт: 63,163
Активность:
Ksan, и с чего ты взял что это есть в опендоте лол?
Старый 09.06.2010, 17:04
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
фишка в том что событие срабатывает раньше чем сам дамаг поэтомуц при фулл хп мы лечим а потом тока наноситься вот и поэтому не пашет
Старый 09.06.2010, 17:04
Ksan

offline
Опыт: 13,248
Активность:
16GB, как такое возможно, если событие ловит только дмг?
Старый 09.06.2010, 17:06
Doc

offline
Опыт: 63,163
Активность:
16GB, грац, ты прав. Но ничего не помогает.
Ksan, а вот так.
Старый 09.06.2010, 17:08
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Или при максимальном хп О_О.
ну дык урон нанесся, следовательно уже не макс хп, и после я востанавливаю
+ я говорил что каждый дмж сарс(новый дамагер кароч) делает так. то-есть включил я такой скил жахнул меня пехотинец 1, не востановилось, второй раз жаххнул востановилось, далее пехотинец 2 бьет и опять же таже фигня, хотя хп далеко не полное
опендота на что?
сань, не думай что я не знаю о ней, все дотовские скилы доисторической давности я уже просмотрел, взламывать новое я не умею, да и не хочу похудею :D
AlexKARASb добавил:
DoctorGester, урон гетивентдмж то-есть неуспевает нанестись как мы лечим чтоль? -.-
Старый 09.06.2010, 17:09
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
вот фунция из доты она по идеии высчитывает задержку до получения урона
хотя не джаззер но в доте всё правильно робит вроде
function DelayedDamageTimer takes nothing returns nothing
	local string lf5=H2Tx(GetExpiredTimer())
	local unit lEU=GetUnit(lf5,"Unit")
	call SetUnitState(lEU,UNIT_STATE_LIFE,GetUnitState(lEU,UNIT_STATE_LIFE)+GetReal(lf5,"Damage"))
endfunction

function DelayedDamage takes unit pEU,real pf7 returns nothing
	local timer ltt=CreateTimer()
	local string lf5=H2Tx(ltt)
	call SetReal(lf5,"Damage",pf7)
	call SetHandle(lf5,"Unit",pEU)
	call TimerStart(ltt,0,false,function DelayedDamageTimer)
endfunction

function DelayedDamageCheck takes unit pEU,real pf7 returns nothing
	local real lf9=GetUnitState(pEU,UNIT_STATE_MAX_LIFE)
	local real lFa=GetUnitState(pEU,UNIT_STATE_LIFE)
	if pf7>(lf9-lFa)then
		if pf7>=lFa then
			call SetUnitState(pEU,UNIT_STATE_LIFE,lf9)
			call DelayedDamage(pEU,pf7-(lf9-lFa))
		else
			call DelayedDamage(pEU,pf7)
		endif
	else
		call SetUnitState(pEU,UNIT_STATE_LIFE,GetUnitState(pEU,UNIT_STATE_LIFE)+pf7)
	endif
endfunction
хотя хз
Старый 09.06.2010, 17:13
Doc

offline
Опыт: 63,163
Активность:
scope Shield initializer i

private function ont takes nothing returns nothing
local unit u = LoadUnitHandle(Init_Hash, GetHandleId(GetExpiredTimer()), 'shld')
call SetWidgetLife(u, GetUnitState(u, UNIT_STATE_MAX_LIFE))
call FlushChildHashtable(Init_Hash, GetHandleId(GetExpiredTimer()))
call DestroyTimer(GetExpiredTimer())
set u = null
endfunction

private function c takes nothing returns boolean
local unit u = GetTriggerUnit()
local timer t = CreateTimer()
if GetUnitAbilityLevel(u, 'Bbsk') > 0 then
call DamageTarget(u, GetEventDamageSource(), GetEventDamage())

if GetWidgetLife(u) + GetEventDamage() <= GetUnitState(u, UNIT_STATE_MAX_LIFE) then
call SetWidgetLife(u, GetWidgetLife(u) + GetEventDamage() - 1.)
elseif GetWidgetLife(u) + GetEventDamage() > GetUnitState(u, UNIT_STATE_MAX_LIFE)  then
set t = CreateTimer()
call TimerStart(t, 0.0, false, function ont)
call SaveUnitHandle(Init_Hash, GetHandleId(t), 'shld', u)
endif

endif
set t = null
set u = null
return true
endfunction

private function i takes nothing returns nothing
call TriggerAddCondition(Init_DmgT, Condition(function c))
endfunction

endscope
Вхаха, я все сделал.
DoctorGester добавил:
16GB, лол)
Старый 09.06.2010, 17:14
Helpmeplz

offline
Опыт: 11,738
Активность:
все работает. всем спасибо.
Старый 09.06.2010, 17:38
Закрытая тема

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

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

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

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



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