0
2
12 лет назад
0

» WarCraft 3 / Поворот камеры

Самый простой и корявый способ:
Каждую 0,01 секунду выполнять
if GetLocalPlayer() == <игрок> then
   call SetCameraField(CAMERA_FIELD_ROTATION, GetUnitFacing(<твой юнит>), 0.)
endif
0
2
12 лет назад
0

» WarCraft 3 / Z цели Камеры

darkowlom, Спасибо, но это не то. Мне хотелось бы узнать какой расчет происходит в функции GetCameraTargetPositionZ или GetCameraEyePositionZ. Я предполагаю там высчитывается средняя высота рельефа, который попадает в видимость камеры + какие-нибудь константы и т.п.
Мне это нужно для того, чтобы высчитывать Z цели камеры без задержки. Может кто-нибудь подскажет другой способ. Короче, вот примерный код:
//...
 float Z

 void blablabla(float x, float y)
 {
    SetCameraPosition(x, y)
    TimerStart(CreateTimer(), 0.04, false, \   // Вот хотелось без этой задержки
       lambda void () 
       {
           Z = GetCameraTargetPositionZ()
           DestroyTimer(GetExpiredTimer())
       }
     )
 }
//...
0
2
13 лет назад
0

» WarCraft 3 / cJass - дополнение к языку JASS

DotaMaster666, я знаю, ну вот я кое-что потестил :)
вот тебе пример
scope A{

include "cj_types_priv.j"

#define{
       private SPELL = 'A000'
       private DMG   = 100.
}       


 callback onUnitSpellCast (SPELL) {
    unit caster = GetTriggerUnit(), target = GetSpellTargetUnit()
    float dmg = GetUnitAbilityLevel(caster,SPELL)*DMG
    UnitDamageTarget(caster,target,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,WEAPON_TYPE_METAL_HEAVY_SLICE)
    debug BJDebugMsg(R2S(dmg))
    flush locals
 }
 

}
Коллбеки - вообще класс . Уважуха адольфу!
0
2
13 лет назад
0

» WarCraft 3 / cJass - дополнение к языку JASS

Doc, глянь сам, если время есть.
Мне кажется Removed unused code работает в последнюю очередь, поэтому жассхелпер и не видит ошибки, то бишь адик -> жассхелпер -> Removed unused code. Это мое предположение)
Некрон71 добавил:
Кстати, exehack.lua у меня вообще нет
Обновил только что AdicParser, загрузил мапу, сохранился и выскочили ошибки. Вот пример, который отражает суть этих ошибок:
scope Test initializer Init{

include "cj_types_priv.j"

private struct A{
 
 unit u
 
 static void New(bool b){
     if (b) {
       thistype this=thistype.allocate()
       unit u = CreateUnit (Player(0), 'Hamg', 100., 0., 0.)
       this.u = CreateUnit (Player(0), 'Hpal', 0., 0., 0.)
       BJDebugMsg(GetUnitName(u))
       BJDebugMsg(GetUnitName(this.u))
     }  
 }
 
}
 
 private void Init(){
      A.New(true)
 }

 
}
Будет скомпилировано на Jass:
// scope Test begins
struct Test___A

unit u

static method New takes boolean b returns nothing
      local thistype cjlocgn_00000000
      local unit cjlocgn_00000001
      if (b) then
        set cjlocgn_00000000=thistype.allocate()
        set cjlocgn_00000001=CreateUnit(Player(0),0x48616D67,100.,0.,0.)
        set cjlocgn_00000000.cjlocgn_00000001=CreateUnit(Player(0),0x4870616C,0.,0.,0.) //А должно быть set s__Test___A_u[cjlocgn_00000000]=CreateUnit(Player(0), 0x4870616C, 0., 0., 0.)
        call BJDebugMsg(GetUnitName(cjlocgn_00000001))
        call BJDebugMsg(GetUnitName(cjlocgn_00000000.cjlocgn_00000001)) //А должно быть call BJDebugMsg(GetUnitName(s__Test___A_u[cjlocgn_00000000]))
     endif
