Перейти к содержимому


Фотография

Нужна помощь inidbi или inidbi2


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 15

#1 OFFLINE   Shadow_last

Shadow_last

    Рядовой

  • Пользователи
  • 15 сообщений

Отправлено 23 March 2016 - 18:31

Шесть дней назад решил прикрутить базу данных к своей миссии писал код для inidbi или inidbi2, пробовал обе проблема в том что запись в базу данных есть а вот чтения нету. То есть я захожу на сервер, лутаюсь, файл создается в раз в N секунд перезаписывается, выхожу файл остается, при повторном входе на сервер чистый пользователь в точке респавна, файл перезаписывался на чистого пользователя , устал извращаться может кто писал для миссии себе поделитесь реализацией. Перепробовал все примеры и бубны с форума бисов ну чето то не как.

Нужно сохранить в БД, и при повторном заходе на сервер считать для каждого игрока:

 

- Позицию

- Вектор

- Здоровье

- Кислород

 

- Униформа

- Униформа предметы

- Рюкзак 

- Рюкзак предметы

- Жилет

- Жилет предметы

- Головной убор

- Очки

- Гаджеты (карта, компас, GPS, ПНВ, часы и т.д.)

- Оружие включая примари и секондари

- Модули оружия

- Магазины

 

- Позиция техники (Не обязательно)

 

За ранее спасибо если кто может помочь. :)

 

Вот такая фигня для inidbi получилась:

 

init.sqf

call compile preProcessFile "\inidbi\init.sqf";
call compile preProcessFile "iniDB\Arma3functions.sqf";
execVM "iniDB\DeleteItems.sqf";

