RU/setAccountData: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(Форматирование)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
__NOTOC__
{{RU/Server function}}
{{RU/Server function}}
__NOTOC__
{{RU/Important Note|Настоятельно рекомендуется использовать формат ''module.key'' в названиях ключей, как показано в примере ниже. Это помогает избегать противоречий между разными скриптами.}}
{{RU/Note_box|Настоятельно рекомендуется использовать формат ''module.key'' в названиях ключей, как показано в примере ниже. Это помогает избегать противоречий между разными скриптами.}}
Эта функция сохраняет данные, которые будут храниться в аккаунте под заданным ключом. Данные аккаунта хранятся даже после выхода из него, если это не аккаунт ''guest'' (гость). Данные гостевого аккаунта удаляются после выхода (эквивалентно использованию [[RU/setElementData|setElementData]] в элементе [[RU/Element/Player|игрока]]), но данные гостевого аккаунта могут быть полезны как способ хранения ссылки на вашу собственную систему аккаунта.
Эта функция сохраняет строку, которая будет храниться в аккаунте. Данные, хранящиеся как данные аккаунта, сохраняются в игре, если это не аккаунт ''guest'' (гость). Даже если войти в аккаунт ''guest'' (гость), данные аккаунта могут быть полезны как способ хранения ссылки на вашу собственную систему аккаунта, хотя сохранение эквивалентно использованию [[RU/setElementData|setElementData]] в элементе [[RU/Element/Player|player]].


==Синтаксис==  
==Синтаксис==  
Line 10: Line 10:
{{RU/OOP||[[RU/Account|account]]:setData||[[RU/getAccountData|getAccountData]]}}
{{RU/OOP||[[RU/Account|account]]:setData||[[RU/getAccountData|getAccountData]]}}
===Обязательные аргументы===  
===Обязательные аргументы===  
*'''theAccount:''' [[RU/Account|Аккаунт]], в который Вы хотите записать данные
*'''theAccount:''' [[RU/Account|Аккаунт]], в который вы хотите записать данные.
*'''key:''' Ключ, под которым Вы хотите сохранить данные
*'''key:''' Ключ, под которым вы хотите сохранить данные.
*'''value:''' Значение, которое Вы хотите установить. Установите значение ''false'', чтобы удалить данные. Вы не можете сохранять таблицы, но вы можете использовать строки [[toJSON]].
*'''value:''' Значение, которое вы хотите установить. Установите значение ''[[RU/Boolean|false]]'', чтобы удалить данные. Вы не можете сохранять таблицы, но вы можете использовать строки [[RU/toJSON|toJSON]].


===Возвращаемые значения===
===Возвращаемые значения===
Возвращает ''true'', если данные для аккаунта были установлены, или ''false'', если указан недопустимый аргумент.
*'''[[RU/Boolean|true]]''', если данные аккаунта были успешно сохранены.
*'''[[RU/Boolean|false]]''', если данные аккаунта не были сохранены:
# [[аккаунт]] не был найден;
# указаны недопустимые аргументы.


