04.03.2017, 14:45
PHP код:
#include <a_samp>
#include <DOF2>
#include <ZCMD>
/*-------------------------------------------------------------------------------------------------------------------------------
| Configuraзхes |
| - PLAYER_FILE |
| Definiзгo utilizada para obter o caminho do arquivo. |
| Caso deixar padrгo, й necessбrio a pasta Spawn dentro da scriptfiles. |
| |
| - SPAWN_MODE |
| Caso o modo de spawn seja 1 o jogador serб forзado a ser levado a ъltima posiзгo salva assim |
| que ele der spawn pela primeira vez. |
| |
| Caso seja 2, o jogador tem um certo tempo para poder decidir se quer continuar na ъltima posi- |
| згo salva. (O tempo й configuravel) |
| |
| Caso seja 3, um dialog sera mostrado ao jogador para que ele escolha se quer continuar da ъl- |
| tima posiзгo salva ou continuar no local em que spawnou. |
| |
| - SPAWN_TIME |
| Tempo em segundos, em que o jogador deverб escolher se quer voltar а ъltima posiзгo salva, ou |
| continuar aonde estб. |
| |
| O SPAWN_TIME sу й utilizado caso SPAWN_MODE seja 2. |
| |
| - SPAWN_COMMAND_STYLE |
| Caso SPAWN_MODE seja 2, e SPAWN_COMMAND_STYLE seja 1, o jogador deverб apertar Y para continu- |
| continuar da ъtima posiзгo salva. |
| |
| Caso SPAWN_COMMAND_STYLE seja 2, o jogador deverб apertar digitar o comando para continuar da |
| ъtima posiзгo salva. |
| |
| - SPAWN_COMMAND |
| Comando utilizado para continuar do ъltima posiзгo salva. |
| |
| O SPAWN_COMMAND sу й utilizado caso SPAWN_MODE seja 2. |
| |
| - SPAWN_DIALOG |
| ID do dialog que vai ser utilizado. |
| |
--------------------------------------------------------------------------------------------------------------------------------*/
#define PLAYER_FILE "Spawn/%s.ini"
#define SPAWN_MODE 3
#define SPAWN_TIME 20//utilize em segundos, no caso 10 = 10 segundos.
#define SPAWN_COMMAND_STYLE 2
#define SPAWN_DIALOG 1380
#if SPAWN_MODE == 2
new
timeCheck[MAX_PLAYERS],
timerCheckSpawn[MAX_PLAYERS],
bool: spawningPlayer[MAX_PLAYERS];
#endif
new
bool: playerConnected[MAX_PLAYERS];
forward CheckSpawnPos(playerid);
forward CheckSpawnPosTime(playerid);
public OnFilterScriptExit()
{
DOF2_Exit();
return 1;
}
public OnPlayerConnect(playerid)
{
playerConnected[playerid]= true;
return 1;
}
public OnPlayerSpawn(playerid)
{
if(playerConnected[playerid])
{
new
playerFileFormatted[62];
format(playerFileFormatted, 62, PLAYER_FILE, GetPlayerNameEx(playerid));
if(!DOF2_FileExists(playerFileFormatted))
return DOF2_CreateFile(playerFileFormatted);
#if SPAWN_MODE == 1
return SetTimerEx("CheckSpawnPos", 500, false, "i", playerid);
#elseif SPAWN_MODE == 2
timerCheckSpawn[playerid] = SetTimerEx("CheckSpawnPosTime", 1000, true, "i", playerid);
spawningPlayer[playerid] = true;
return 1;
#elseif SPAWN_MODE == 3
ShowDialog(playerid, SPAWN_DIALOG);
#endif
playerConnected[playerid] = false;
}
return 1;
}
#if SPAWN_MODE == 2
#if SPAWN_COMMAND_STYLE == 1
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
if ((newkeys & KEY_YES) && !(oldkeys & KEY_YES))
if(spawningPlayer[playerid]) {
BreakLine(playerid);
SendClientMessage(playerid, 0x6491FFFF, "| LSpawn | {FFFFFF}Enviado а ъltima posiзгo salva.");
KillTimer(timerCheckSpawn[playerid]);
spawningPlayer[playerid] = false;
return CheckSpawnPos(playerid);
}
return 1;
}
#endif
#elseif SPAWN_MODE == 3
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case SPAWN_DIALOG:
{
if(!response)
return 1;
SendClientMessage(playerid, 0x6491FFFF, "| LSpawn | {FFFFFF}Enviado а ъltima posiзгo salva.");
CheckSpawnPos(playerid);
return 1;
}
}
return 0;
}
#endif
public OnPlayerDisconnect(playerid)
{
new
Float: flo_player_pos[3],
Float: flo_player_fa,
int_player_int = GetPlayerInterior(playerid),
playerFileFormatted[62];
GetPlayerPos(playerid, flo_player_pos[0], flo_player_pos[1], flo_player_pos[2]);
GetPlayerFacingAngle(playerid, flo_player_fa);
format(playerFileFormatted, 62, PLAYER_FILE, GetPlayerNameEx(playerid));
if(!DOF2_FileExists(playerFileFormatted))
DOF2_CreateFile(playerFileFormatted);
DOF2_SetFloat(playerFileFormatted, "Last Pos X", flo_player_pos[0]);
DOF2_SetFloat(playerFileFormatted, "Last Pos Y", flo_player_pos[1]);
DOF2_SetFloat(playerFileFormatted, "Last Pos Z", flo_player_pos[2]);
DOF2_SetFloat(playerFileFormatted, "Last Pos FA", flo_player_fa);
DOF2_SetInt(playerFileFormatted, "Last Int", int_player_int);
DOF2_SaveFile();
return 1;
}
public CheckSpawnPos(playerid)
{
new
Float: oldPlayerPos[3],
Float: oldPlayerPosFA,
oldPlayerPosInt,
playerFileFormatted[62];
playerConnected[playerid] = false;
format(playerFileFormatted, 62, PLAYER_FILE, GetPlayerNameEx(playerid));
oldPlayerPos[0] = DOF2_GetFloat(playerFileFormatted, "Last Pos X");
oldPlayerPos[1] = DOF2_GetFloat(playerFileFormatted, "Last Pos Y");
oldPlayerPos[2] = DOF2_GetFloat(playerFileFormatted, "Last Pos Z");
oldPlayerPosFA = DOF2_GetFloat(playerFileFormatted, "Last Pos FA");
oldPlayerPosInt = DOF2_GetInt(playerFileFormatted, "Last Int");
SetPlayerPos(playerid, oldPlayerPos[0], oldPlayerPos[1], oldPlayerPos[2]);
SetPlayerFacingAngle(playerid, oldPlayerPosFA);
SetPlayerInterior(playerid, oldPlayerPosInt);
return 1;
}
#if SPAWN_MODE == 2
public CheckSpawnPosTime(playerid)
{
timeCheck[playerid]++;
new l_string[128];
if (timeCheck[playerid] == 1)
{
#if SPAWN_COMMAND_STYLE == 1
format(string, sizeof string, "| LSpawn | {FFFFFF}Vocк tem {64DCFF}%d {FFFFFF}segundos para apertar a tecla {64DCFF}Y {FFFFFF}e continuar aonde", SPAWN_TIME);
SendClientMessage(playerid, 0x6491FFFF, string);
SendClientMessage(playerid, 0x6491FFFF, "| LSpawn | {FFFFFF}estava quando se desconectou do servidor pela ъltima vez.");
#elseif SPAWN_COMMAND_STYLE == 2
format(string, sizeof string, "| LSpawn | {FFFFFF}Vocк tem {64DCFF}%d {FFFFFF}segundos para digitar o comando {64DCFF}/continuar {FFFFFF}e continuar aonde", SPAWN_TIME);
SendClientMessage(playerid, 0x6491FFFF, string);
SendClientMessage(playerid, 0x6491FFFF, "| LSpawn | {FFFFFF}estava quando se desconectou do servidor pela ъltima vez.");
#endif
}
else if (timeCheck[playerid] == SPAWN_TIME/2)
{
#if SPAWN_COMMAND_STYLE == 1
BreakLine(playerid);
format(string, sizeof string, "| LSpawn | {FFFFFF}Vocк tem {64DCFF}%d {FFFFFF}segundos para apertar a tecla {64DCFF}Y {FFFFFF}e continuar aonde", SPAWN_TIME/2);
SendClientMessage(playerid, 0x6491FFFF, string);
SendClientMessage(playerid, 0x6491FFFF, "| LSpawn | {FFFFFF}estava quando se desconectou do servidor pela ъltima vez.");
#elseif SPAWN_COMMAND_STYLE == 2
BreakLine(playerid);
format(string, sizeof string, "| LSpawn | {FFFFFF}Vocк tem {64DCFF}%d {FFFFFF}segundos para digitar o comando {64DCFF}/continuar {FFFFFF}e continuar aonde", SPAWN_TIME/2);
SendClientMessage(playerid, 0x6491FFFF, string);
SendClientMessage(playerid, 0x6491FFFF, "| LSpawn | {FFFFFF}estava quando se desconectou do servidor pela ъltima vez.");
#endif
}
else if (timeCheck[playerid] == SPAWN_TIME)
{
BreakLine(playerid);
SendClientMessage(playerid, 0x6491FFFF, "| LSpawn | {FFFFFF}O tempo acabou e vocк vai continuar aonde estб.");
timeCheck[playerid] = 0;
spawningPlayer[playerid] = false;
KillTimer(timerCheckSpawn[playerid]);
return 1;
}
return 1;
}
#endif
#if SPAWN_MODE == 2
#if SPAWN_COMMAND_STYLE == 2
CMD:continuar(playerid, params[], help)
{
if(!spawningPlayer[playerid])
return 0;
BreakLine(playerid);
SendClientMessage(playerid, 0x6491FFFF, "| LSpawn | {FFFFFF}Enviado а ъltima posiзгo salva.");
KillTimer(timerCheckSpawn[playerid]);
spawningPlayer[playerid] = false;
return CheckSpawnPos(playerid);
}
#endif
#elseif SPAWN_MODE == 3
ShowDialog(playerid, dialogid)
{
switch(dialogid)
{
case SPAWN_DIALOG:
{
new
formatMsg[128];
BreakLine(playerid);
format(formatMsg, sizeof formatMsg, "{FFFFFF}Olб {64DCFF}%s{FFFFFF}, gostaria de continuar de onde vocк parou na sua ъltima sessгo?", GetPlayerNameEx(playerid));
ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, "Spawn...", formatMsg, "Sim", "Nгo");
return 1;
}
}
return 1;
}
#endif
GetPlayerNameEx(playerid)
{
new
playerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
return playerName;
}
BreakLine(playerid) {
return SendClientMessage(playerid, -1, " ");
}