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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Вопрос, да да я нуб,про условие вопрсо
Вопрос, да да я нуб,про условие вопрсо
DreiiДата: Воскресенье, 12 Декабря 2010, 16:28:18 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Code
function Trig_Spell_Conditions takes nothing returns boolean
return (GetSpellAbilityId() == 'A000')
endfunction

function Trig_Spell_Actions takes nothing returns nothing
local unit c= GetSpellAbilityUnit()
local unit t= GetSpellTargetUnit()
local real x=GetUnitX(t)
local real y=GetUnitY(t)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", x,y))
    
     set bj_forLoopAIndex = 1
     set bj_forLoopAIndexEnd = 8
     loop
         exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", t, "overhead"))
call UnitDamageTarget(c, t, ( ( I2R(GetUnitAbilityLevel(c, 'A000')) * 50.00 ) + 25.00 ), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )
call PolledWait (1)

         set bj_forLoopAIndex = bj_forLoopAIndex + 1
     endloop
set c = null
set t = null
endfunction
//===========================================================================
function InitTrig_Spell takes nothing returns nothing
     local integer index=0
     set gg_trg_Spell = CreateTrigger(  )
     loop
         call TriggerRegisterPlayerUnitEvent(gg_trg_Spell, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)

         set index = index + 1
         exitwhen index == bj_MAX_PLAYER_SLOTS
     endloop
     call TriggerAddCondition( gg_trg_Spell, Condition (function Trig_Spell_Conditions))
     call TriggerAddAction( gg_trg_Spell, function Trig_Spell_Actions )
endfunction

Все работает,но я не знаю куда засунуть условие если t != жив, то ничего не делать


 

[san9]Дата: Воскресенье, 12 Декабря 2010, 16:35:20 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Dreii,
Надо чтобы цикл прекротился когда t умрёт?


 

DreiiДата: Воскресенье, 12 Декабря 2010, 16:36:31 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
[san9], ага

 

KartohaДата: Воскресенье, 12 Декабря 2010, 16:39:11 | Сообщение # 4
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
Тот же код, но со вставленным условием:

Code
function Trig_Spell_Conditions takes nothing returns boolean
return (GetSpellAbilityId() == 'A000')
endfunction

function Trig_Spell_Actions takes nothing returns nothing
local unit c= GetSpellAbilityUnit()
local unit t= GetSpellTargetUnit()
local real x=GetUnitX(t)
local real y=GetUnitY(t)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", x,y))

set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 8
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
if ( IsUnitAliveBJ(t) == true ) then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", t, "overhead"))
call UnitDamageTarget(c, t, ( ( I2R(GetUnitAbilityLevel(c, 'A000')) * 50.00 ) + 25.00 ), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )
call PolledWait (1)

set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
endif
set c = null
set t = null
endfunction
//===========================================================================
function InitTrig_Spell takes nothing returns nothing
local integer index=0
set gg_trg_Spell = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_Spell, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)

set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition( gg_trg_Spell, Condition (function Trig_Spell_Conditions))
call TriggerAddAction( gg_trg_Spell, function Trig_Spell_Actions )
endfunction


Сообщение отредактировал Kartoha - Воскресенье, 12 Декабря 2010, 16:39:28
 

DreiiДата: Воскресенье, 12 Декабря 2010, 16:40:20 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Kartoha, не работает

 

KartohaДата: Воскресенье, 12 Декабря 2010, 16:41:24 | Сообщение # 6
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
Dreii, триггер не включается?
 

DreiiДата: Воскресенье, 12 Декабря 2010, 16:41:38 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Kartoha, все заработало endif переставил

 

[san9]Дата: Воскресенье, 12 Декабря 2010, 16:42:18 | Сообщение # 8
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Code
local unit c= GetSpellAbilityUnit()  
local unit t= GetSpellTargetUnit()  
local real x=GetUnitX(t)  
local real y=GetUnitY(t)  
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", x,y))  
      
      set bj_forLoopAIndex = 1  
      set bj_forLoopAIndexEnd = 8  
      loop  
          exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd  
if GetUnitStateSwap(UNIT_STATE_LIFE, t) > 0 then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", t, "overhead"))  
call UnitDamageTarget(c, t, ( ( I2R(GetUnitAbilityLevel(c, 'A000')) * 50.00 ) + 25.00 ), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )  
call PolledWait (1)  
          set bj_forLoopAIndex = bj_forLoopAIndex + 1  
endif
      endloop  
set c = null  
set t = null


 

DreiiДата: Воскресенье, 12 Декабря 2010, 16:42:22 | Сообщение # 9
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Кто знает чем можно заменить PolledWait (1)

 

KartohaДата: Воскресенье, 12 Декабря 2010, 16:42:40 | Сообщение # 10
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
Только хотел сказать об этом=)
 

[san9]Дата: Воскресенье, 12 Декабря 2010, 16:43:37 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Quote (Dreii)
Кто знает чем можно заменить PolledWait (1)

