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

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

Закрытая тема
 
and_y87
Тру Кодер
offline
Опыт: 21,030
Активность:
Ругаются... а почему непойму помогите плиз =)
Ругаются... а почему непойму помогите плиз =)

» Тут код

Код:
function Trig_Cast_spell_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'AHtc' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Cast_spell_Func002Func001C takes nothing returns boolean
    if ( not ( UnitItemInSlotBJ(GetSpellAbilityUnit(), GetForLoopIndexA()) != null ) ) then
        return false
    endif
    if ( not ( GetItemLevel(UnitItemInSlotBJ(GetSpellAbilityUnit(), GetForLoopIndexA())) == 5 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Cast_spell_Func003C takes nothing returns boolean
    if ( not ( 'i' >= 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Cast_spell_Actions takes nothing returns nothing
    set i = 0
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 6
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if ( Trig_Cast_spell_Func002Func001C() ) then
            set i = ( i + 1 )
        else
            call DoNothing(  )
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    if ( Trig_Cast_spell_Func003C() ) then
        call DoNothing(  )
    else
        call IssueImmediateOrderBJ( GetSpellAbilityUnit(), "stop" )
    endif
endfunction

//===========================================================================
function InitTrig_Cast_spell takes nothing returns nothing
    set gg_trg_Cast_spell = CreateTrigger(  )
    local integer i = 0
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Cast_spell, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Cast_spell, Condition( function Trig_Cast_spell_Conditions ) )
    call TriggerAddAction( gg_trg_Cast_spell, function Trig_Cast_spell_Actions )
endfunction

Старый 11.06.2008, 15:12
dk

offline
Опыт: 60,293
Активность:
Цитата:
function InitTrig_Cast_spell takes nothing returns nothing
set gg_trg_Cast_spell = CreateTrigger( )
local integer i = 0
call TriggerRegisterAnyUnitEventBJ( gg_trg_Cast_spell, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_Cast_spell, Condition( function Trig_Cast_spell_Conditions ) )
call TriggerAddAction( gg_trg_Cast_spell, function Trig_Cast_spell_Actions )
endfunction

Сначала объяви локальную переменную, потом все остальные действия...
Цитата:
function Trig_Cast_spell_Actions takes nothing returns nothing
set i = 0

Переменная i не объявлена...
Старый 11.06.2008, 15:23
and_y87
Тру Кодер
offline
Опыт: 21,030
Активность:
Такс.. с первым я разобрался...
вот со вторым ненаю что делать
» сам код

**********************************************
//*
//* Global Variables
//*
//***************************************************************************

globals
// Generated
trigger gg_trg_Cast_spell = null
endglobals

function InitGlobals takes nothing returns nothing
endfunction

//===========================================================================
function InitTrig_Cast_spell takes nothing returns nothing
local integer i = 0
set gg_trg_Cast_spell = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Cast_spell, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_Cast_spell, Condition( function Trig_Cast_spell_Conditions ) )
call TriggerAddAction( gg_trg_Cast_spell, function Trig_Cast_spell_Actions )
endfunction
//===========================================================================

function Trig_Cast_spell_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'AHtc' ) ) then
return false
endif
return true
endfunction

function Trig_Cast_spell_Func002Func001C takes nothing returns boolean
if ( not ( UnitItemInSlotBJ(GetSpellAbilityUnit(), GetForLoopIndexA()) != null ) ) then
return false
endif
if ( not ( GetItemLevel(UnitItemInSlotBJ(GetSpellAbilityUnit(), GetForLoopIndexA())) == 5 ) ) then
return false
endif
return true
endfunction

function Trig_Cast_spell_Func003C takes nothing returns boolean
local integer i
if ( not ( 'i' >= 1 ) ) then
return false
endif
return true
endfunction

function Trig_Cast_spell_Actions takes nothing returns nothing
local integer i
set i = 0
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 6
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
if ( Trig_Cast_spell_Func002Func001C() ) then
set i = ( i + 1 )
else
call DoNothing( )
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
if ( Trig_Cast_spell_Func003C() ) then
call DoNothing( )
else
call IssueImmediateOrderBJ( GetSpellAbilityUnit(), "stop" )
endif
endfunction

» тут 2 ошибки

call TriggerAddCondition( gg_trg_Cast_spell, Condition( function Trig_Cast_spell_Conditions ) )
call TriggerAddAction( gg_trg_Cast_spell, function Trig_Cast_spell_Actions )

Ошибка: Отсутствует название ункции
Старый 11.06.2008, 15:59
S

offline
Опыт: 43,833
Активность:
Цитата:
call TriggerAddCondition( gg_trg_Cast_spell, Condition( function Trig_Cast_spell_Conditions ) )
call TriggerAddAction( gg_trg_Cast_spell, function Trig_Cast_spell_Actions )

1) возможно, отсутствие функций Trig_Cast_spell_Conditions; Trig_Cast_spell_Actions
2) сначала должны идти условия, потом действия, потом события - вызвать функцию, которая стоит ниже функции из которой идет вызов функции невозможно.

Отредактировано Sasha, 11.06.2008 в 16:25.
Старый 11.06.2008, 16:09
dk