==Пример использования==  
==Пример использования==
<section name="Сервер" class="server" show="false">
<section name="Сервер" class="server" show="true">  
'''Пример 1.''' Для пиратского ролевого игрового режима сумма денег, которую имеет игрок, постоянно сохраняется, сохраняя её в своем аккаунте. Обратите внимание, что код использует ''piraterpg.money'' как ключ, а не просто ''money'', так как игрок может участвовать в других игровых режимах, которые также сохраняют его денежную сумму на его счёт. Если оба типа игровых режимов будут использовать ''money'' в качестве ключа аккаунта, они перепишут данные друг друга.
'''Пример 1.''' Для пиратского ролевого игрового режима сумма денег, которую имеет игрок, постоянно сохраняется, сохраняя её в своем аккаунте. Обратите внимание, что код использует ''piraterpg.money'' как ключ, а не просто ''money'', так как игрок может участвовать в других игровых режимах, которые также сохраняют его денежную сумму на его счёт. Если оба типа игровых режимов будут использовать ''money'' в качестве ключа аккаунта, они перепишут данные друг друга.
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
function onPlayerQuit()
function onPlayerQuit()
      // заносим в переменную playeraccount текущий аккаунт который вызвал событие
       local playerAccount = getPlayerAccount(source) -- получает аккаунт игрока
       local playeraccount = getPlayerAccount(source)
       if(playerAccount) then -- если аккаунт получен, то
      // проверяем существует ли аккаунт if(playeraccount) и не является аккант гостевым and not isGuestAccount(playeraccount) then
             local playerMoney = getPlayerMoney(source) -- получает сумму денег игрока
       if(playeraccount) and not isGuestAccount(playeraccount) then
             setAccountData(playerAccount, "piraterpg.money", playerMoney) -- сохраняет в полученный аккаунт значение 'playerMoney' под ключом "piraterpg.money"
            // заносим в переменную playermoney текущее кол-во денег игрока
             local playermoney = getPlayerMoney(source)
            // теперь меняем ключ "piraterpg.money" аккаунта playeraccount и устанавливаем последнее нам известное кол-во денег
             setAccountData(playeraccount, "piraterpg.money", playermoney)
       end
       end
end
end
addEventHandler("onPlayerQuit", getRootElement(), onPlayerQuit) -- прикрепляет функцию 'onPlayerQuit' к обработчику события "onPlayerQuit"


function onPlayerLogin(_, playeraccount)
function onPlayerLogin(_, account)
      if(playeraccount) then
    local playerMoney = getAccountData(account, "piraterpg.money") -- получает данные аккаунта сохранённые под ключом "piraterpg.money"
            local playermoney = getAccountData(playeraccount, "piraterpg.money")
    if(playerMoney) then -- если данные получены, то
            if(playermoney) then
        setPlayerMoney(source, playerMoney) -- устанавливает игроку сумму денег из полученных данных
                  setPlayerMoney(source, playermoney)
    end
            end
      end
end
end
addEventHandler("onPlayerLogin", getRootElement(), onPlayerLogin) -- прикрепляет функцию 'onPlayerLogin' к обработчику события "onPlayerLogin"
addEventHandler("onPlayerQuit", getRootElement(), onPlayerQuit)
addEventHandler ("onPlayerLogin", getRootElement(), onPlayerLogin)
</syntaxhighlight>
</syntaxhighlight>
</section>
</section>
Line 49: Line 45:
==Проблемы==
==Проблемы==
{{RU/Issues|
{{RU/Issues|
{{RU/Issue|7757|[Исправлено в 1.3.4-7757] setAccountData зажимает цифры после десятичной точки}}
{{RU/Issue|7757|[Исправлено в 1.3.4-7757] [[RU/setAccountData|setAccountData]] зажимает цифры после десятичной точки}}
}}
}}
<section name="Обход проблемы 7757" class="server" show="false">
<section name="Обход проблемы 7757" class="server" show="false">
Line 61: Line 57:
{{RU/Account_functions}}
{{RU/Account_functions}}


[[en:setAccountData]]
[[ru:setAccountData]]
[[ar:setAccountData]]
[[ar:setAccountData]]
[[en:setAccountData]]
[[es:setAccountData]]
[[es:setAccountData]]

Latest revision as of 15:44, 12 April 2021

[[{{{image}}}|link=|]] Важное примечание: Настоятельно рекомендуется использовать формат module.key в названиях ключей, как показано в примере ниже. Это помогает избегать противоречий между разными скриптами.

Эта функция сохраняет данные, которые будут храниться в аккаунте под заданным ключом. Данные аккаунта хранятся даже после выхода из него, если это не аккаунт guest (гость). Данные гостевого аккаунта удаляются после выхода (эквивалентно использованию setElementData в элементе игрока), но данные гостевого аккаунта могут быть полезны как способ хранения ссылки на вашу собственную систему аккаунта.

