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())
}
)
}
//...
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
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
...
fobius, Статься понятная, читай внимательнее, перечитывай по нескольку раз, и занимайся практикой, да и ведь это статья исправляет ошибки в статье Сергея, так что прочти для ознакомления и ее
» WarCraft 3 / Поворот камеры
» WarCraft 3 / Z цели Камеры
Мне это нужно для того, чтобы высчитывать Z цели камеры без задержки. Может кто-нибудь подскажет другой способ. Короче, вот примерный код:
» WarCraft 3 / cJass - дополнение к языку JASS
» WarCraft 3 / cJass - дополнение к языку JASS
Мне кажется Removed unused code работает в последнюю очередь, поэтому жассхелпер и не видит ошибки, то бишь адик -> жассхелпер -> Removed unused code. Это мое предположение)
Кстати, exehack.lua у меня вообще нет
Если мы заменим имя либо локальной переменной, либо переменной структуры, то все будет Окей:
» WarCraft 3 / cJass - дополнение к языку JASS
» WarCraft 3 / cJass - дополнение к языку JASS
А если закоментить optional , то карта запускается, но func_1 остается:
» WarCraft 3 / Осваиваем JASS - исправления и дополнения
» WarCraft 3 / Вышел новый патч 1.24