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

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

Ответ
 
Sanya9108

offline
Опыт: 2,007
Активность:
Убить одним заклинанием
как сделать так ,чтобы заклинание (болт) имело % шанс убить врага одним ударом? триггерно разумеется. заранее всем спс=)
Старый 17.07.2010, 14:47
reALien

offline
Опыт: 29,211
Активность:
Sanya9108, событие - юнит кастует заклинание.
если случайное число от 1 до 100 меньше или равно твоему шансу, KillUnit.
Старый 17.07.2010, 14:52
Sanya9108

offline
Опыт: 2,007
Активность:
reALien,
ну и как это будет выглядеть?=) снаряд ещё не ударил в цель а враг валяется на земле=)
Старый 17.07.2010, 15:00
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
событие - юнит кастует заклинание.
если случайное число от 1 до 100 меньше или равно твоему шансу,
запуск таймера
по истечению
UnitDamageTarget(твой кастующий,твоя цель,10000000000...)
Старый 17.07.2010, 15:03
newzoom
Kicked by ScorpioT1002
offline
Опыт: 207
Активность:
Запускать динамический таймер, предварительно запомнив данные (хеш-таблица), на (Расстояние / Скорость) секунд.
Или wait, но это для ленивых.
Старый 17.07.2010, 15:04
Sanya9108

offline
Опыт: 2,007
Активность:
AlexKARASb,
а получится сделать:
юнит получает такой-то эффект
условие случайного числа
действие - убить этого юнита
?
Старый 17.07.2010, 15:05
Zahanc

offline
Опыт: 23,017
Активность:
Sanya9108,

а разве есть событие юнит получает бафф?
Старый 17.07.2010, 15:26
imperfect

offline
Опыт: 1,175
Активность:
Получится, но тогда твоя способность должна давать на врага бафф. А вообще можно хитромудро сделать:
Событие: Боевая еденица - приводит способность в действие.
Условие: абилити бегин каст = твоя способность
Действие:
if all condition truе..ну и тд
Условие:
Рандом интеджер от 1 до 100 <= 30(например)
Действие:
Set Variables PosHero = Position of casting unit
Set Variables PosEnemy = позиция цели заклинания
Wait (distance between PosHero и PosEnemy)\скорость снаряда твоего спелла
Боевая еденица - kill цель заклинания
CS: call RemoveLocation (udg_PosHero)
CS: call RemoveLocation (udg_PosEnemy)
Иначе: Do nothing


Естественно предварительно создай 2 переменных типа точка PosHero и PosEnemy

Jasper добавил:
Sanya9108, а наличие баффа можно проверять через переодик, а включаться триггер проверки будет при касте спела, после чего вырубаться.

ПС: а вообще лучше делать не триггерный шанс а проверку баффа от спелов, ибо если в мапе присудствует шмотка на спеллрезист, то даже если она сработает, то от триггера далеко не убежишь :D, а так можно и резистнуть неменуемую смерть!

Отредактировано Jasper, 17.07.2010 в 15:52.
Старый 17.07.2010, 15:43
Sergarr

offline
Опыт: 4,677
Активность:
Jasper хороший метод, только он не учитывает что враг за время полета снаряда враг может сместиться в пространстве.
Старый 17.07.2010, 16:03
JassMan
свободен
offline
Опыт: 4,193
Активность:
Надо создать отдельный нестандартный бафф со своим Id и ждать после каста когда у цели этот бафф окажется.
Если проходит время, ну скажем, больше чем 20 сек (полёт через всю карту), то вырубать таймер и очищать память и прочее.
Старый 17.07.2010, 16:40
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
""
function Trig_Shadow_Shot_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A00A'
endfunction

