Portal SAMP
[Ajuda] Camera em looping - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Camera em looping (/showthread.php?tid=4107)



Camera em looping - GuiLopeS - 20/10/2023

Boa noite, como faço para uma camera ficar indo e voltando do primeiro ponto ao segundo ponto? no caso InterpolateCameraPos e InterpolateCameraLookAt como faço para irem do ponto inicial até o ponto final e depois voltar, e depois de voltar ir em outro ponto?


RE: Camera em looping - leonardos08bt - 20/10/2023

Verifica se o jogador está em tal posição, e depois faz ele voltar.
Eu nunca fiz isso mas eu acho que funciona,.

Na minha mente é o seguinte:

Pega a posição "end" da câmera e verifica se a câmera do jogador está nela. (GetPlayerCameraPos), ou até mesmo se o jogador está na posição(getplayerpos).
Aí depois você inverte as posições "start - end" da câmera pra fazer voltar.
Acho que dá pra entender a lógica.


RE: Camera em looping - GuiLopeS - 21/10/2023

Mano acho que consegui resolver, fiz assim


Código PHP:
new Cameras;
new 
Cam[MAX_PLAYERS];

CMD:irmg(playeridparams[])
{
new 
string[100];
if(
MGON == false)
{
SendClientMessage(playerid, -1"Nenhum minigame aberto no momento!");
return 
1;
}
if(
PlayerNoMG[playerid] == 1)
{
SendClientMessage(playerid, -1"Voce ja esta no minigame!");
return 
1;
}
if(
MGAcontecendo == true)
{
SendClientMessage(playerid, -1"O minigame ja iniciou!");
return 
1;
}
if(
MGON == true && Snipers >= 12 && Cars >= 12)
{
format(stringsizeof(string), "Evento minigame esta cheio,tente na proxima rodada.");//
SendClientMessage(playerid,-1,string);
}
if(
MGON == true && Balance == 0)
{
Rank ++;
Snipers += 1;
Balance 1;
ResetPlayerWeapons(playerid);
Equipes[playerid] = 1;
PlayerNoMG[playerid] = 1;
SetPlayerVirtualWorld(playerid,50);
new 
rand random(sizeof(SpawnSnipers));
SetPlayerPos(playeridSpawnSnipers[rand][0], SpawnSnipers[rand][1], SpawnSnipers[rand][2]);
TogglePlayerControllable(playeridfalse);
SetPlayerHealth(playeridFloat:15.0);
GivePlayerWeapon(playerid3499999);
SetPlayerSkillLevel(playeridWEAPONSKILL_SNIPERRIFLE999);
Camera1(playerid);                  //aqui chama a callback
format(stringsizeof(string), "%s juntou-se a equipe snipers!"GetPlayerNameEx(playerid));
SendClientMessageToAll(-1string); 
}
else if(
MGON == true && Balance == 1)
{
Rank ++;
Cars += 1;
Balance 0;
Equipes[playerid] = 2;
ResetPlayerWeapons(playerid);
PlayerNoMG[playerid] = 1;
PlayerNoInfernus[playerid] = 0;
SetPlayerVirtualWorld(playerid,50);
    SetVehicleVirtualWorld(SInfernus[playerid],50);
PutPlayerInVehicle(playeridSInfernus[playerid], 0);
    TogglePlayerControllable(playeridfalse);
SetPlayerHealth(playeridFloat:15.0);
Camera1(playerid);                //aqui chama a callback
format(stringsizeof(string), "%s juntou-se a equipe carros!"GetPlayerNameEx(playerid));
SendClientMessageToAll(-1string);
}
return 
1;
}

forward Camera1(playerid);
public 
Camera1(playerid)
{
if(
Cameras == 0)
{
InterpolateCameraPos(playerid1637.531738, -2512.64306638.2036011596.504028, -2587.91406279.7338183000);
InterpolateCameraLookAt(playerid1637.570068, -2508.00170836.3444131600.545288, -2587.90820376.7896723000);
Cam[playerid] = SetTimerEx("Camera2"3000false"i"playerid);

}
forward Camera2(playerid);
public 
Camera2(playerid)
{
if(
Cameras == 0)
{
InterpolateCameraPos(playerid1596.504028, -2587.91406279.7338181634.439697, -2651.81054641.9628603000);
InterpolateCameraLookAt(playerid1600.545288, -2587.90820376.7896721634.262695, -2656.48022440.1843793000);
Cam[playerid] = SetTimerEx("Camera3"3000false"i"playerid);

}
forward Camera3(playerid);
public 
Camera3(playerid)
{
if(
Cameras == 0)
{
InterpolateCameraPos(playerid1634.439697, -2651.81054641.9628601596.504028, -2587.91406279.7338183000);
InterpolateCameraLookAt(playerid1634.262695, -2656.48022440.1843791600.545288, -2587.90820376.7896723000); 
Cam[playerid] = SetTimerEx("Camera4"3000false"i"playerid);
}
}
forward Camera4(playerid);
public 
Camera4(playerid)
{
if(
Cameras == 0)
{
InterpolateCameraPos(playerid1596.504028, -2587.91406279.7338181637.531738, -2512.64306638.2036013000);
InterpolateCameraLookAt(playerid1600.545288, -2587.90820376.7896721637.570068, -2508.00170836.3444133000);
Cam[playerid] = SetTimerEx("Camera1"3000false"i"playerid);
}
}

forward ContDownGO(playerid);
public 
ContDownGO(playerid)
{
    Count 0;
    PlayerPlaySound(playerid1057,0,0,0);
    GameTextForAll("~g~GO!!!",1000,6);
for(new 
0<= MAX_PLAYERSi++)
{
if(
IsPlayerConnected(i))
{
if (
PlayerNoMG[i] == 1)
{
PlayerPlaySound(i10570.00.00.0);
TogglePlayerControllable(itrue);
SetCameraBehindPlayer(i);              //aqui faz o jogador voltar a camera atras dele
}
}
}
SendClientMessageToAll(0x33AA33AA"O minigame iniciou!");
MGAcontecendo true;
Cameras 1;
    return 1;


Isso está certo ou vai dar problema? e outra coisa, preciso matar o timer?


RE: Camera em looping - zBreno - 21/10/2023

use um editor de câmera

https://drive.google.com/drive/folders/1_hvuZ9DSeqMypyiXSgDVdw2eSlkF6ow2?usp=sharing


RE: Camera em looping - GuiLopeS - 25/10/2023

(21/10/2023 18:17)zBreno Escreveu: use um editor de câmera

https://drive.google.com/drive/folders/1_hvuZ9DSeqMypyiXSgDVdw2eSlkF6ow2?usp=sharing

Mano eu usei um editor pra criar as câmeras, o meu problema era que eu não conseguia fazer elas irem de uma até a outra e vice-versa, mas consegui e parece que não teve nenhum problema.