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

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

Ответ
 
TIS_Elektronik

offline
Опыт: 521
Активность:
ошибка в триггере синхронизации
помогите пожалуйста найти ошибку:
globals
	//constant player LocalPlayer = GetLocalPlayer()
	gamecache cache = InitGameCache("cache")
endglobals

function GetPlayerCameraLoc takes player p returns location
	if (GetLocalPlayer() == p) then
		return GetCameraTargetPositionLoc()
	endif
	return null
endfunction

function SyncLocXY takes player p, real x, real y returns location
	if (GetLocalPlayer() == p) then
		call StoreReal(cache, "loc", "x", x)
		call StoreReal(cache, "loc", "y", y)
	endif
	call TriggerSyncStart()
	if (GetLocalPlayer() == p) then
		call SyncStoredReal(cache, "loc", "x")
		call SyncStoredReal(cache, "loc", "y")
	endif
	call TriggerSleepAction(2.)
	call TriggerSyncReady()
	return Location(GetStoredReal(cache, "loc", "x"),GetStoredReal(cache, "loc", "y"))
endfunction

function SyncCameraTarget takes nothing returns nothing
    local location LOCAL_Point
    set LOCAL_Point = GetPlayerCameraLoc(udg_A_Player)
    set udg_A_Camera_Target = SyncLocXY(udg_A_Player, GetLocationX(LOCAL_Point), GetLocationY(LOCAL_Point))
    call RemoveLocation(LOCAL_Point)
    set LOCAL_Point = null
endfunction
всё сохраняется, играет
но десинхронизация происходит все равно
что не так?
а, и кстати если расскоментировать "constant player LocalPlayer = GetLocalPlayer()", то вар выкидывает на рабочий стол при выборе карты, а иногда и с фаталом
TIS_Elektronik добавил:
всмысле десинхронизация происходит после использования функции SyncCameraTarget

Отредактировано TIS_Elektronik, 25.08.2011 в 15:52.
Старый 25.08.2011, 15:39
Doc

offline
Опыт: 63,163
Активность:
function GetPlayerCameraLoc takes player p returns location
	if (GetLocalPlayer() == p) then
		return GetCameraTargetPositionLoc()
	endif
	return null
endfunction
Внимательней статью надо было читать.
Старый 25.08.2011, 16:14
TIS_Elektronik

offline
Опыт: 521
Активность:
Doc, да, ты как всегда прав!
я и подумать не мог что точка все испортит
если честно, то я не читал статью - так пробежался
вот рабочий код
function GetPlayerCameraX takes player p returns real
	if (GetLocalPlayer() == p) then
		return GetCameraTargetPositionX()
	endif
	return 0.
endfunction

function GetPlayerCameraY takes player p returns real
	if (GetLocalPlayer() == p) then
		return GetCameraTargetPositionY()
	endif
	return 0.
endfunction

function SyncReal takes player p, real r returns real
	if (GetLocalPlayer() == p) then
		call StoreReal(cache, "", "", r)
	endif
	call TriggerSyncStart()
	if (GetLocalPlayer() == p) then
		call SyncStoredReal(cache, "", "")
	endif
	call TriggerSleepAction(2.)
	call TriggerSyncReady()
	return GetStoredReal(cache, "", "")
endfunction

function SyncPlayerTarget takes nothing returns nothing
    local real LOCAL_X
    local real LOCAL_Y
    set LOCAL_X = GetPlayerCameraX(udg_A_Player)
    set LOCAL_Y = GetPlayerCameraY(udg_A_Player)
    set udg_A_Camera_Target = Location(SyncReal(udg_A_Player, LOCAL_X),SyncReal(udg_A_Player, LOCAL_Y))
    set LOCAL_X = 0.
    set LOCAL_Y = 0.
endfunction
подскажите пожалуйста: есть ли утечки? кэш надо как-то обнулять? функция будет вызываться довольно часто
и ещё. Чтоб раскоментировать constant player LocalPlayer = GetLocalPlayer() обязательно надо писать #define <GetLocalPlayer()> = LocalPlayer? или я что-то непонял?
а, ещё:
можно ли тут ставить число по-меньше? call TriggerSleepAction(2.)
Старый 25.08.2011, 16:47
Doc

offline
Опыт: 63,163
Активность:
#define <GetLocalPlayer()> = LocalPlayer? или я что-то непонял?
нет необязательно.
вообще, constant там не обязательно.
можно ли тут ставить число по-меньше? call TriggerSleepAction(2.)
протести, я не знаю.
Старый 25.08.2011, 17:41
TIS_Elektronik

offline
Опыт: 521
Активность:
Doc:
#define <GetLocalPlayer()> = LocalPlayer? или я что-то непонял?
нет необязательно.
просто если расскоментить, то при выборе карты вар выкидывает на рабочий стол, а иногда и с фатал эрор
(без constant не пробовал)
блин. у меня теперь ужас творится по всей карте, все триггеры теперь как через ж.. работают хотя ничего не менял
всмысле условия не правильно проверяются
(ну с этим я разберусь сам)
тему пока не надо закрывать, вдруг что-то с этим связано
Старый 25.08.2011, 17:47
Ответ

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

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

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

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



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