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

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

Ответ
 
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
После применения
Можно какнибудь в этом коде,не юзать хэш?А точнее делать действия после того как юнит закончил каст абилки?

Код:
globals
hashtable Hash=InitHashtable()
endglobals
function Trig_Random_Timer takes nothing returns nothing
local timer ta = GetExpiredTimer() 
local integer ID = GetHandleId(ta) 
local unit t = LoadUnitHandle(Hash, ID, 0)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\Starfall\\StarfallTarget.mdl", t, "orign"))
call UnitDamageTarget(LoadUnitHandle(Hash, ID, 1), t, 100, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS)
call PauseTimer(ta)
call DestroyTimer(ta) 
call FlushChildHashtable(Hash, ID)
set t=null
set ta=null
endfunction
function Trig_Random_Actions takes nothing returns nothing
    local timer ta
    local integer ID
    local group g
    local integer i=1
    local unit array u
    local unit c=GetSpellAbilityUnit()
    local player p=GetOwningPlayer(c)
    if  GetSpellAbilityId() == 'AEsf'  then
    set ta=CreateTimer()
    set ID=GetHandleId(ta) 
    set g=CreateGroup()
    call GroupEnumUnitsInRange(g,GetUnitX(c),GetUnitY(c),450.,null)
    loop
        set u[1]=FirstOfGroup(g)
        exitwhen u[1]==null
        call GroupRemoveUnit(g,u[1])
        if IsUnitEnemy(u[1],p) then
        if GetRandomInt(1,i)==1 then
            set u[0]=u[1]
        endif
        set i=i+1
        endif
    endloop
    call DestroyGroup(g)
    set g=null
    call SaveUnitHandle(Hash, ID, 0, u[0])
    call SaveUnitHandle(Hash, ID, 1, c) 
    call TimerStart(ta, 3., false, function Trig_Random_Timer)
    set ta = null
    set u[0]=null
    endif
    set c=null
    set p=null
endfunction
//===========================================================================
function InitTrig_Random takes nothing returns nothing
local integer index=0
local trigger trig = CreateTrigger()
    loop
        call TriggerRegisterPlayerUnitEvent(trig, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddAction( trig, function Trig_Random_Actions )
    set trig=null
endfunction

Отредактировано Dreii, 02.01.2011 в 00:39.
Старый 01.01.2011, 23:21
Doc

offline
Опыт: 63,163
Активность:
Dreii, структуры?
Старый 01.01.2011, 23:31
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Цитата:
Сообщение от Doc
структуры?

Что?)
Старый 01.01.2011, 23:45
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Doc, зря спросил, щас нагрузишь беднягу =)
Dreii, а сопсно чем тебе хеш не угодил?
Раз ты даже не слышал что такое структура, как вариант можно использовать очередь и массив.
Если надо напишу подробно что это.
Старый 02.01.2011, 00:11
_Red

offline
Опыт: 4,095
Активность:
Dreii, а что не так? не работает? ты узнаешь хэндл таймера до того как его создал... epicfail
Старый 02.01.2011, 00:12
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
_Red, работает все,насчет хэндла он нормально стоит))Просто тут другой код немножко.Я хочу чтобы действия сделались как юнит закончил каст
Старый 02.01.2011, 00:26
DioD

offline
Опыт: 45,184
Активность:
хеш таблицу создать надо наверное?
Старый 02.01.2011, 00:27
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Цитата:
Сообщение от DioD
хеш таблицу

Зачем?
Старый 02.01.2011, 00:39
DioD

offline
Опыт: 45,184
Активность:
действительно зачем её создавать? зачем тогда подправил глобалку, если создавать её не надо...
Старый 02.01.2011, 00:52
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
DioD, я не правил глобалку...
Старый 02.01.2011, 01:14
DioD