abc_LoadplayerPos = {
    private ["_loadpos"];
    _loadpos = _this select 0;
    _Profile = format["%1", getPlayerUID _loadpos];
    //============    Load Stats
    //PLAYER
    _playerPos = [_Profile, "location", "ARRAY"] call iniDB_read;
    _playerHealth = [_Profile, "health", "SCALAR"] call iniDB_read;
    _playerOxygen = [_Profile, "oxygen", "SCALAR"] call iniDB_read;
    //INVENTORY
    _playerBackpack = [_Profile, "backpack", "STRING"] call iniDB_read;
    _playerBackpackGear = [_Profile, "backpackGear", "ARRAY"] call iniDB_read;
    _playerVest = [_Profile, "vest", "STRING"] call iniDB_read;
    _playerVestGear = [_Profile, "vestGear", "ARRAY"] call iniDB_read;
    _playerUniform = [_Profile, "uniform", "STRING"] call iniDB_read;
    _playerUniformGear = [_Profile, "uniformGear", "ARRAY"]call iniDB_read;
    _playerGadgets = [_Profile, "gadgets", "ARRAY"] call iniDB_read;
    _playerHeadgear = [_Profile, "headgear", "STRING"] call iniDB_read;
    _playerGoggles = [_Profile, "goggles", "STRING"] call iniDB_read;
    _playerWep = [_Profile, "weapons", "ARRAY"] call iniDB_read;
    _playerPrimWepAttach = [_Profile, "primWeaponAttachments", "ARRAY"] call iniDB_read;
    _playerSecWepAttach = [_Profile, "secWeaponAttachments", "ARRAY"] call iniDB_read;
    _playerMagazines = [_Profile, "magazines", "ARRAY"] call iniDB_read;
    
    _loadpos setpos _playerPos;
    _loadpos setdamage  _playerHealth;
    _loadpos setOxygenRemaining _playerOxygen;
    
    _loadpos addBackpack _playerBackpack;
    for "_i" from 0 to (count _playerBackpack) do {_loadpos addItemToBackpack (_playerBackpack (select _i)}; //ошибка
    _loadpos addVest _playerVest;
    for "_i" from 0 to (count _playerVestGear) do {_loadpos addItemToVest (_playerVestGear (select _i)}; //ошибка
    _loadpos forceAddUniform _playerUniform;
    for "_i" from 0 to (count _playerUniformGear) do {_loadpos addItemToUniform (select _i)}; //ошибка
    for "_i" from 0 to (count _playerGadgets) do {_loadpos linkItem (_playerGadgets (select _i)};//ошибка
    _loadpos addHeadgear _playerHeadgear;
    _loadpos addGoggles _playerGoggles;
    for "_y" from 0 to (count _playerWep) do {_loadpos addWeapon (_playerWep (select _y)}; //ошибка
    for "_y" from 0 to (count _PrimWepAttach) do {_loadpos addWeapon (_PrimWepAttach (select _i)}; //ошибка
    for "_y" from 0 to (count _playerSecWepAttach) do {_loadpos addWeapon (_playerSecWepAttach (select _i)}; //ошибка   
    for "_i" from 0 to (count _playerMagazines) do {_loadpos addMagazine (_playerMagazines (select _i)}; //ошибка
    //_loadpos setSpeaker "rhs_Male01RUS"; //RHS
};

if(isServer) then {
[] execVM "iniDB\SavePlayer.sqf";
};

if(isServer) then {
[] execVM "iniDB\SavePlayer.sqf";
};

Arma3functions.sqf

// Do not edit this file!
// This file may only be edited by Engima's ASCOM Editor!
//
// <ASCOM version="1">
// <Prefix>abc_</Prefix>
// <Functions>
// <Function Name="LoadplayerPos" Params="loadpos" Ret="false" A="false" C="false" S="true" O="false" OC="false" P="false" />
// <Function Name="LoadPlayerWeapon" Params="weapon" Ret="false" A="false" C="false" S="true" O="false" OC="false" P="false" />
// </Functions>
// </ASCOM>

ASCOM_ClientID = 0;
ASCOM_CallID = 0;
ASCOM_LastCallID = 0;
ASCOM_LockCallID = 0;

"abc_LoadplayerPosEventArgs" addPublicVariableEventHandler {
    private ["_array"];

    _array = _this select 1;

    _array spawn {
        if ((_this select 0 == "A") || (_this select 0 == "C" && !isDedicated)) then {
            (_this select 1) call abc_LoadplayerPos;
        };

        if (_this select 0 == "S" && isServer) then {
            (_this select 1) call abc_LoadplayerPos;
        };
    };
};

abc_LoadplayerPosServer = {
    if (isNil "_this") then { _this = []; };
    if (isServer) then {
        _this call abc_LoadplayerPos;
    }
    else {
        abc_LoadplayerPosEventArgs = ["S", _this];
        publicVariable "abc_LoadplayerPosEventArgs";
        abc_LoadplayerPosEventArgs = [];
    };
};


"abc_LoadPlayerWeaponEventArgs" addPublicVariableEventHandler {
    private ["_array"];

    _array = _this select 1;

    _array spawn {
        if ((_this select 0 == "A") || (_this select 0 == "C" && !isDedicated)) then {
            (_this select 1) call abc_LoadPlayerWeapon;
        };

        if (_this select 0 == "S" && isServer) then {
            (_this select 1) call abc_LoadPlayerWeapon;
        };
    };
};

abc_LoadPlayerWeaponServer = {
    if (isNil "_this") then { _this = []; };
    if (isServer) then {
        _this call abc_LoadPlayerWeapon;
    }
    else {
        abc_LoadPlayerWeaponEventArgs = ["S", _this];
        publicVariable "abc_LoadPlayerWeaponEventArgs";
        abc_LoadPlayerWeaponEventArgs = [];
    };
};



if (isServer) then {
    "ASCOM_AskForClientID" addPublicVariableEventHandler {
        private ["_unit"];

        _unit = _this select 1;
        ASCOM_AskForClientID = [];
        ASCOM_LastCallID = ASCOM_LastCallID + 1;
        ASCOM_ClientIDResponse = [_unit, ASCOM_LastCallID];
        publicVariable "ASCOM_ClientIDResponse";
    };

    ASCOM_ServerInitialized = true;
    publicVariable "ASCOM_ServerInitialized";
    ASCOM_Initialized = true;
}
else {
    "ASCOM_ClientIDResponse" addPublicVariableEventHandler {
        private ["_array"];

        _array = _this select 1;
        ASCOM_ClientIDResponse = [];

        if (player == (_array select 0)) then {
            ASCOM_ClientID = _array select 1;
            ASCOM_Initialized = true;
        };
    };

    waitUntil {!isNull player};
    ASCOM_AskForClientID = player;
    publicVariable "ASCOM_AskForClientID";
};

DeleteItems.sqf

removeAllWeapons player;
removeAllItems player;
removeAllAssignedItems player;
removeUniform player;
removeVest player;
removeBackpack player;
removeHeadgear player;
removeGoggles player;
[player] call abc_LoadplayerPosServer; //ошибка 

SavePlayer.sqf

if(isServer) then {
while{true} do {
	{
		if(isPlayer _x) then {
			sleep 5;
_Profile  =  format ["%1", getPlayerUID _x];

//============	Save Stats
//PLAYER
[_Profile, "playerData", "name", name _x] call iniDB_write;
[_Profile, "playerData", "location", position _x] call iniDB_write;
[_Profile, "playerData", "oxygen", getOxygenRemaining _x] call iniDB_write;
[_Profile, "playerData", "health", damage _x] call iniDB_write;
//INVENTORY
[_Profile, "playerData", "backpack", backpack _x] call iniDB_write;
[_Profile, "playerData", "backpackGear", backpackItems _x] call iniDB_write;
[_Profile, "playerData", "vest", vest _x] call iniDB_write;
[_Profile, "playerData", "vestGear", vestItems _x] call iniDB_write;
[_Profile, "playerData", "uniform", uniform _x] call iniDB_write;
[_Profile, "playerData", "uniformGear", uniformItems _x] call iniDB_write;
[_Profile, "playerData", "gadgets", assignedItems _x] call iniDB_write;
[_Profile, "playerData", "headgear", headgear _x] call iniDB_write;
[_Profile, "playerData", "goggles", goggles _x] call iniDB_write;
[_Profile, "playerData", "weapons", weapons _x] call iniDB_write;
[_Profile, "playerData", "primWeaponAttachments", primaryWeaponItems _x] call iniDB_write;
[_Profile, "playerData", "secWeaponAttachments", secondaryWeaponItems _x] call iniDB_write;
[_Profile, "playerData", "magazines", magazinesAmmoFull _x] call iniDB_write;

systemChat "Сохранение...";
			};
		} forEach allUnits;
	}
};

Че ей не так не пойму :sorry: сделано вроде по рабочему примеру:

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


Сообщение отредактировал Shadow_last: 24 March 2016 - 05:45

  • 0

#2 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 23 March 2016 - 18:44

а у тебя стоит, при заходе, проверка уже существующей записи на игрока например по UIDу? есть он в базе или нет?


  • 0

#3 OFFLINE   Shadow_last

Shadow_last

    Рядовой

  • Пользователи
  • 15 сообщений

Отправлено 23 March 2016 - 19:42

а у тебя стоит, при заходе, проверка уже существующей записи на игрока например по UIDу? есть он в базе или нет?

 

Примрно так ну щас и запись пропала я уже 300 раз все по всякому переписал, это тестов в inidbi2

 

initServer.sqf

_inidbi = ["new", "PlayersData"] call OO_INIDBI;
_playerData = format ["1%",getPlayerUID player]; //этот вариант  тоже менял 100 раз по всякому.

_pos = ["read", [_playerData, "location", "ARRAY"]] call _inidbi;
player _pos setpos;
sleep 5;

while {true} do {

["write", [_playerData, "location", position player]] call _inidbi;

sleep 5;
systemChat "Сохранение...";
}

для inidbi делал так:

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

идет только запись чтения нет


Сообщение отредактировал Shadow_last: 24 March 2016 - 03:54

  • 0

#4 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 23 March 2016 - 20:19

 

а у тебя стоит, при заходе, проверка уже существующей записи на игрока например по UIDу? есть он в базе или нет?

 

Примрно так ну щас и запись пропала я уже 300 раз все по всякому переписал, это тестов в inidbi2

 

initServer.sqf

_inidbi = ["new", "PlayersData"] call OO_INIDBI;
_playerData = format ["1%",getPlayerUID player]; //этот вариант  тоже менял 100 раз по всякому.

["read", [_playerData, "location", "ARRAY"]] call _inidbi;

sleep 5;

while {true} do {

["write", [_playerData, "location", position player]] call _inidbi;

sleep 5;
systemChat "Сохранение...";
}

для inidbi делал так:

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

идет только запись чтения нет

 

 

Что это? зачем слип? зачем ты сервер останавливаешь?

 

тут глянь: https://arma3.ru/for...abotaet-extdb2/


  • 0

#5 OFFLINE   Shadow_last

Shadow_last

    Рядовой

  • Пользователи
  • 15 сообщений

Отправлено 23 March 2016 - 20:51

Что это? зачем слип? зачем ты сервер останавливаешь?

 

тут глянь: https://arma3.ru/for...abotaet-extdb2/

 

предлагаешь не заморачиваться и садануть так скажем по крупному в скуль сразу)))) хотя вот это интересный вариант

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

если брать как исходное :)  ну спс и на этом может в скуле мне больше повезет. слип для того что бы не успело записать до чтения, во втором случае слип это период записи.


Сообщение отредактировал Shadow_last: 23 March 2016 - 20:55

  • 0

#6 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 23 March 2016 - 21:07

 

Что это? зачем слип? зачем ты сервер останавливаешь?

 

тут глянь: https://arma3.ru/for...abotaet-extdb2/

 

предлагаешь не заморачиваться и садануть так скажем по крупному в скуль сразу)))) хотя вот это интересный вариант

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

если брать как исходное :)  ну спс и на этом может в скуле мне больше повезет. слип для того что бы не успело записать до чтения, во втором случае слип это период записи.

 

 

Всмысле? т.к. ты хочешь сказать, что вообще не в курсе, какие операции у тебя с мускулом проходят? :)

там в моем примере, собственно описан сам процесс, как это работает, и от куда и куда ноги растут :)

тебе осталось только на этот вариант положить свой запрос в мускул, получить из него вывод, и применить, туда куда тебе нужно, все.

 

Сам запрос в мускул PlayerUID игрока. на выходе получишь false или true 


[ChekPlayer]
SQL1_1 = SELECT CASE WHEN EXISTS(SELECT PlayerUID FROM character_data WHERE PlayerUID = ?) THEN 'true' ELSE 'false' END
Number of Inputs = 1
SQL1_INPUTS = 1 
OUTPUT = 1
my_ext_ChekPlayer ={
private["_parameters","_query","_result"];
_parameters = _this;
_query = format["%1:%2:%3", 0, ServerDBConId, _parameters];
_result = "extDB2" callExtension _query;
_result = call compile format["%1", _result];
((_result select 1) select 0) select 0

};
_isAccount = format["ChekPlayer:%1", _playerUID] call my_ext_ChekPlayer;

