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

Тема в разделе "PAWN", создана пользователем kaZax, 25 июл 2015.

Статус темы:
Закрыта.
  1. kaZax

    kaZax samp.work
    Проверенный

    Регистрация:
    18.03.13
    Сообщения:
    158
    Лайки:
    19
    Репутация:
    26
    Простенький скрипт который сохраняет оружие игрока при выходе и выдает при входе.
    Сохраняет все 13 слотов. Желательно вшить в мод чтобы было без конфликтов с античитом.

    В качестве базы данных использовал SQLite. Все данные хранятся в одном файле.
    В качестве ключа в базе используется ник игрока.
    Базу данных можно легко редактировать SQLiteBrowser'ом.

    Работает на версиях 0.3.7 - R2 и выше.

    Готов рассмотреть все баги и доработать код.

    #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;
    }
     

    Вложения:

    #1
    Sire нравится это.
  2. White_116

    White_116 Пользователь

    Регистрация:
    30.10.14
    Сообщения:
    19
    Лайки:
    6
    Репутация:
    2
    Таблицу лучше при загрузки скрипта создавать если она отсутствует.
     
    #2
  3. kaZax

    kaZax samp.work
    Проверенный

    Регистрация:
    18.03.13
    Сообщения:
    158
    Лайки:
    19
    Репутация:
    26
    Таблица большая. Были проблемы с его помещением.
     
    #3
Статус темы:
Закрыта.