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

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

Ответ
 
DeaDoK

offline
Опыт: 5,783
Активность:
local unit u = CreateUnit...
Чё то я не понял. неужели при каждом обращении к (local unit u = CreateUnit...) переменной u создаётся новый юнит. Просто я сделал спелл который вызывает дамми юнита который в свою очередь каждые 0.1 сек. кастует на всех кто в радиусе жажду крови. Просто если создать одного юнита и дать ему абилу крови и приказ кастовать то он сто процентов не сможет один кастовать каждые 0.1 сек.
Вот в тригге я пишу local unit u = CreateUnit..., потом в кеш её, и в действии таймера local unit u = GetUnit(s,"dummy")
потом перебор группы и приказ u кастовать на FirstOfGroup жажду крови.
Кто мне ответит, в чём прикол?
Старый 29.03.2008, 14:05
Mind_Freak
отступник дроу
offline
Опыт: 2,274
Активность:
попонятнее изложи, ниче не понятно, ты спрашиваешь создается ли юнит, а потом там говоришь что создается
Старый 29.03.2008, 14:14
DeaDoK

offline
Опыт: 5,783
Активность:
Повторяю специально для ФРИКОВ:
Я в тригге создаю инита через локалку, заношу в кеш, и выношу в действии таймера(который я создаю в действии), перебор группы, даю спелл выношеному юниту и прказываю кастовать и он спокойно кастует каждые 0.1 сек.
Вопрос:
КАКИМ, ИНТЕРЕСНО МАКАРОМ, ОДИН ДАММИ КАСТУЕТ НА ВСЕХ КАЖДЫЕ 0.1 СЕКУНДЫ?
Старый 29.03.2008, 14:26
J
expert
offline
Опыт: 48,447
Активность:
а почему нет?

Jon добавил:
если мы чегото не понимаем выложи код, дело пойдет быстрее
Старый 29.03.2008, 14:31
Nethrez1m
Dat av doe
offline
Опыт: 2,123
Активность:
если у способности, которая дается дамми, перезарядка 0, и время кастования тоже 0, он сколько угодно раз скастует.
Старый 29.03.2008, 14:37
DeaDoK

offline
Опыт: 5,783
Активность:
А почему тада обычные униты так не могут?

DeaDoK добавил:
Когда даёшь обычному юниту приказ - то он кастует один раз(перезарядка и время каста = 0)
Старый 29.03.2008, 14:50
Nethrez1m
Dat av doe
offline
Опыт: 2,123
Активность:
Надо дать приказ 5 раз, триггерно (руками-то вряд ли каждые 0.1 сек получицо :) ) тогда и обычный юнит будет кастовать.
Старый 29.03.2008, 15:00
DeaDoK

offline
Опыт: 5,783
Активность:
Ну а чем тогда обычный юнит от дамми отличаецца? Способностью Москиты?

вот типо кусок кода
DeaDoK добавил:
Код:
function BattleTime_Spell takes nothing returns boolean
return GetSpellAbilityId()=='A0K0'
endfunction

function BattleTime_Check takes nothing returns boolean
return GetOwningPlayer(GetFilterUnit())==GetOwningPlayer(udg_U_temp)and(GetUnitAbilityL    evel(GetFilterUnit(),'A04Y')==0) or IsUnitAlly(GetFilterUnit(),GetOwningPlayer(udg_U_temp))==true
endfunction

function BattleTime_Main takes nothing returns nothing
local timer t=GetExpiredTimer()
local string s=H2Tx(t)
local unit A=GetUnit(s,"Caster")
local unit U=GetUnit(s,"Hero")
local integer lvl=GetUnitAbilityLevel(U,'A0K0')
local integer a=GetInteger(s,"Counter")
local real v=GetUnitX(A)
local real V=GetUnitY(A)
local boolexpr W=Condition(function BattleTime_Check)
local group g=CreateGroup()
local unit d=GetUnit(s,"Caster2")
local unit f
set udg_U_temp=U
call GroupEnumUnitsInRange(g,v,V,435,W)
loop
          set f=FirstOfGroup(g)
          exitwhen f==null
          if IsUnitAlly(f,GetOwningPlayer(d))==true then
             call IssueTargetOrder(d,"bloodlust",f)
             call GroupRemoveUnit(g,f)
          else
             call UnitDamageTarget(d,f,GetUnitMoveSpeed(f)*0.25,true,false,ATTACK_TYPE_HERO,DAMAGE    _TYPE_NORMAL,null)
             call GroupRemoveUnit(g,f)
          endif
        endloop
        call GroupClear(g)