а дальше пошло:

if (_isAccount) then
	{
загрузка данных из бд, если вернулось true

}else {
создание нового профиля, если вернулось false

};

все. ничего сложного нет.


Сообщение отредактировал dos622: 23 March 2016 - 21:08

  • 0

#7 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 25 March 2016 - 17:41

Inidbi

не 2

0 = "" spawn {
	call compile preprocessFileLineNumbers "\inidbi\init.sqf";
	sleep 2;
	_uid = format["%1", getplayeruid player];
	_result 	= [_uid, "test", "name", "Bob"] call iniDB_write;
	sleep 1;
	_dbName		= [_uid, "test", "name","STRING"] call iniDB_read;
	hint ("Result: " + _dbName);
};


Сообщение отредактировал SteelRat: 25 March 2016 - 18:09

  • 0

#8 OFFLINE   Shadow_last

Shadow_last

    Рядовой

  • Пользователи
  • 15 сообщений

Отправлено 25 March 2016 - 21:20

Inidbi

не 2

0 = "" spawn {
	call compile preprocessFileLineNumbers "\inidbi\init.sqf";
	sleep 2;
	_uid = format["%1", getplayeruid player];
	_result 	= [_uid, "test", "name", "Bob"] call iniDB_write;
	sleep 1;
	_dbName		= [_uid, "test", "name","STRING"] call iniDB_read;
	hint ("Result: " + _dbName);
};

