Форум Pawn.Wiki - Воплоти мечту в реальность!: Не правильно возвращает на место после слежки - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Pawn ]
Не правильно возвращает на место после слежки

#1
Пользователь офлайн   elishanky 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Привет , сделал таймер на 2 сек чтобы возвращал обратно . Иногда возвращает, иногда игрока тхпает там где слежка была .
Без таймера спавнит игрока на обычный спавн


new Float:x, Float:y, Float:z, Float:a;
			    GetPlayerPos(playerid, x, y, z);
			    GetPlayerFacingAngle(playerid, a);
			    SetPVarFloat(playerid, "savedX", x);
			    SetPVarFloat(playerid, "savedY", y);
			    SetPVarFloat(playerid, "savedZ", z);
			    SetPVarFloat(playerid, "savedA", a);
			    SetPVarInt(playerid, "savedInterior", GetPlayerInterior(playerid));
			    SetPVarInt(playerid, "savedVW", GetPlayerVirtualWorld(playerid));
				switch(listitem)
				{
		            case 0:
		            {
		                TogglePlayerSpectating(playerid, 1);
		                InterpolateCameraPos(playerid, 1785.1234, -48.9043, 1005.0756, 1785.1234, -48.9043, 1005.0756, 1000);
		                InterpolateCameraLookAt(playerid, 1785.3756, -51.2443, 1005.2756, 1785.37456, -51.2443, 1005.2756, 1000);
		                SetPlayerInterior(playerid, 14);
		                SetPlayerVirtualWorld(playerid, 0);
					}




 TogglePlayerSpectating(playerid, 0);
SetTimerEx("ReturnPosition", 200, false, "d", playerid);
 return true;


Возвращение
forward ReturnPosition(playerid);
public ReturnPosition(playerid)
{
    new Float:x = GetPVarFloat(playerid, "savedX");
    new Float:y = GetPVarFloat(playerid, "savedY");
    new Float:z = GetPVarFloat(playerid, "savedZ");
    new Float:a = GetPVarFloat(playerid, "savedA");
    new interior = GetPVarInt(playerid, "savedInterior");
    new vw = GetPVarInt(playerid, "savedVW");
    SetPlayerInterior(playerid, interior);
    SetPlayerVirtualWorld(playerid, vw);
    SetPlayerPos(playerid, x, y, z);
    SetPlayerFacingAngle(playerid, a);
    DeletePVar(playerid, "savedX");
    DeletePVar(playerid, "savedY");
    DeletePVar(playerid, "savedZ");
    DeletePVar(playerid, "savedA");
    DeletePVar(playerid, "savedInterior");
    DeletePVar(playerid, "savedVW");
}

Сообщение отредактировал elishanky: 15 апреля 2025 - 19:26

0

#2
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
А зачем таймер? Сделай что-то типа:

new bool:PlayerLeftSpectating[MAX_PLAYERS char];

// OnPlayerConnect
PlayerLeftSpectating{playerid} = false;

// При выходе из режима слежки (там, где )
PlayerLeftSpectating{playerid} = true;

// В OnPlayerSpawn
if(PlayerLeftSpectating{playerid})
{
    PlayerLeftSpectating{playerid} = false;
    // Тут устанавливай нужные координаты
}


Хотя, по-хорошему, лучше использовать SetSpawnInfo, но тут уже нужно будет всю систему спавнов переделывать под это.

И что за первый код? При каких обстоятельствах он вызывается?

Сообщение отредактировал DeimoS: 15 апреля 2025 - 19:47

0

#3
Пользователь офлайн   elishanky 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (15 апреля 2025 - 19:46) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

первый код просмотривать камеры диалог открывается с 4 пунктами. Я там добавил только один пункт case 0 , а так 4 пункта

А устанавливать при просмотре камеры ну когда игрок в режим слежки отправляется ?

Сообщение отредактировал elishanky: 15 апреля 2025 - 20:04

0

#4
Пользователь офлайн   elishanky 

  • Местный
  • Вставить ник
  • Раскрыть информацию
И куда вставить TogglePlayerSpectating(playerid, 0); ? При спавне, или при выходе из слежки ?
0

#5
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияelishanky (15 апреля 2025 - 20:03) писал:

А устанавливать при просмотре камеры ну когда игрок в режим слежки отправляется ?


Не очень понял вопроса. Если про присвоение переменной "true", то в момент выхода из слежки (при вызове TogglePlayerSpectating)

Просмотр сообщенияelishanky (15 апреля 2025 - 20:44) писал:

И куда вставить TogglePlayerSpectating(playerid, 0); ? При спавне, или при выходе из слежки ?


При выходе. TogglePlayerSpectating игрока отправляет на спавн, вызывая OnPlayerSpawn
0

#6
Пользователь офлайн   elishanky 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (15 апреля 2025 - 20:55) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

да точно , простите тупость несу .
Я сделал точно так , но игрока отправляет на обычный спавн фракции

При выходе

PlayerLeftSpectating(playerid) = true;
TogglePlayerSpectating(playerid, 0)
;

OnPlayerSpawn

if (PlayerLeftSpectating[playerid])
    {
        SetPlayerPos(playerid, 778.244,1460.3546.5311.1155);
        SetPlayerInterior(playerid, 10);
        SetPlayerVirtualWorld(playerid, 6);
        PlayerLeftSpectating[playerid] = false;
    }

Сообщение отредактировал elishanky: 15 апреля 2025 - 21:07

0

#7
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
Ну значит обычный спавн фракции у тебя либо раньше срабатывает и прерывает выполнение кода, либо ты не прерываешь выполнение кода в этом новом условии и срабатывает код фракции, который ниже.

Тебе нужно не просто условие добавить, а учесть другие условия + убедиться, что ты все нужные вещи выдаёшь игроку в момент спавна.
0

#8
Пользователь офлайн   elishanky 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (15 апреля 2025 - 21:06) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Спавн обычный фракции то есть код ниже этого кода PlayerLeftSpectating в OnPlayerSpawn.
SpawnPlayerServ(playerid);

PlayerLeftSpectating(playerid) = true;
TogglePlayerSpectating(playerid, 0)
;

OnPlayerSpawn

if (PlayerLeftSpectating[playerid])
    {
        SetPlayerPos(playerid, 778.244,1460.3546.5311.1155);
        SetPlayerInterior(playerid, 10);
        SetPlayerVirtualWorld(playerid, 6);
        PlayerLeftSpectating[playerid] = false;
    }

0

#9
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
Повторюсь: тут нужно твой OnPlayerSpawn частично или полностью переписывать, учитывая и другой код в коллбэке.
0

#10
Пользователь офлайн   elishanky 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (15 апреля 2025 - 21:14) писал:

Повторюсь: тут нужно твой OnPlayerSpawn частично или полностью переписывать, учитывая и другой код в коллбэке.

разобрался, спасибо проблема была в другом
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика