урон и расстояние
|
|
r0m@n | Дата: Среда, 09 Февраля 2011, 16:56:25 | Сообщение # 1 |
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 6
Блокировки:
| помогите разобраться. При использовании способности на юнита, надо, чтоб каждые n(к примеру 0.3 сек, в течении 3 сек) юниту наносился бы урон равный расстояние между юнитами(кастующий юнит и "жертва")*уровень способности кастующего. Пожалуйста на триггерах, чтоб разобрался. Я в джассе полный ноль. Напишите, кому не сложно.
|
|
|
|
Nestrik | Дата: Среда, 09 Февраля 2011, 18:39:01 | Сообщение # 2 |
4 уровень
Группа: Пользователи
Сообщений: 88
Награды: 0
Репутация: 7
Блокировки:
| Возникает вопрос: у тебя расстояние при каждом нанесении урона учитывается ? или только в момент каста единовременно учитывается и дальше не работает. Плюс к тому: много ли воинов/героев могут единовременно применить один и тот же спел? Если по 1 за каждого игрока, то еще можно проделать все с помощью массивов; если дофига: то только локальные переменные; а если всего 1 кастер такой способности на всю игру, то проблем не возникнет и с глобальными переменными: А вообще принцип такой: С. Юнит привел способность в действие У. Примененная способность = Твоя способность Д. Изменить переменную Кастер = Юнит применивший способность Изменить переменную Жертва = Юнит, на которого применили заклинание Цикл И = от 0 до 10 действия: Ждать 0,3 Изменить переменную Расстояние = (Дистанция между позициями (Кастер) (Жертва)) Боевая еденица - нанести урон цели (Кастер) нанести (Жертва) (Расстояние*уровень способности) ед. урона типа (Твой тип урона) Если будет хотя бы 2 кастера с таким заклинанием, то на глобальных переменных эта конструкция работать не будет
|
|
|
|
r0m@n | Дата: Среда, 09 Февраля 2011, 21:43:28 | Сообщение # 3 |
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 6
Блокировки:
| напиши, пожалуйста, если только один может применять способность. И пожалуйста, так как выглядеть будет в коде. А то в мыслях и я так написать могу. Но честно, давно не практиковался, но помню многое. Но с циклами плохо общаюсь. Разобраться с ними смогу, если будет какой нибудь пример, чтоб вспомнить. Реально, раньше занимался, а тут сел через пару лет, и почти не понимаю. Правда разобрался в некоторых вещах сам, без помощи, то о чем не понимал, но это скорее случайно.
|
|
|
|
Nestrik | Дата: Четверг, 10 Февраля 2011, 16:56:39 | Сообщение # 4 |
4 уровень
Группа: Пользователи
Сообщений: 88
Награды: 0
Репутация: 7
Блокировки:
| карта пример http://fayloobmennik.net/381268Добавлено (10-02-2011, 16:55) ---------------------------------------------
Code function Trig_Ability_Conditions takes nothing returns boolean if ( not ( GetSpellAbilityId() == 'AHtb' ) ) then return false endif return true endfunction
function Trig_Ability_Actions takes nothing returns nothing local unit Caster = GetSpellAbilityUnit() local unit Victim = GetSpellTargetUnit() local location VictimP local location CasterP local integer I = 0 set I = 0 loop exitwhen I > 10 call TriggerSleepAction( 0.30 ) set VictimP = GetUnitLoc(Victim) set CasterP = GetUnitLoc(Caster) set udg_Distance = DistanceBetweenPoints(GetUnitLoc(Caster), GetUnitLoc(Victim)) call UnitDamageTargetBJ( Caster, Victim, ( udg_Distance * I2R(GetUnitAbilityLevelSwapped('AHtb', Caster)) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL ) call RemoveLocation (VictimP) call RemoveLocation (CasterP) set I = I + 1 endloop set Caster = null set Victim = null endfunction
//=========================================================================== function InitTrig_Ability takes nothing returns nothing set gg_trg_Ability = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Ability, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Ability, Condition( function Trig_Ability_Conditions ) ) call TriggerAddAction( gg_trg_Ability, function Trig_Ability_Actions ) endfunction Хотя в принципе код Добавлено (10-02-2011, 16:56) --------------------------------------------- Только вот не знаю: поидее дистанцию обычно делят там например на 10, на 15, а чистую дистанцию рать - слишком много дамага ))
|
|
|
|
Dreii | Дата: Четверг, 10 Февраля 2011, 17:10:25 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Quote (Nestrik) call TriggerSleepAction( 0.30 ) никчемуQuote (Nestrik) call UnitDamageTargetBJ( Caster, Victim, ( udg_Distance * I2R(GetUnitAbilityLevelSwapped('AHtb', Caster)) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL ) Раскрой Nestrik, Юзай координатыQuote (Nestrik) call TriggerRegisterAnyUnitEventBJ( gg_trg_Ability, EVENT_PLAYER_UNIT_SPELL_EFFECT ) раскройДобавлено (10-02-2011, 17:10) ---------------------------------------------
Quote (Nestrik) local unit Caster = GetSpellAbilityUnit() GetTriggerUnit()Добавлено (10-02-2011, 17:10) ---------------------------------------------
Quote (Nestrik) set udg_Distance = DistanceBetweenPoints(GetUnitLoc(Caster), GetUnitLoc(Victim)) раскрой
|
|
|
|
romaN-1998 | Дата: Четверг, 10 Февраля 2011, 17:14:18 | Сообщение # 6 |
10 уровень
Группа: Проверенные
Сообщений: 1368
Награды: 0
Репутация: 10
Блокировки:
| Dreii, он просто перевёл тригг в текст.. видно же, даже если посмотреть на условие.. :/
|
|
|
|
r0m@n | Дата: Четверг, 10 Февраля 2011, 17:59:23 | Сообщение # 7 |
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 6
Блокировки:
| вот блин. Не в коде, а на триггерах. Вообще не соображаю в джасс. Ну в карте гляну позже, но если на джассе, то все равно не пойму. Пример бы на ГУИ, кому не сложно, напишите. Или ссылку на карту, простенькую.
|
|
|
|
Dreii | Дата: Четверг, 10 Февраля 2011, 18:36:26 | Сообщение # 8 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| romaN-1998, ну цикл сам делал
|
|
|
|
Nestrik | Дата: Пятница, 11 Февраля 2011, 11:25:44 | Сообщение # 9 |
4 уровень
Группа: Пользователи
Сообщений: 88
Награды: 0
Репутация: 7
Блокировки:
| Quote (romaN-1998) Dreii, он просто перевёл тригг в текст.. видно же, даже если посмотреть на условие.. :/ Абсолютно верно: весь триг написан на гуи, только малость для оптимизации, да и потому как писать много КСкриптов на гуи - глупо, перевел на жасс, цикл переделал. Quote (Dreii) Quote call TriggerSleepAction( 0.30 ) никчему А вот это как раз нужно: иначе весь дамаг полетит моментально.Добавлено (11-02-2011, 11:25) --------------------------------------------- Вот сделал тебе на ГУИ, но работать будет только для одного единовременно-примененного заклинания. Абилка если что "Молот Бурь". Там я добавил, только, что бы урон писался над тем, кого атакуешь: посмотришь, что там за цифры получаются. Добавлено (11-02-2011, 11:25) --------------------------------------------- http://fayloobmennik.net/383136
|
|
|
|
r0m@n | Дата: Пятница, 11 Февраля 2011, 12:03:21 | Сообщение # 10 |
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 6
Блокировки:
| спасибо огромное, гляну попозже. Может подскажете, где основы джасс скачать. Я так читая понял что call RemoveLocation(переменная точка) удаляет утечки(саму точку)?
|
|
|
|
Kartoha | Дата: Пятница, 11 Февраля 2011, 13:44:42 | Сообщение # 11 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| Quote (r0m@n) Может подскажете, где основы джасс скачать. Можно здесь.Quote (r0m@n) Я так читая понял что call RemoveLocation(переменная точка) удаляет утечки(саму точку)? Да.
|
|
|
|
r0m@n | Дата: Пятница, 11 Февраля 2011, 19:13:08 | Сообщение # 12 |
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 6
Блокировки:
| все, по полной в теме разобрался, можете закрывать. Всем большое спасибо!
|
|
|
|