Работа прогеру с минимальными знаниями lua (похож на python)

Флудилка.

Moderators: R1ke, pups

Оплата от 20.000 форумного золота за решение проблемы.
Язык: lua
Что из себя представляет: функция, которая должна сохранять инвентарь в файл
Code: Select all
Base/Inventory/"..name..".txt
для дальнейшей уже загрузки. Загрузка инвентаря работает успешно. Не работает сохранение. Раньше работало, но щас перестало, я хз почему, раньше был неизменно первый вариант.

Ещё вам может помочь

Якобы рабочий вариант функции.
Code: Select all
function BE_Save_Inventory(playerid,params)
local name = GetPlayerName(playerid);
   for i = 0, 500 do
      GetPlayerItem(playerid,i);
   end
end

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

Вот мой нерабочий вариант #1
Code: Select all
function BE_Save_Inventory(playerid,params)
   local name = Player[playerid].real_name;
   Player[playerid].save = true;
   io.open("Base/Inventory/"..name..".txt","r+");
   if file then
      for i = 0, 500
      do
      io.open("Base/Inventory/"..name..".txt","+l");
      local tmp = file:read("*l");
         if tmp then
         local result, item, amount = sscanf(tmp,"sd");
         GetPlayerItem(playerid,item,amount);
         file = io.write();
         file:close();
         end
      end
   else
   file = io.open("Base/Inventory/"..name..".txt", "w+");
   file:write();
   file:close();
      for i = 0, 500 do
      io.open("Base/Inventory/"..name..".txt","+l");
      local tmp = file:read("*l");
         if tmp then
            local result, item, amount = sscanf(tmp,"sd");
            GetPlayerItem(playerid,item,amount);
            file = io.write();
            file:close();
         end
      end
   end
   file:close();
end

Скриншоты ошибки:
Image
Image




Вот мой нерабочий вариант #2
Code: Select all
function BE_Save_Inventory(playerid)
local name = Player[playerid].real_name;
file = io.open("Base/Inventory/"..name..".txt", "w");
   if file then
      for i = 0, 500 do
         local c,d = GetPlayerItem(playerid,i);
         local it = string.format("%s %s %d,",c, " " ,d);
         file:write(it);
      end
   file:close();
   end
end


Как вы могли заметить тут всё упирается в GetPlayerItem(playerid,i), вот справка из вики по этому калбэку:


Get item from player's inventory.
Code: Select all
GetPlayerItem(playerid, slot)

playerid The ID of player.
slot Slot from player's inventory to get item.
Returns This function doesn't return a specific value, but when player will send item with amount of from given slot called is callback OnPlayerResponseItem.

Пример:
Code: Select all
function OnPlayerCommandText(playerid, cmdtext)
 
    if cmdtext == "/eq" then
 
        --checking player's inventory for 6 slots
 
        for i = 0, 5 do --(0,1,2,3,4,5) (together 6 slots)
            GetPlayerItem(playerid,i);
        end
    end
end
 
function OnPlayerResponseItem(playerid, slot, item_instance, amount, equipped)
 
    local message;
    if item_instance == "NULL" then
        message = string.format("%s %d %s","Item in",slot,"slot does not exist. More items I do not have :(");
        SendPlayerMessage(playerid,255,0,0,message);
    else
        message = string.format("%s %d %s %s %s %d","slot:",slot,"item_instance:",item_instance,"amount:",amount);
        SendPlayerMessage(playerid,0,255,0,message);
 
        if equipped == 1 then
           SendPlayerMessage(playerid,255,255,0,"That item is equipped :)");
        end
    end
end

Output:
slot: 0 item_instance: ItMi_Skull amount: 52
slot: 1 item_instance: ITMI_JOINT amount: 7
slot: 2 item_instance: ITAR_DIEGO amount: 1 That item is equipped :)
slot: 3 item_instance: ITMW_2H_PAL_SWORD amount: 1 That item is equipped :)
Item in 4 slot does not exist. More items I do not have :(
Item in 5 slot does not exist. More items I do not have :(
Last edited by Soul982 on 24 Jan 2017, 20:02, edited 4 times in total.
M&B Status:
Offline
Reputation point: 113

GetPlayerItem(playerid,i)
А оно знает в какой структуре искать playerid?
Может там должно быть что-то вроде Player[playerid].getid
С этим языком не знаком, но мне кажется он просто не знает с каким Player'ом работает.
M&B Status:
Offline

Lair wrote: local c,d = GetPlayerItem(Player[playerid],i);

Там ожидается номер, а не таблица. Пока что из ошибки у себя нашёл не обозначенную переменную "name", но это не решает.

Добавлено спустя 42 секунды:
Re: Работа прогеру с минимальными знаниями lua (похож на python)
Lair wrote:playerid

Функция вызывается с получением переменной playerid, поэтому она точно знает, с кем работает.
M&B Status:
Offline
Reputation point: 113

Соул, а если общедоступным языком объяснить, что за проблему вы тут решаете?
M&B Status:
Offline
Reputation point: 27

Ещё ошибку нашёл - for a, а в переменной слота указано i.

Добавлено спустя 1 минуту 16 секунд:
Re: Работа прогеру с минимальными знаниями lua (похож на python)
Kenny_Metal_Heavy wrote: общедоступным языком объяснить

У меня есть почти готовый простенький сервер для одной игры (позже о ней) и я застрял на ключевом моменте - предметы персонажей игроков не сохраняются (вот взял ты меч, вышел из игры, зашёл - а меча нет), и я пытаюсь понять, как это исправить. Обращаться к людям из моей стязи не вариант - они не то, что помочь, они даже за деньги не хотят делиться "сокровенными знаниями".
M&B Status:
Offline
Reputation point: 113

Invalid file open mode. Line 98
Что в 98 строке?
M&B Status:
Offline

Lair wrote:Line 98

Там пусто. Табом прожал разделение между двумя функциями (закрытыми) :)
M&B Status:
Offline
Reputation point: 113

А теперь ошибка есть? И если есть то какая?
M&B Status:
Offline

Lair wrote: И если есть то какая?

По первому варианту ошибка та же (крашается сервер)
По второму варианту Error runtime: line 1292: bad argument #2 to 'format' (string expected, got nil)
Вот эта строка: local it = string.format("%s%s%d,",c," ",d);
M&B Status:
Offline
Reputation point: 113

аргумент 2 пустой, хз с синтаксисом в этом языке Напиши так
local it = string.format("%s %d,",c,d);
То бишь пробел обозначь не через %s а в прям между %s и %d
M&B Status:
Offline

Next



Return to Отдыхаем

Who is online

Users browsing this forum: No registered users and 20 guests