offline
Опыт: 60,293
Активность:
Потому что сначала надо зарегистрировать функцию, а потом уже добавлять ее как условие или действие триггера...
Цитата:
//===========================================================================
function InitTrig_Cast_spell takes nothing returns nothing
local integer i = 0
set gg_trg_Cast_spell = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Cast_spell, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_Cast_spell, Condition( function Trig_Cast_spell_Conditions ) )
call TriggerAddAction( gg_trg_Cast_spell, function Trig_Cast_spell_Actions )
endfunction
//===========================================================================

В самый низ это опусти...
Старый 11.06.2008, 16:10
and_y87
Тру Кодер
offline
Опыт: 21,030
Активность:
Dead_knight,Sasha, thx

MEXAHuK добавил:
Сделал, но почемуто не пашет так как нада...
хотя ошипки не выводит...=(((

MEXAHuK добавил:
» KOD

function Trig_Cast_spell_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'AHtc' ) ) then
return false
endif
return true
endfunction

function Trig_Cast_spell_Func002Func001C takes nothing returns boolean
if ( not ( UnitItemInSlotBJ(GetSpellAbilityUnit(), GetForLoopIndexA()) != null ) ) then
return false
endif
if ( not ( GetItemLevel(UnitItemInSlotBJ(GetSpellAbilityUnit(), GetForLoopIndexA())) == 5 ) ) then
return false
endif
return true
endfunction

function Trig_Cast_spell_Func003C takes nothing returns boolean
local integer i
if ( not ( 'i' >= 1 ) ) then
return false
endif
return true
endfunction

function Trig_Cast_spell_Actions takes nothing returns nothing
local integer i
set i = 0
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 6
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
if ( Trig_Cast_spell_Func002Func001C() ) then
set i = ( i + 1 )
else
call DoNothing( )
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
if ( Trig_Cast_spell_Func003C() ) then
call DoNothing( )
else
call IssueImmediateOrderBJ( GetSpellAbilityUnit(), "stop" )
endif
endfunction

//===========================================================================
function InitTrig_Cast_spell takes nothing returns nothing
local integer i = 0
set gg_trg_Cast_spell = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Cast_spell, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_Cast_spell, Condition( function Trig_Cast_spell_Conditions ) )
call TriggerAddAction( gg_trg_Cast_spell, function Trig_Cast_spell_Actions )
endfunction
//===========================================================================
Старый 11.06.2008, 17:00
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
MEXAHuK, имхо, лучше бы было поместить сюда gui вариант, чем показывать gui2jass код, или хотя бы объяснить, что должен делать спелл.

Я так понимаю, что спелл должен работать только в том случае, если у кастера есть хотя бы один предмет 5 уровня. Вот примерный код:
» Cast spell
Код:
function Cast_spell_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'AHtc'
endfunction

function Cast_spell_Actions takes nothing returns nothing
    local unit    u = GetSpellAbilityUnit()
    local item    m = null
    local integer i = 0
    local integer k = 0
    loop
        exitwhen i > 5 or k > 1
        set m = UnitItemInSlot(u, i)
        if m != null then
            if GetItemLevel(m) == 5 then
                set k = k + 1
            endif
        endif
        set i = i + 1
    endloop
    if k < 1 then
        call IssueImmediateOrder(u, "stop")
    endif
    set u = null
    set m = null
endfunction

//===========================================================================
function InitTrig_Cast_spell takes nothing returns nothing
    local trigger tr = CreateTrigger()
    call TriggerAddAction(tr, function Cast_spell_Actions)
    call TriggerAddCondition(tr, Condition(function Cast_spell_Conditions))
    call TriggerRegisterAnyUnitEventBJ(tr, EVENT_PLAYER_UNIT_SPELL_CAST)
    set tr = null
endfunction

Отредактировано ShadoW DaemoN, 12.06.2008 в 09:34.
Старый 11.06.2008, 18:26
and_y87
Тру Кодер
offline
Опыт: 21,030
Активность:
ShadoW DaemoN, я подумал, что jass'еры увидят суть сразу...
ты правильно понял...

MEXAHuK добавил:
Вот что значит оптимизация =)
Старый 11.06.2008, 19:45
Чебурашка

offline
Опыт: 5,460
Активность:
Жесть, на сколько жасс код лучше читается чем гуи2жасс
Старый 11.06.2008, 19:47
and_y87
Тру Кодер
offline
Опыт: 21,030
Активность:
ShadoW DaemoN, только что-то не пашет тоже =\
и кучу ошипок выдаёт
Старый 11.06.2008, 20:21
Radiant
Silence
offline
Опыт: 4,907
Активность:
MEXAHuK - ищи строчку if GetItemLevel(m) == 5) и убери скобочку в конце... а триггер должен называться Cast spell...
Старый 11.06.2008, 21:55
and_y87
Тру Кодер
offline
Опыт: 21,030
Активность:
Во! запахал!!!
Radiant, спс...
ЗЫ: как ты jass выучил... направь мну на путь истинный =)
Старый 11.06.2008, 23:29
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
MEXAHuK
http://xgm.guru/articles.php?section=wc3&name=jass_introduction

DFlyer добавил:
как я понимаю, топик клоз?!
Старый 12.06.2008, 10:08
Закрытая тема

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

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

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

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



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