/* > Sistema de duelo(x1) > By: @Riichard > Tester: #Coringa > www.project-pawn.blogspot.com > Não retire os créditos < */ #include // SA-MP TEAM #include // Zeex. #include // Y_Less #include // Double-O-Seven #define Arma GivePlayerWeapon(playerid, 24, 9999); #define Arma2 GivePlayerWeapon(playerid, 29, 9999); /* Copie a define a cima, e mude o ID das armas, e o nome da define. > Exemplo: #define NOMEDEFINE GivePlayerWeapon(playerid, IDARMA, MUNIÇÃO); */ #define rBox1 5452 // Cuidado conflitos. #define rAviso 5453 // Cuidado conflitos. #define rInfod 5454 // Cuidado conflitos. #define rDuelos "pDuelos/%s.ini" // Pasta #define pDinheiro 12000 // Premio em Dinheiro. #define pScore 10 // Premio em Score. new pDuelo, bool:eDuelo[MAX_PLAYERS], pConvidou, Desafiado, String[200], String2[200], TempoSpawn[MAX_PLAYERS], peDuelos[MAX_PLAYERS], reDuelos[MAX_PLAYERS], acDuelos[MAX_PLAYERS], emDuelos[MAX_PLAYERS], wDuelos[MAX_PLAYERS], lDuelos[MAX_PLAYERS], Minutos, Segundos, TempoMinutos, Text:TempoRestante, Text:dMinutos ; public OnFilterScriptInit() { print("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"); print("[rDuelSystem] - Sistema de Duelo @Riichard"); print("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n"); // Minutos dMinutos = TextDrawCreate(143.000000, 363.000000, "03:00"); TextDrawBackgroundColor(dMinutos, 255); TextDrawFont(dMinutos, 3); TextDrawBoxColor(dMinutos, 255); TextDrawColor(dMinutos, -1178809089); TextDrawSetOutline(dMinutos, 1); TextDrawUseBox(dMinutos, 0); TextDrawLetterSize(dMinutos, 0.539999, 1.400000); // Tempo Restante TempoRestante = TextDrawCreate(139.000000, 353.000000, "Tempo Restante:"); TextDrawBackgroundColor(TempoRestante, 255); TextDrawFont(TempoRestante, 1); TextDrawBoxColor(TempoRestante, 255); TextDrawColor(TempoRestante, -16776961); TextDrawSetOutline(TempoRestante, 1); TextDrawSetProportional(TempoRestante, 1); TextDrawSetShadow(TempoRestante, 1); TextDrawAlignment(TempoRestante, 0); TextDrawUseBox(TempoRestante, 0); TextDrawLetterSize(TempoRestante, 0.230000, 0.900000); return 1; } public OnFilterScriptExit() { for (new r = 0; r != MAX_PLAYERS; r++) { if(IsPlayerConnected(r)) { dSalvar(r); } } DOF2_Exit(); return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == rBox1) { if(response) { Segundos = 60; Minutos = 2; KillTimer(TempoSpawn[pConvidou]); pDuelo += 1; acDuelos[playerid] += 1; TogglePlayerControllable(pConvidou, true); eDuelo[playerid] = true; SetPlayerPos(playerid, 1412.639892, -1.787510, 1000.924377); ResetPlayerWeapons(playerid); SetPlayerTeam(playerid, 255); SetPlayerArmour(playerid, 100); SetPlayerInterior(playerid, 1); SetPlayerHealth(playerid, 100); format(String,sizeof(String), "[INFO] O jogador %s, aceitou o x1 de, %s.", rNome(playerid), rNome(pConvidou)); SendClientMessageToAll(0xFFFF00AA, String); TempoMinutos = SetTimer("MinutosDuelo", 1000, true); TextDrawShowForPlayer(playerid, TempoRestante); TextDrawShowForPlayer(pConvidou, TempoRestante); TextDrawShowForPlayer(playerid, dMinutos); TextDrawShowForPlayer(pConvidou, dMinutos); Arma Arma2 /* Se for colocar outras armas, coloque aqui o nome da define: > Exemplo: Arma3 */ } if(!response) { format(String,sizeof(String), "[NOOB] O arregão %s, recusou o x1 de, %s.", rNome(playerid), rNome(pConvidou)); SendClientMessageToAll(0xFFFF00AA, String); TogglePlayerControllable(pConvidou, true); pDuelo -= 1; reDuelos[playerid] += 1; eDuelo[pConvidou] = false; SpawnPlayer(pConvidou); KillTimer(TempoSpawn[pConvidou]); } } return 0; } public OnPlayerDeath(playerid, killerid, reason) { if(eDuelo[killerid] == true || eDuelo[playerid] == true) { eDuelo[playerid] = false; eDuelo[killerid] = false; wDuelos[killerid] += 1; lDuelos[playerid] += 1; GivePlayerMoney(killerid, pDinheiro); SetPlayerScore(killerid, GetPlayerScore(killerid) +pScore); GameTextForPlayer(killerid, "~w~P~g~~h~arabens voce venceu~w~.", 2000, 3); format(String,sizeof(String), "[INFO - X1] {6495ED}%s{FFFFFF} venceu o jogador {6495ED}%s{FFFFFF} no x1. [{6495ED}Prêmio: R$%d + %d Score{FFFFFF}]", rNome(killerid), rNome(playerid), pDinheiro, pScore); SendClientMessageToAll(0xFFFFFFAA, String); SendClientMessage(killerid, -1 , "[INFO] Aguarde 5 segundos para ser spawnado..."); SetTimerEx("SpawnDuelo", 5000, false, "d", killerid); TextDrawHideForPlayer(playerid, TempoRestante); TextDrawHideForPlayer(killerid, TempoRestante); TextDrawHideForPlayer(playerid, dMinutos); TextDrawHideForPlayer(killerid, dMinutos); KillTimer(TempoMinutos); } return 0; } public OnPlayerConnect(playerid) { eDuelo[playerid] = false; peDuelos[playerid] = 0; reDuelos[playerid] = 0; acDuelos[playerid] = 0; emDuelos[playerid] = 0; wDuelos[playerid] = 0; lDuelos[playerid] = 0; new Arq[50]; format(Arq, sizeof(Arq), rDuelos, rNome(playerid)); if (DOF2_FileExists(Arq)) { dCarregar(playerid); SendClientMessage(playerid, 0x00BFFFAA, "[INFO] As informações de duelos foram carregadas."); SendClientMessage(playerid, 0x00BFFFAA, "[DICA] Digite '/dinfo' para ver suas informações."); }else{ dSalvar(playerid); } return 0; } public OnPlayerDisconnect(playerid, reason) { dSalvar(playerid); if(eDuelo[Desafiado] == true) { format(String, sizeof(String), "~> O jogador %s, se desconectou-se em um duelo.", rNome(Desafiado)); SendClientMessageToAll(0x00BFFFAA, String); eDuelo[Desafiado] = false; pDuelo -= 1; KillTimer(TempoSpawn[pConvidou]); SpawnPlayer(pConvidou); KillTimer(TempoMinutos); } if(eDuelo[pConvidou] == true) { format(String, sizeof(String), "~> O jogador %s, se desconectou-se em um duelo.", rNome(pConvidou)); SendClientMessageToAll(0x00BFFFAA, String); eDuelo[pConvidou] = false; pDuelo -= 1; KillTimer(TempoSpawn[pConvidou]); SpawnPlayer(Desafiado); KillTimer(TempoMinutos); } return 0; } CMD:duelo(playerid, params[]) return cmd_duelar(playerid, params); CMD:x1(playerid, params[]) return cmd_duelar(playerid, params); CMD:duelar(playerid, params[]) { if(pDuelo == 2) return SendClientMessage(playerid, 0xA9A9A9AA, "[ERRO] Já contém 2 pessoas em duelo."); if(eDuelo[playerid] == true) return SendClientMessage(playerid, 0xA9A9A9AA, "[ERRO] Você já está no duelo."); if(sscanf(params, "d", Desafiado)) return SendClientMessage(playerid, 0xFFA500AA, "~> /Duelar [playerid]"); if(!IsPlayerConnected(Desafiado)) return SendClientMessage(playerid, 0xA9A9A9AA, "[ERRO] Jogador offline."); if(eDuelo[Desafiado] == true) return SendClientMessage(playerid, 0xA9A9A9AA, "[ERRO] Este jogador já está em um duelo."); if(Desafiado == playerid) return SendClientMessage(playerid, 0xA9A9A9AA, "[ERRO] Você não pode duelar você mesmo."); format(String, sizeof(String), "~> Você convidou o jogador %s para duelar.", rNome(Desafiado)); SendClientMessage(playerid, 0x00BFFFAA, String); pConvidou = playerid; SetPlayerPos(playerid, 1412.639892, -1.787510, 1000.924377); SetPlayerInterior(playerid, 1); TogglePlayerControllable(playerid, false); eDuelo[playerid] = true; pDuelo += 1; ResetPlayerWeapons(playerid); SetPlayerTeam(playerid, 255); SetPlayerArmour(playerid, 100); SetPlayerHealth(playerid, 100); Arma Arma2 /* Se for colocar outras armas, coloque aqui o nome da define: > Exemplo: Arma3 */ GameTextForPlayer(playerid,"~w~A~b~~h~guardando Resposta~w~...",2000,3); format(String2,sizeof(String2), "{B9BCCC}- Você foi convidado pelo jogador {6495ED}%s{B9BCCC} para um desafio(x1).\n\n - * {6495ED}[Prêmio: R$%d + %d Score]{B9BCCC} *\n\n - Você aceita?", rNome(playerid), pDinheiro, pScore); ShowPlayerDialog(Desafiado, rBox1, DIALOG_STYLE_MSGBOX, "[rDuelSystem] > Você foi desafiado.", String2, "Sim", "Não"); TempoSpawn[playerid] = SetTimerEx("AguardandoResposta", 10000, false, "d", playerid); SendClientMessage(playerid, 0xA9A9A9AA, "[AVISO] Se ele não aceitar o convite em 10 segundos, você é spawnado."); peDuelos[Desafiado] += 1; return 1; } CMD:dinfo(playerid) { SendClientMessage(playerid, 0x00BFFFAA, "|________________ Duelo Info ________________|"); format(String, sizeof(String), "× Duelos Pedidos: {6495ED}%d", peDuelos[playerid]); SendClientMessage(playerid, 0xB9BCCCAA, String); format(String, sizeof(String), "× Duelos Recusados: {6495ED}%d", reDuelos[playerid]); SendClientMessage(playerid, 0xB9BCCCAA, String); format(String, sizeof(String), "× Duelos Aceitos: {6495ED}%d", acDuelos[playerid]); SendClientMessage(playerid, 0xB9BCCCAA, String); format(String, sizeof(String), "× Duelos Empatados: {6495ED}%d", emDuelos[playerid]); SendClientMessage(playerid, 0xB9BCCCAA, String); format(String, sizeof(String), "× Duelos Vencidos: {6495ED}%d", wDuelos[playerid]); SendClientMessage(playerid, 0xB9BCCCAA, String); format(String, sizeof(String), "× Duelos Perdidos: {6495ED}%d", lDuelos[playerid]); SendClientMessage(playerid, 0xB9BCCCAA, String); SendClientMessage(playerid, 0x00BFFFAA, "[INFO] Ao se desconectar, as informações são salvas automaticamente."); return 1; } forward AguardandoResposta(playerid); public AguardandoResposta(playerid) { SpawnPlayer(playerid); KillTimer(TempoSpawn[playerid]); SetPlayerInterior(playerid, 0); format(String, sizeof(String), "[NOOB] O arregão %s, recusou o x1 de, %s.", rNome(Desafiado), rNome(playerid)); SendClientMessageToAll(0xFFFF00AA, String); TogglePlayerControllable(playerid, true); pDuelo -= 1; eDuelo[playerid] = false; reDuelos[Desafiado] += 1; format(String2, sizeof(String2), "{B9BCCC}>>{FF0000} Se passou 10 segundos{B9BCCC}.\n\n{B9BCCC}> Você não aceitou o pedido de duelo do jogador %s.\n\n>> {FF0000}Noob{B9BCCC}.", rNome(playerid)); ShowPlayerDialog(Desafiado, rAviso, DIALOG_STYLE_MSGBOX, "[rDuelSystem] > AVISO", String2, "Fechar", ""); return 1; } forward SpawnDuelo(playerid); public SpawnDuelo(playerid) { SpawnPlayer(playerid); pDuelo = 0; SendClientMessage(playerid, -1, "[rDuelSystem] Spawnado."); return 1; } forward MinutosDuelo(); public MinutosDuelo() { if(pDuelo > 0) { Segundos -= 1; if(Segundos == 0) { Minutos -= 1; Segundos = 59; } if(Minutos == 0 && Segundos == 0) { SpawnPlayer(pConvidou); SpawnPlayer(Desafiado); pDuelo = 0; eDuelo[Desafiado] = false; eDuelo[pConvidou] = false; TextDrawHideForPlayer(pConvidou, TempoRestante); TextDrawHideForPlayer(Desafiado, TempoRestante); TextDrawHideForPlayer(pConvidou, dMinutos); TextDrawHideForPlayer(Desafiado, dMinutos); emDuelos[Desafiado] += 1; emDuelos[pConvidou] += 1; KillTimer(TempoMinutos); SendClientMessageToAll(0x00BFFFAA, "[INFO] Se passarou 3 minutos no duelo, e ninguém venceu."); } if(Segundos <= 9) { format(String2, sizeof(String2), "0%d:0%d", Minutos, Segundos); TextDrawSetString(dMinutos, String2); // Para colocar o 0 na frente quando estiver a baixo 9 segundos. } if(Segundos >= 10) { format(String2, sizeof(String2), "0%d:%d", Minutos, Segundos); TextDrawSetString(dMinutos, String2); // Para retirar o 0 quando não estiver a baixo 9 segundos. } } return 1; } stock rNome(playerid) { new rnome[MAX_PLAYER_NAME]; GetPlayerName(playerid, rnome, MAX_PLAYER_NAME); return rnome; } stock dSalvar(playerid) { new Arq[50]; format(Arq, sizeof(Arq), rDuelos, rNome(playerid)); if (DOF2_FileExists(Arq)) { DOF2_SetInt(Arq, "Pedidos de Duelo", peDuelos[playerid]); DOF2_SetInt(Arq, "Duelos Recusados", reDuelos[playerid]); DOF2_SetInt(Arq, "Duelos Aceitos", acDuelos[playerid]); DOF2_SetInt(Arq, "Duelos Empatados", emDuelos[playerid]); DOF2_SetInt(Arq, "Duelos Vencidos", wDuelos[playerid]); DOF2_SetInt(Arq, "Duelos Perdidos", lDuelos[playerid]); DOF2_SaveFile(); }else{ DOF2_CreateFile(Arq); DOF2_SetInt(Arq, "Pedidos de Duelo", peDuelos[playerid]); DOF2_SetInt(Arq, "Duelos Recusados", reDuelos[playerid]); DOF2_SetInt(Arq, "Duelos Aceitos", acDuelos[playerid]); DOF2_SetInt(Arq, "Duelos Empatados", emDuelos[playerid]); DOF2_SetInt(Arq, "Duelos Vencidos", wDuelos[playerid]); DOF2_SetInt(Arq, "Duelos Perdidos", lDuelos[playerid]); DOF2_SaveFile(); } return 1; } stock dCarregar(playerid) { new Arq[50]; format(Arq, sizeof(Arq), rDuelos, rNome(playerid)); if (DOF2_FileExists(Arq)) { peDuelos[playerid] = DOF2_GetInt(Arq, "Pedidos de Duelo"); reDuelos[playerid] = DOF2_GetInt(Arq, "Duelos Recusados"); acDuelos[playerid] = DOF2_GetInt(Arq, "Duelos Aceitos"); emDuelos[playerid] = DOF2_GetInt(Arq, "Duelos Empatados"); wDuelos[playerid] = DOF2_GetInt(Arq, "Duelos Vencidos"); lDuelos[playerid] = DOF2_GetInt(Arq, "Duelos Perdidos"); } return 1; }