Решил написать и сразу перевести в нормальное состояние вот такой код.
Герой использует на союзнике способность, союзнику дается перерождение и вешается спецэффект на грудь( сияние типа броня) действует пока он жив. Когда умирает, то воскрешается и спецэффект удаляется. Все примитивно просто, но возникли большие проблемы в правильностью написания кода. Именно ошибки в самом синтаксисе
  • Ругается на то, что локальную u не видит, хоть она и объявлена.
  • Ругается на, что заменил условие что он не мертв, на
   return ( GetUnitState(u, UNIT_STATE_LIFE) <= 0 )
Код как он есть ниже. Заранее благодарю function
Trig_First_pit______________________2__________________________________________u_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A08B' ) ) then
        return false
    endif
    return true
endfunction

function Trig_First_pit______________________2__________________________________________u_Func007001 takes nothing returns boolean
    return ( GetUnitState(u, UNIT_STATE_LIFE) <= 0 )
endfunction

function Trig_First_pit______________________2__________________________________________u_Actions takes nothing returns nothing
    local effect a
    local unit u
    set u = GetSpellTargetUnit()
      call UnitAddAbility( u,'A08C' )
      set bj_lastCreatedEffect = AddSpecialEffectTarget(u,"chest", "manaFlareTarget.mdx" )
    set a = bj_lastCreatedEffect
    loop
        exitwhen ( Trig_First_pit______________________2__________________________________________u_Func007001() )
        call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
    endloop
     call DestroyEffect (a)
    set u= null
    set a= null
endfunction

//===========================================================================
function InitTrig_First_pit______________________2__________________________________________u takes nothing returns nothing
    set gg_trg_First_pit______________________2__________________________________________u = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_First_pit______________________2__________________________________________u, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_First_pit______________________2__________________________________________u, Condition( function Trig_First_pit______________________2__________________________________________u_Conditions ) )
    call TriggerAddAction( gg_trg_First_pit______________________2__________________________________________u, function Trig_First_pit______________________2__________________________________________u_Actions )
endfunction

