Сейчас 17:35:05 Пятница, 29 марта, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Не срабатывает приказ ("ClusterRockets" - дамми)
[Вопрос] Не срабатывает приказ
FatalBladeДата: Суббота, 01 Октября 2011, 22:34:59 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Абилка гранаты.:
Герой кидает несколько гранат в какую то область, нанося всем урон. Я это сделал с помощью дамми, то есть когда герой активирует спелл, появляется дамми, получает спелл Cluster Rockets с анимацией гранат, и кидает эти гранаты, нанося урон.
Вот собственно триггер. Тут работает всё как надо кроме 1 вещи: дамми не кидает гранаты. Я проверил, дал дамми видимую модель, убрал Locust, убедился что он получает абилку.... Короче всё работает, но приказ не выполняется. Почему?

Code
function Trig_Grenades_Conditions takes nothing returns boolean
     return ( GetSpellAbilityId() == 'A0DV' )
endfunction

function GrenadesEnd takes nothing returns nothing
     local timer t = GetExpiredTimer()
     local integer id = GetHandleId(t)
     local unit ud = LoadUnitHandle(udg_Hash, id, 0)
     local location p = LoadLocationHandle(udg_Hash, id, 1)
     call RemoveUnit(ud)
     call DestroyTimer(t)
     call RemoveLocation(p)
     call FlushChildHashtable(udg_Hash, id)  
     set t = null
     set ud = null
endfunction

function GrenadesOrder takes nothing returns nothing
     local timer t = GetExpiredTimer()
     local integer id = GetHandleId(t)
     local timer t1 = CreateTimer()
     local integer id1 = GetHandleId(t1)
     local unit ud = LoadUnitHandle(udg_Hash, id, 0)
     local location p = LoadLocationHandle(udg_Hash, id, 1)

     call IssuePointOrderLoc( ud, "clusterrockets", p )     <<<<<<<<<============ ВОТ ЭТО ВОТ НЕ РАБОТАЕТ
     call DestroyTimer(t)
     call FlushChildHashtable(udg_Hash, id)  
     call SaveAgentHandle(udg_Hash, id1, 0, ud)
     call SaveAgentHandle(udg_Hash, id1, 1, p)

     call TimerStart( t1, 9.50, false, function GrenadesEnd )
     set t = null
     set t1 = null
     set ud = null
     set p = null
endfunction

function Trig_Grenades_Actions takes nothing returns nothing
     local timer t = CreateTimer()
     local integer id = GetHandleId(t)
     local unit u = GetTriggerUnit()
     local location p1 = GetUnitLoc(u)
     local location p2 = GetSpellTargetLoc()
     local unit ud = CreateUnitAtLoc( GetOwningPlayer(u), 'h02B', p1, 0 )
     local integer l = GetUnitAbilityLevel( u, 'A0DV' )
      
     call UnitAddAbility( ud, 'A0CF' )
     call SetUnitAbilityLevel( ud, 'A0CF', l )

     call RemoveLocation(p1)
     call SaveAgentHandle(udg_Hash, id, 0, ud)
     call SaveAgentHandle(udg_Hash, id, 1, p2)
     call TimerStart( t, 0.20, false, function GrenadesOrder )
     set t = null
     set u = null
     set ud = null
     set p1 = null
     set p2 = null
endfunction

//===========================================================================
function InitTrig_Grenades takes nothing returns nothing
     set gg_trg_Grenades = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_Grenades, EVENT_PLAYER_UNIT_SPELL_EFFECT )
     call TriggerAddCondition( gg_trg_Grenades, Condition( function Trig_Grenades_Conditions ) )
     call TriggerAddAction( gg_trg_Grenades, function Trig_Grenades_Actions )
endfunction


 

Mep3aB4uKДата: Воскресенье, 02 Октября 2011, 00:10:07 | Сообщение # 2
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
Код вроде норм, но проверь текстагом переменые ud и p. Если текстаг будет появлятся нормльно над юнитом и в точке, то проверяй все мелочи(типа манакост = 0).
Также удаляй точку p, в GranadesOrder
 

FatalBladeДата: Воскресенье, 02 Октября 2011, 00:38:14 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Всё работает. Мана кост 0, само собой. Просто дамми не хочет выполнять приказ. Я даже сделал так что бы я мог управлять даммиком, и вручую кастовал с даммиком этот спелл.

 

FaionДата: Воскресенье, 02 Октября 2011, 01:27:17 | Сообщение # 4
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Код не смотрел, но я уверен что ты отдаешь приказ и сразу удаляешь юнита, а над давать юниту таймер.

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

FatalBladeДата: Воскресенье, 02 Октября 2011, 01:33:23 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Faion)
Код не смотрел, но я уверен что ты отдаешь приказ и сразу удаляешь юнита, а над давать юниту таймер.

