Сейчас 15:04:02 Четверг, 25 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Вопрос по коду
Вопрос по коду
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, real
Quote (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
Блокировки:
Так и есть, разве не заметно?

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

NypДата: Понедельник, 12 Марта 2012, 19:51:26 | Сообщение # 7
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 56
Блокировки:
Quote (Impregnable)
Похоже на конверт из ГУИ и бездумное переделывание BJ

Так и есть smiletrollskip
Quote (oleg_best_oleg)
360°/4 = 90°. а в цикле: t*90

Спасибо, с этим разобрался.
Quote (llka)
О боже мой

Чем не понравилось то? Как лучше сделать тогда?
Quote (Impregnable)
На производительность повлияет не...плохо

Отличный вариант =) А чем реальные числа лучше?
Quote (Impregnable)
А куда он должен смотреть?

В сторону точки, к которой переместился.
Quote
call TriggerSleepAction( 0.90 ) - тебе зачем jass?
call DestroyEffect( bj_lastCreatedEffect ) :avtorklif:

Таймером надо? Подскажи функцию 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
Блокировки:
Quote (Nyp)
set udg_Point

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 пользоваться avtortroll По опыту гуишника, понятие таймер заложилось и воспринимается как либо таймер с окошечком, либо дать таймер истечения юниту. Таймер с окном - там ведь требуется событие, мол "таймер истекает".
 

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
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Вопрос по коду
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz