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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Ошибка в коде
[Вопрос] Ошибка в коде
SmartarosДата: Суббота, 18 Августа 2012, 17:42:19 | Сообщение # 1
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
Code
constant function Trig_Rjawchina_Ability takes nothing returns integer
     return 'A04F'
endfunction

constant function Trig_Rjawchina_Dummy takes nothing returns integer
     return 'n02J'
endfunction

constant function Trig_Rjawchina_Effect takes nothing returns string
     return "Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl"
endfunction

constant function Trig_Rjawchina_Dummy_Abilities takes integer lvl returns integer
     local integer i  
     if lvl == 1 then
         set i = 'A049'
     endif
     if lvl == 2 then
         set i = 'A04D'
     endif
     if lvl == 3 then
         set i = 'A04E'
     endif
     if lvl == 4 then
         set i = 'A04f'
     endif
     if lvl == 5 then
         set i = 'A04G'
     endif
     if lvl == 6 then
         set i = 'A04H'
     endif
     return i
endfunction

constant function Trig_Rjawchina_Period takes nothing returns real
     return 1.
endfunction

constant function Trig_Rjawchina_Time takes nothing returns integer
     return 1
endfunction

constant function Trig_Rjawchina_AOE takes integer lvl returns real
     return 100. + 20. * lvl
endfunction

function Trig_Rjawchina_Conditions takes nothing returns boolean
     return GetSpellAbilityId() == Trig_Rjawchina_Ability()
endfunction

function Trig_Rjawchina_Timer takes nothing returns nothing
     local timer t = GetExpiredTimer()
     local integer id = GetHandleId(t)
     local unit u = LoadUnitHandle(udg_Hash, id, 0)
     local group g = LoadGroupHandle(udg_Hash, id, 1)
     local integer i = LoadInteger(udg_Hash, id, 2) + Trig_Rjawchina_Time()
     local unit d = null
     local unit b = null
     if i > 6 then
         call DestroyGroup(g)
         call DestroyTimer(t)  
         call FlushChildHashtable(udg_Hash, id)  
     else
         loop
         b = FirstOfGroup(g)
         exitwhen(b == null)
         if IsUnitEnemy(b, GetOwningPlayer(u)) == true and not IsUnitType(b, UNIT_TYPE_MAGIC_IMMUNE) == true and GetWidgetLife(b) > 0.405 and not IsUnitType(b, UNIT_TYPE_STRUCTURE) == true then
             set d = CreateUnit(GetOwningPlayer(u), Trig_Rjawchina_Dummy(), GetWidgetX(b), GetWidgetY(b), 0)
             call UnitAddAbility(d, Trig_Rjawchina_Dummy_Abilities(GetUnitAbilityLevel(u, Trig_Rjawchina_Ability())))
             call SetUnitAbilityLevel(d, Trig_Rjawchina_Dummy_Abilities(GetUnitAbilityLevel(u, Trig_Rjawchina_Ability())), i)
             call IssueTargetOrder(d, "cripple", b)
             call UnitApplyTimedLife(d, 'BTLF', 1.00)  
             call DestroyEffect(AddSpecialEffectTarget(Trig_Rjawchina_Effect(), b, "chest"))
         endif
         call GroupRemoveUnit(g, b)
         endloop
         call DestroyGroup(g)
     endif
     call SaveInteger(udg_Hash, id, 2, i)
     set t = null
     set u = null
     set g = null
     set d = null
     set b = null
endfunction

