if(issuerid != INVALID_PLAYER_ID && weaponid != 0)
{
LevouDano[playerid] = true;
SendClientMessage(playerid, -1, "Voce entrou em batalha, so pode deslogar depois de 1 minuto");
DanoTimer[playerid] = SetTimerEx("PermitirDeslog", 60000, false, "d", playerid);
}
if(deslogouembt[playerid])
{
LevouDano[playerid] = true;
{
ResetPlayerWeapons(playerid);
PlayerInfo[playerid][pJailed] = 4;
PlayerInfo[playerid][pJailTime] += 3600;
PlayerInfo[playerid][pVPreso] += 1;
PlayerInfo[playerid][pTPreso] += 3600;
WantedLevel[playerid] = 0;
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,8.2388210296631, -4852.91015625, 28.8671875);
}
}
fdsda no seu outro tуpico, postei um mйtodo melhor de fazer o cуdigo paga ver se estava em batalha, que nгo utiliza Timer.
|
Й que й assim, o meu sistema, funciona como esse dai, ele sу й feito de um jeito melhor, usando uma variavel para armazenar o tempo atual, em vez de timer. Jб a parte de punir, precisa fazer algum salvamento, logo edito aki te ajudando melhor.
|
new UltimoDano[MAX_PLAYERS];
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
{
if(issuerid != INVALID_PLAYER_ID) //ID Valido
{
UltimoDano[playerid] = gettime();//Pegamos o tempo em que ele tomou ultimo dano
}
return 1;
}
public OnPlayerDisconnect(playerid)
{
UltimoDano[playerid] +=60;//Ele pode deslogar 60 seg apos o tomar dano
if(UltimoDano[playerid] > gettime()) //Ve se passou 60 segundos
{
//Nгo passou 60 seg, entгo vamos agendar uma puniзгo para quando ele logar denovo.
new PlayerNome[MAX_PLAYER_NAME]; //Aki vamos armazenar o Nick do Player
new File[MAX_PLAYER_NAME +12]; //Aki vamos armazenar o local do arquivo
GetPlayerName(playerid, PlayerNome, MAX_PLAYER_NAME); //Pegamos o Nick do Player
format(File, sizeof(File), "Presos/%s.ini", PlayerNome); //Formatamos o Local do Arquivo, exemplo: Presos/Ever_SH.ini
DOF2_CreateFile(File); //Criamos o Arquivo
DOF2_SetString(File, "Motivo", "Deslogou em Combate"); //Salvamos o motivo
DOF2_SetInt(File, "Tempo", 3600); //Salvamos o tempo
DOF2_SaveFile(File); //Salvamos o arquivo
return 1;
}
return 1;
}
public OnPlayerSpawn(playerid)
{
new PlayerNome[MAX_PLAYER_NAME]; //Aki vamos armazenar o Nick do Player
new File[MAX_PLAYER_NAME +12]; //Aki vamos armazenar o local do arquivo
GetPlayerName(playerid, PlayerNome, MAX_PLAYER_NAME); //Pegamos o Nick do Player
format(File, sizeof(File), "Presos/%s.ini", PlayerNome); //Formatamos o Local do Arquivo, exemplo: Presos/Ever_SH.ini
if(DOF2_FileExists(File)) //Vamos ver se ele tem algum agendamento de cadeia, para isto й sу ver se o arquivo existe.
{
//Caso ele tenha
new Motivo[50], TempoPreso; //Vamos armazenar o Motivo e o Tempo.
format(Motivo, 50, "%s", DOF2_GetString(File, "Motivo"))//Pegamos o Motivo
TempoPreso = DOF2_GetInit(File, "Tempo"); //Pegamos o Tempo
new MsgCadeia[128];
format(MsgCadeia, 128, "Vocк estб preso por %d Segundos, Motivo: %s", TempoPreso, Motivo);
SendClientMessage(playerid, -1, MsgCadeia);
//Agora apartir daki й sу vocк fazer de acordo com seu GM
//Teleportar para prisгo, setar o tempo e etc
DOF2_DeleteFile(File); //Aqui deletamos o agendamento, pois a prisгo foi aplicada e nгo precisamos mais disso
}
return 1;
}
Olha, fiz uma boa base, leia tudo, entenda, adapte ao seu Gamemode e Complete la no finalzinho a parte de aplicar a prisгo.
PHP код:
|
contem um erro amigo, ao logar, mesmo nao estando em batalha, ele й preso 0 min mitovo: em branco
|
Bom, deixei a parte de prender para vocк completar, isso de prender sem motivo por 0 minutos, pode ser algo que vocк fez. Poste a parte que vocк adicionou.
|