- 150
- 23
Простенький скрипт который сохраняет оружие игрока при выходе и выдает при входе.
Сохраняет все 13 слотов. Желательно вшить в мод чтобы было без конфликтов с античитом.
В качестве базы данных использовал SQLite. Все данные хранятся в одном файле.
В качестве ключа в базе используется ник игрока.
Базу данных можно легко редактировать SQLiteBrowser'ом.
Работает на версиях 0.3.7 - R2 и выше.
Готов рассмотреть все баги и доработать код.
Сохраняет все 13 слотов. Желательно вшить в мод чтобы было без конфликтов с античитом.
В качестве базы данных использовал SQLite. Все данные хранятся в одном файле.
В качестве ключа в базе используется ник игрока.
Базу данных можно легко редактировать SQLiteBrowser'ом.
Работает на версиях 0.3.7 - R2 и выше.
Готов рассмотреть все баги и доработать код.
PHP:
#include <a_samp>
#define ScriptVersion 1
#define ScriptName "Weapon Save System"
#define ScriptAuthor "kaZax"
#define DataBaseName "PlayerWeapons.db"
new DB:db_Main;
new WeaponData[MAX_PLAYERS][13][2];
public OnFilterScriptInit()
{
db_Main = db_open(DataBaseName);
db_query (db_Main, "PRAGMA synchronous=OFF; PRAGMA journal_mode=OFF;");
printf(" Filterscript %s loaded. Version %d. Author: %s", ScriptName, ScriptVersion, ScriptAuthor);
return 1;
}
public OnFilterScriptExit()
{
db_close(db_Main);
return 1;
}
public OnPlayerConnect(playerid)
{
new k_PName[24];
GetPlayerName(playerid, k_PName, 24);
new query[80], DBResult:db_result, tmp[48], w_idx, a_idx;
format(query, sizeof query, "SELECT * FROM `Weapon_Data` WHERE `Player`='%s'", k_PName);
db_result = db_query(db_Main, query);
if(db_num_rows(db_result))
{
for (new x = 0; x < 26; x ++)
{
db_get_field(db_result, x + 2, tmp, sizeof tmp);
WeaponData[playerid][w_idx][a_idx] = strval(tmp);
w_idx ++;
if (x > 11 && a_idx == 0) w_idx = 0, a_idx = 1;
}
SetPVarInt(playerid, "FirstSpawn", 1);
}
else
{
format(query, sizeof(query), "INSERT INTO `Weapon_Data` (`Player`) VALUES ('%q')", k_PName);
db_free_result(db_query(db_Main, query));
}
db_free_result(db_result);
return 1;
}
public OnPlayerSpawn(playerid)
{
if (GetPVarInt(playerid, "FirstSpawn"))
{
for (new x = 0; x <= 12; x ++)
{
GivePlayerWeapon(playerid, WeaponData[playerid][x][0], WeaponData[playerid][x][1]);
WeaponData[playerid][x][0] = 0;
WeaponData[playerid][x][1] = 0;
}
DeletePVar(playerid, "FirstSpawn");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new weapons[13][2], query[384], k_PName[MAX_PLAYER_NAME];
GetPlayerName(playerid, k_PName, MAX_PLAYER_NAME);
for (new i = 0; i <= 12; i++)
{
GetPlayerWeaponData(playerid, i, weapons[i][0], weapons[i][1]);
}
format(query, sizeof query, "UPDATE `Weapon_Data` SET `Field3` = '%d', `Field4` = '%d', `Field5` = '%d', `Field6` = '%d', `Field7` = '%d', `Field8` = '%d', `Field9` = '%d', `Field10` = '%d' WHERE `Player` = '%q'",
weapons[0][0], weapons[1][0], weapons[2][0], weapons[3][0], weapons[4][0], weapons[5][0], weapons[6][0], weapons[7][0], k_PName);
db_free_result(db_query(db_Main, query));
format(query, sizeof query, "UPDATE `Weapon_Data` SET `Field11` = '%d', `Field12` = '%d', `Field13` = '%d', `Field14` = '%d', `Field15` = '%d', `Field16` = '%d', `Field17` = '%d', `Field18` = '%d' WHERE `Player` = '%q'",
weapons[8][0], weapons[9][0], weapons[10][0], weapons[11][0], weapons[12][0], weapons[0][1], weapons[1][1], weapons[2][1], k_PName);
db_free_result(db_query(db_Main, query));
format(query, sizeof query, "UPDATE `Weapon_Data` SET `Field19` = '%d', `Field20` = '%d', `Field21` = '%d', `Field22` = '%d', `Field23` = '%d', `Field24` = '%d', `Field25` = '%d', `Field26` = '%d', `Field27` = '%d', `Field28` = '%d' WHERE `Player` = '%q'",
weapons[3][1], weapons[4][1], weapons[5][1], weapons[6][1], weapons[7][1], weapons[8][1], weapons[9][1], weapons[10][1], weapons[11][1], weapons[12][1], k_PName);
db_free_result(db_query(db_Main, query));
return 1;
}