16.12.2012, 12:17
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:
meetdb.db (deve ser colocado em scriptfiles)
http://www.solidfiles.com/d/470be7820a/
Abraзo e bom proveito!
Pode ser usado da maneira que quiser. Se quiser retirar os crйditos, vб em frente.
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 Код:
#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;
}
http://www.solidfiles.com/d/470be7820a/
Abraзo e bom proveito!
Pode ser usado da maneira que quiser. Se quiser retirar os crйditos, vб em frente.