call DestroyGroup(g)
call DestroyBoolExpr(W)
set a=a+1
call SetInteger(s,"Counter",a)
if a>30+lvl*30 then
call RemoveUnit(A)
call RemoveUnit(d)
call PauseTimer(t)
call FastFlush(s)
call DestroyTimer(t)
endif
        set A=null
        set U=null
        set lvl=0
        set a=0
        set v=0
        set V=0
        set W=null
        set g=null
        set d=null
        set f=null
endfunction

function BattleTime_Setting takes nothing returns nothing
local unit U=GetTriggerUnit()
local integer lvl=GetUnitAbilityLevel(U,'A0K0')
local location B=GetSpellTargetLoc()
local real v=GetLocationX(B)
local real V=GetLocationY(B)
local unit A=CreateUnit(GetOwningPlayer(U),'e00Y',v,V,0)
local unit d=CreateUnit(GetOwningPlayer(U),'e000',v,V,0)
local timer t
local string s
call UnitAddAbility(d,'A0JZ')
call SetUnitAbilityLevel(d,'A0JZ',lvl)
set t=CreateTimer()
set s=H2Tx(t)
call SetHandle(s,"Caster",A)
call SetHandle(s,"Caster2",d)
call SetHandle(s,"Hero",U)
call SetInteger(s,"Counter",0)
call TimerStart(t,.1,true,function BattleTime_Main)
call RemoveLocation(B)
endfunction

function InitTrig_Battle_Time takes nothing returns nothing
set gg_trg_Battle_Time = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_Battle_Time,EVENT_PLAYER_UNIT_SPELL_EFFECT)    
call TriggerAddCondition(gg_trg_Battle_Time,Condition(function BattleTime_Spell))
call TriggerAddAction(gg_trg_Battle_Time,function BattleTime_Setting)
endfunction


вот, как вы можете видеть я создаю второго дамми - local unit d=CreateUnit(GetOwningPlayer(U),'e000',v,V,0) (счас работает с одним, но функции поменялись) и что будет если его убрать?
Старый 29.03.2008, 15:24
Mind_Freak
отступник дроу
offline
Опыт: 2,274
Активность:
А ты попробуй через шифт в игре приказ отдать, посмотрим как он у тебя кастанет
Старый 29.03.2008, 15:38
Nethrez1m
Dat av doe
offline
Опыт: 2,123
Активность:
Цитата:
Ну а чем тогда обычный юнит от дамми отличаецца? Способностью Москиты?

и, обычно, он не видим игроку.

Цитата:
вот, как вы можете видеть я создаю второго дамми - local unit d=CreateUnit(GetOwningPlayer(U),'e000',v,V,0) (счас работает с одним, но функции поменялись) и что будет если его убрать?

если его убрать, поменять в функциях нанесения урона и каста блудласта на первого кастера, также добавляя абилку к первому, ничего не изменится.
Старый 29.03.2008, 16:08
DeaDoK

offline
Опыт: 5,783
Активность:
Т.е., как я понял , не обязательно создавать нового юнита в циклах для массового каста? А достаточно одного.Да?
Старый 29.03.2008, 17:00
Nethrez1m
Dat av doe
offline
Опыт: 2,123
Активность:
Да, только если не кастуется channel (которое требует концентрации) заклинание.
Старый 29.03.2008, 17:08
DeaDoK

offline
Опыт: 5,783
Активность:
А вопрос исчо:
Что исчо можно сразу создавать в локалке (пример local unit u = CreateUnit())?
Старый 29.03.2008, 17:16
Nethrez1m
Dat av doe
offline
Опыт: 2,123
Активность:
все, кроме локалок - массивов:
local integer array iA
local unit array uA
и проч.
Старый 29.03.2008, 17:26
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
сделайте одолжение - научитесь создавать темы там где им место.
прием "local *type* *var_name* = *value*" называется инициализацией локальной переменной - если это не массив, как было замечено, каждой локалке можно присвоить какое-то начальное значение
например
local unit u
local unit u = null
local unit u = GetTriggerUnit()
local unit u = CreateUnit(....)
- варианты..
читатйте статьи по джассу
Старый 30.03.2008, 10:18
Toadcop

offline
Опыт: 54,313
Активность:
бульекспресионы не надо удалять =)
Старый 30.03.2008, 19:04
Ответ

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

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

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

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



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