Таймер.Но придётся юзать Hash




Сообщение отредактировал [san9] - Воскресенье, 12 Декабря 2010, 16:44:12
 

KartohaДата: Воскресенье, 12 Декабря 2010, 16:43:39 | Сообщение # 12
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
Quote (Dreii)
Kartoha, все заработало endif переставил

Я про это)
 

DreiiДата: Воскресенье, 12 Декабря 2010, 16:44:52 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
[san9], это долго?

 

[san9]Дата: Воскресенье, 12 Декабря 2010, 16:46:06 | Сообщение # 14
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Quote (Dreii)
[san9], это долго?

Нет. У тебя PolledWait тупо делает чтоб цикл работал каждую 1 сек?


 

DreiiДата: Воскресенье, 12 Декабря 2010, 16:46:57 | Сообщение # 15
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
[san9], ага

 

[san9]Дата: Воскресенье, 12 Декабря 2010, 16:48:55 | Сообщение # 16
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Dreii,
Ну щас напишу.


 

DreiiДата: Воскресенье, 12 Декабря 2010, 16:49:40 | Сообщение # 17
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
[san9], жду

 

[san9]Дата: Воскресенье, 12 Декабря 2010, 16:59:16 | Сообщение # 18
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Code
function func2 takes nothing returns nothing
local timer e=GetExpiredTimer()
local unit c=LoadUnitHandle(udg_Hash, GetHandleId(e),1)
local unit t=LoadUnitHandle(udg_Hash, GetHandleId(e),2)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", t, "overhead"))   
call UnitDamageTarget(c, t, ( ( I2R(GetUnitAbilityLevel(c, 'A000')) * 50.00 ) + 25.00 ), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )  
set с = null
set t = null    
set e = null
endfunction

function func1 takes nothing returns nothing
local unit c= GetSpellAbilityUnit()   
local unit t= GetSpellTargetUnit()   
local real x=GetUnitX(t)   
local real y=GetUnitY(t)   
local timer e
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", x,y))    
       set bj_forLoopAIndex = 1   
       set bj_forLoopAIndexEnd = 8   
       loop   
           exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd   
if GetUnitStateSwap(UNIT_STATE_LIFE, t) > 0 then  
set e = CreateTimer()
set c= LoadUnitHandle(udg_Hash, GetHandleId(e),1)
set t=LoadUnitHandle(udg_Hash, GetHandleId(e),2)
call TimerStart(e, 1, false, function func2)
           set bj_forLoopAIndex = bj_forLoopAIndex + 1   
set e = null
endif  
       endloop   
set c = null   
set t = null
endfunction

Создай переменную hash и при инициализации карты инициализируй хеш
Code
set udg_Hash=InitHashtable()

Ну вроде нечего не напутал.


 

DreiiДата: Воскресенье, 12 Декабря 2010, 17:01:30 | Сообщение # 19
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
[san9], сложно))Для простого мпелла пойдет и wait, но все равно огромное спасибо

 

[san9]Дата: Воскресенье, 12 Декабря 2010, 17:03:07 | Сообщение # 20
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Quote (Dreii)
Для простого мпелла пойдет и wait

Угу. И возможнве не выполнения дальнейших действий :)


 

EdiTTORRДата: Воскресенье, 12 Декабря 2010, 17:26:59 | Сообщение # 21
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Quote (|san9|)
Таймер.Но придётся юзать Hash

Вопрос на засыпку, как сделать это без хеша? Ну.. кто ответит?


Местами здесь.
 

[san9]Дата: Воскресенье, 12 Декабря 2010, 18:11:37 | Сообщение # 22
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Quote (EdiTTORR)
Вопрос на засыпку, как сделать это без хеша? Ну.. кто ответит?

Думаеш глобалки?


 

EdiTTORRДата: Воскресенье, 12 Декабря 2010, 18:26:35 | Сообщение # 23
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Quote (|san9|)
Думаеш глобалки?

Именно! Но вопрос - возможно-ли на глобалках это сделать.... Кто-нибудь знает?


Местами здесь.


Сообщение отредактировал EdiTTORR - Воскресенье, 12 Декабря 2010, 18:28:03
 

[san9]Дата: Воскресенье, 12 Декабря 2010, 18:29:24 | Сообщение # 24
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Quote (EdiTTORR)
Именно! Но вопрос - возможно-ли на глобалках это сделать.... Кто-нибудь знает?

:D
Массив офк. Но думаеш лучше?


 

EdiTTORRДата: Воскресенье, 12 Декабря 2010, 20:19:30 | Сообщение # 25
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Quote (|san9|)
Массив офк. Но думаеш лучше?

Нет, ну что массив то я знаю, но как сделать спелл с таймером и передавать юнита другой фкции при помощи только массивов?(если спелл могут применить более 40 юнитов на карте одновременно...)


Местами здесь.
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Вопрос, да да я нуб,про условие вопрсо
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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