|
|
|
|
Вопрос по коду
|
|
Nyp | Дата: Понедельник, 12 Марта 2012, 18:43:16 | Сообщение # 1 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Code function podobiecmertAc takes nothing returns nothing local unit u = GetSpellAbilityUnit() local unit b = GetSpellTargetUnit() local real x = GetUnitX(u) local real y = GetUnitY(u) local real xx local real yy local integer i = GetUnitAbilityLevel(u, 'A047') local player p = GetOwningPlayer(u) local integer t = 0 if ( GetSpellAbilityId() == 'A047' ) then call SetUnitAnimation( u, "death" ) call Sound( gg_snd_SoulPreservation, 100, u ) loop exitwhen t > 3 call CreateUnit( p, 'h01A', x+100, y+100, 90*t) set t = t + 1 endloop // call CreateNUnitsAtLoc( 1, 'h01A', p, PolarProjectionBJ(GetUnitLoc(gg_unit_U006_0020), 100.00, 90.00), 270.00 ) // call CreateNUnitsAtLoc( 1, 'h01A', p, PolarProjectionBJ(GetUnitLoc(gg_unit_U006_0020), 100.00, 180.00), 0.00 ) // call CreateNUnitsAtLoc( 1, 'h01A', p, PolarProjectionBJ(GetUnitLoc(gg_unit_U006_0020), 100.00, 270.00), 90.00 ) // call CreateNUnitsAtLoc( 1, 'h01A', p, PolarProjectionBJ(GetUnitLoc(gg_unit_U006_0020), 100.00, 0.00), 180.00 ) call TriggerSleepAction( 0.90 ) call AddSpecialEffectTarget( "overhead", u, "Abilities\\Spells\\Undead\\RaiseSkeletonWarrior\\RaiseSkeleton.mdl" ) call DestroyEffect( bj_lastCreatedEffect ) call TriggerSleepAction( 0.20 ) set xx = GetUnitX(b) set yy = GetUnitY(b) call SetUnitPosition(u, xx,yy) // call SetUnitFacing(u, AngleBetweenPoints(loc, lookAt)) call UnitDamageTarget(u, b, (60.00 + (I2R(i) * 25.00) ) , true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) set u = null set b = null set p = null endif endfunction
//=========================================================================== function InitTrig_podobie_cmert takes nothing returns nothing set gg_trg_podobie_cmert = CreateTrigger() call TriggerRegisterAnyUnitEventBJ( gg_trg_podobie_cmert, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddAction( gg_trg_podobie_cmert, function podobiecmertAc ) endfunction Народ, хелп с кодом. Вот у меня в цикле создание 4 юнитов, которые должны быть смещены на 100 в разных углах, градусах. Есть ли какая нибудь формула, чтобы смещать координаты равномерно для 4 юнитов? Или тут лучше использовать точки, а не координаты? Также функция call CreateUnit не берёт направления обзора юнита, какой заменить надо? Ещё убрано условие, и вставлено в действие, и при каждом использовании способности любого юнита, действия триггера будет запускаться и создаваться локалки, и тут же удалятся, если условие не верно. повлияет ли это на производительность? Code // call SetUnitFacing(u, AngleBetweenPoints(loc, lookAt)) Тут не понятно что вставлять...
|
|
|
|
llka | Дата: Понедельник, 12 Марта 2012, 19:17:50 | Сообщение # 2 |
4 уровень
Группа: Пользователи
Сообщений: 88
Награды: 0
Репутация: 34
Блокировки:
| на счет когда - бред, читать невозможно. Quote (Nyp) Тут не понятно что вставлять... Что непонятного: unit, realQuote (Nyp) AngleBetweenPoints(loc, lookAt) Помоему оно возвращает реал.
|
|
|
|
oleg_best_oleg | Дата: Понедельник, 12 Марта 2012, 19:18:07 | Сообщение # 3 |
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
| Quote (Nyp) Есть ли какая нибудь формула, чтобы смещать координаты равномерно для 4 юнитов? 360°/4 = 90°.
а в цикле: t*90
|
|
|
|
llka | Дата: Понедельник, 12 Марта 2012, 19:23:03 | Сообщение # 4 |
4 уровень
Группа: Пользователи
Сообщений: 88
Награды: 0
Репутация: 34
Блокировки:
| Quote (Nyp) call AddSpecialEffectTarget( "overhead", u, "Abilities\\Spells\\Undead\\RaiseSkeletonWarrior\\RaiseSkeleton.mdl" ) call DestroyEffect( bj_lastCreatedEffect ) О боже мойДобавлено (12 Март 2012, 19:23:03) --------------------------------------------- oleg_best_oleg, real/int t = null
loop t = t + 90 endloop
|
|
|
|
Impregnable | Дата: Понедельник, 12 Марта 2012, 19:28:05 | Сообщение # 5 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| exitwhen t > 3 - очень, очень некрасиво.Code loop call CreateUnit(p, 'h01A', x+100.*Cos(r), y+100.*Sin(r), 180.+r*bj_RADTODEG) exitwhen r == 4.71 set r = r + 1.57 endloop Но лучше для 4 юнитов написать без цикла.
На производительность повлияет не...плохоCode function podobiecmertAc takes nothing returns nothing ... endfunction
function podobiecmertAc_Condition takes nothing returns boolean if GetSpellAbilityId() == 'A047' then call podobiecmertAc() endif
return false endfunction
... call TriggerAddCondition( gg_trg_podobie_cmert, function podobiecmertAc_Condition ) ...
Quote Тут не понятно что вставлять... А куда он должен смотреть?
call TriggerSleepAction( 0.90 ) - тебе зачем jass? call DestroyEffect( bj_lastCreatedEffect ) :avtorklif:
Похоже на конверт из ГУИ и бездумное переделывание BJ
|
|
|
|
Ty3uK | Дата: Понедельник, 12 Марта 2012, 19:38:24 | Сообщение # 6 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Так и есть, разве не заметно?
|
|
|
|
Nyp | Дата: Понедельник, 12 Марта 2012, 19:51:26 | Сообщение # 7 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Quote (Impregnable) Похоже на конверт из ГУИ и бездумное переделывание BJ Так и есть Quote (oleg_best_oleg) 360°/4 = 90°. а в цикле: t*90 Спасибо, с этим разобрался. Чем не понравилось то? Как лучше сделать тогда?Quote (Impregnable) На производительность повлияет не...плохо Отличный вариант =) А чем реальные числа лучше?Quote (Impregnable) А куда он должен смотреть? В сторону точки, к которой переместился. Quote call TriggerSleepAction( 0.90 ) - тебе зачем jass? call DestroyEffect( bj_lastCreatedEffect ) :avtorklif: Таймером надо? Подскажи функцию А чем функция удаления спецэффекта не понравилась, на будущее узнать ?=)
|
|
|
|
Mexaz | Дата: Понедельник, 12 Марта 2012, 20:06:36 | Сообщение # 8 |
7 уровень
Группа: Проверенные
Сообщений: 432
Награды: 0
Блокировки:
| Nyp, В следующий раз выкладывай ГУИ, не конвертируй в жасс... Конверт плохочитабелен и "не делает тебе чести", а скорее позорит.
影私はらが世界の鵜の中で最も重要な曲であることを意味するものではありません
(Translate It!)
|
|
|
|
Nyp | Дата: Понедельник, 12 Марта 2012, 20:14:36 | Сообщение # 9 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| На set udg_Point не обращайте внимания, забыл стереть.
|
|
|
|
oleg_best_oleg | Дата: Понедельник, 12 Марта 2012, 20:33:52 | Сообщение # 10 |
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
| call RemoveLocation(udg_Point[3])
Кстати установку точки надо вверх поднять, потому что юниты создадутся в центре карты (так как X = 0; Y = 0)
|
|
|
|
Nyp | Дата: Понедельник, 12 Марта 2012, 20:41:10 | Сообщение # 11 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Quote (oleg_best_oleg) Кстати установку точки надо вверх поднять Да это так, на скорую руку.Quote (Nyp) Таймером надо? Подскажи функцию А чем функция удаления спецэффекта не понравилась, на будущее узнать ?=) Хорошо бы вот это узнать...
|
|
|
|
oleg_best_oleg | Дата: Понедельник, 12 Марта 2012, 20:43:32 | Сообщение # 12 |
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
| Quote (Nyp) А чем функция удаления спецэффекта не понравилась Возможно потому что в джассе надо:
Code call DestroyEffect(AddSpecialEffectTarget( "overhead", u, "Abilities\\Spells\\Undead\\RaiseSkeletonWarrior\\RaiseSkeleton.mdl" ))
точно не помню
|
|
|
|
Nyp | Дата: Понедельник, 12 Марта 2012, 20:51:09 | Сообщение # 13 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Quote (oleg_best_oleg) call DestroyEffect(AddSpecialEffectTarget( "overhead", u, "Abilities\\Spells\\Undead\\RaiseSkeletonWarrior\\RaiseSkeleton.mdl" )) точно не помню Спасибо, отличная информация. А как избавиться от вэйтов в этом случае?
|
|
|
|
oleg_best_oleg | Дата: Понедельник, 12 Марта 2012, 20:52:01 | Сообщение # 14 |
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
| Nyp, если для одного игрока можно таймером или вейтом, если муи, то таймер + хэш.
|
|
|
|
Nyp | Дата: Понедельник, 12 Марта 2012, 21:03:07 | Сообщение # 15 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Для одного игрока, в смысле только 1 юнит на карте будет иметь и использовать этот спел? Как таймером на jass пользоваться По опыту гуишника, понятие таймер заложилось и воспринимается как либо таймер с окошечком, либо дать таймер истечения юниту. Таймер с окном - там ведь требуется событие, мол "таймер истекает".
|
|
|
|
oleg_best_oleg | Дата: Понедельник, 12 Марта 2012, 21:07:09 | Сообщение # 16 |
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
| Quote (Nyp) "таймер истекает" Да, только такое можно сделать на гуи с массивами, если надо муи, вроде: С. таймер[1] истек ... таймер[12] истек У.- Д. if тут сравнение истекшего таймера на джассе, then действия
|
|
|
|
Nyp | Дата: Вторник, 13 Марта 2012, 20:07:57 | Сообщение # 17 |
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
| Ладно, у меня всё равно способности всех героев разные. Спасибо всем, можно закрывать.
Добавлено (13 Март 2012, 20:07:57) --------------------------------------------- Quote (llka) real/int t = null Так real и integer надо обнулять? Хотя вряд ли. Code call CreateUnit(p, 'h01A', x+100.*Cos(90), y+100.*Sin(90), 270) call CreateUnit(p, 'h01A', x+100.*Cos(180), y+100.*Sin(180), 360) call CreateUnit(p, 'h01A', x-100.*Cos(270), y+100.*Sin(270), 90) call CreateUnit(p, 'h01A', x-100.*Cos(360), y+100.*Sin(360), 180) Вот решил так сделать, но чего то 2 из них стоят в одном и том же месте... Code call CreateUnit(p, 'h01A', x+100.*Cos(0), y+100.*Sin(0), 180) call CreateUnit(p, 'h01A', x+100.*Cos(1.57), y+100.*Sin(1.57), 270) call CreateUnit(p, 'h01A', x-100.*Cos(270), y-100.*Sin(270), 0) call CreateUnit(p, 'h01A', x-100.*Cos(360), y-100.*Sin(360), 90) Что то изменил, и получилось так, всё правильно работает.
Сообщение отредактировал Nyp - Вторник, 13 Марта 2012, 20:40:45 |
|
|
|
|
|
|
|
|
|
|