function SSEffect takes nothing returns nothing
local timer t=GetExpiredTimer()
local unit u=LoadUnitHandle(udg_AssassinHash,GetHandleId(t),0)
if GetUnitAbilityLevel(u,'B002') > 0 then
call DestroyEffect( AddSpecialEffectTarget("units\\nightelf\\SpiritOfVengeance\\SpiritOfVengeance.mdl", u, "origin"))
call UnitDamageTarget(udg_DarkElf,u,(90.00*I2R(GetUnitAbilityLevelSwapped('A00A',udg_ DarkElf))),true,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC,null )
call DestroyTimer(t)
call FlushChildHashtable(udg_AssassinHash, GetHandleId(t))
else
endif
set u = null
set t = null
endfunction

function Trig_Shadow_Shot_Actions takes nothing returns nothing
local unit u = GetSpellTargetUnit()
local timer t = CreateTimer()
call SaveUnitHandle(udg_AssassinHash,GetHandleId(t),0,u)
call TimerStart(t,0.01,true,function SSEffect)
set t = null
set u = null
endfunction
""

Отредактировано 16GB, 17.07.2010 в 16:58.
Старый 17.07.2010, 16:50
Sanya9108

offline
Опыт: 2,007
Активность:
Jasper,
вот я так тоже думаю ,что лучше через проверку баффа=)
JassMan,
да ,можно что-то вроде этого... попробую=)
всем огромное спс!=)
Старый 17.07.2010, 17:31
H
hello world
offline
Опыт: 130,725
Активность:
Делай через баф, так проще всего.
Старый 17.07.2010, 17:34
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
все способы фигня. лучший - отлов получения урона + проверка на наличие баффа
Старый 17.07.2010, 17:57
Zanozus
Уехал учиться
offline
Опыт: 8,512
Активность:
enein, а как ты определишь какому игроку (юниту) принадлежит баф, кто его повесил ?
Старый 17.07.2010, 18:18
Sanya9108

offline
Опыт: 2,007
Активность:
Enein,
в игре постоянно идут бои ,следовательно постоянно получается урон ,заклинания тоже часто кастуют и самое главное - магия ,которую я хочу сделать она урона не несёт ,там значение на нуле ,она только должна триггерно убивать на определённый шанс. а на проверку баффа уже дофига предложений было и я уже сказал ,что буду через бафф делать=)
Zanozus,
а какая разница то?=) главное ,что на нём бафф ,следовательно на него кастанули этот спелл ,следовательно ,он должен (если процент сработает) умереть=) а свой-чужой это уже в РО в целях самого заклинания ставить надо=)
Старый 17.07.2010, 18:23
Zanozus
Уехал учиться
offline
Опыт: 8,512
Активность:
А от чьего лица ты юнита собраля убивать ?
Награда за убийство то кому пойдет ?
Старый 17.07.2010, 18:27
Sanya9108

offline
Опыт: 2,007
Активность:
Zanozus,
ну ,впринципе ,да ,ты прав ,этот пункт я как-то проглядел...=)
хотя ,кроме ГГ в кампании такой способности то ни у кого и небудет...
но всё равно ,я незнаю ,как это отследить...
есть там что-нить вроде "применяющий спелл = игрок такой-то ,то давать награду и опыт за юнита ему"?=)
Старый 17.07.2010, 18:34
imperfect

offline
Опыт: 1,175
Активность:
Всё очень просто, вместо Боевая еденица - Kill сделай Cause (casting unit) to damage (Target unit of ability being cast) dealing 99999.00 of attack type Сила тьмы Damage type Обычный, и деньги и экспа за килл дадутся кастующему юниту.
Старый 17.07.2010, 18:39
Zanozus
Уехал учиться
offline
Опыт: 8,512
Активность:
Ну, если у тебя только 1 юнит с этой способностью и ты заранее знаешь за кого он, то можно и забить.
А так это только через дамми снаряд делается и ничего в этом сложного нет.
Zanozus добавил:
Jasper, уже говорили что тогда юнит будет умирать раньше чем снаряд от спелла долетит
Да и если заменять килл на 9999 урон то легче сразу в РО в спелле 9999 урон прописать.
Старый 17.07.2010, 18:43
Ответ

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

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

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

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



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