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

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

Закрытая тема
 
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Ругаются JassHelper и cJass на lambda
Взяв один триггер который передвигает всех юнитов вокруг, в сторону, но я для того чтобы сделать триггер на MUI, я прибегнул локальным переменным и используя cJass, или функцию lambda

» раскрыть
Код:
function Trig_Every_5_J_Actions takes nothing returns nothing
    local unit un1
    local unit un2
    local real x1
    local real x2
    local real y1
    local real y2
    local real r
    
    call ForGroup( udg_Gr, lambda nothing () {
       set un1 = GetEnumUnit()
       set x1 = GetLocationX(GetUnitLoc(un1))
       set y1 = GetLocationY(GetUnitLoc(un1))
       call ForGroup( GetUnitsInRangeOfLocAll(300.00, GetUnitLoc(un1)), lambda nothing () {
            if GetPlayerAlliance(GetOwningPlayer(GetEnumUnit()), GetOwningPlayer(un1), ALLIANCE_PASSIVE) == false then
               set un2 = GetEnumUnit()
               set x2 = GetLocationX(GetUnitLoc(un2))
               set y2 = GetLocationY(GetUnitLoc(un2))
               set r = Rad2Deg(Atan2(y2-y1,x2-x1))
               call SetUnitPositionLoc( un2, PolarProjectionBJ(GetUnitLoc(un2), 20.00, r) )
            else
            endif
       })
    })
    
    set un1=null
    set un2=null
endfunction

//===========================================================================
function InitTrig_Every_5_J takes nothing returns nothing
    set gg_trg_Every_5_J = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Every_5_J, 0.05 )
    call TriggerAddAction( gg_trg_Every_5_J, function Trig_Every_5_J_Actions )
endfunction