function Trig_Rjawchina_Actions takes nothing returns nothing
     local unit u = GetTriggerUnit()
     local location l = GetSpellTargetLoc()
     local real x = GetLocationX(l)
     local real y = GetLocationY(l)
     local unit d = null
     local timer t = CreateTimer()
     local integer id = GetHandleId(t)
     local group g = CreateGroup()
     local group gr = CreateGroup()
     local unit b = null
     call RemoveLocation(l)
     call GroupEnumUnitsInRange(g, x, y, Trig_Rjawchina_AOE(GetUnitAbilityLevel(u,Trig_Rjawchina_Ability())), null)
     loop
         b = FirstOfGroup(g)
         exitwhen(b == null)
         if IsUnitEnemy(b, GetOwningPlayer(u)) == true and not IsUnitType(b, UNIT_TYPE_MAGIC_IMMUNE) == true and GetWidgetLife(b) > 0.405 and not IsUnitType(b, UNIT_TYPE_STRUCTURE) == true then
             set d = CreateUnit(GetOwningPlayer(u), Trig_Rjawchina_Dummy(), x, y, 0)
             call UnitAddAbility(d, Trig_Rjawchina_Dummy_Abilities(GetUnitAbilityLevel(u,Trig_Rjawchina_Ability())))
             call IssueTargetOrder(d, "cripple", b)
             call UnitApplyTimedLife(d, 'BTLF', 1.00)  
             call DestroyEffect(AddSpecialEffectTarget(Trig_Rjawchina_Effect(), b, "chest"))
             call GroupAddUnit(gr, b)
         endif
         call GroupRemoveUnit(g, b)       
         endloop
         call DestroyGroup(g)
     call SaveAgentHandle(udg_Hash, id, 0, u)
     call SaveGroupHandle(udg_Hash, id, 1, gr)
     call SaveInteger(udg_Hash, id, 2, Trig_Rjawchina_Time())
     call TimerStart(t, Trig_Rjawchina_Period(), true, function Trig_Rjawchina_Timer)
     set u = null
     set l = null
     set d = null
     set t = null
     set g = null
     set gr = null
     set b = null
endfunction

//===========================================================================
function InitTrig_Rjawchina takes nothing returns nothing
     local unit u = CreateUnit(Player(0), 'n02G', 0, 0, 0)
     call UnitAddAbility(u, 'A049')
     call SetUnitAbilityLevel(u, 'A049', 6)
     call UnitAddAbility(u, 'A04D')
     call SetUnitAbilityLevel(u, 'A04D', 6)
     call UnitAddAbility(u, 'A04E')
     call SetUnitAbilityLevel(u, 'A04E', 6)
     call UnitAddAbility(u, 'A04F')
     call SetUnitAbilityLevel(u, 'A04F', 6)
     call UnitAddAbility(u, 'A04G')
     call SetUnitAbilityLevel(u, 'A04G', 6)
     call UnitAddAbility(u, 'A04H')
     call SetUnitAbilityLevel(u, 'A04H', 6)
     call KillUnit(u)
     set gg_trg_Rjawchina = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_Rjawchina, EVENT_PLAYER_UNIT_SPELL_EFFECT )
     call TriggerAddCondition( gg_trg_Rjawchina, Condition( function Trig_Rjawchina_Conditions ) )
     call TriggerAddAction( gg_trg_Rjawchina, function Trig_Rjawchina_Actions )
     call Preload("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl")
     call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl", 0, 0))
     set u = null
endfunction


Проблемы в том, что даммики не юзают способности, а эффекты накладываются два раза, вместо шести
 

dkfl10011Дата: Суббота, 18 Августа 2012, 18:45:41 | Сообщение # 2
1 уровень
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 4
Блокировки:
function InitTrig_Rjawchina takes nothing returns nothing
local unit u = CreateUnit(Player(0), 'n02G', 0, 0, 0)
call UnitAddAbility(u, 'A049')
call SetUnitAbilityLevel(u, 'A049', 6)
call UnitAddAbility(u, 'A04D')
call SetUnitAbilityLevel(u, 'A04D', 6)
call UnitAddAbility(u, 'A04E')
call SetUnitAbilityLevel(u, 'A04E', 6)
call UnitAddAbility(u, 'A04F')
call SetUnitAbilityLevel(u, 'A04F', 6)
call UnitAddAbility(u, 'A04G')
call SetUnitAbilityLevel(u, 'A04G', 6)
call UnitAddAbility(u, 'A04H')
call SetUnitAbilityLevel(u, 'A04H', 6)
call KillUnit(u)
set gg_trg_Rjawchina = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Rjawchina, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Rjawchina, Condition( function Trig_Rjawchina_Conditions ) )
call TriggerAddAction( gg_trg_Rjawchina, function Trig_Rjawchina_Actions )
call Preload("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl")
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl", 0, 0))
set u = null
endfunction

С кокого у тебя действия в инициализации триггера? :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D

Добавлено (18 Августа 2012, 18:41:23)
---------------------------------------------
А главное ЗАЧЕМ тебе столько ретурнов если ты в них нечего не вычисляешь??? :D :D :D :D :D :D :D :D

