Софт [Filterscript] Weapon Save System | Сохранение оружие

Статус
В этой теме нельзя размещать новые ответы.

kaZax

samp.work
Автор темы
Проверенный
150
23
Простенький скрипт который сохраняет оружие игрока при выходе и выдает при входе.
Сохраняет все 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;
}
 

Вложения

  • [k_fs]weapon_ss.zip
    28.3 KB · Просмотры: 181
  • Нравится
Реакции: Sire Like

White_116

Новичок
18
6
Таблицу лучше при загрузки скрипта создавать если она отсутствует.
 
Статус
В этой теме нельзя размещать новые ответы.