А ты посмотри код и поймёш что ты не прав ;) Я дал юниту таймер, причём довольно таки большой. Точнее не юниту, а вообще, запустил таймер на 9.5 секунд и по истечению таймера удалил дамми.


 

FaionДата: Воскресенье, 02 Октября 2011, 02:05:43 | Сообщение # 6
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Кури координаты.

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

Mep3aB4uKДата: Воскресенье, 02 Октября 2011, 02:07:12 | Сообщение # 7
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
FatalBlade, проверь все мелочи, все буковки приказа.
По другому для проверки ставишь дамми на карту и
с:истекло 5 сек
д:лок=точка(дамии) с оффсетом 400 под случайный угол
приказать кастовать ракеты в лок
Должно сработать


Сообщение отредактировал Mep3aB4uK - Воскресенье, 02 Октября 2011, 02:10:30
 

lawsonДата: Воскресенье, 02 Октября 2011, 06:13:46 | Сообщение # 8
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
FatalBlade, Попробуй несколько вариантов:
Попробуй создать даммику уже после истечения первого таймера, еще попробуй посмотреть на гуи этот приказ для ракет, ну и еще можно попробовать изминить цель для даммика тоесть не через область а через координаты.

Добавлено (02 Октябрь 2011, 06:13:46)
---------------------------------------------

Quote (Mep3aB4uK)
GrenadesOrder

Забыл удалить область RemoveLocation()


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Воскресенье, 02 Октября 2011, 06:12:07
 

Ty3uKДата: Воскресенье, 02 Октября 2011, 08:34:19 | Сообщение # 9
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Во-первых, юзай координаты, а во-вторых- почему бы не сделать реюзабельность таймера? Одного таймера на все действия хватит с головой

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

SirNikolasДата: Воскресенье, 02 Октября 2011, 09:26:31 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (FatalBlade)
call IssuePointOrderLoc( ud, "clusterrockets", p )
Code
if IssuePointOrderLoc(ud, "clusterrockets", p) then
      call BJDebugMsg("Приказ отдан успешно")
else
      call BJDebugMsg("Ошибка при получении приказа")
endif
P. S. У меня такая же проблема.
Quote (lawson)
Забыл удалить область RemoveLocation()
Все точки удалены.




Сообщение отредактировал SirNikolas - Воскресенье, 02 Октября 2011, 09:28:20
 

FatalBladeДата: Воскресенье, 02 Октября 2011, 09:55:09 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Ty3uK)
Во-первых, юзай координаты, а во-вторых- почему бы не сделать реюзабельность таймера? Одного таймера на все действия хватит с головой

Чем плохи точки если они все вовремя удаляются? Да и с ними удобнее работать чем с координатами.

Quote (Mep3aB4uK)
д:лок=точка(дамии) с оффсетом 400 под случайный угол
приказать кастовать ракеты в лок
Должно сработать

Любая другая абилка работает так как я написал. Именно эта не работает. Думаю дело в абилке. Вообще Cluster Rockets очень плохо настроена самими разработчиками. Например если юнит скастовал абилку, и пока ракеты ещё не долетели, получил какой то другой приказ, то ракеты не нанесут урона. Потому то я и решил сделать это с дамми, что урон нанёсся даже если герой получит другой приказ.

Quote (lawson)
Забыл удалить область RemoveLocation()

точка сохраняется в хэш и удаляется в следущей функции. Я решил перестраховаться просто, ведь дамми нужна эта точка для ракет.

Добавлено (02 Октябрь 2011, 09:45:05)
---------------------------------------------

Quote (lawson)
Попробуй создать даммику уже после истечения первого таймера, еще попробуй посмотреть на гуи этот приказ для ракет, ну и еще можно попробовать изминить цель для даммика тоесть не через область а через координаты.

То есть создать дамми и сразу дать ему приказ? Это хуже (ИМХО). У меня было такое дело что изза этого дамми не всегда выполнял приказ. Но после таймера он всегда выполняет приказ, кроме этого случая.
На ГУИ так и пишется как и я написал.

Добавлено (02 Октябрь 2011, 09:55:09)
---------------------------------------------
В принципе это уже не так важно, потому что я сделал другим способом - с помощью дамми в качестве самих ракет. То есть создаются 5 дамми, и они все летят в указанную героем точку. Естественно есть небольшой разброс в величинах, на угол полёта и скорость полёта, и на цель куда падает каждая граната, что бы оно выглядело так как выглядит стандартная абилка. Код получился не очень сложным, и в итоге оно работает даже лучше чем стандартная Cluster Rockets. Урон наносится каждой не по всей выделенной площади, а только там где граната упала. Реализм )


 

Ty3uKДата: Воскресенье, 02 Октября 2011, 10:18:33 | Сообщение # 12
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Реюзабельность таймеров- экономия места, хорошая читабельность кода и минимальная нагрузка на ядро

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

SirNikolasДата: Воскресенье, 02 Октября 2011, 10:22:37 | Сообщение # 13
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
^ +1

 

