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

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

Ответ
 
Blizzru

offline
Опыт: 4,117
Активность:
Jass подскажите что я не так делаю?
Не могу дать предмет юниту, помогите плз)
((код jass
function Trig_Eul_Conditions takes nothing returns boolean
return GetSpellAbilityId()=='A06F'
endfunction
function Trig_Eul_Actions takes nothing returns nothing
local u = GetSpellTargetUnit()
call PolledWait(3.05)
call UnitAddItemById( u, 'A04F' )
set u = null
endfunction
function InitTrig_Eul takes nothing returns nothing
local integer i = 0
set gg_trg_Eul = CreateTrigger()
loop
exitwhen(i>=16)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i = i+1
endloop
call TriggerAddCondition(gg_trg_Eul,Condition(function Trig_Eul_Conditions))
call TriggerAddAction(gg_trg_Eul,function Trig_Eul_Actions )
endfunction
))
Старый 02.08.2013, 01:21
MpW

offline
Опыт: 50,016
Активность:
так все правильно. Но равкод является разве предметом 'A04F'?

Steal nerves добавил:
Blizzru, у тебя все правильно написано. Только единственное но - вейты! но для сингла вейты пойдут

Steal nerves добавил:
так сложно понять что у тебя - карту в студию. Может в РО напортачил
Старый 02.08.2013, 01:28
Blizzru

offline
Опыт: 4,117
Активность:
Steal_nerves, Не сингл, это способность ветра (смерч в небо делает неуязвимым, после чего хочу дать цели скорость бега с помощью руны на 2 сек.)
Blizzru добавил:
Как обойти вейт?
Blizzru добавил:
С равкодом да накосячил)
Старый 02.08.2013, 01:30
MpW

offline
Опыт: 50,016
Активность:
Blizzru, 'A04F' - похоже на равкод способности.

Steal nerves добавил:
вейты заменяем таймерами
Старый 02.08.2013, 01:32
Blizzru

offline
Опыт: 4,117
Активность:
Всёравно не хочет запускаться.
Старый 02.08.2013, 01:32
MpW

offline
Опыт: 50,016
Активность:
Blizzru, local u = GetSpellTargetUnit() меняем на local unit u = GetSpellTargetUnit()
Старый 02.08.2013, 01:33
Blizzru

offline
Опыт: 4,117
Активность:
Хахах))) Точно!
Старый 02.08.2013, 01:34
MpW

offline
Опыт: 50,016
Активность:
Blizzru, еще события лишние (это по поводу оптимизации)
Код:
loop
    exitwhen(i>=16)
        call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFE  CT,null)
        set i = i+1
    endloop

дай тем игрокам кто будет использовать эти события, скажем нейтралам на фиг это не нужно

Steal nerves добавил:
хотя памяти очень мало занимают, так что...
Старый 02.08.2013, 01:38
Blizzru

offline
Опыт: 4,117
Активность:
Всё возможно в моей мапе)
Пока ты здесь не мог бы дать дельный пример как создавать таймеры для MUI а не юзать wait?
Старый 02.08.2013, 01:39
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Старый 02.08.2013, 10:55
Blizzru

offline
Опыт: 4,117
Активность:
А для таймера обязательно юзать хештаблицу?
Старый 02.08.2013, 17:13
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Blizzru, а чем она тебе не нравится?
Старый 02.08.2013, 17:30
Blizzru

offline
Опыт: 4,117
Активность:
Nerevar, Я её не понимаю :) Всю ночь читал, пытался сделать но всё напрасно. Хотя перейти на язь "Жылание бещиное имею".
Старый 02.08.2013, 17:35
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
статья ханабиши вполне описывает работу с ней,если не понимаете хеш-таблицу,то на аналоги вроде структур соваться даже не стоит
Старый 02.08.2013, 18:05
DioD

offline
Опыт: 45,134
Активность:
если вы сами по себе не понимаете суть хеш таблицы, ни одна статья вам не поможет, возмите ручку, бумажку и нарисуйте всё, чтобы "показать" видимость объектов используйте стикеры (или простой карандаш), если сделаете грамотно, у вас будут сразу же откроется навык manual memory managment, вы сразу поймёте что такое утечки и как с ними боротся (и прицепом вам откроется суть и цель применения хеш таблицы в данном случае), но это следует делать самостоятельно, прочитав случайную статью про сабж вы его не поймёте.
Старый 02.08.2013, 21:32
Темак
jass for everyone
offline
Опыт: 7,200
Активность:
Хештаблица это просто двухмерный массив. (в своё время я её понял так, а не по статье)
Старый 02.08.2013, 21:56
Blizzru

offline
Опыт: 4,117
Активность:
Вот сделал, работает всё как нужно. Насчёт оптимизации что подскажите?
((код jass
function E takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer h = GetHandleId(t)
local unit tu = LoadUnitHandle(udg_hash,h,1)
call UnitAddItemById(tu, 'I04F')
call DestroyTimer(t)
call FlushChildHashtable(udg_hash,h)
set tu = null
set t = null
endfunction
function Eul takes nothing returns nothing
local unit tu = GetSpellTargetUnit()
local timer t = CreateTimer()
local integer h = GetHandleId(t)
call SaveUnitHandle(udg_hash,h,1,tu)
call TimerStart(t, 3.01, false, function E)
set tu = null
set t = null
endfunction
function Ec takes nothing returns boolean
return GetSpellAbilityId()=='A06F'
endfunction
function InitTrig_Eul takes nothing returns nothing
set gg_trg_Eul = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(0),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(1),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(2),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(3),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(4),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(5),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(6),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(7),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(8),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(9),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(10),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Eul,Player(11),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerAddCondition(gg_trg_Eul,Condition(function Ec))
call TriggerAddAction(gg_trg_Eul,function Eul)
set udg_hash = InitHashtable()
endfunction
))

Отредактировано Blizzru, 07.08.2013 в 16:31.
Старый 06.08.2013, 17:44
MpW

offline
Опыт: 50,016
Активность:
Blizzru, можно при инициализации проверять играет ли игрок, если играет дать событие (а так те кто не играет им не нужны события). Еще лучше, если способность будет использовать единственный герой, то при выборе героя давать ему это событие. Но это все.

Еще при событии юнит получает предмет - удалять руну. От руны утекает также.

Steal nerves добавил:
Blizzru, забудь что я сказал. А то злые дядьки придут и по башке надают =))

Steal nerves добавил:
Очень хорошо когда не плодить кучу триггеров, а стараться все в один с общим событием. Есть еще на сайте алгоритмы или как там - там можно посмотреть универсальный способ сделать

Steal nerves добавил:
Blizzru, кстати ты забыл обнулить кое-где - не забывай

Steal nerves добавил:
кстати у меня вопрос по поводу вызова таймера
call TimerStart(t, 3.01, true, function E) там где true - периодичный таймер (он будет каждые 3.01 запускаться), а false - одноразовый
Старый 06.08.2013, 19:14
LOR_D
    
offline
Опыт: 8,450
Активность:
Blizzru, не обнулил переменные в функции E
Старый 06.08.2013, 19:19
Blizzru

offline
Опыт: 4,117
Активность:
Steal_nerves, спасибо буду знать что false одноразовый а true переодический.
Как записать руну в переменную чтобы после избавится от неё?
((код jass
local item rune = UnitAddItemById(tu, 'I04F')
))
так?
Старый 06.08.2013, 19:49
Ответ

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

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

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

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



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