Команду прочитать и записать я и так знаю для всех  4х вопрос был другой, одно дело выдать одну строку другое дело всю статистику игрока записать и инициализировать после чтения. и почему две кавычки перед spawn?  и почему spawn ?


Сообщение отредактировал Shadow_last: 26 March 2016 - 03:22

  • 0

#9 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 27 March 2016 - 19:13

и почему две кавычки перед spawn?  и почему spawn ?

 

Команда spawn всегда требует передать что либо в качестве параметра, в данном случае передавать не чего, по этому передаётся пустая строка.

Почему spawn ? Потому что в поле инит без spawn вы не сможете использовать sleep.

 

 

Команду прочитать и записать я и так знаю для всех  4х вопрос был другой, одно дело выдать одну строку другое дело всю статистику игрока записать и инициализировать после чтения

1) Проблема может быть в коде который вы написали, где то ошибка, раз процесс записи проходит нормально, то и процесс чтения тоже должен пройти нормально.

 

2) Проблемой могут быть те функции которые вы используете, для записи и для чтения, я так понимаю эти функции появились во второй версии? В первой их нет, в принципе меня это не огорчает, я и сам прекрасно справился с написанием сохранения и чтения из базы.

И вызывать для одного персонажа больше 10 процессов файлового ввода и вывода, мягко скажу, идиотское решение, это я не вам, а тому кому в голову пришло такое решение. Так что проблемой могут оказаться, в вашем случае, именно эти функции чтения из базы.

Сделайте сами, это на первый взгляд сложно, создайте массив данных о персонаже и запишите одной записью весь массив, потом считайте из базы этот массив, обработайте его и экипируйте персонажа, дёшево и сердито, и без 10 обращений к файлу по поводу одного персонажа.


  • 0

#10 OFFLINE   Shadow_last

Shadow_last

    Рядовой

  • Пользователи
  • 15 сообщений

Отправлено 27 March 2016 - 23:27

 

и почему две кавычки перед spawn?  и почему spawn ?

 

Команда spawn всегда требует передать что либо в качестве параметра, в данном случае передавать не чего, по этому передаётся пустая строка.

Почему spawn ? Потому что в поле инит без spawn вы не сможете использовать sleep.

 

 

Команду прочитать и записать я и так знаю для всех  4х вопрос был другой, одно дело выдать одну строку другое дело всю статистику игрока записать и инициализировать после чтения

1) Проблема может быть в коде который вы написали, где то ошибка, раз процесс записи проходит нормально, то и процесс чтения тоже должен пройти нормально.

 

2) Проблемой могут быть те функции которые вы используете, для записи и для чтения, я так понимаю эти функции появились во второй версии? В первой их нет, в принципе меня это не огорчает, я и сам прекрасно справился с написанием сохранения и чтения из базы.

И вызывать для одного персонажа больше 10 процессов файлового ввода и вывода, мягко скажу, идиотское решение, это я не вам, а тому кому в голову пришло такое решение. Так что проблемой могут оказаться, в вашем случае, именно эти функции чтения из базы.

Сделайте сами, это на первый взгляд сложно, создайте массив данных о персонаже и запишите одной записью весь массив, потом считайте из базы этот массив, обработайте его и экипируйте персонажа, дёшево и сердито, и без 10 обращений к файлу по поводу одного персонажа.

 

Ты код вообще видишь? это все для первой версии inidbi, в ините плеера нет ничего и не должно быть, запись в базу проходит вполне вот чтения нету, один массив интересное решение ну бесполезное никакой абсолютно разницы в принципе нет, создайте если б у меня получилось все я бы здесь не просил помощи... Во второй IniDBI2 версии я пытался использовать по сути готовое решение

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