Добавлено (18 Августа 2012, 18:45:41)
---------------------------------------------
Чтобы сделать несколько действий с 1 функцией сделай многократный таймер т.е поставь в аргументе "тру" вместо "фальши"

Quote (Smartaros)
эффекты накладываются два раза, вместо шести
 

SmartarosДата: Суббота, 18 Августа 2012, 19:07:59 | Сообщение # 3
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
Действия в инициализации триггера подгружают данные, и когда спелл будет использоваться впервые то небольшого лага не будет.

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

Таймер периодический, я не знаю куда ты смотришь.

Вывод: ты ярковыраженное нубло, которое мало что понимает из моего кода, отписался и просто засрал сам себя.
 

tRu^SДата: Суббота, 18 Августа 2012, 19:38:00 | Сообщение # 4
8 уровень
Группа: Проверенные
Сообщений: 614
Награды: 0
Репутация: 138
Блокировки:
Smartaros, бред, ты где его скопировал

 

kapa6acvlkДата: Суббота, 18 Августа 2012, 20:01:08 | Сообщение # 5
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Smartaros, Зачем тебе точка, юзай GetSpellTargetX() GetSpellTargetY(). Не знаю, но это развер работает: ты сохраняешь call SaveAgentHandle(udg_Hash, id, 0, u) ты выгружаешь LoadUnitHandle(udg_Hash, id, 0)
эффекты накладываются 2 раза т.к. ты после истечения таймера уберешь из группы всех юнитов, а группу задестроишь, естественно на вторую сработку в группе пусто.



Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич


Сообщение отредактировал kapa6acvlk - Суббота, 18 Августа 2012, 20:01:31
 

SmartarosДата: Суббота, 18 Августа 2012, 20:25:21 | Сообщение # 6
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
я же группу сохраняю в хэш, и потом загружаю

Добавлено (18 Августа 2012, 20:25:21)
---------------------------------------------
я смотрел список функций и не нашел SpelTargetX

 

SirNikolasДата: Суббота, 18 Августа 2012, 20:34:10 | Сообщение # 7
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Smartaros)
Code
constant function Trig_Rjawchina_Dummy_Abilities takes integer lvl returns integer
    local integer i
    if lvl == 1 then
        set i = 'A049'
    endif
    if lvl == 2 then
        set i = 'A04D'
    endif
    if lvl == 3 then
        set i = 'A04E'
    endif
    if lvl == 4 then
        set i = 'A04f'
    endif
    if lvl == 5 then
        set i = 'A04G'
    endif
    if lvl == 6 then
        set i = 'A04H'
    endif  
    return i
endfunction
Code
constant function Trig_Rjawchina_Dummy_Abilities takes integer lvl returns integer
    if lvl <= 3 then
        if lvl == 1 then
            return 'A049'
        elseif lvl == 2 then
            return 'A04D'
        endif
        return 'A04E'
    elseif lvl == 4 then
        return 'A04F'
    elseif lvl == 5 then
        return 'A04G'
    endif
    return 'A04H'
endfunction
Quote (Smartaros)
call UnitAddAbility(u, 'A049')
call SetUnitAbilityLevel(u, 'A049', 6)
call UnitAddAbility(u, 'A04D')
call SetUnitAbilityLevel(u, 'A04D', 6)
call UnitAddAbility(u, 'A04E')
call SetUnitAbilityLevel(u, 'A04E', 6)
call UnitAddAbility(u, 'A04F')
call SetUnitAbilityLevel(u, 'A04F', 6)
call UnitAddAbility(u, 'A04G')
call SetUnitAbilityLevel(u, 'A04G', 6)
call UnitAddAbility(u, 'A04H')
call SetUnitAbilityLevel(u, 'A04H', 6)
call KillUnit(u)
//...
call Preload("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl")
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl", 0, 0))
call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(1))
call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(2))
call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(3))
call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(4))
call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(5))
call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(6))
call RemoveUnit(u)
//...
call Preload(Trig_Rjawchina_Effect())

Еще непонятно, зачем в периодике каждый раз производится проверка на врага и на здание. Разве у цели могут измениться эти характеристики?
Как уже сказали, проблема в том, что при первом истечении таймера группа очищается. Здесь лучше использовать ForGroup с занесением уровня способности в глобальную переменную.

Добавлено (18 Августа 2012, 20:34:10)
---------------------------------------------