Синтаксис

bool setAccountData(account theAccount, string key, string value)

Синтаксис ООП Помогите! Я не понимаю, что это!

Метод: account:setData(...)
Парная функция: [[RU/getAccountData|getAccountData]]

Обязательные аргументы

  • theAccount: Аккаунт, в который вы хотите записать данные.
  • key: Ключ, под которым вы хотите сохранить данные.
  • value: Значение, которое вы хотите установить. Установите значение false, чтобы удалить данные. Вы не можете сохранять таблицы, но вы можете использовать строки toJSON.

Возвращаемые значения

  • true, если данные аккаунта были успешно сохранены.
  • false, если данные аккаунта не были сохранены:
  1. аккаунт не был найден;
  2. указаны недопустимые аргументы.

Пример использования

Click to collapse [-]
Сервер

Пример 1. Для пиратского ролевого игрового режима сумма денег, которую имеет игрок, постоянно сохраняется, сохраняя её в своем аккаунте. Обратите внимание, что код использует piraterpg.money как ключ, а не просто money, так как игрок может участвовать в других игровых режимах, которые также сохраняют его денежную сумму на его счёт. Если оба типа игровых режимов будут использовать money в качестве ключа аккаунта, они перепишут данные друг друга.

function onPlayerQuit()
      local playerAccount = getPlayerAccount(source) -- получает аккаунт игрока
      if(playerAccount) then -- если аккаунт получен, то
            local playerMoney = getPlayerMoney(source) -- получает сумму денег игрока
            setAccountData(playerAccount, "piraterpg.money", playerMoney) -- сохраняет в полученный аккаунт значение 'playerMoney' под ключом "piraterpg.money" 
      end
end
addEventHandler("onPlayerQuit", getRootElement(), onPlayerQuit) -- прикрепляет функцию 'onPlayerQuit' к обработчику события "onPlayerQuit"

function onPlayerLogin(_, account)
    local playerMoney = getAccountData(account, "piraterpg.money") -- получает данные аккаунта сохранённые под ключом "piraterpg.money"
    if(playerMoney) then -- если данные получены, то
        setPlayerMoney(source, playerMoney) -- устанавливает игроку сумму денег из полученных данных
    end
end
addEventHandler("onPlayerLogin", getRootElement(), onPlayerLogin) -- прикрепляет функцию 'onPlayerLogin' к обработчику события "onPlayerLogin"

Проблемы

Идентификатор проблемы Описание
#7757 [Исправлено в 1.3.4-7757] setAccountData зажимает цифры после десятичной точки
Click to expand [+]
Обход проблемы 7757

Смотрите также

Серверные функции

  • addAccount - регистрирует аккаунт
  • copyAccountData - копирует данные аккаунта в другой
  • getAccount - получает аккаунт указанного пользователя
  • getAccountByID - получает аккаунт с указанным ID
  • getAccountData - получает указанные данные аккаунта
  • getAccountID - получает ID указанного аккаунта
  • getAccountIP - получает IP указанного аккаунта
  • getAccountName - получает имя аккаунта
  • getAccountPlayer - получает активного пользователя аккаунта
  • getAccountSerial - получает серийный номер аккаунта
  • getAccounts - получает все зарегистрированные аккаунты
  • getAccountsByData - получает аккаунты с указанными сохранёнными данными
  • getAccountsByIP - получает аккаунт с указанным IP
  • getAccountsBySerial - получает все аккаунты с указанным серийным номером
  • getAllAccountData - получает все данные аккаунта
  • getPlayerAccount - получает аккаунт указанного игрока
  • isGuestAccount - проверяет, является ли аккаунт гостевым
  • logIn - авторизует игрока под указанный аккаунт
  • logOut - выходит из аккаунта указанного игрока
  • removeAccount - удаляет аккаунт
  • setAccountData - сохраняет данные в аккаунте
  • setAccountName - устанавливает имя аккаунту
  • setAccountPassword - устанавливает пароль аккаунта