JassHelper ругается на то, что Syntax error unexpected: "nothing"
а cJass ругается на: [15] Critical error unknown block
» раскрыть
Код:
globals
unit udg_KBA_TargetUnit=null
unit udg_Target=null
unit udg_Caster=null
group udg_Gr=null
unit udg_Cast=null
real udg_x1=0
real udg_y1=0
real udg_x2=0
real udg_y2=0
real udg_r=0
rect gg_rct_2gold__3x3=null
rect gg_rct_2_gold__2x2=null
rect gg_rct_4gold__1x1=null
trigger gg_trg_Skill=null
trigger gg_trg_KnocbackMob=null
trigger gg_trg_KnocbackMaic=null
trigger gg_trg_EverySec=null
trigger gg_trg_awdawd=null
trigger gg_trg_awd=null
trigger gg_trg_awwd=null
unit gg_unit_Hpal_0008=null
trigger gg_trg_Cast_J=null
trigger gg_trg_Every_5_J=null
endglobals
function InitGlobals takes nothing returns nothing
set udg_Gr=CreateGroup()
set udg_x1=0
set udg_y1=0
set udg_x2=0
set udg_y2=0
set udg_r=0
endfunction
function CreateUnitsForPlayer0 takes nothing returns nothing
local player p=Player(0)
local unit u
local integer unitID
local trigger t
local real life
set gg_unit_Hpal_0008=CreateUnit(p,0x4870616C,-132.0,-142.3,201.616)
endfunction
function CreateUnitsForPlayer2 takes nothing returns nothing
local player p=Player(2)
local unit u
local integer unitID
local trigger t
local real life
set u=CreateUnit(p,0x75303030,-242.2,-309.4,332.786)
set u=CreateUnit(p,0x75303030,34.8,-317.0,301.562)
set u=CreateUnit(p,0x75303030,142.6,-101.5,117.206)
set u=CreateUnit(p,0x75303030,-81.8,56.8,268.206)
set u=CreateUnit(p,0x75303030,-297.9,-112.0,103.209)
endfunction
function CreatePlayerBuildings takes nothing returns nothing
endfunction
function CreatePlayerUnits takes nothing returns nothing
call CreateUnitsForPlayer0()
call CreateUnitsForPlayer2()
endfunction
function CreateAllUnits takes nothing returns nothing
call CreatePlayerBuildings()
call CreatePlayerUnits()
endfunction
function CreateRegions takes nothing returns nothing
local weathereffect we
set gg_rct_2gold__3x3=Rect(-384.0,-576.0,288.0,96.0)
set gg_rct_2_gold__2x2=Rect(-288.0,-480.0,192.0,0.0)
set gg_rct_4gold__1x1=Rect(-160.0,-352.0,64.0,-128.0)
endfunction
function KnocbackMob_Conditions takes nothing returns boolean
return         IsUnitType(GetAttackedUnitBJ(),UNIT_TYPE_HERO)==true and GetUnitTypeId(GetAttacker())==0x75303030
endfunction
function KnocbackMob_Actions takes nothing returns nothing
local unit un=GetAttackedUnitBJ()
local unit un2=GetAttacker()
local real x=GetLocationX(GetUnitLoc(un))+40.00*Cos(GetUnitFacing(un2)*bj_DEGTORAD)
local real y=GetLocationY(GetUnitLoc(un))+40.00*Sin(GetUnitFacing(un2)*bj_DEGTORAD)
if             not IsTerrainPathable(x,y,PATHING_TYPE_WALKABILITY)then
call SetUnitX(un,x)
call SetUnitY(un,y)
call DestroyEffect(AddSpecialEffectLocBJ(GetUnitLoc(un),"Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl"))
else
call SetUnitLifeBJ(un,(GetUnitStateSwap(UNIT_STATE_LIFE,un)-(GetUnitStateSwap(UNIT_STATE_MAX_LIFE,un)/4.00)))
endif
set un=null
set un2=null
endfunction
function InitTrig_KnocbackMob takes nothing returns nothing
set gg_trg_KnocbackMob=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_KnocbackMob,EVENT_PLAYER_UNIT_ATTACKED)
call TriggerAddAction(gg_trg_KnocbackMob,function KnocbackMob_Actions)
call TriggerAddCondition(gg_trg_KnocbackMob,Condition(function KnocbackMob_Conditions))
endfunction
function Trig_EverySec_Func001A takes nothing returns nothing
call AdjustPlayerStateBJ(3,GetOwningPlayer(GetEnumUnit()),PLAYER_STATE_RESOURCE_GOLD)  
endfunction
function Trig_EverySec_Func002A takes nothing returns nothing
call AdjustPlayerStateBJ(6,GetOwningPlayer(GetEnumUnit()),PLAYER_STATE_RESOURCE_GOLD)  
endfunction
function Trig_EverySec_Func003A takes nothing returns nothing
call AdjustPlayerStateBJ(10,GetOwningPlayer(GetEnumUnit()),PLAYER_STATE_RESOURCE_GOLD  )
endfunction
function Trig_EverySec_Actions takes nothing returns nothing
call ForGroupBJ(GetUnitsInRectAll(gg_rct_2gold__3x3),function Trig_EverySec_Func001A)
call ForGroupBJ(GetUnitsInRectAll(gg_rct_2_gold__2x2),function Trig_EverySec_Func002A)
call ForGroupBJ(GetUnitsInRectAll(gg_rct_4gold__1x1),function Trig_EverySec_Func003A)
endfunction
function InitTrig_EverySec takes nothing returns nothing
set gg_trg_EverySec=CreateTrigger()
call TriggerRegisterTimerEventPeriodic(gg_trg_EverySec,1.00)
call TriggerAddAction(gg_trg_EverySec,function Trig_EverySec_Actions)
endfunction
function Trig_awdawd_Actions takes nothing returns nothing
call ReviveHeroLoc(GetDyingUnit(),GetRectCenter(GetPlayableMapRect()),false)
endfunction
function InitTrig_awdawd takes nothing returns nothing
set gg_trg_awdawd=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_awdawd,EVENT_PLAYER_UNIT_DEATH)
call TriggerAddAction(gg_trg_awdawd,function Trig_awdawd_Actions)
endfunction
function Trig_awd_Actions takes nothing returns nothing
call UnitAddAbilityBJ(0x41487463,gg_unit_Hpal_0008)
call UnitAddAbilityBJ(0x41486473,gg_unit_Hpal_0008)
endfunction
function InitTrig_awd takes nothing returns nothing
set gg_trg_awd=CreateTrigger()
call TriggerRegisterTimerEventSingle(gg_trg_awd,0.01)
call TriggerAddAction(gg_trg_awd,function Trig_awd_Actions)
endfunction
function Trig_awwd_Conditions takes nothing returns boolean
if            (not(GetUnitTypeId(GetDyingUnit())==0x75303030))then
return         false
endif
return         true
endfunction
function Trig_awwd_Actions takes nothing returns nothing
call CreateNUnitsAtLoc(1,0x75303030,Player(1),GetRectCenter(GetPlayableMapRect()),bj_  UNIT_FACING)
endfunction
function InitTrig_awwd takes nothing returns nothing
set gg_trg_awwd=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_awwd,EVENT_PLAYER_UNIT_DEATH)
call TriggerAddCondition(gg_trg_awwd,Condition(function Trig_awwd_Conditions))
call TriggerAddAction(gg_trg_awwd,function Trig_awwd_Actions)
endfunction
function Trig_Cast_J_Conditions takes nothing returns boolean
if            (not(GetSpellAbilityId()==0x41487463))then
return         false
endif
return         true
endfunction
function Trig_Cast_J_Actions takes nothing returns nothing
call GroupAddUnitSimple(GetSpellAbilityUnit(),udg_Gr)
call TriggerSleepAction(0.50)
call GroupRemoveUnitSimple(GetSpellAbilityUnit(),udg_Gr)
endfunction
function InitTrig_Cast_J takes nothing returns nothing
set gg_trg_Cast_J=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_Cast_J,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(gg_trg_Cast_J,Condition(function Trig_Cast_J_Conditions))
call TriggerAddAction(gg_trg_Cast_J,function Trig_Cast_J_Actions)
endfunction
function Trig_Every_5_J_Actions takes nothing returns nothing
по видимому останавливается на том самом триггере, что я писал выше.