Quote (Smartaros)
я смотрел список функций и не нашел SpelTargetX
GetSpellTargetX. Она есть. Добавлена с патчем 1.24 вместе с хэшем.


 

Ty3uKДата: Суббота, 18 Августа 2012, 20:35:07 | Сообщение # 8
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
объясните мне, нубу, зачем делать функцию константой?
каким раком она может измениться?


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

SmartarosДата: Суббота, 18 Августа 2012, 21:04:08 | Сообщение # 9
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
только чтобы визуально разница была, мне так удобнее

Добавлено (18 Августа 2012, 21:04:08)
---------------------------------------------
Собственно я другого не ожидал
Я так понял если создать группу, забить в нее юнитов и сохранить ее, то после загрузки и последущего очищения если снова загрузить то она будет пустой, я этого не знал.
Еще я задал вопрос почему даммики не юзали абилу, мне не ответили, единственное это просто подправили код, что не решает суть проблемы, и я не просил делать код другим, мне удобнее так как я пишу, он от этого не перестанет работает, не работает только то, что вы не попытались изменить, то о чем я просил.

 

lawsonДата: Воскресенье, 19 Августа 2012, 03:04:39 | Сообщение # 10
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Ty3uK)
объясните мне, нубу, зачем делать функцию константой?

В том то и дело что ты жалкий нуб, и тебе не понять!


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

Ty3uKДата: Воскресенье, 19 Августа 2012, 12:53:55 | Сообщение # 11
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
:(

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

SmartarosДата: Воскресенье, 19 Августа 2012, 15:08:48 | Сообщение # 12
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
ну смысл ты тут флудишь? раз ты такой молодец то реши проблему
 

Ty3uKДата: Воскресенье, 19 Августа 2012, 15:14:13 | Сообщение # 13
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
я?

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

kapa6acvlkДата: Воскресенье, 19 Августа 2012, 15:33:15 | Сообщение # 14
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Smartaros, Сделай наработку с этим кодом, тогда его посмотрят, а так создавать новую карту, совать туда код, настраивать его, слишком много лишних действий (всем лень :D ). Тебе проще скопипастить его в новую мапу.


Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич
 

SmartarosДата: Воскресенье, 19 Августа 2012, 16:10:19 | Сообщение # 15
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
там просто равкоды поменять и все

Добавлено (19 Августа 2012, 16:10:19)
---------------------------------------------
там просто равкоды поменять и все

 

HexingДата: Воскресенье, 19 Августа 2012, 19:23:24 | Сообщение # 16
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (Smartaros)
Проблемы в том, что даммики не юзают способности, а эффекты накладываются два раза, вместо шес

1. ид способности != 'cripple'
2. даммики не успевают кастовать из-за времени подготовки спелла >= 1.0

на счёт эффектов - а ты что хотел, они в одном месте и просто совпадают по координатам отрисовки, создавай со смещением во времени и будет заметно


 

SmartarosДата: Воскресенье, 19 Августа 2012, 20:56:19 | Сообщение # 17
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
у даммиков длительность каста 0, а эффекты я уже разобрался

Добавлено (19 Августа 2012, 20:56:19)
---------------------------------------------
у меня раньше все было аналогично на гуи, все работало

 

Ty3uKДата: Воскресенье, 19 Августа 2012, 21:26:11 | Сообщение # 18
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
длительность на .01

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

SmartarosДата: Воскресенье, 19 Августа 2012, 21:41:31 | Сообщение # 19
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
кстати 0,1.......я заметил что если заставлять юзать даммиков некоторые скиллы в цикле, то если длительность 0 они не юзают, но на гуи они все юзали
 

SirNikolasДата: Понедельник, 20 Августа 2012, 06:26:24 | Сообщение # 20
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Боже мой, ну даммики не кастуют из-за того, что группа очищается. Им не на кого кастовать!

Добавлено (20 Августа 2012, 06:26:24)
---------------------------------------------

Quote (Ty3uK)
объясните мне, нубу, зачем делать функцию константой?
Есть предположение (нужно проверить), что константная функция не может обращаться к глобальным переменным и другим функциям (даже нативным).


 

SmartarosДата: Понедельник, 20 Августа 2012, 12:14:05 | Сообщение # 21
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
они должны кастовать, они сначала при исп. спелла кастую, когда есть на кого кастовать
 

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

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