Q/A

Добавлен , опубликован
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
у меня был где то подобный скил но ты и сам сможешь сделать(как раз экзамен будет тебе)
Buulichkaa, у трупа меньше чем 0 хп это проверено)
9
Созрел вопрос) как посмотреть рав код спела)
Собственно создал скилл на гуи, далее его перевёл на джазз посмотреть как это вообще сделать. Ну как бы всё более менее понятно, но вопрос такой почему Pick юнитов в джаззе происходит вообще в конце кода
function Trig_Skelet_GUI_____________________u_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A000' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Skelet_GUI_____________________u_Func001Func001C takes nothing returns boolean
    if ( not ( IsUnitDeadBJ(GetEnumUnit()) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Skelet_GUI_____________________u_Func001A takes nothing returns nothing
    if ( Trig_Skelet_GUI_____________________u_Func001Func001C() ) then
        call RemoveUnit( GetEnumUnit() )
        call AddSpecialEffectLocBJ( GetUnitLoc(GetEnumUnit()), "Abilities\\Spells\\Undead\\RaiseSkeletonWarrior\\RaiseSkeleton.mdl" )
        call CreateNUnitsAtLoc( 1, 'uske', Player(0), GetUnitLoc(GetEnumUnit()), bj_UNIT_FACING )
        call DestroyEffectBJ( GetLastCreatedEffectBJ() )
    else
        call DoNothing(  )
    endif
endfunction

function Trig_Skelet_GUI_____________________u_Actions takes nothing returns nothing
    call ForGroupBJ( GetUnitsInRangeOfLocAll(512, GetUnitLoc(GetTriggerUnit())), function Trig_Skelet_GUI_____________________u_Func001A )
endfunction

//===========================================================================
function InitTrig_Skelet_jass takes nothing returns nothing
    set gg_trg_Skelet_jass = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Skelet_jass, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Skelet_jass, Condition( function Trig_Skelet_GUI_____________________u_Conditions ) )
    call TriggerAddAction( gg_trg_Skelet_jass, function Trig_Skelet_GUI_____________________u_Actions )
endfunction
Далее если не трудно скажите как сделать чтобы он создавал из 1 трупа скелета, а не из всех. Почему делал так скажу просто я не особо понял какая функция отвечает за то чтобы проверить жив юнит или мертв и не знал как пропикать юнитов
И ещё вопрос. Как избавиться от утечет тобеж чтобы если рядом было 2 игрока он не создавал для обоих игроков 2 скелетов (думаю так и будет если в 2 проверить)
28
берёшь хп юнита и сравниваешь больше нуля или нет
не надо пикать всех юнитов
просто берёшь 1 юнита в группе
    bool filt1(){
        return GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>=0
    }
вот фильтр
в ро жмёшь
вид-показать названия переменных
9
nvc123:
берёшь хп юнита и сравниваешь больше нуля или нет
не надо пикать всех юнитов
просто берёшь 1 юнита в группе
Я наверно дебил но я не знаю как взять юнита не пикая его и ещё чтобы в радиусе от применившего заклинания.
28
и названия меняются на равкоды
берёшь группу юнитов
group a=CreateGroup()
я сейчас системку напишу
9
nvc123:
и названия меняются на равкоды
берёшь группу юнитов
group a=CreateGroup()
я сейчас системку напишу
Напиши пожалуйста. Вот пытаюсь что-то сделать и пока не особо понимаю как взять значение из группы и создать группу только из 1 юнита. Будет наглядно
21
бог в помощь
native GroupEnumUnitsInRange                takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing
28
Buulichkaa, ты раскрыл страшный секрет
теперь масоны убьют тебя
сейчас открою блокнот
library lib initializer init{
 private hashtable hash=InitHashtable()
 define{
 radius=300
 }

    private bool filt1(){
        return GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>=0
    }
    
    private void act(){
     group a=CreateGroup()
     unit b=GetTriggerUnit()
     player c=GetOwningPlayer(b)
     float x
     float y
      GroupEnumUnitsInRange(a,GetUnitX(b),GetUnitY(b),radius,function filt1)
      b=FirstOfGroup(a)
      x=GetUnitX(b)
      y=GetUnitY(b)
      RemoveUnit(b)
      b=CreateUnit(c,LoadInteger(hash,GetSpellAbilityId(),0),x,y,0)
      DestroyGroup(a)
      b=null
      a=null
    }
    
    private void add(int a,int b){
      SaveInteger(hash,a,0,b)
    }
    
    private bool cond(){
        return LoadInteger(hash,GetSpellAbilityId(),0)>0
    }
    
    private void init(){
     trigger a=CreateTrigger()
      TriggerAddAction(a,function act)
      TriggerAddCondition(a,function cond)
      TriggerRegisterAnyUnitEventBJ(a,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    }
    
}
писал по памяти
в функцию add передёшь равкод спелла и равкод юнита которого надо призвать
9
nvc123:
Buulichkaa, ты раскрыл страшный секрет
теперь масоны убьют тебя
сейчас открою блокнот
library lib initializer init{
 private hashtable hash=InitHashtable()
 define{
 radius=300
 }

    private bool filt1(){
        return GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>=0
    }
    
    private void act(){
     group a=CreateGroup()
     unit b=GetTriggerUnit()
     player c=GetOwningPlayer(b)
     float x
     float y
      GroupEnumUnitsInRange(a,GetUnitX(b),GetUnitY(b),radius,function filt1)
      b=FirstOfGroup(a)
      x=GetUnitX(b)
      y=GetUnitY(b)
      RemoveUnit(b)
      b=CreateUnit(c,LoadInteger(hash,GetSpellAbilityId(),0),x,y,0)
      DestroyGroup(a)
      b=null
      a=null
    }
    
    private void add(int a,int b){
      SaveInteger(hash,a,0,b)
    }
    
    private bool cond(){
        return LoadInteger(hash,GetSpellAbilityId(),0)>0
    }
    
    private void init(){
     trigger a=CreateTrigger()
      TriggerAddAction(a,function act)
      TriggerAddCondition(a,function cond)
      TriggerRegisterAnyUnitEventBJ(a,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    }
    
}
писал по памяти
в функцию add передёшь равкод спелла и равкод юнита которого надо призвать
То есть эта библиотека создаёт нам группу из 1 игрока жизни которого меньше или равны 0 в радиусе 300? А при каком условии она её создаёт? И вопрос как задействовать эту библиотеку при использовании скила? И почему редактор блокирет её при попытке сохранить или запустить тест карты.
PS извини за количество вопросов)
28
это скил
в функции init в конце пишешь
add(равкод скила,равкод скелета)
у тебя джнгп?
ты 1 урок читал?
и 2
в нестандартном коде написал include "cj_types.j"
группа создаётся со всеми труппами в радиусе но из неё берётся только 1 юнит(b=FirstOfGroup(a))
ой
там ошибочка
return GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>=0
замени на
return GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)<=0
знак перепутал)
9
nvc123:
это скил
в функции init в конце пишешь
add(равкод скила,равкод скелета)
у тебя джнгп?
ты 1 урок читал?
и 2
в нестандартном коде написал include "cj_types.j"
группа создаётся со всеми труппами в радиусе но из неё берётся только 1 юнит(b=FirstOfGroup(a))
ой
там ошибочка
return GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>=0
замени на
return GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)<=0
знак перепутал)
Нет я обычны редактор юзал. Я думал раз у меня из 1 урока карта пошла, то и остальное получится
28
она пошла но если её пересохранить то ошибок кучу выдаст
24
Возможно то что я скажу кого-то поставит в тупик, но не лучше ли положиться в вопросе оживления трупов на движок вара и решить проблему дамми-кастом? Или банальной подменой способностей. Первое более сложное, второе чуть менее удобно в использовании.
Первый вариант - при применении заклинания-пустышки (желательно на основе канала) триггерно создается дамми с соответствующим заклинанием призыва и активирует его. Остается решить проблему перезарядки способности и возврата стоимости если призыв не удался.
Второй вариант - триггерно по а активации все тех-же способностей-пустышек юниту выдается одна из призывающих способностей, что позволяет иметь одну призывающую способность в один момент времени, но пользоваться столькими разными призывами, на сколько места хватит (учитывая возможность использования спеллбуков - это очень много). Этот вариант можно реализовать в двух видах - способность-пустышка заменяется настоящей способностью или все пустышки в наличии постоянно плюс еще одна способность для непосредственно призыва.
Оба эти варианта на мой взгляд лучше чем триггерно искать труп, удалять его и создавать вызванное существо.
UPD: было много опечаток, поправил
9
При запуске теста пишет wehack.lua:480 и что-то там дальше(
9
prog:
Возможно то что я скажу кого-то поставит в тупик, но не лучше ли положиться в вопросе оживления трупов на движок вара и решить проблему дамми-кастом? Или банальной подменой способностей. Первое более сложное, второе чуть менее удобно в использовании.
Первый вариант - при применении заклинания-пустышки (желательно на основе канала) триггерно создается дамми с соответствующим заклинанием призыва и активирует его. Остается решить проблему перезарядки способности и возврата стоимости если призыв не удался.
Второй вариант - триггерно по а активации все тех-же способностей-пустышек юниту выдается одна из призывающих способностей, что позволяет иметь одну призывающую способность в один момент времени, но пользоваться столькими разными призывами, на сколько места хватит (учитывая возможность использования спеллбуков - это очень много). Этот вариант можно реализовать в двух видах - способность-пустышка заменяется настоящей способностью или все пустышки в наличии постоянно плюс еще одна способность для непосредственно призыва.
Оба эти варианта на мой взгляд лучше чем триггерно искать труп, удалять его и создавать вызванное существо.
UPD: было много опечаток, поправил
Решительно ничего не понял. Дами-каст что такое? А 2 вариант это ты предлагаешь сделать способность по выбору способности? и чтобы если выбрал 1 то 2 удалялась?
Блин такая заморочная тема сделать скилы по вызову 4 видов скелетов из трупов. Когда думал над этой задумкой даже не ожитал что придётся так заморачиваться ради долбаных 4 скилов
28
При запуске теста пишет wehack.lua:480 и что-то там дальше(
непонял
установи джнгп
запусти его
открой карту
скопируй мой код
сохрани
и не забудь include "cj_types.j"
17
Возникла пролемка с сджассом. у меня в карте много триггеров и я их постепенно перевожу. но вот решил сохранить, и перешифровка в обычный джас не пошла. в чем проблема?
28
тоесть
мая твая на панимать
с чего ты взял что он не компильнулся?
17
потому что при сохранении не запускается процес который проверяет на ошибки
ну и карта соответственно не работает
28
Sergant1000, я нуб но карту в студию
я джи файл гляну и скажу что скомпилилось а что нет
кроме того есть вероятность что проблема в том что забыл закрыть луп/иф
17
в карте окола 50 триггеров она сохраняется но не компилируется.
в карте где триггеров 20 все работает исправно.
карту скинуть немогу.
еслибы я забыл закрыть луп или иф то мне бы выскочила ошибка. А у меня карта сохраняется нормально но перекодировки с сджасс на джасс непроисходит.
28
о мне бы выскочила ошибка
ага верь дальше
карту скинуть не могу.
типо кто то украдёт карту?
скинь джи фаил
а то делаеш выводы похоже даже не проверив
17
не один делаю, по этому не могу скинуть. а проверка прошла просто я выключил все триггеры и включил один не переведенный триггер- все работает. перевел его в сджасс, всеголишь убрав set и call из него - карта неработает.
Так же при сохранении карты а точнее в конце ее сохранения должны запускатся процесы джасхелпера и прочие. этого не происходит
Чтобы оставить комментарий, пожалуйста, войдите на сайт.