Ty3uKДата: Воскресенье, 02 Октября 2011, 10:26:03 | Сообщение # 14
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
А координаты лучше тем, что потом их не надо удалять, а про точку если забудешь- будет не очень хорошо

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

FatalBladeДата: Воскресенье, 02 Октября 2011, 11:57:18 | Сообщение # 15
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Ty3uK)
А координаты лучше тем, что потом их не надо удалять, а про точку если забудешь- будет не очень хорошо

Даже если забудешь 1 раз... ну и что? Если каждый раз когда юзаешь спелл будет появляться 1 точка.... Ну сколько раз ты заюзаешь этот спелл за всю игру? Ну допустим 4 раза в минуту. Играть в АОСку максимум ты будешь 1.5 часа, и то это много. И того 90 минут * 4 точки = 360 неудалённых точек. Это ведь совсем не много. И точки это не эффекты и не юниты.
Я например раьнше не удалял точки когда делал свою карту на ГУИ, и даже не подозревал о том что точки нагружают память, в отличие от юнитов или эффектов, которые заметно ухудшают работу игры. Темболее в наше время у 90% людей норм компы, для которых Вар3 это как страница в браузере, не более. Они её спокойно тянут в любом раскладе.

Добавлено (02 Октябрь 2011, 11:57:18)
---------------------------------------------

Quote (Ty3uK)
Реюзабельность таймеров

Это что?


 

Ty3uKДата: Воскресенье, 02 Октября 2011, 12:22:36 | Сообщение # 16
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Это реюзабельность таймеров. Сейчас кину пример

Добавлено (02 Октябрь 2011, 12:22:36)
---------------------------------------------
Держи текстовичок с примером


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

lawsonДата: Воскресенье, 02 Октября 2011, 12:50:19 | Сообщение # 17
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
FatalBlade, Я тоже всем по началу так доказывал что точки использовать удобней и не страшно, ну а потом просто сам по себе перевел все в координаты.(разницы не заметил)

Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Воскресенье, 02 Октября 2011, 12:55:43
 

Ty3uKДата: Воскресенье, 02 Октября 2011, 12:56:18 | Сообщение # 18
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Фирштейн, что это? :)

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

lawsonДата: Воскресенье, 02 Октября 2011, 12:56:57 | Сообщение # 19
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
  local location p = LoadLocationHandle(udg_Hash, id, 1)

Вот здесь забыл null написать.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

Mep3aB4uKДата: Воскресенье, 02 Октября 2011, 13:08:37 | Сообщение # 20
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
FatalBlade, Как вариант такое сделать без абилки... сделать дамми(с атакой, анимацией снаряда, дугой, взрывные снаряды и т.д.), создать в точке и приказать атаковать в случайную точку области

Сообщение отредактировал Mep3aB4uK - Воскресенье, 02 Октября 2011, 13:09:58
 

Ty3uKДата: Воскресенье, 02 Октября 2011, 13:14:06 | Сообщение # 21
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
^+1 через даммика и красочнее сделать можно

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

SirNikolasДата: Воскресенье, 02 Октября 2011, 13:17:52 | Сообщение # 22
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Ty3uK, поправь ссылку. Добавь в начало url "http://".

Добавлено (02 Октябрь 2011, 13:17:52)
---------------------------------------------

Quote (FatalBlade)
Тем более, в наше время у 90% людей норм компы, для которых Вар3 - это как страница в браузере, не более. Они её спокойно тянут в любом раскладе.
Ну-ну. Расчитывать-то надо на худшее.


 

Ty3uKДата: Воскресенье, 02 Октября 2011, 13:26:49 | Сообщение # 23
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Ага, конечно. У меня вчера сгорела видеокарта, сижу на встроенной. Двухядерный проц, четыре гектара оперативки и варик ппц как тормозит. Сорри, я с телефона, ссылку уже не поправлю :(

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

FatalBladeДата: Воскресенье, 02 Октября 2011, 18:13:57 | Сообщение # 24
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Mep3aB4uK)
FatalBlade, Как вариант такое сделать без абилки... сделать дамми(с атакой, анимацией снаряда, дугой, взрывные снаряды и т.д.), создать в точке и приказать атаковать в случайную точку области

Quote (Ty3uK)
^+1 через даммика и красочнее сделать можно

Ну я сделал с даммиками. А когда даммики прилетали в цель, то я их триггерно убивал. Получались снаряды которые взрывались при падание на землю )

Добавлено (02 Октябрь 2011, 18:13:57)
---------------------------------------------
Ty3uK, пишет, ресурс не найден.


 

Ty3uKДата: Воскресенье, 02 Октября 2011, 18:32:55 | Сообщение # 25
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
rghost.ru/23921931

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

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Не срабатывает приказ ("ClusterRockets" - дамми)
  • Страница 1 из 1
  • 1
Поиск:

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