Я не понимаю, почему происходит десинк? Как только какой-то герой ластхитит крипа сразу же его выкидывает с карты. Я создаю эффект у него локально и сразу уничтожаю, давая проиграться анимации... Создаю флоатинг текст У ВСЕХ и удаляю спустя время У ВСЕХ (чтобы было проще удалить и избежать утечек), но показываю локально игроку.
Почему десинк?! Сквозь и рядом пишется, что работа с эффектами и текстом не вызывает десинхронизации. Или я чего-то недопонимаю?
...
	if (GetLocalPlayer() == p)
	{
		DestroyEffect(AddSpecialEffectLoc("UI\\Feedback\\GoldCredit\\GoldCredit.mdl", loc));
	}
	FTextLocForPlayer("|c00E6E600+" + I2S(gold) + "!|r", p, 2.5, loc);
И сама функция для флоатинг текста:
void FTextLocForPlayer(string Text, player p, float Time, location loc)
{
    texttag tt = CreateTextTag();
	timer t = CreateTimer();
	float xvel = (85.0 * 0.071 / 128) * Cos(90 * bj_DEGTORAD);
	float yvel = (85.0 * 0.071 / 128) * Sin(90 * bj_DEGTORAD);
	

	SetTextTagText(tt, Text, (10.00 * 0.023 / 10));
	SetTextTagPos(tt, GetLocationX(loc), GetLocationY(loc), 0);
	SetTextTagVelocity(tt, xvel, yvel);
	SetTextTagColor(tt, 255, 255, 255, 255);
	SetTextTagPermanent(tt, false);
	SetTextTagLifespan(tt, Time);
	SetTextTagFadepoint(tt, (Time/2.00));

	if (GetLocalPlayer() == p)
	{
		SetTextTagVisibility(tt, true);
	}
	else
	{
		SetTextTagVisibility(tt, false);
	}
    
    SaveTextTagHandle(g_Hashtable, GetHandleId(t), TEXTSPAN, tt);
    
    TimerStart(t, Time, false, lambda void() 
    {
        timer t = GetExpiredTimer();
        texttag tt = LoadTextTagHandle(g_Hashtable, GetHandleId(t), TEXTSPAN);
        DestroyTextTag(tt);
        DestroyTimer(t);
    });
}

Замени
local string t = ""
if (GetLocalPlayer() == p)
	{
		set t = "UI\\Feedback\\GoldCredit\\GoldCredit.mdl"
	}
	DestroyEffect(AddSpecialEffectLoc(t, loc))

	SetTextTagVisibility(tt, GetLocalPlayer() == p);
`
ОЖИДАНИЕ РЕКЛАМЫ...
22
Замени
local string t = ""
if (GetLocalPlayer() == p)
	{
		set t = "UI\\Feedback\\GoldCredit\\GoldCredit.mdl"
	}
	DestroyEffect(AddSpecialEffectLoc(t, loc))

	SetTextTagVisibility(tt, GetLocalPlayer() == p);
Принятый ответ
3
JMCode:
Замени
local string t = ""
if (GetLocalPlayer() == p)
	{
		set t = "UI\\Feedback\\GoldCredit\\GoldCredit.mdl"
	}
	DestroyEffect(AddSpecialEffectLoc(t, loc))

	SetTextTagVisibility(tt, GetLocalPlayer() == p);
Уже лучше, рассинхрона нет, но эффект не показывает.
22
ну у тя же cJass значит подругому пишет или что то
21
А зачем эффект создавать локально? У стандартной награды за убийство эффект появляется у всех игроков, а тексттаг у того, кто убил.
29
if (GetLocalPlayer() == p)
	{
		SetTextTagVisibility(tt, true);
	}
	else
	{
		SetTextTagVisibility(tt, false);
	}
Зачем так писать, если можно SetTextTagVisibility(tt, GetLocalPlayer() == p);
И да, работа с эффектами описана в xgm.guru/p/wc3/getlocalplayer
Если это не работает, советую проверить, работает ли оно, если создавать эффект вообще всем.
17
Попробуй по другому пути пойти:
Создай даммика для всех, перемести куда нужно
На даммика для локального игрока вешай спецэффект
Ну и удаляй даммик через Х время
Чтобы оставить комментарий, пожалуйста, войдите на сайт.