Ориентируюсь по образцу: Модель, виджет, точки крепления
Но я честно не знаю, как правильно присваивать спецэффект кодом именно с локальной!
Сам написал ответ и сам указал в коде по другому :D
Первый параметр - модель. Не юнит, а модель.
set bj_lastCreatedEffect = AddSpecialEffectTarget("manaFlareTarget.mdx", u, "chest")
Надоело уже страдать. Пусть будет как у Лоха через bj по другому я просто не могу понять!
call AddSpecialEffectTargetUnitBJ( "chest", u, "ManaFlareTarget.mdx" )
`
LOADING AD...
28
SсRealm, ты когда скобку открываешь после названия функции видишь названия аргументов. Помимо этого ты можешь задать ctrl и нажать на функцию, чтобы раскрыть её, где увидишь тип аргументов. Если тебе этого мало - конвертируй гуи в код и смотри как там сделано, учи английский, пользуйся переводчиком, прокачивайся и переходи на нативки
21
SсRealm, ты когда скобку открываешь после названия функции видишь названия аргументов. Помимо этого ты можешь задать ctrl и нажать на функцию, чтобы раскрыть её, где увидишь тип аргументов. Если тебе этого мало - конвертируй гуи в код и смотри как там сделано, учи английский, пользуйся переводчиком, прокачивайся и переходи на нативки
По итогу все- равно выдало ошибку. Может ты и прав!
function First pitdfgdfgf_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A08B' ) ) then
return false
endif
return true
endfunction
function Trig_First pitdfgdfgf_Func007001 takes unit u returns boolean
return ( GetUnitState(u, UNIT_STATE_LIFE) <= 0 )
endfunction
function First pitdfgdfgf_Actions takes nothing returns nothing
local effect a
local unit u
set u = GetSpellTargetUnit()
call UnitAddAbility( u,'A08C' )
set bj_lastCreatedEffect = AddSpecialEffectTarget(u,"chest", "manaFlareTarget.mdx" )
set a = bj_lastCreatedEffect
loop
exitwhen ( First pitdfgdfgf_Func007001() )
call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
endloop
call DestroyEffect (a)
set u= null
set a= null
endfunction
===========================================================================
function InitTrig_First_pitdfgdfgf takes nothing returns nothing
set gg_trg_First_pitdfgdfgf = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_First_pitdfgdfgf, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_First_pitdfgdfgf, Condition( function Trig_First_pit______________________2__________________________________________u_Conditions ) )
call TriggerAddAction( gg_trg_First_pitdfgdfgf, function Trig_First_pit______________________2__________________________________________u_Actions )
endfunction
Uploaded files
25
Вот твой код:
SсRealm:
По итогу все- равно выдало ошибку. Может ты и прав!
set bj_lastCreatedEffect = AddSpecialEffectTarget(u,"chest", "manaFlareTarget.mdx" )
И вот писал я:
konvan5:
Сам написал ответ и сам указал в коде по другому :D
Первый параметр - модель. Не юнит, а модель.
set bj_lastCreatedEffect = AddSpecialEffectTarget("manaFlareTarget.mdx", u, "chest")
А теперь просто сравни эти строки, мою и свою :)
21
Вот твой код:
SсRealm:
По итогу все- равно выдало ошибку. Может ты и прав!
set bj_lastCreatedEffect = AddSpecialEffectTarget(u,"chest", "manaFlareTarget.mdx" )
И вот писал я:
konvan5:
Сам написал ответ и сам указал в коде по другому :D
Первый параметр - модель. Не юнит, а модель.
set bj_lastCreatedEffect = AddSpecialEffectTarget("manaFlareTarget.mdx", u, "chest")
А теперь просто сравни эти строки, мою и свою :)
Что означает ошибка "expected take" ?
25
Что означает ошибка "expected take" ?
Видимо у тебя описание функции неполное, в описании функции должен быть список параметров, который пишется после слова takes, и возможно ты его не указал.
Вот пример, где параметров нет, поэтому мы указываем nothing после takes:
function First pitdfgdfgf_Conditions takes nothing returns boolean

А лучше скидывай скрин ошибки, где показывается часть кода, где ошибка и находится. Так проще будет нам помочь.
21
Что означает ошибка "expected take" ?
Видимо у тебя описание функции неполное, в описании функции должен быть список параметров, который пишется после слова takes, и возможно ты его не указал.
Вот пример, где параметров нет, поэтому мы указываем nothing после takes:
function First pitdfgdfgf_Conditions takes nothing returns boolean

А лучше скидывай скрин ошибки, где показывается часть кода, где ошибка и находится. Так проще будет нам помочь.
Я уже столько нахреновертил, что у меня там даже названия троигеров спутаны. Сейчас сделаю гуи, переведу на джасс, верну все как было и скажу, если что - то опять не запустится
30
Человек мечтает создать интересную карту, но не разбирается в jass
А ещё он не разбирается в уважении к собеседникам и цитирует огромные портянки комментариев, и не использует блоки кода. Всё для того, чтоб людям было легче читать написанное.

Это и правда не страшно не знать чего-то.
Страшно, когда вместо того, чтоб разобраться человек просто брутфосом спамит код в надежде что оно сработает.
21
nazarpunk:
Да я не спамлю, я пытаюсь быстрее ответить, пока кто - то согласился мне помочь, иначе я эту часть кода надолго заброшу и спросить будет не у кого
21
konvan5:
Код, как он сейчас есть
function Trig_tRIGGORDOND_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A016' ) ) then
return false
endif
return true
endfunction
function Trig_tRIGGORDOND_Func006001 takes unit u returns boolean
return ( GetUnitState(u, UNIT_STATE_LIFE) <= 0 )
endfunction
function Trig_tRIGGORDOND_Actions takes nothing returns nothing
local unit u
local effect a
set bj_lastCreatedEffect = AddSpecialEffectTarget(u,"chest", "manaFlareTarget.mdx" )
call UnitAddAbility(u,'A01O')
loop
exitwhen ( Trig_tRIGGORDOND_Func006001() )
call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
endloop
call UnitRemoveAbility( u,'A01O' )
endfunction
===========================================================================
function InitTrig_tRIGGORDOND takes nothing returns nothing
set gg_trg_tRIGGORDOND = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_tRIGGORDOND, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_tRIGGORDOND, Condition( function Trig_tRIGGORDOND_Conditions ) )
call TriggerAddAction( gg_trg_tRIGGORDOND, function Trig_tRIGGORDOND_Actions )
endfunction
Теперь ошибки опять же вылетают потому что локальная якобы не заявлена. И опять же по тому что утром( если исправлять)
25
Первая ошибка сейчас говорит в том, что ты создал переменную, но ничего туда не записал а уже отправил в функцию. То есть ты пытаешься прикрепить эффект к пустому, не существующему юниту.
Вот про этот код идет речь:
local unit u
local effect a
set bj_lastCreatedEffect = AddSpecialEffectTarget(u,"chest", "manaFlareTarget.mdx" )
Видишь, тут создал переменную u, ничего в нее не записал но используешь дальше в функции AddSpecialEffectTarget().

Тебе в любом случае придется учиться и понимать код, как он работает, чтобы часами потом не сидеть над одной ошибкой.
А подобный код ты еще не раз будешь перебирать, когда попытаешься делать другие системы. Так что лучше потратить дополнительно полчаса времени сейчас, чтобы ПОНЯТЬ, почему оно ругается, не запускается, почитать статьи, как правильно описывается код, и дальше будешь решать такие проблемы как орешки за минуты а не за часы :)
21
Первая ошибка сейчас говорит в том, что ты создал переменную, но ничего туда не записал а уже отправил в функцию. То есть ты пытаешься прикрепить эффект к пустому, не существующему юниту.
Вот про этот код идет речь:
local unit u
local effect a
set bj_lastCreatedEffect = AddSpecialEffectTarget(u,"chest", "manaFlareTarget.mdx" )
Видишь, тут создал переменную u, ничего в нее не записал но используешь дальше в функции AddSpecialEffectTarget().
Понимаешь, я в гуи понимаю, что объявляется сверху, а где в джасс верх и где низ, где правильно заявлять локальные?
25
Вторая ошибка - неправильный порядок параметров в функции AddSpecialEffectTarget(). Читай мои комменты выше, где я показывал, как тебе правильно надо туда вписать параметры.
Ладно, отправлю уже в 3 раз, вот ответ:
set bj_lastCreatedEffect = AddSpecialEffectTarget("manaFlareTarget.mdx", u, "chest")

Понимаешь, я в гуи понимаю, что объявляется сверху, а где в джасс верх и где низ, где правильно заявлять локальные?
Вот читай базу по коду, статью про области видимости переменных. тут про lua, но смысл тот-же)
Вот еще про локальные переменные в jass но текста многовато.
21
Все исправил. Теперь только ругается что не заявлена локальная u ( которая боевая единица)
Где ее правильно заявить?
25
Ты создал переменную, но она пустая. Где ты юнита берешь?

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

Раньше ты делал вот так:
local unit u
set u = GetSpellTargetUnit()
Вот это действие SET устанавливает значение переменной, которое берется из GetSpellTargetUnit().
Видимо после переработки кода ты потерял эту строку...
21
Все работает! Спасибо тебе, ДРУГ!)))
30
Да я не спамлю, я пытаюсь быстрее ответить
Нормальное оформление занимает десяток секунд. Врятли за это время все разбегутся.
21
nazarpunk:
Бывает, что на вопросы днями не отвечают. Никто так то и не обязан на них отвечать. Варкрафт - тема узконапоавленая, если тут не получу ответа то где? На Хайве еще с английского нужно перевести, да и варик 1.26 для них - прошлый век. ( не понять им русскую душу)
Ладно, я просто хочу довести до ума три версии своей карты. Эта тема закрыта, давно хочу понять хэш таблицу, она мне прямо очень нужна, но пока не понимаю. Это тема для следующего вопроса)
25
давно хочу понять хэш таблицу, она мне прямо очень нужна, но пока не понимаю. Это тема для следующего вопроса)
Пс, тут есть великий секрет XGM! Зайдешь сюда, нажимая на эту никому-неизвестную кнопку, найдешь интересующую тебя тему, прочитаешь и вопросы все сами отпадут :)
(Для быстрого поиска по странице можно использовать комбинацию клавиш CTRL+F)
Uploaded files
21
konvan5:
Я пытался. Это сложно. Я знаю, что хэш - таблица работает по принципу ключ- замок. То есть можно присвоить чему угодно в игре например номер, а потом по этому номеру его найти. Практики пока нет. Это долгая тема
30
Пс, тут есть великий секрет XGM!
За раскрытие секретов XGM обычно плагается бан.

Я знаю, что хэш - таблица работает по принципу ключ- замок.
В первом приближении, которого достаточно для 99.9(9)% задач можно рассматривать её как двумерный массив.
25
За раскрытие секретов XGM обычно плагается бан.
Ты ничего не видел :D
38
Нормально вы тут нафлудили, Hate, можно было без издевательств отвечать
nazarpunk, сравнил iterable с random access
SсRealm, у нас куча статей есть по кнопке статьи
Статья Сергея xgm.guru/p/wc3/jass_functions
Видеоуроки xgm.guru/p/wc3/jass-videos
Все статьи с поиском xgm.guru/p/wc3/articles
21
ScorpioT1000:
Да. Главное что решили вопрос. Странно, что они смеются, хотя эти вопросы уже внутри изучения джасса, хотя до сих пор приходят ребята, которые даже гуи не понимают.
Статьи Сергея были хорошие, только его уже давно нет на хгм и многое из того, что там написано уже не актуально. К примеру он зачем то рекомендует сохранять в глобальную, потом кидать в локальную, потом возвращать назад. Не думаю, что в его время не было простого присвоения локальных.
30
сравнил iterable с random access
С каких это пор итератор стал имманентен массиву? В том же JASS ни о каких итераторах никто не слышал.
К примеру он зачем то рекомендует сохранять в глобальную, потом кидать в локальную, потом возвращать назад.
Можно ссылочку на цитату? А то есть у меня чувства, что кое-кто использует для чтения неподобающий орган.
Видеоуроки
Просто шикарные видеоуроки:
Мы будем писать на чистом жасс и посему объявим глобалку в блоке globals.
21
((цитата Из его статьи, самая первая :
....Итак, при помощи локальных переменных мы можем сохранить юнит-цель для каждого запуска заклинания файербол. А через некоторое время, равное времени полета файербола, мы должны создать на юните спецэффект. Мы делаем нужную паузу и затем помещаем в глобальную переменную unit ссылку на юнит из переменной u. И создаем спецэффект над юнитом из переменной unit.
Таким приемом мы можем гарантировать, что сколько бы файерболов не было выпущено, спецэффект будет создаваться над юнитом-целью и только над ним. Никаких сбоев не будет. Точно такой же прием с удалением спецэффекта через 3 секунды после создания. Все эти три секунды ссылка на спецэффект будет храниться в локальной переменной e. А затем мы перебросим ее значение в глобальную переменную se и удалим спецэффект....."
To leave a comment please sign in to the site.