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:
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`
Nunca retire os creditos!
Creditos: Stewie`
0 comentários:
Postar um comentário