offline
Опыт: 45,184
Активность:
>Можно какнибудь в этом коде,не юзать хэш?
почему, зачем, с какой целью?
Старый 02.01.2011, 01:25
ScorpioT1000
Работаем
offline
Опыт: отключен
создай массивы как стек для того, что ты пишешь в хеш и заюзай timer exploit
Старый 02.01.2011, 06:40
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
ScorpioT1000, уу)Оставлю как есть
Старый 02.01.2011, 10:29
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Dreii:
Я хочу чтобы действия сделались как юнит закончил каст
Может быть не:
  сall TriggerRegisterPlayerUnitEvent(trig, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
а:
  call TriggerRegisterPlayerUnitEvent(trig, Player(index), EVENT_PLAYER_UNIT_SPELL_FINISH, null)
Старый 02.01.2011, 14:35
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Icy, пробывал все равно так
Старый 02.01.2011, 14:44
Doc

offline
Опыт: 63,163
Активность:
Dreii, парень, дай карту, я до сих пор не понял чего именно ты хочешь.
Старый 02.01.2011, 15:49
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Dreii, значит плохо пробовал, только что попробовал звездопад с событием завершения каста, всё работает
Старый 02.01.2011, 16:04
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Вот
Прикрепленные файлы
Тип файла: w3x Mirana.w3x (18.0 Кбайт, 13 просмотров )
Старый 02.01.2011, 17:55
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Кароче, как понял так и поправил код!
» Вот держи:
globals
  hashtable Hash = InitHashtable()
endglobals

function Trig_Random_Timer takes nothing returns nothing
// Тута всё гуд!
  local timer ta = GetExpiredTimer() 
  local integer ID = GetHandleId(ta) 
  local unit t = LoadUnitHandle(Hash, ID, 0)

  call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\Starfall\\StarfallTarget.mdl​", t, "overhead"))
  call UnitDamageTarget(LoadUnitHandle(Hash, ID, 1), t, 100., true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS)
  call PauseTimer(ta)
  call DestroyTimer(ta) 
  call FlushChildHashtable(Hash, ID)

  set t = null
  set ta = null
endfunction

function Trig_Random_Actions takes nothing returns nothing
  local timer ta
  local integer ID
  local group g
  local integer i
  // Чёта я непонел чё это? оО И зачем это?
  //local unit array u
  local unit pu
  local unit su
  local unit c
  local player p

  if (GetSpellAbilityId() == 'AEsf')  then
    set i = 1
    set c = GetSpellAbilityUnit()
    set g = CreateGroup()
    set p = GetOwningPlayer(c)
    set su = null
    call GroupEnumUnitsInRange(g, GetUnitX(c), GetUnitY(c), 450., null)

    loop
      // Аа паходу понял, говнооптимизация кода - ф топку(ни выйгрыша в скорости, ни выйгриша в читабельности), даешь нормальные переменные
      //set u[1]=FirstOfGroup(g)
      set pu = FirstOfGroup(g)
      exitwhen (pu == null)
      //call GroupRemoveUnit(g,u[1])
      call GroupRemoveUnit(g, pu)

      //if (IsUnitEnemy(u[1], p)) then
      if (IsUnitEnemy(pu, p)) then

      // Ыы... фтыкал пять минут чё за хрень, так и непонял
        if (GetRandomInt(1, i) == 1) then
          //set u[0] = u[1]
          set su = pu
        endif

        set i = i + 1
      endif

    endloop

    call DestroyGroup(g)
    set g = null

    // Проверим, нашли мы зайца или нет, если да, то бьём в морду!
    if (su != null) then
      set ta = CreateTimer()
      set ID = GetHandleId(ta)
      call SaveUnitHandle(Hash, ID, 0, su)
      call SaveUnitHandle(Hash, ID, 1, c) 
      call TimerStart(ta, 3., false, function Trig_Random_Timer)
      set ta = null
    else
      // типа оптимизация, смысл обнулять переменную, если она и так пуста
      set su = null
    endif

    //set u[0] = null
    set pu = null
    set c = null
    set p = null
  endif

endfunction

//===========================================================================
function InitTrig_Random takes nothing returns nothing
  local integer index = 0
  local trigger trig = CreateTrigger()

  loop
    call TriggerRegisterPlayerUnitEvent(trig, Player(index), EVENT_PLAYER_UNIT_SPELL_FINISH, null)
    set index = index + 1
    exitwhen index == bj_MAX_PLAYER_SLOTS
  endloop

  call TriggerAddAction( trig, function Trig_Random_Actions )
  set trig=null
endfunction

Вот карта:
Прикрепленные файлы
Тип файла: w3x Mirana.w3x (19.9 Кбайт, 12 просмотров )
Старый 03.01.2011, 00:49
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
ScorpioT1000, есть ли ещё что-то подобное в джассе?
Старый 03.01.2011, 01:14
Ответ

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

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

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

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



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