#include <a_samp>
/* -----------------------------
Deathmatch 1.0
por Pedro Miranda
Skype: pedro.miranda91
----------------------------- */
main();
new DB:main_database;
enum {
DIALOG_REGISTER,
DIALOG_LOGIN,
DIALOG_RANKING
}
public OnGameModeInit() {
main_database = db_open("sqlite.db");
db_query(main_database, "CREATE TABLE IF NOT EXISTS `player_info` (`name`, `password`, `money`, `kills`, `deaths`)");
SendRconCommand("mapname Los Santos");
SendRconCommand("gamemodetext DM 1.0");
SendRconCommand("hostname Deathmatch 1.0");
for(new i; i < 300; ++i)
AddPlayerClass(i, 2232.2813, -1158.4985, 29.7969, 0.3858, 24, 9999, 25, 9999, 34, 9999);
UsePlayerPedAnims();
return true;
}
public OnGameModeExit() {
db_close(main_database);
return true;
}
public OnPlayerConnect(playerid) {
new
playername[25],
stringoutput[128],
DBResult:queryresult;
GetPlayerName(playerid, playername, sizeof playername);
format(stringoutput, sizeof stringoutput, "SELECT * FROM `player_info` WHERE `name` = '%s'", DB_Escape(playername));
queryresult = db_query(main_database, stringoutput);
if(db_num_rows(queryresult)) {
format(stringoutput, sizeof stringoutput, "{ffffff}Olб, {1e90ff}%s{ffffff}!\n\nDigite sua senha abaixo para logar.", playername);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{ffffff}Login", stringoutput, "Login", "Sair");
}
else {
format(stringoutput, sizeof stringoutput, "{ffffff}Olб, {1e90ff}%s{ffffff}!\nVocк ainda nгo й registrado no servidor.\n\nDigite uma senha abaixo para se registrar.", playername);
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "{ffffff}Registro", stringoutput, "Registrar", "Sair");
}
db_free_result(queryresult);
return true;
}
public OnPlayerDisconnect(playerid, reason) {
if(GetPVarInt(playerid, "playerLogged")) {
new playername[25], stringoutput[150];
GetPlayerName(playerid, playername, sizeof playername);
format(stringoutput, sizeof stringoutput, "UPDATE player_info SET money = %d, kills = %d, deaths = %d WHERE name = '%s'",
GetPlayerMoney(playerid),
GetPVarInt(playerid, "playerKills"),
GetPVarInt(playerid, "playerDeaths"),
DB_Escape(playername));
db_query(main_database, stringoutput);
format(stringoutput, 64, "Server: {ffffff}%s deixou o servidor.", playername);
SendClientMessageToAll(0xff0000ff, stringoutput);
TextDrawDestroy(Text:GetPVarInt(playerid, "playerkTD"));
TextDrawDestroy(Text:GetPVarInt(playerid, "playerdTD"));
}
return true;
}
public OnPlayerRequestClass(playerid, classid) {
SetPlayerVirtualWorld(playerid, (playerid + 1));
SetPlayerPos(playerid, 1025.5751, -2140.7637, 39.2032);
SetPlayerCameraPos(playerid, 1019.7552, -2141.0266, 37.7274);
SetPlayerCameraLookAt(playerid, 1021.9974, -2140.9907, 38.3012);
SetPlayerFacingAngle(playerid, 82.6125);
return true;
}
public OnPlayerDeath(playerid, killerid, reason) {
new
playername[25],
stringoutput[128];
GivePlayerMoney(playerid, 100); // Fix default money taking
SetPVarInt(playerid, "playerDeaths", (GetPVarInt(playerid, "playerDeaths") + 1));
if(killerid != 0xffff) {
if(reason < 42) {
new killername[25];
GetPlayerName(killerid, killername, sizeof killername);
SetPVarInt(killerid, "playerKills", (GetPVarInt(playerid, "playerKills") + 1));
format(stringoutput, sizeof stringoutput, " Vish! %s te matou e levou toda sua grana!", killername);
SendClientMessage(playerid, 0xff0000ff, stringoutput);
format(stringoutput, sizeof stringoutput, " Boa garoto!! Vocк matou %s e levou toda a grana do otбrio!!", playername);
SendClientMessage(playerid, 0xf6f600ff, stringoutput);
GivePlayerMoney(killerid, GetPlayerMoney(playerid));
ResetPlayerMoney(playerid);
format(stringoutput, sizeof stringoutput, "Kills: ~y~%02d", GetPVarInt(killerid, "playerKills"));
TextDrawSetString(Text:GetPVarInt(killerid, "playerkTD"), stringoutput);
}
}
format(stringoutput, sizeof stringoutput, "Mortes: ~y~%02d", GetPVarInt(playerid, "playerDeaths"));
TextDrawSetString(Text:GetPVarInt(playerid, "playerdTD"), stringoutput);
TextDrawHideForPlayer(playerid, Text:GetPVarInt(playerid, "playerkTD"));
TextDrawHideForPlayer(playerid, Text:GetPVarInt(playerid, "playerdTD"));
return true;
}
public OnPlayerRequestSpawn(playerid) {
return GetPVarInt(playerid, "playerLogged");
}
public OnPlayerSpawn(playerid) {
SetPlayerVirtualWorld(playerid, 0);
TextDrawShowForPlayer(playerid, Text:GetPVarInt(playerid, "playerkTD"));
TextDrawShowForPlayer(playerid, Text:GetPVarInt(playerid, "playerdTD"));
return true;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
new
playername[25],
stringoutput[150],
DBResult:queryresult;
GetPlayerName(playerid, playername, sizeof playername);
if(dialogid == DIALOG_REGISTER) {
if(!response)
return Kick(playerid);
if(!(4 < strlen(inputtext) < 33))
return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "{ffffff}Registro", "{ffffff}Sua senha deve ter no mнnimo 5 e no mбximo 32 caracteres.\n\nPor favor, tente novamente.", "Registrar", "Sair");
format(stringoutput, sizeof stringoutput, "INSERT INTO player_info (name, password, money, kills, deaths) VALUES ('%s', '%s', 5000, 0, 0)", DB_Escape(playername), DB_Escape(inputtext));
db_query(main_database, stringoutput);
format(stringoutput, sizeof stringoutput, "{ffffff}Muito bem, {1e90ff}%s{ffffff}!\nVocк se registrou com sucesso.\n\nDigite sua senha abaixo para logar.", playername);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{ffffff}Login", stringoutput, "Login", "Sair");
}
else if(dialogid == DIALOG_LOGIN) {
if(!response)
return Kick(playerid);
format(stringoutput, sizeof stringoutput, "SELECT * FROM player_info WHERE name = '%s' AND password = '%s'", DB_Escape(playername), DB_Escape(inputtext));
queryresult = db_query(main_database, stringoutput);
if(db_num_rows(queryresult)) {
SetPVarInt(playerid, "playerLogged", 1);
db_get_field_assoc(queryresult, "money", stringoutput, 32);
ResetPlayerMoney(playerid); GivePlayerMoney(playerid, strval(stringoutput));
db_get_field_assoc(queryresult, "kills", stringoutput, 32);
SetPVarInt(playerid, "playerKills", strval(stringoutput));
db_get_field_assoc(queryresult, "deaths", stringoutput, 32);
SetPVarInt(playerid, "playerDeaths", strval(stringoutput));
SetPVarInt(playerid, "playerkTD", _:TextDrawCreate(498.000000, 101.000000, "Kills:"));
TextDrawBackgroundColor(Text:GetPVarInt(playerid, "playerkTD"), 255);
TextDrawFont(Text:GetPVarInt(playerid, "playerkTD"), 1);
TextDrawLetterSize(Text:GetPVarInt(playerid, "playerkTD"), 0.500000, 1.000000);
TextDrawColor(Text:GetPVarInt(playerid, "playerkTD"), -1);
TextDrawSetOutline(Text:GetPVarInt(playerid, "playerkTD"), 1);
TextDrawSetProportional(Text:GetPVarInt(playerid, "playerkTD"), 1);
SetPVarInt(playerid, "playerdTD", _:TextDrawCreate(497.000000, 112.000000, "Mortes:"));
TextDrawBackgroundColor(Text:GetPVarInt(playerid, "playerdTD"), 255);
TextDrawFont(Text:GetPVarInt(playerid, "playerdTD"), 1);
TextDrawLetterSize(Text:GetPVarInt(playerid, "playerdTD"), 0.500000, 1.000000);
TextDrawColor(Text:GetPVarInt(playerid, "playerdTD"), -1);
TextDrawSetOutline(Text:GetPVarInt(playerid, "playerdTD"), 1);
TextDrawSetProportional(Text:GetPVarInt(playerid, "playerdTD"), 1);
format(stringoutput, sizeof stringoutput, "Kills: ~y~%02d", GetPVarInt(playerid, "playerKills"));
TextDrawSetString(Text:GetPVarInt(playerid, "playerkTD"), stringoutput);
format(stringoutput, sizeof stringoutput, "Mortes: ~r~%02d", GetPVarInt(playerid, "playerDeaths"));
TextDrawSetString(Text:GetPVarInt(playerid, "playerdTD"), stringoutput);
format(stringoutput, sizeof stringoutput, "Server: {ffffff}%s conectou-se!", playername);
SendClientMessageToAll(0x32cd32ff, stringoutput);
}
else {
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{ffffff}Login", "{ffffff}Senha incorreta!\n\nPor favor, tente novamente.", "Login", "Sair");
}
db_free_result(queryresult);
}
return true;
}
public OnPlayerCommandText(playerid, cmdtext[]) {
if(!strcmp("ranking", cmdtext[1], true)) {
static
i,
result[32],
playerkills,
dialogstring[64 * 10],
DBResult:queryresult;
queryresult = db_query(main_database, "SELECT name, kills FROM player_info ORDER BY kills DESC LIMIT 10");
for(i = 0; i != db_num_rows(queryresult); ++i) {
db_get_field_assoc(queryresult, "kills", result, sizeof result);
playerkills = strval(result);
db_get_field_assoc(queryresult, "name", result, sizeof result);
format(dialogstring, sizeof dialogstring, "%s %02d. %s - %02d assassinatos\n", dialogstring, (i + 1), result, playerkills);
db_next_row(queryresult);
}
db_free_result(queryresult);
ShowPlayerDialog(playerid, DIALOG_RANKING, DIALOG_STYLE_LIST, "{ffffff}Ranking", dialogstring, "Fechar", "");
return true;
}
return SendClientMessage(playerid, 0x1e90ffff, "Server: {ffffff}Este comando nгo existe!");
}
stock DB_Escape(text[])
{
new
ret[80 * 2],
ch,
i,
j;
while ((ch = text[i++]) && j < sizeof (ret))
{
if (ch == '\'')
{
if (j < sizeof (ret) - 2)
{
ret[j++] = '\'';
ret[j++] = '\'';
}
}
else if (j < sizeof (ret))
{
ret[j++] = ch;
}
else
{
j++;
}
}
ret[sizeof (ret) - 1] = '\0';
return ret;
}
Gostei do code..
Agora uma duvida qual й o mais leve? em trafego de sockets/Dados SQLite ou MySQL? |
Gostei do code..
Agora uma duvida qual й o mais leve? em trafego de sockets/Dados SQLite ou MySQL? |
SQLite nгo usa sockets. Ela й baseado em arquivos binбrios na mesma mбquina da aplicaзгo.
|
Parece que SQLite й bem facil de mecher , vlw por compartilhar vou tentar aprimorar meus conheзimentos com esse gamemode
![]() |