ну опять таки проблема та же запись на ура чтения не происходит куда я только не совал уже этот вызов.

call compilefinal preprocessFileLineNumbers "oo_pdw.sqf";

_pdw = ["new", "inidbi"] call OO_PDW;

"loadPlayers" call _pdw;
"loadGroups" call _pdw;

_refreshTime = 30; // в секундах
 
while {true} do
{

sleep _refreshTime;

"savePlayers" call _pdw;
"saveGroups" call _pdw;

systemChat "Сохранение...";
};

И поскольку как я не е.......ся ничего из этого не вышло, я и создал этот пост в надежде что кто создавал уже код и у него есть готовое решение, советов я прочитал уже страниц 50, способы помоему перепробовал все, максимум что я получал во всех случаях это запись не более того, в твоей сборке она работает ну ты используешь много переменных для ссылок и выковырять у меня из твоей платформы мягко скажем не получилось... А лишнего для меня я уже писал там просто до.... много очень... Можешь посмотреть по сути чем я занимаюсь после эпохи если не влом пройти регистрацию

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.


Сообщение отредактировал Shadow_last: 27 March 2016 - 23:27

  • 0

#11 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 27 March 2016 - 23:59

Да, уважаемый, мне стоило по внимательнее присмотреться к вашему творению.

 

здесь вы получаете строку содержащую класс вещь мешка 

_playerBackpack = [_Profile, "backpack", "STRING"] call iniDB_read;

здесь вы выдаёте персу этот вещь мешок

_loadpos addBackpack _playerBackpack;

а вот что вы ожидали получить от этой строки

for "_i" from 0 to (count _playerBackpack) do {_loadpos addItemToBackpack (_playerBackpack (select _i)}; //ошибка

Одному аллаху ведомо.

 

Вы в лог то хоть заглядывали?

_playerBackpack

Это у вас строка содержащая класс вещь мешка, а не массив с итемами которые лежат в вещь мешке.


ЗЫ

Да  ещё и не правильно.

Так, одним словом

for "_i" from 0 to (count _playerBackpackItems) - 1 do {_loadpos addItemToBackpack (_playerBackpackItems select _i);}; 

Сообщение отредактировал SteelRat: 28 March 2016 - 00:03

  • 0

#12 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 28 March 2016 - 00:07

ЗЫ_2

И всё же, вы считаете разумным, 17 вызовов

//============	Save Stats
//PLAYER
[_Profile, "playerData", "name", name _x] call iniDB_write;
[_Profile, "playerData", "location", position _x] call iniDB_write;
[_Profile, "playerData", "oxygen", getOxygenRemaining _x] call iniDB_write;
[_Profile, "playerData", "health", damage _x] call iniDB_write;
//INVENTORY
[_Profile, "playerData", "backpack", backpack _x] call iniDB_write;
[_Profile, "playerData", "backpackGear", backpackItems _x] call iniDB_write;
[_Profile, "playerData", "vest", vest _x] call iniDB_write;
[_Profile, "playerData", "vestGear", vestItems _x] call iniDB_write;
[_Profile, "playerData", "uniform", uniform _x] call iniDB_write;
[_Profile, "playerData", "uniformGear", uniformItems _x] call iniDB_write;
[_Profile, "playerData", "gadgets", assignedItems _x] call iniDB_write;
[_Profile, "playerData", "headgear", headgear _x] call iniDB_write;
[_Profile, "playerData", "goggles", goggles _x] call iniDB_write;
[_Profile, "playerData", "weapons", weapons _x] call iniDB_write;
[_Profile, "playerData", "primWeaponAttachments", primaryWeaponItems _x] call iniDB_write;
[_Profile, "playerData", "secWeaponAttachments", secondaryWeaponItems _x] call iniDB_write;
[_Profile, "playerData", "magazines", magazinesAmmoFull _x] call iniDB_write;

для каждого перса из allUnits?


  • 0

#13 OFFLINE   Shadow_last

Shadow_last

    Рядовой

  • Пользователи
  • 15 сообщений

Отправлено 28 March 2016 - 04:16

ЗЫ_2

И всё же, вы считаете разумным, 17 вызовов

//============	Save Stats
//PLAYER
[_Profile, "playerData", "name", name _x] call iniDB_write;
[_Profile, "playerData", "location", position _x] call iniDB_write;
[_Profile, "playerData", "oxygen", getOxygenRemaining _x] call iniDB_write;
[_Profile, "playerData", "health", damage _x] call iniDB_write;
//INVENTORY
[_Profile, "playerData", "backpack", backpack _x] call iniDB_write;
[_Profile, "playerData", "backpackGear", backpackItems _x] call iniDB_write;
[_Profile, "playerData", "vest", vest _x] call iniDB_write;
[_Profile, "playerData", "vestGear", vestItems _x] call iniDB_write;
[_Profile, "playerData", "uniform", uniform _x] call iniDB_write;
[_Profile, "playerData", "uniformGear", uniformItems _x] call iniDB_write;
[_Profile, "playerData", "gadgets", assignedItems _x] call iniDB_write;
[_Profile, "playerData", "headgear", headgear _x] call iniDB_write;
[_Profile, "playerData", "goggles", goggles _x] call iniDB_write;
[_Profile, "playerData", "weapons", weapons _x] call iniDB_write;
[_Profile, "playerData", "primWeaponAttachments", primaryWeaponItems _x] call iniDB_write;
[_Profile, "playerData", "secWeaponAttachments", secondaryWeaponItems _x] call iniDB_write;
[_Profile, "playerData", "magazines", magazinesAmmoFull _x] call iniDB_write;

для каждого перса из allUnits?

По другому х..... работает)


  • 0