Все бы ничего, все работает! Даже отлично, так как нужно! Но есть одно но, из-за этих ошибок: ни JassHelper ни cJass НЕ видят других ошибок!
Старый 20.07.2012, 19:54
ScorpioT1000
Работаем
offline
Опыт: отключен
JassHelper и cJass - это компиляторы, а не спеллчекеры, значит ничего не работает.
Старый 20.07.2012, 19:59
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Цитата:
Сообщение от ScorpioT1000
значит ничего не работает.

Игра так не считает! =)
Прикрепленные файлы
Тип файла: w3x Tolkanie.w3x (23.4 Кбайт, 1 просмотров )
Старый 20.07.2012, 20:04
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Значит твой редактор упорот, очевидно же. Скачай эксперементалку к примеру от скорпа.
Старый 20.07.2012, 20:10
Doc

offline
Опыт: 63,163
Активность:
code.google.com/p/cjass
Старый 20.07.2012, 20:24
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Все спасибо Doc
А не стоит ли вам,админам обновить сборку JNGP ??? ведь от этого вопросов по поводу этого сократится на 30%!

Но все же, после обновления, AdicHelper, JassHelper стал ругаться и на локальные переменные! Того триггера где использовал lambda
Вот это вижу вместо объявления локалок
//# optional
и этоже вижу на установок этихже переменных
» раскрыть
Код:
function cj_anonym__2 takes nothing returns nothing
//# optional
if GetPlayerAlliance(GetOwningPlayer(GetEnumUnit()), GetOwningPlayer(un1), ALLIANCE_PASSIVE) == false then
set un2=GetEnumUnit()
set x2=GetLocationX(GetUnitLoc(un2))
set y2=GetLocationY(GetUnitLoc(un2))
set r=Rad2Deg(Atan2(y2 - y1, x2 - x1))
call SetUnitPositionLoc(un2, PolarProjectionBJ(GetUnitLoc(un2), 20.00, r))
else
endif
endfunction
function cj_anonym__1 takes nothing returns nothing
//# optional
set un1=GetEnumUnit()
set x1=GetLocationX(GetUnitLoc(un1))
set y1=GetLocationY(GetUnitLoc(un1))
call ForGroup(GetUnitsInRangeOfLocAll(300.00, GetUnitLoc(un1)), function cj_anonym__2)
endfunction
function Trig_Every_5_J_Actions takes nothing returns nothing
local unit un1
local unit un2
local real x1
local real x2
local real y1
local real y2
local real r
call ForGroup(udg_Gr, function cj_anonym__1)
set un1=null
set un2=null
endfunction
function InitTrig_Every_5_J takes nothing returns nothing
set gg_trg_Every_5_J=CreateTrigger()
call TriggerRegisterTimerEventPeriodic(gg_trg_Every_5_J, 0.05)
call TriggerAddAction(gg_trg_Every_5_J, function Trig_Every_5_J_Actions)
endfunction


