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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Проблема в коде
Проблема в коде
Fallen-angelДата: Воскресенье, 26 Августа 2012, 22:17:43 | Сообщение # 1
3 уровень
Группа: Проверенные
Сообщений: 78
Награды: 0
Репутация: 30
Блокировки:
Только начал обучаться в джассе, поэтому незнаю как исправить код? Код не работает, сам не знаю почему. Заранее спасибо
P.S. Просьба не оптимизровать)

Code

function Trig_WR03_____________________u_Conditions takes nothing returns boolean
if ( not ( GetUnitTypeId(GetAttackedUnitBJ()) == 'H003' ) ) then
return false
endif
if ( not ( GetUnitAbilityLevelSwapped('A00O', GetAttackedUnitBJ()) >= 1 ) ) then
return false
endif
if ( not ( GetUnitLifePercent(GetAttackedUnitBJ()) <= 30.00 ) ) then
return false
endif
return true
endfunction

function hero hp takes nothing returns boolean
return ( GetUnitLifePercent(u) > 30.00 )
endfunction

function Trig_WR03_____________________u_Actions takes nothing returns nothing
local unit u = GetAttackedUnitBJ()
local integer lvl = GetUnitAbilityLevel(u,A00O)
local effect x = AddSpecialEffectTarget("head",u,"Abilities\\Spells\\Other\\Incinerate\\IncinerateBuff.mdl")
call UnitAddAbility(u,A00P)
call UnitAddAbility(u,A00Q)
call SetUnitAbilityLevel(u,A00P,lvl)
call SetUnitAbilityLevel(u,A00Q,lvl)
loop
exitwhen ( hero hp() )
call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
endloop
call UnitRemoveAbility(u,A00P)
call UnitRemoveAbility(u,A00Q)
call DestroyEffect( x )
set x = null
set u = null
set lvl = null
endfunction

//===========================================================================
function InitTrig_WR03_____________________u takes nothing returns nothing
set gg_trg_WR03_____________________u = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_WR03_____________________u, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddCondition( gg_trg_WR03_____________________u, Condition( function Trig_WR03_____________________u_Conditions ) )
call TriggerAddAction( gg_trg_WR03_____________________u, function Trig_WR03_____________________u_Actions )
endfunction



Сообщение отредактировал Fallen-angel - Воскресенье, 26 Августа 2012, 22:19:36
 

SmartarosДата: Понедельник, 27 Августа 2012, 00:40:16 | Сообщение # 2
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
сделай норм условия, убери BJ, вместо цикло юзай период таймер, и в теле таймера делай проверку твоей функции, думаю с хэшем ты знаком
 

kapa6acvlkДата: Понедельник, 27 Августа 2012, 00:49:49 | Сообщение # 3
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Quote (Fallen-angel)
незнаю как исправить код?

это что такое??
Code
function hero hp takes nothing returns boolean
     return ( GetUnitLifePercent(u) > 30.00 )
endfunction

переменная u не объявлена, да и зачем так делать пиши условие непосредственно в цикле.

Code
    loop
         exitwhen ( GetUnitLifePercent(u) > 30.00 )
         call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
     endloop

Не используй TriggerSleepAction в циклах, твоя функция может дропнуться.

Code
set lvl = null

integer не требует обнуления, да и null ты ему не присвоишь по идее, а если присвоишь, то это все равно 0 читай об утечках.

Ну и как тебе сказал Smartaros, убери BJ.



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

SmartarosДата: Понедельник, 27 Августа 2012, 01:11:44 | Сообщение # 4
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
Code
function Trig_WR03_____________________u_Conditions takes nothing returns boolean  
     return GetUnitTypeId(GetTriggerUnit()) == 'H003' and GetUnitAbilityLevel(GetTriggerUnit(),'A00O') >= 1 and GetUnitLifePercent(GetTriggerUnit()) <= 30.00
endfunction  

function_Timer takes nothing returns nothing
     local timer t = GetExpiriedTimer()
     local integer id = GetHandleId(t)
     local unit u = LoadUnitHandle(udg_hash, id, 0)
     if GetUnitLifePercent(u) > 30.00 then
          call UnitRemoveAbility(u,A00P)  
          call UnitRemoveAbility(u,A00Q)  
          call DestroyEffect(LoadEffectHandle(udg_hash, id, 1))  
         call DestroyTimer(t)
         call FlushChildHastable(udg_hash, id)
     endif
     set u = null
     set t = null
endfunction  

function Trig_WR03_____________________u_Actions takes nothing returns nothing  
local unit u = GetTriggerUnit()  
local integer lvl = GetUnitAbilityLevel(u,A00O)  
local effect x = AddSpecialEffectTarget("head",u,"Abilities\\Spells\\Other\\Incinerate\\IncinerateBuff.mdl")  
local timer t = CreateTimer()
local integer id = GetHandleId(t)
call UnitAddAbility(u,A00P)  
call UnitAddAbility(u,A00Q)  
call SetUnitAbilityLevel(u,A00P,lvl)  
call SetUnitAbilityLevel(u,A00Q,lvl)  
call SaveAgentHandle(udg_hash, id, 0, u)
call SaveEffectHandle(udg_hash, id, 1, x)  
call TimerStart(t, 1, true, function_Timer )
set x = null  
set u = null  
set t = null
endfunction  

//===========================================================================  
function InitTrig_WR03_____________________u takes nothing returns nothing  
set gg_trg_WR03_____________________u = CreateTrigger( )  
call TriggerRegisterAnyUnitEventBJ( gg_trg_WR03_____________________u, EVENT_PLAYER_UNIT_ATTACKED )  
call TriggerAddCondition( gg_trg_WR03_____________________u, Condition( function Trig_WR03_____________________u_Conditions ) )  
call TriggerAddAction( gg_trg_WR03_____________________u, function Trig_WR03_____________________u_Actions )  
endfunction


писал с телефона, могу ошибаться
 

kapa6acvlkДата: Понедельник, 27 Августа 2012, 01:13:43 | Сообщение # 5
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Smartaros,
Quote (Fallen-angel)
P.S. Просьба не оптимизровать)

Автор просил не исправлять, убери код, пускай сам учится. ;)



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

SmartarosДата: Понедельник, 27 Августа 2012, 01:16:05 | Сообщение # 6
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
kapa6acvlk, да норм, я в джасс врубился после того как твой код изучил, про урон
 

Fallen-angelДата: Понедельник, 27 Августа 2012, 01:30:56 | Сообщение # 7
3 уровень
Группа: Проверенные
Сообщений: 78
Награды: 0
Репутация: 30
Блокировки:
Smartaros, kapa6acvlk, огромное спасибо вам :) . Тему можно закрыть
 

SmartarosДата: Понедельник, 27 Августа 2012, 01:37:52 | Сообщение # 8
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
пользуйся jngp, там есть список функций, у меня некоторые с ошибкой, исправлять лень
 

Fallen-angelДата: Понедельник, 27 Августа 2012, 02:06:40 | Сообщение # 9
3 уровень
Группа: Проверенные
Сообщений: 78
Награды: 0
Репутация: 30
Блокировки:
Smartaros, я их уже увидел) GetExpiriedTimer() не так, а GetExpiredTimer()
 

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

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

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