11/01/2025 07:57
(Esta mensagem foi modificada pela última vez a: 11/01/2025 18:47 por xbruno1000x.)
galera porq quando eu uso o comando kart eu spawno no nada e o player nao entra dentro do veiculo para iniciar o evento? outra coisa porq quando passo do primeiro check point o segundo checkpoint nao segue a ordem que coloquei no float ele vai para outro lugar nada aver me ajude nesse script estou sem saber oq fazer
Código:
#include <a_samp>
#include <float>
#include <zcmd>
#define FILTERSCRIPT
#define spawnX 1310.000000
#define spawnY -1370.199951
#define spawnZ 13.500000
new playerinminigame[MAX_PLAYERS];
new karts[15],kartfull[15],karton,kartplaying,playerinkartrace[MAX_PLAYERS],kartrank,playerinkart[MAX_PLAYERS],currentcheckpoint[MAX_PLAYERS],krtfirst,playercarid[MAX_PLAYERS],reward;
forward RewardCalc(playerid,min,max);
new startvar[8];
new krttimer;
forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
forward load();
forward SpawnKarts();// KartRace
forward DestroyKarts();
forward RespawnKarts();
forward StartKart();
forward KrtFinish();
forward RewardCalc(playerid, min, max);
public RewardCalc(playerid,min,max)//Originally from PenLS
{
reward = (min + (random(max-min)));
}
public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
if(IsPlayerConnected(playerid))
{
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
tempposx = (oldposx -x);
tempposy = (oldposy -y);
tempposz = (oldposz -z);
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
return 1;
}
}
return 0;
}
// Karts:
new Float:kartspawns[15][4] = {
{-1366.1909, 906.8451, 1040.5919, 280.3004}, // 0
{-1366.4854, 908.3992, 1040.2843, 280.3004}, // 1
{-1366.8508, 910.3288, 1039.9022, 280.3004}, // 2
{-1367.2168, 912.2613, 1039.5195, 280.3004}, // 3
{-1367.7562, 915.1094, 1038.9557, 280.3004}, // 4
{-1368.4265, 918.6667, 1038.4503, 280.3231}, // 5
{-1368.8036, 920.6827, 1038.1428, 280.3231}, // 6
{-1369.1410, 922.4866, 1037.8677, 280.3231}, // 7
{-1372.5338, 921.9490, 1037.9705, 277.8816}, // 8
{-1372.2379, 919.8677, 1038.2872, 277.8816}, // 9
{-1371.9086, 917.5515, 1038.6396, 277.8816}, // 10
{-1371.6196, 915.5192, 1038.9486, 277.8816}, // 11
{-1371.2595, 912.9866, 1039.3340, 277.8816}, // 12
{-1371.0453, 911.4792, 1039.5632, 277.8816}, // 13
{-1370.6086, 908.9531, 1040.1785, 275.7079} // 14
};
// Kartrace checkpoints:
new Float:kcps[5][3] = {
{-1333.6610, 1075.3275, 1039.0237}, // 0
{-1491.8690, 1059.1649, 1038.7557}, // 1
{-1408.2827, 912.7866, 1039.3793}, // 2
{-1265.9485, 1020.5936, 1038.7000}, // 3
{-1439.3894, 1079.5360, 1038.8770} // 4
};
public SpawnKarts()
{
for (new i = 0; i < 15; i++)
{
karts[i] = CreateVehicle(571, kartspawns[i][0], kartspawns[i][1], kartspawns[i][2], kartspawns[i][3], -1, -1, -1);
LinkVehicleToInterior(karts[i], 15);
SetVehicleVirtualWorld(karts[i], 1);
kartfull[i] = 0;
}
return 1;
}
public DestroyKarts()
{
for (new i = 0; i < 15; i++)
{
DestroyVehicle(karts[i]);
kartfull[i] = 0;
}
}
public RespawnKarts()
{
for (new i = 0; i < 15; i++)
{
SetVehicleToRespawn(karts[i]);
SetVehicleVirtualWorld(karts[i], 1);
kartfull[i] = 0;
}
}
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
SetTimer("load", 2000, 0);
return 1;
}
public OnFilterScriptExit()
{
DestroyKarts();
return 1;
}
#endif
public OnGameModeInit()
{
SetTimer("load", 2000, 0);
return 1;
}
public StartKart()
{
if(startvar[6] == 1) {
if( kartrank <= 1 )//menor q 1
{
SendClientMessageToAll(0x33AA33AA, "corrida de Kart cancelado. Motivo: Jogadores Insuficientes (Minimo = 2)");
kartplaying = 0;
kartrank = 0;
karton = 0;
startvar[6] = 0;
RespawnKarts();
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if (playerinkartrace[i] == 1)
{
playerinkartrace[i] = 0;
playerinminigame[i] = 0;
playerinkart[i] = -1;
SetPlayerVirtualWorld(i,0);
SetPlayerInterior(i, 15);
SetPlayerPos(i, spawnX,spawnY,spawnZ);
TogglePlayerControllable(i, 1);
}
}
}
return 1;
}
new string[32];
format(string, sizeof(string), "~r~3");
new gdelay=1000;
kartplaying = 1;
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if (playerinkartrace[i] == 1)
{
GameTextForPlayer(i, string, gdelay, 6);
PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
}
}
}
startvar[6] = 2;
SetTimer("StartKart", gdelay, 0);
} else if(startvar[6] == 2) {
new string[32];
format(string, sizeof(string), "~r~2");
new hdelay=1000;
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if (playerinkartrace[i] == 1)
{
GameTextForPlayer(i, string, hdelay, 6);
PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
}
}
}
startvar[6] = 3;
SetTimer("StartKart", hdelay, 0);
} else if(startvar[6] == 3) {
new rdelay=1000;
new string[32];
format(string, sizeof(string), "~g~1!");
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if (playerinkartrace[i] == 1)
{
GameTextForPlayer(i, string, rdelay, 6);
PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
TogglePlayerControllable(i, 1);
}
}
}
SetTimer("KrtFinish",300000,0);
startvar[6] = 0;
}
return 1;
}
public KrtFinish()
{
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if (playerinkartrace[i] == 1)
{
playerinkartrace[i] = 0;
playerinminigame[i] = 0;
SetPlayerVirtualWorld(i,0);
SetPlayerInterior(i, 0);
SetPlayerPos(i, spawnX, spawnY, spawnZ);
}
}
}
kartplaying = 0;
kartrank = 0;
karton = 0;
RespawnKarts();
SendClientMessageToAll(0x33AA33AA, "A corrida de kart acabou");
return 1;
}
public OnGameModeExit()
{
DestroyKarts();
return 1;
}
public OnPlayerConnect(playerid)
{
playerinminigame[playerid] = 0; // Checks if a player is in a minigame
playerinkartrace[playerid] = 0; // Kart Race
playerinkart[playerid] = -1;
//currentcheckpoint[playerid] = 0;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new str[256]; // Declarando a variável 'str' corretamente
if (playerinkartrace[playerid] == 1)
{
new KartPlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, KartPlayerName, sizeof(KartPlayerName));
format(str, sizeof(str), "%s foi descartado da corrida de kart", KartPlayerName); // Agora 'str' está declarado corretamente
SendClientMessageToAll(0x33AA33AA, str); // Enviando a mensagem para todos
playerinkartrace[playerid] = 0;
playerinminigame[playerid] = 0;
kartfull[playerinkart[playerid]] = 0;
playerinkart[playerid] = -1;
if (kartrank <= 1)
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i) && playerinkartrace[i] == 1)
{
playerinkartrace[i] = 0;
playerinminigame[i] = 0;
SetPlayerVirtualWorld(i, 0);
SetPlayerInterior(playerid, 0);
SetPlayerPos(i, spawnX, spawnY, spawnZ);
}
}
kartplaying = 0;
kartrank = 0;
karton = 0;
KillTimer(krttimer);
RespawnKarts();
return 1;
}
kartrank--;
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
new str[256]; // Declarando a variável 'str' corretamente
if (playerinkartrace[playerid] == 1)
{
new KartPlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, KartPlayerName, sizeof(KartPlayerName));
format(str, sizeof(str), "%s foi descartado da corrida de kart", KartPlayerName); // Agora 'str' está declarado corretamente
SendClientMessageToAll(0x33AA33AA, str); // Enviando a mensagem para todos
playerinkartrace[playerid] = 0;
playerinminigame[playerid] = 0;
kartfull[playerinkart[playerid]] = 0;
playerinkart[playerid] = -1;
if (kartrank <= 1)
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i) && playerinkartrace[i] == 1)
{
playerinkartrace[i] = 0;
playerinminigame[i] = 0;
SetPlayerVirtualWorld(i, 0);
SetPlayerInterior(playerid, 0);
SetPlayerPos(i, spawnX, spawnY, spawnZ);
}
}
kartplaying = 0;
kartrank = 0;
karton = 0;
KillTimer(krttimer);
RespawnKarts();
return 1;
}
kartrank--;
}
// }
return 1;
}
CMD:kart(playerid)
{
if(kartplaying == 1)return SendClientMessage(playerid, 0xB4B5B7AA, "A corrida de kart já começou");
if(playerinminigame[playerid] == 1)return SendClientMessage(playerid, 0xB4B5B7AA, "Você já está em um minigame");
new pname[256];
GetPlayerName(playerid, pname, 256);
new str[256]; // Declarando a variável 'str' corretamente
if(karton == 0)
{
karton = 1;
playerinminigame[playerid] = 1;
playerinkartrace[playerid] = 1;
kartrank = 1;
krtfirst = 1;
currentcheckpoint[playerid] = 0;
SetPlayerInterior(playerid, 15);
SetPlayerVirtualWorld(playerid, 7);
SetVehicleVirtualWorld(karts[0], 7);
kartfull[0] = 1;
PutPlayerInVehicle(playerid, karts[0], 0);
playerinkart[playerid] = 0;
TogglePlayerControllable(playerid, 0);
SetPlayerRaceCheckpoint(playerid, 0, kcps[0][0], kcps[0][1], kcps[0][2], kcps[1][0], kcps[1][1], kcps[1][2], 20);
startvar[6] = 1;
krttimer = SetTimer("StartKart", 60000, 0);
format(str, sizeof(str), "%s[%s] entrou no evento [kart], /kart", pname,playerid); // Agora 'str' está declarado corretamente
SendClientMessageToAll(0x33AA33AA, str); // Enviando a mensagem para todos
return 1;
}
else if(karton == 1 && kartrank < 15) {
playerinminigame[playerid] = 1;
playerinkartrace[playerid] = 1;
kartrank++;
currentcheckpoint[playerid] = 0;
SetPlayerInterior(playerid, 15);
for(new i=0; i<15; i++)
{
if(kartfull[i] == 0)
{
SetPlayerVirtualWorld(playerid, 7);
SetVehicleVirtualWorld(karts[i], 7);
kartfull[i] = 1;
PutPlayerInVehicle(playerid, karts[i], 0);
TogglePlayerControllable(playerid, 0);
SetPlayerRaceCheckpoint(playerid, 0, kcps[0][0], kcps[0][1], kcps[0][2], kcps[1][0], kcps[1][1], kcps[1][2], 20);
playerinkart[playerid] = i;
format(str, sizeof(str), "%s juntou-se a corrida de kart", pname); // Agora 'str' está declarado corretamente
SendClientMessageToAll(0x33AA33AA, str); // Enviando a mensagem para todos
return 1;
}
}
}
else if(karton == 1 && kartrank >= 15) {
format(str, sizeof(str), "A corrida de kart está cheia, esperar para a próxima rodada", pname); // Agora 'str' está declarado corretamente
SendClientMessage(playerid, 0x33AA33AA, str); // Enviando a mensagem para o jogador
return 1;
}
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == 2)
{
playercarid[playerid] = GetPlayerVehicleID(playerid);
}
if(oldstate == 2)
{
if(playerinkartrace[playerid])
{
PutPlayerInVehicle(playerid,playercarid[playerid],0);
}
}
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
if (playerinkartrace[playerid])
{
if (currentcheckpoint[playerid] <= 2)
{
currentcheckpoint[playerid]++;
DisablePlayerRaceCheckpoint(playerid);
SetPlayerRaceCheckpoint(playerid, 0, kcps[currentcheckpoint[playerid]][0], kcps[currentcheckpoint[playerid]][1], kcps[currentcheckpoint[playerid]][2],
kcps[currentcheckpoint[playerid] + 1][0], kcps[currentcheckpoint[playerid] + 1][1], kcps[currentcheckpoint[playerid] + 1][2], 20);
}
else if (currentcheckpoint[playerid] >= 3 && currentcheckpoint[playerid] != 7)
{
currentcheckpoint[playerid]++;
DisablePlayerRaceCheckpoint(playerid);
SetPlayerRaceCheckpoint(playerid, 0, kcps[currentcheckpoint[playerid] - 4][0], kcps[currentcheckpoint[playerid] - 4][1],
kcps[currentcheckpoint[playerid] - 4][2], kcps[currentcheckpoint[playerid] - 3][0], kcps[currentcheckpoint[playerid] - 3][1],
kcps[currentcheckpoint[playerid] - 3][2], 20);
}
else if (currentcheckpoint[playerid] == 7)
{
if (krtfirst == 1)
{
DisablePlayerRaceCheckpoint(playerid);
new string[256];
krtfirst++;
kartrank--;
new winnername[256];
GetPlayerName(playerid, winnername, sizeof(winnername));
RewardCalc(playerid, 5000, 10000);
format(string, sizeof(string), "%s ganhou a corrida de kart e ganhou $%d", winnername, reward);
SendClientMessageToAll(0x33AA33AA, string);
GivePlayerMoney(playerid, reward);
playerinkartrace[playerid] = 0;
playerinminigame[playerid] = 0;
currentcheckpoint[playerid] = 0;
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid, spawnX, spawnY, spawnZ);
if (kartrank == 0)
{
KrtFinish();
}
else
{
SetTimer("KrtFinish", 60000, 0);
}
}
else
{
DisablePlayerRaceCheckpoint(playerid);
playerinkartrace[playerid] = 0;
playerinminigame[playerid] = 0;
currentcheckpoint[playerid] = 0;
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid, spawnX, spawnY, spawnZ);
if (kartrank == 0)
{
KrtFinish();
}
else
{
SetTimer("KrtFinish", 60000, 0);
}
}
return 1;
}
}
return 0;
}