Возможно ли подружить JassHelper и cJass ???

Я использовал чистую сборку от скорпа! с обновленным ацидхелпером.

PS ацидхелпер, также добавил в мой код функции, которых нету... такая как sj_anonum_2
Старый 20.07.2012, 20:49
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Xipxop, не используйте сжасс,если не знаете обычный жасс на хорошем уровне
Старый 20.07.2012, 20:59
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
А я и не хочу, но использование глобалок и хештаблицы которую можно заменить 2-4 перемеными! Которые занимают на 80% меньше памяти! меня бесит...
Все, что мне нужно это волшебная lambda именно она позволяет: Истекать таймер в функции и пикать юнитов в 1 функции и все это, позволяет использовать одни локальные переменные!

Оставшийся вопрос после которого стоит закрыть тему:
Можно ли использовать спокойно несколько триггеров написанных на cJass, БЕЗ acidHelper ?? ТОесть будут ли нормально они работать без компилятора cJass ? =) Не мне ли незнать, что без конвертора работать нормально не будет, но ведь варик почемуто это позволяет, а другой язык программирования например pascal выдаст ошибок... А c++ будет молчать об истинной ошибке до конца...
Старый 20.07.2012, 21:34
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Xipxop, с твоим ужасом и утечками, 80% твоего байтосчитания покажется ничем...
call ForGroup(GetUnitsInRangeOfLocAll(300.00, GetUnitLoc(un1)), function cj_anonym__2)
2 утечки в одном месте...
set x2=GetLocationX(GetUnitLoc(un2))
set y2=GetLocationY(GetUnitLoc(un2))
facepalm
call SetUnitPositionLoc(un2, PolarProjectionBJ(GetUnitLoc(un2), 20.00, r))
утечка + BJ
set x1=GetLocationX(GetUnitLoc(un1))
set y1=GetLocationY(GetUnitLoc(un1))
аналогично
Да и зачем мешать координаты с точками лол?
Проще говоря, твой джасс хуже норм триггера...
Vadik29 добавил:
И еще, есть много карт в которых скилы и системы сделаны на хэше и при этом вообще не лагают. Например Simple AoS.

Отредактировано Vadik29, 21.07.2012 в 11:32.
Старый 21.07.2012, 01:51
ScorpioT1000
Работаем
offline
Опыт: отключен
Возможно ли подружить JassHelper и cJass ???
cJass - это стандарт синтаксиса и грамматики языка на бумаге, JassHelper - программа, которая его реализует
Старый 21.07.2012, 02:07
respect_gg

offline
Опыт: 3,950
Активность:
Не хочешь пользоваться хэштаблицам, то юзай vJass+структуры
Старый 21.07.2012, 04:05
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Xipxop, могу дать карту, где крутая наработка прыжка (на подобие прыжка мираны) написана на обычном jass без надстроек, в коде много комментариев, и оформлен соответствующем образом...
Прикрепленные файлы
Тип файла: w3x Прыжок гуля.w3x (26.9 Кбайт, 7 просмотров )
Старый 21.07.2012, 15:12
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
quq_CCCP, спасибо тебе конечно, но в твоем примере кроме как формул вычисления, я ничего не понял... Я даже не понял как у тебя вообще другие функции вызываются ведь нигде вызовов нету...


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

Старый 21.07.2012, 17:07
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Xipxop, не так страшен черт хэш,как его малюют
Старый 21.07.2012, 18:14
Закрытая тема

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

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

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

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



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