#14 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 28 March 2016 - 06:26

 

По другому х..... работает)

Я начинаю думать, что у меня одного особенная Арма 3.

[human]
names="["SteelRat"]"
data="[true,[["U_IG_Guerilla2_3",[]],["",[]],["B_AssaultPack_dgtl",[]],"","","",["",[],""],["",[],""],["hgun_ACPC2_F",[],["9Rnd_45ACP_Mag",8]],["ItemGPS"]],[871.375,216.478,7.7227],105.462,"amovpercmstpsraswpstdnon_turnl",["hgun_ACPC2_F","Single"],[0,[["HitFace","HitNeck","HitHead","HitPelvis","HitAbdomen","HitDiaphragm","HitChest","HitBody","HitArms","HitHands","HitLegs"],["face_hub","neck","head","pelvis","spine1","spine2","spine3","body","arms","hands","legs"],[0,0,0,0,0,0,0,0,0,0,0]]]]"

Я подозревал, что БЕСы подложили мне свинью, я удаляюсь.


  • 0

#15 OFFLINE   Dupont

Dupont

    Ефрейтор

  • Пользователи
  • 48 сообщений
  • Откуда:Eburg

Отправлено 02 August 2016 - 21:17

С iniBDi проблем та вообще ведь быть не должно.
Пример работы с iniBDi2 (даже в ините ничего прописывать не надо):

 
//пример записи в БД
0=[] spawn { _inidbi =["new","TestDBName"] call OO_INIDBI; ["write",["Юзер","Лут","[мега всего очень дохрена...]"]] call _inidbi; } 
 
//пример чтения из БД
0=[] spawn { _inidbi =["new","TestDBName"] call OO_INIDBI;  diag_log text format ["Read: %1",["read",["Юзер","Лут","ТИП ДАННЫХ","NO GOOD, FUCK"]] call _inidbi];}
 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


Сообщение отредактировал Dupont: 02 August 2016 - 21:19

  • 0

#16 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 August 2016 - 05:18

 

Пример работы с iniBDi2 (даже в ините ничего прописывать не надо):

Ну да, вместо этого при каждом обращении к базе производится то, что по хорошему делается один раз в ините миссии. Вопрос что лучше ...


Сообщение отредактировал SteelRat: 04 August 2016 - 05:18

  • 0




Яндекс.Метрика