[FilterScript] MeetScript - Conheça pessoas

21 de dez. de 2012.
Esse é um script que eu desenvolvi hoje cedo, pensando em servidores RolePlay. Ao entrar no jogo, todos são estranhos em suas nametags, basta /apresentar e a pessoa aceitar e vocês agora se reconhecem!

Esse script foi feito em 15 minutos, usando zcmd, sscanf e SQLite, para maior versatilidade dos dados.

Script:

pawn Code:
#include <a_samp> #include <zcmd> #include <sscanf> #define CMD_COLOR 0xFF4791FF new DB:meetdb; main() {} public OnFilterScriptInit() {     meetdb = db_open("meetdb.db");     return 1; } public OnFilterScriptExit() {     db_close(meetdb); } public OnGameModeInit() {     ShowNameTags(0);     return 1; } /* --------------------------- */ new     playerInvite[MAX_PLAYERS],     PlayerText3D:playerTag[MAX_PLAYERS][MAX_PLAYERS];     // A primeira dimensão é jogador da tag     // a segunda são as tags daquele jogador para     // todos os players public OnPlayerSpawn(playerid) {     new index = -1,         szDName[MAX_PLAYER_NAME],         szTempName[MAX_PLAYER_NAME],         buffer[200];     GetPlayerName(playerid, szDName, sizeof szDName);     while(++index < MAX_PLAYERS) { // setando as tags do playerid para todos index         if(playerTag[playerid][index]) {             DeletePlayer3DTextLabel(playerid, playerTag[playerid][index]);             playerTag[playerid][index] = PlayerText3D:0;         }         if(index == playerid) {             continue;         }         if(!IsPlayerConnected(index)) {             continue;         }         new DBResult:result;         GetPlayerName(index, szTempName, sizeof szTempName);         format(buffer, sizeof buffer,             "select `id` from `player_know` where (`player1`='%s' and `player2`='%s') or (`player1`='%s' and `player2`='%s')",             szDName,             szTempName,             szTempName,             szDName         );         result = db_query(meetdb, buffer);         if(db_num_rows(result) > 0) {             playerTag[playerid][index] = CreatePlayer3DTextLabel(index, ReturnLabelString(playerid, szDName), 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, playerid);         } else {             playerTag[playerid][index] = CreatePlayer3DTextLabel(index, "Estranho", 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, playerid);         }         db_free_result(result);     } index = -1;     while(++index < MAX_PLAYERS) { // setando as tags dos outros jogadores para este         if(playerTag[index][playerid]) {             DeletePlayer3DTextLabel(playerid, playerTag[index][playerid]);             playerTag[index][playerid] = PlayerText3D:0;         }         if(index == playerid) {             continue;         }         if(!IsPlayerConnected(index)) {             continue;         }         new DBResult:result;         GetPlayerName(index, szTempName, sizeof szTempName);         format(buffer, sizeof buffer,             "select `id` from `player_know` where (`player1`='%s' and `player2`='%s') or (`player1`='%s' and `player2`='%s')",             szDName,             szTempName,             szTempName,             szDName         );         result = db_query(meetdb, buffer);         if(db_num_rows(result) > 0) {             playerTag[index][playerid] = CreatePlayer3DTextLabel(playerid, ReturnLabelString(index, szTempName), 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, index);         } else {             playerTag[index][playerid] = CreatePlayer3DTextLabel(playerid, "Estranho", 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, index);         }         db_free_result(result);     }     return 1; } /* --------------------------- */ CMD:apresentar(playerid, params[]) {     new aplayer;     if(sscanf(params, "u", aplayer)) {         SendClientMessage(playerid, CMD_COLOR, "MeetCmd: {FFFFFF}/apresentar [jogador] -{C0C0C0} O Jogador não existe, ou é inválido.");         return 1;     }     new         szDName[MAX_PLAYER_NAME],         szTempName[MAX_PLAYER_NAME];     GetPlayerName(playerid, szDName, sizeof szDName);     GetPlayerName(aplayer, szTempName, sizeof szTempName);         new DBResult:result,         buffer[200];     format(buffer, sizeof buffer,         "select `id` from `player_know` where (`player1`='%s' and `player2`='%s') or (`player1`='%s' and `player2`='%s')",         szDName,         szTempName,         szTempName,         szDName     );     result = db_query(meetdb, buffer);     if(db_num_rows(result) > 0) {         SendClientMessage(playerid, CMD_COLOR, "MeetCmd: {FFFFFF}/apresentar -{C0C0C0} Vocês já se conhecem.");     } else {         SendClientMessage(playerid, CMD_COLOR, "MeetCmd: {FFFFFF}/apresentar -{C0C0C0} O convite foi enviado.");         SendClientMessage(playerid, -1, "      Digite {C0C0C0}/cancelarapres {FFFFFF}para voltar atrás.");         playerInvite[playerid] = aplayer;         SendClientMessage(playerid, CMD_COLOR, "MeetCmd: {FFFFFF}O jogador Estranho quer te conhecer -{C0C0C0} Digite /conhecer [player] para aceitar.");     }     db_free_result(result);     return 1; } CMD:conhecer(playerid, params[]) {     new aplayer;     if(sscanf(params, "u", aplayer)) {         SendClientMessage(playerid, CMD_COLOR, "MeetCmd: {FFFFFF}/conhecer [jogador] -{C0C0C0} O Jogador não existe, ou é inválido.");         return 1;     }     if(playerInvite[aplayer] == playerid) {         DeletePlayer3DTextLabel(playerid, playerTag[aplayer][playerid]);         DeletePlayer3DTextLabel(aplayer, playerTag[playerid][aplayer]);                 new             szDName[MAX_PLAYER_NAME],             szTempName[MAX_PLAYER_NAME];         GetPlayerName(playerid, szDName, sizeof szDName);         GetPlayerName(aplayer, szTempName, sizeof szTempName);                 playerTag[aplayer][playerid] = CreatePlayer3DTextLabel(playerid, szTempName, 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, aplayer);         playerTag[playerid][aplayer] = CreatePlayer3DTextLabel(aplayer, szDName, 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, playerid);         new buffer[80];         format(buffer, sizeof buffer,             "insert into `player_know` (player1, player2) values ('%s','%s')",             szDName,             szTempName         );         db_free_result(db_query(meetdb, buffer));         playerInvite[aplayer] = -1;     }     return 1; } CMD:cancelarapres(playerid) {     playerInvite[playerid] = -1; } /* --------------------------- */ stock ReturnLabelString(playerid, name[]) {     new string[60];     format(string, sizeof string,         "%s (%d)",         name, playerid     );     return string; }
meetdb.db (deve ser colocado em scriptfiles)

Abraço e bom proveito!
Nunca retire os creditos!


Creditos: Stewie`

0 comentários:

Postar um comentário