19/02/2025 20:43
bem encontrei esse sistema derby por ai acho que e a do delete do ppc truck entao ueria dar uma modificado para colocar no meu servidor o problema e que os usar /derby de pois de um tempinho o player q entrou ganha o derby queria que se iniciasse com pelo menos 2 ou mais player pois como ta definido se tiver 1 player no derby ele mesmo ganha queria a ajuda de algm com experiencia nessa linguagem para dizer como posso fazer essa verificacao no minimo se dois players tiver no derby caso so tenha 1 o derby nao se inicia
Código:
#define FILTERSCRIPT
#include a_samp
#include fixchars
#include streamer
#include zcmd
#define function%0(%1) forward%0(%1);public%0(%1)
#define InDerby(%0) GetPVarInt(%0, "InDerby")
#define DIALOG_MAPS 6666
#define DERBYCOUNT 20
#define DDVEHICLE 415 // (Cheetah)
#define PLAYERLIMIT 30
enum ddinfos{ IsDerby, IsDerbyStarted, ddplayers, map }
enum asd{ mapname[32], mapauthor[24] }
new Maps[][asd] = {
{"Derby 1", "Andre"},
{"Derby 2", "Andre"},
{"Derby 3", "Andre"}
},
Float:s15pos[30][4] = { // Cross S15
{756.9044,-3540.9138,3.1379,179.0234}, {775.4280,-3541.4460,3.1116,180.2614}, {794.1912,-3541.3367,3.1155,179.5315}, {812.3196,-3541.2278,3.1210,178.9698},
{831.3577,-3541.6177,3.1029,179.1547}, {849.8322,-3541.8528,3.1180,180.0865}, {868.5156,-3541.4802,3.1107,181.4539}, {868.3105,-3733.9446,3.1259,359.0275},
{850.1912,-3733.7065,3.1149,0.4521}, {831.2225,-3733.7874,3.1176,359.8431}, {812.5354,-3733.8701,3.1216,0.2014}, {793.8035,-3733.9099,3.1244,359.1755},
{775.7811,-3733.7095,3.1137,0.9984}, {756.4110,-3733.4827,3.1059,358.7969}, {716.8422,-3693.1565,3.0976,269.7966}, {716.1367,-3674.8931,3.1293,271.8715},
{716.3971,-3656.4351,3.1172,269.8341}, {716.4112,-3637.6555,3.1180,273.6064}, {717.2551,-3619.0774,3.0761,268.7869}, {716.6725,-3600.0720,3.1037,272.9206},
{716.5823,-3581.6777,3.1081,270.5320}, {908.7960,-3582.0232,3.1140,90.6347}, {908.6541,-3600.1563,3.1063,89.5780}, {909.0964,-3618.9082,3.1267,91.2982},
{908.5549,-3637.3091,3.1035,91.1804}, {908.5914,-3656.1335,3.1078,89.6344}, {909.2120,-3674.4927,3.1315,90.1753}, {909.5079,-3693.5920,3.1451,89.2660},
{868.3105,-3733.9446,3.1259,359.0275}, {812.2875,-3637.6294,1.3974,315.0211}
},
Float:ztpos[30][4] = { // Zaya Training
{-944.6622,-3306.7258,13.8874,224.5076}, {-943.3749,-3315.0498,13.8851,134.3918}, {-963.0135,-3334.2771,13.8853,134.3916}, {-1017.8218,-3276.1423,3.0149,359.7578},
{-1012.8713,-3292.9702,3.0149,90.9614}, {-1012.7588,-3319.1631,3.0161,179.6369}, {-1012.9409,-3353.5984,4.2922,180.1514}, {-1012.8218,-3408.7708,10.2433,180.0338},
{-1012.7954,-3455.2166,4.2829,180.0336}, {-1047.2941,-3434.4543,10.2409,43.6764}, {-1040.5676,-3433.7925,10.2463,312.7609}, {-1022.6121,-3408.8796,10.2418,46.7539},
{-1044.0714,-3388.6619,10.2474,136.1198}, {-1064.8586,-3416.4795,10.2416,45.5951}, {-1114.9474,-3365.2273,4.3113,357.2206}, {-1112.1831,-3348.6121,4.3115,315.6601},
{-1081.3710,-3317.0808,4.3165,315.6595}, {-1043.1082,-3278.4094,4.3113,314.9465}, {-1028.0548,-3263.3838,4.3097,314.9471}, {-1010.6964,-3255.5996,4.3192,270.6101},
{-1017.9971,-3340.2781,10.2464,181.7582}, {-1018.0348,-3350.5977,10.2467,179.8441}, {-999.7271,-3360.5056,10.2498,180.2483}, {-999.6309,-3382.6829,10.2503,180.2482},
{-964.0109,-3389.6384,1.5515,354.9221}, {-965.9038,-3410.2092,1.5384,317.4788}, {-975.7332,-3446.5098,13.7621,46.3455}, {-982.2931,-3439.7952,13.7611,44.2358},
{-940.2568,-3372.3130,27.8532,88.6187}, {-946.3826,-3418.2603,24.7574,88.7780}
},
Float:rvpos[30][4] = { // Russkaya Vodka
{4451.1040,-658.1807,3.9008,178.5456}, {4530.3726,-657.2891,3.9022,180.4751}, {4525.2588,-651.9951,3.8970,91.5458}, {4471.0127,-656.9320,3.9014,179.3459},
{4451.1040,-658.1807,3.9008,178.5456}, {4410.9355,-656.8109,3.9023,180.8332}, {4410.7217,-722.8928,3.9027,180.3781}, {4416.6465,-727.7642,3.9026,263.1605},
{4491.5527,-723.0516,3.9025,0.3554}, {4529.9287,-723.1869,3.9031,359.3454}, {4537.9614,-690.3776,3.8989,90.3080}, {4492.0015,-690.6239,3.9018,90.3074},
{4410.0708,-690.1467,3.9020,89.6459}, {4357.7944,-706.1782,16.9854,358.2615}, {4357.6152,-674.0663,16.9849,179.2957}, {4403.4917,-672.8745,16.9846,178.5666},
{4403.3535,-706.2702,16.9855,0.4106}, {4583.4502,-673.5909,16.9834,177.8225}, {4583.5322,-705.5579,16.9842,359.3588}, {4537.9722,-705.4476,16.9857,359.3521},
{4538.0791,-672.2876,16.9858,181.6050}, {4516.9312,-690.5862,16.9832,89.2104}, {4430.0161,-690.4833,16.9826,269.8497}, {4448.4961,-701.8934,16.9807,179.4200},
{4502.5288,-702.0876,16.9812,177.5708}, {4502.2939,-677.9621,16.9815,358.8295}, {4448.9321,-677.8625,16.9816,359.2458}, {4357.6152,-674.0663,16.9849,179.2957},
{4470.5430,-643.2770,16.9775,89.8258}, {4479.4116,-736.3008,16.9785,87.8211}
},
str[128],
string[1024],
//Float:p[4],
DerbyAdatok[ddinfos],
PlayerText:counttd[2],
engine, lights, alarm, doors, bonnet, boot, objective,
timer, timer2, ddcount,
bool:mapslot[30], pslot
;
public OnFilterScriptInit() {
LoadDDMaps();
return 1;
}
public OnFilterScriptExit() {
if(DerbyAdatok[IsDerby] == 1) {
DerbyAdatok[ddplayers] = 0;
KillTimer(timer);
KillTimer(timer2);
DerbyAdatok[IsDerbyStarted] = false;
DerbyAdatok[IsDerby] = false;
}
return 1;
}
public OnPlayerConnect(playerid) {
SetPVarInt(playerid, "Nitro", 2);
counttd[0] = CreatePlayerTextDraw(playerid,319.000000, 174.000000, "3");
PlayerTextDrawAlignment(playerid,counttd[0], 2);
PlayerTextDrawBackgroundColor(playerid,counttd[0], 255);
PlayerTextDrawFont(playerid,counttd[0], 2);
PlayerTextDrawLetterSize(playerid,counttd[0], 1.060000, 5.499999);
PlayerTextDrawColor(playerid,counttd[0], -1);
PlayerTextDrawSetOutline(playerid,counttd[0], 1);
PlayerTextDrawSetProportional(playerid,counttd[0], 1);
PlayerTextDrawSetSelectable(playerid,counttd[0], 0);
counttd[1] = CreatePlayerTextDraw(playerid,246.000000, 345.000000, "À espera de jogadores...");
PlayerTextDrawBackgroundColor(playerid,counttd[1], 255);
PlayerTextDrawFont(playerid,counttd[1], 2);
PlayerTextDrawLetterSize(playerid,counttd[1], 0.250000, 0.899999);
PlayerTextDrawColor(playerid,counttd[1], -1);
PlayerTextDrawSetOutline(playerid,counttd[1], 1);
PlayerTextDrawSetProportional(playerid,counttd[1], 1);
PlayerTextDrawSetSelectable(playerid,counttd[1], 0);
return 1;
}
public OnPlayerDisconnect(playerid, reason) {
if(InDerby(playerid)) OnPlayerLeaveDD(playerid);
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid) {
if(InDerby(playerid)) {
ClearAnimations(playerid);
PutPlayerInVehicle(playerid, vehicleid, 0);
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
if(dialogid == DIALOG_MAPS) {
if(!response) return 1;
if(DerbyAdatok[IsDerbyStarted] == 1) return SendClientMessage(playerid, 0xff6666ff, "Erro! o jogo já começou: /dd");
str[0] = EOS;
format(str, sizeof(str), "Evento Derby Aberto! Mapa %s | /Derby", inputtext);
SendClientMessageToAll(-1, str);
DerbyAdatok[map] = listitem;
StartDD();
OnPlayerJoinDD(playerid);
}
return 1;
}
public OnVehicleDeath(vehicleid, killerid) {
for(new i; i < MAX_PLAYERS; i++) {
if(InDerby(i) && GetPVarInt(i, "ddVeh") == vehicleid) {
DerbyAdatok[ddplayers] --;
DestroyVehicle(GetPVarInt(i, "ddVeh"));
format(string, sizeof(string), "[DERBY] %s {ff6666}morreu no derby! {ffffff} [%i/"#PLAYERLIMIT"]", Name(i), DerbyAdatok[ddplayers]);
SendClientMessageToAll(-1, string);
DeletePVar(i, "InDerby");
SpawnPlayer(i);
CheckDestructionDerby();
}
}
return 1;
}
new playerInDerby[MAX_PLAYERS]; // 0 = Não está no derby, 1 = Está no derby
CMD:derby(playerid)
{
if(playerInDerby[playerid] == 1)return SendClientMessage(playerid, 0xFF6666FF, "Você já está participando do derby! Aguarde até sair para tentar novamente.");
if(DerbyAdatok[IsDerbyStarted] == 1)return SendClientMessage(playerid, 0xFF6666FF, "O derby já começou, você não pode mais participar.");
if(DerbyAdatok[ddplayers] >= PLAYERLIMIT)return SendClientMessage(playerid, 0xFF6666FF, "Limite de players no derby foi atingido!");
if(!DerbyAdatok[IsDerby])
{
string[0] = EOS;
for(new i; i < sizeof(Maps); i++)
{
strcat(string, "{e0e0e0}");
format(str, sizeof(str), "%s \n", Maps[i][mapname], Maps[i][mapauthor]);
strcat(string, str);
}
ShowPlayerDialog(playerid, DIALOG_MAPS, 2, "{ff6666}Mapa opcional:", string, "OK", "Cancelar");
return 1;
}
return 1;
}
CMD:sairderby(playerid) {
if(!InDerby(playerid)) return SendClientMessage(playerid, 0xff6666FF, "Você não está em um derby!");
if(DerbyAdatok[IsDerby] == 0) return SendClientMessage(playerid, 0xff6666FF, "Não tem nenhum derby para você sair!");
OnPlayerLeaveDD(playerid);
SpawnPlayer(playerid);
return 1;
}
/*function CheckDestructionDerby() {
if(DerbyAdatok[IsDerby] == 1) {
for(new i; i < MAX_PLAYERS; i++) {
if(IsPlayerConnected(i) && InDerby(i)) {
GetPlayerPos(i, p[0], p[1], p[2]);
if(p[2] <= 0.0) {
DerbyAdatok[ddplayers] --;
DestroyVehicle(GetPVarInt(i, "ddVeh"));
format(string, sizeof(string), "[DERBY] %s {ff6666}caiu na água no Derby {ffffff} [%i/"#PLAYERLIMIT"]", Name(i), DerbyAdatok[ddplayers]);
SendClientMessageToAll(-1, string);
DeletePVar(i, "InDerby");
SpawnPlayer(i);
}
if(DerbyAdatok[ddplayers] < 2) {
new playerid = IsDerbyWinner();
format(string, sizeof(string), "[DERBY] %s {33aa33}ganhou o Derby e recebeu $1000 !", Name(playerid));
SendClientMessageToAll(-1, string);
DestroyVehicle(GetPVarInt(playerid, "ddVeh"));
DeletePVar(playerid, "InDerby");
GivePlayerMoney(playerid, 1000);
SpawnPlayer(playerid);
DerbyAdatok[ddplayers] = 0;
KillTimer(timer2);
DerbyAdatok[IsDerbyStarted] = 0;
DerbyAdatok[IsDerby] = 0;
}
}
}
}
return 1;
}*/
function CheckDestructionDerby() {
if(DerbyAdatok[IsDerby] == 1) {
// Conta o número de jogadores conectados no derby
new playersInDerby = 0;
for(new i; i < MAX_PLAYERS; i++) {
if(IsPlayerConnected(i) && InDerby(i)) {
playersInDerby++;
}
}
// Se houver pelo menos 2 jogadores, começa o derby
if(playersInDerby >= 2 && DerbyAdatok[IsDerbyStarted] == 0) {
// Inicia o jogo
StartDD();
}
// Se a quantidade de jogadores cair abaixo de 2, encerre o derby
if(playersInDerby < 2) {
if(DerbyAdatok[IsDerbyStarted] == 1) {
new playerid = IsDerbyWinner();
format(string, sizeof(string), "[DERBY] %s {33aa33}ganhou o Derby e recebeu $1000!", Name(playerid));
SendClientMessageToAll(-1, string);
DestroyVehicle(GetPVarInt(playerid, "ddVeh"));
DeletePVar(playerid, "InDerby");
GivePlayerMoney(playerid, 1000);
SpawnPlayer(playerid);
DerbyAdatok[ddplayers] = 0;
KillTimer(timer2);
DerbyAdatok[IsDerbyStarted] = 0;
DerbyAdatok[IsDerby] = 0;
}
}
}
return 1;
}
function CountDownStart() {
ddcount --;
for(new i; i < MAX_PLAYERS; i++) {
if(!IsPlayerConnected(i)) continue;
if(ddcount == -3) {
PlayerTextDrawHide(i, counttd[0]);
KillTimer(timer);
}
if(!ddcount) {
if(DerbyAdatok[ddplayers] < 0) {
SendClientMessageToAll(-1, "O Derby foi cancelado. Motivo: poucos jogadores!");
if(DerbyAdatok[ddplayers] == 1) {
new playerid = IsDerbyWinner();
DestroyVehicle(GetPVarInt(playerid, "ddVeh"));
DeletePVar(playerid, "InDerby");
SpawnPlayer(playerid);
PlayerTextDrawHide(playerid, counttd[0]);
PlayerTextDrawHide(playerid, counttd[1]);
}
DerbyAdatok[ddplayers] = 0;
KillTimer(timer);
KillTimer(timer2);
DerbyAdatok[IsDerbyStarted] = 0;
DerbyAdatok[IsDerby] = 0;
return 1;
}
PlayerTextDrawSetString(i, counttd[0], "~g~~h~vai");
GetVehicleParamsEx(GetPVarInt(i, "ddVeh"), engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(GetPVarInt(i, "ddVeh"), engine=1, lights, alarm, doors, bonnet, boot, objective);
RepairVehicle(GetPlayerVehicleID(i));
timer2 = SetTimer("CheckDestructionDerby", 1000, true);
DerbyAdatok[IsDerbyStarted] = 1;
}
if(ddcount < 4 && ddcount > 0) {
PlayerTextDrawHide(i, counttd[1]);
format(str, sizeof(str), "%i", ddcount);
PlayerTextDrawSetString(i, counttd[0], str);
PlayerTextDrawShow(i, counttd[0]);
}
}
return 1;
}
function OnPlayerJoinDD(playerid) {
PlayerTextDrawShow(playerid, counttd[1]);
vissza: { pslot = random(30); }
if(mapslot[pslot] == true) goto vissza;
mapslot[pslot] = true;
if(DerbyAdatok[map] == 0) SetPVarInt(playerid, "ddVeh", CreateVehicle(DDVEHICLE, s15pos[pslot][0], s15pos[pslot][1], s15pos[pslot][2]+2, s15pos[pslot][3], 1, 1, -1));
if(DerbyAdatok[map] == 1) SetPVarInt(playerid, "ddVeh", CreateVehicle(DDVEHICLE, ztpos[pslot][0], ztpos[pslot][1], ztpos[pslot][2]+2, ztpos[pslot][3], 1, 1, -1));
if(DerbyAdatok[map] == 2) SetPVarInt(playerid, "ddVeh", CreateVehicle(DDVEHICLE, rvpos[pslot][0], rvpos[pslot][1], rvpos[pslot][2]+2, rvpos[pslot][3], 1, 1, -1));
PutPlayerInVehicle(playerid, GetPVarInt(playerid, "ddVeh"), 0);
GetVehicleParamsEx(GetPVarInt(playerid, "ddVeh"), engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(GetPVarInt(playerid, "ddVeh"), engine=0, lights, alarm, doors, bonnet, boot, objective);
DerbyAdatok[ddplayers] ++;
SetPVarInt(playerid, "InDerby", 1);
format(string, sizeof(string), "[DD] %s foi para o {ff0000}Derby{ffffff} %i/"#PLAYERLIMIT" ( /Derby )", Name(playerid), DerbyAdatok[ddplayers]);
SendClientMessageToAll(-1, string);
return 1;
}
function OnPlayerLeaveDD(playerid) {
DerbyAdatok[ddplayers] --;
SetPVarInt(playerid, "InDerby", 0);
DestroyVehicle(GetPVarInt(playerid, "ddVeh"));
return 1;
}
stock IsDerbyWinner() {
for(new i; i < MAX_PLAYERS; i++) if(InDerby(i)) return i;
return -1;
}
stock StartDD()
{
DerbyAdatok[IsDerby] = true;
timer = SetTimer("CountDownStart", 1000, true);
ddcount = DERBYCOUNT;
return 1;
}