endmethod

endstruct


function Test___Init takes nothing returns nothing
      call Test___A.New(true)
endfunction
// scope Test ends
То бишь если локальная переменная объявлена не в начале функции и при этом имеет одинаковое имя с переменной структуры, то происходит такая байда.
Если мы заменим имя либо локальной переменной, либо переменной структуры, то все будет Окей:
// scope Test begins
function s__Test__A_New takes boolean b returns nothing
      local integer cjlocgn_00000000
      local unit cjlocgn_00000001
      if ( b ) then
        set cjlocgn_00000000=s__Test__A__allocate()
        set cjlocgn_00000001=CreateUnit(Player(0), 0x48616D67, 100., 0., 0.)
        set s__Test__A_u[cjlocgn_00000000]=CreateUnit(Player(0), 0x4870616C, 0., 0., 0.)
        call BJDebugMsg(GetUnitName(cjlocgn_00000001))
        call BJDebugMsg(GetUnitName(s__Test__A_u[cjlocgn_00000000]))
      endif
endfunction

function Test__Init takes nothing returns nothing
      call s__Test__A_New(true)
endfunction
// scope Test ends
0
2
13 лет назад
0

» WarCraft 3 / cJass - дополнение к языку JASS

DotaMaster666, это понятно. В моем примере optional я поставил перед одной функцией, но почему-то пропадает две.
0
2
13 лет назад
0

» WarCraft 3 / cJass - дополнение к языку JASS

Столкнулся вот с такой проблемой:
Показываю на простом примере
сJass
scope A initializer Init{

include "cj_types_priv.j"

 void func_0(int i){}
 optional void func_1 () {}

 void func_2 (int i) { BJDebugMsg(I2S(1)); unit u = CreateUnit(Player(0), 'Hpal', 100., 0., 0.) }
 
 private void Init(){
      BJDebugMsg("Init")
      unit pal = CreateUnit (Player(0), 'Hpal', 0., 0., 0.)
      func_2(5)
      flush locals
 }

}
скомпилировано на Jass
...
function A__Init takes nothing returns nothing
    local unit pal
    call BJDebugMsg("Init")
    set pal = CreateUnit(Player(0),0x4870616C,0.,0.,0.)
    call func_2(5)
    set pal=null
endfunction
...
Функции func_2 нет! В результате карта не запускается, но сохраняется без ошибок.
А если закоментить optional , то карта запускается, но func_1 остается:
сJass
scope A initializer Init{

include "cj_types_priv.j"

 void func_0(int i){}
 /*optional*/ void func_1 () {}

 void func_2 (int i) { BJDebugMsg(I2S(1)); unit u = CreateUnit(Player(0), 'Hpal', 100., 0., 0.) }
 
 private void Init(){
      BJDebugMsg("Init")
      unit pal = CreateUnit (Player(0), 'Hpal', 0., 0., 0.)
      func_2(5)
      flush locals
 }

}
скомпилировано на Jass
...
function func_1 takes nothing returns nothing
endfunction

function func_2 takes integer i returns nothing
    local unit u
    call BJDebugMsg(I2S(1))
    set u = CreateUnit(Player(0),0x4870616C,100.,0.,0.)
    endfunction

function A__Init takes nothing returns nothing
    local unit pal
    call BJDebugMsg("Init")
    set pal = CreateUnit(Player(0),0x4870616C,0.,0.,0.)
    call func_2(5)
    set pal = null
endfunction
...
В принципе это не так страшно.
3
2
14 лет назад
3

» WarCraft 3 / Осваиваем JASS - исправления и дополнения

fobius, Статься понятная, читай внимательнее, перечитывай по нескольку раз, и занимайся практикой, да и ведь это статья исправляет ошибки в статье Сергея, так что прочти для ознакомления и ее
2
2
14 лет назад
2

» WarCraft 3 / Вышел новый патч 1.24

где можно прочесть о хэш таблицах?