Welcome to Сообщество игровых серверов NETZONA.ORG

Присоединяйтесь к нам сейчас, чтобы получить доступ ко всем нашим функциям. Зарегистрировавшись и войдя в систему, вы сможете создавать темы, публиковать ответы в существующих темах, давать репутацию другим участникам, получать собственный личный мессенджер и многое другое. Это также быстро и совершенно бесплатно, так чего же вы ждете?
  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами Публичной оферты Проекта NetZONA.org: https://netzona.org/help/public-offer/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами использования Ваших файлов cookie на Проекте NetZONA.org: https://netzona.org/help/cookies/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с Политикой конфиденциальности Проекта NetZONA.org: https://netzona.org/pages/privacy-policy/

  • Ответы на основные вопросы: https://netzona.org/threads/populjarnye-voprosy-i-otvety-na-nix.6122/

  • Приветствуем на сайте, Гость! Приобрести (купить) Информационную услугу (в том числе группу "Проверенный") на Проекте NetZONA.org: https://netzona.org/account/upgrades

NS 1.1 При plytransfer игрока в фракцию OTA возникает ошибка

Scoot

Пользователь
Регистрация
12 Мар 2015
Сообщения
200
Реакции
0
Баллы
27
Здравствуйте, решил глянуть обновленную схему ns hl2rp, там добавили функцию смены имени при трансфере гражданского в ОТА и там возникает вот такая ошибка, хотел бы узнать как исправить
Lua:
[ERROR] gamemodes/hl2rp/schema/factions/sh_overwatch.lua:31: attempt to index local 'oldFaction' (a nil value)
  1. onTransfered - gamemodes/hl2rp/schema/factions/sh_overwatch.lua:31
   2. onRun - gamemodes/nutscript/gamemode/core/sh_commands.lua:674
    3. run - gamemodes/nutscript/gamemode/core/libs/sh_command.lua:156
     4. parse - gamemodes/nutscript/gamemode/core/libs/sh_command.lua:201
      5. Run - gamemodes/nutscript/gamemode/core/hooks/sv_hooks.lua:255
       6. unknown - gamemodes/nutscript/plugins/chatbox/sh_plugin.lua:69
        7. func - gamemodes/nutscript/gamemode/core/libs/thirdparty/sh_netstream2.lua:117
         8. unknown - lua/includes/extensions/net.lua:32
Код функции:
Lua:
function FACTION:onTransfered(client, oldFaction)
    local digits
    local inventory = client:getChar():getInv()
    if (oldFaction.index == FACTION_CITIZEN and inventory) then
        for _, item in pairs(inventory:getItems()) do
            if (item.uniqueID == "cid" and item:getData("id")) then
                digits = item:getData("id")
                break
            end
        end
    elseif (oldFaction.index == FACTION_CP) then
        digits = client:getDigits()
    elseif (oldFaction.index == FACTION_OW) then
        return
    end

    client:getChar():setName(self:onGetDefaultName(client, digits))
    hook.Run("PlayerLoadout", client)
end

Замена oldFaction.index на client:Team() или client:getChar():getFaction() особого результата не дало, ошибка исчезла, но имя персонажа не меняется.
 

Neon

Создатель
Команда форума
Регистрация
9 Фев 2013
Сообщения
1,395
Реакции
4
Баллы
49
Однозначно понятно, что переменная oldFaction равна nil. oldFaction.index в этом случае выдаёт ошибку, т.к. обращение невозможно.
Надо проверить что передаётся в качестве аргумента при вызове функции FACTION:eek:nTransfered(client, oldFaction)
Рискну предположить, что вызов происходит через команду чата.
Смотреть надо 2. onRun - gamemodes/nutscript/gamemode/core/sh_commands.lua:674
 

Scoot

Пользователь
Регистрация
12 Мар 2015
Сообщения
200
Реакции
0
Баллы
27
Однозначно понятно, что переменная oldFaction равна nil. oldFaction.index в этом случае выдаёт ошибку, т.к. обращение невозможно.
Надо проверить что передаётся в качестве аргумента при вызове функции FACTION:eek:nTransfered(client, oldFaction)
Рискну предположить, что вызов происходит через команду чата.
Смотреть надо 2. onRun - gamemodes/nutscript/gamemode/core/sh_commands.lua:674
Тут передается только одно значение
Lua:
if (faction.onTransfered) then
    faction:onTransfered(target)
end
 

Neon

Создатель
Команда форума
Регистрация
9 Фев 2013
Сообщения
1,395
Реакции
4
Баллы
49
А должно 2. Но судя по коду скажу, что не критичные данные. Тут просто надо получить идентификатор предыдущей фракции
 

Scoot

Пользователь
Регистрация
12 Мар 2015
Сообщения
200
Реакции
0
Баллы
27
А должно 2. Но судя по коду скажу, что не критичные данные. Тут просто надо получить идентификатор предыдущей фракции
А есть варианты его получения? Те способы что я описал в первом посте не помогли, ошибки нет, но имя не меняется. Теста ради убрал условие if (oldFaction.index == FACTION_CITIZEN and inventory) then и его else и все прекрасно работает, но оно нужно.
 

Neon

Создатель
Команда форума
Регистрация
9 Фев 2013
Сообщения
1,395
Реакции
4
Баллы
49
Попробуй добавить в sh_commands такой код:
Lua:
nut.command.add("plytransfer", {
    adminOnly = true,
    syntax = "<string name> <string faction>",
    onRun = function(client, arguments)
        local target = nut.command.findPlayer(client, arguments[1])
        local name = table.concat(arguments, " ", 2)

        if (IsValid(target) and target:getChar()) then
            local faction = nut.faction.teams[name]

            if (!faction) then
                for k, v in pairs(nut.faction.indices) do
                    if (nut.util.stringMatches(L(v.name, client), name)) then
                        faction = v

                        break
                    end
                end
            end

            if (faction) then
                local oldFaction = nut.faction.indices[target:getChar():getFaction()]
                target:getChar().vars.faction = faction.uniqueID
                target:getChar():setFaction(faction.index)

                if (faction.onTransfered) then
                    faction:onTransfered(target, oldFaction)
                end

                for k, v in ipairs(player.GetAll()) do
                    nut.util.notifyLocalized("cChangeFaction", v, client:Name(), target:Name(), L(faction.name, v))
                end
            else
                return "@invalidFaction"
            end
        end
    end
})
 

Scoot

Пользователь
Регистрация
12 Мар 2015
Сообщения
200
Реакции
0
Баллы
27
Попробуй добавить в sh_commands такой код:
Lua:
nut.command.add("plytransfer", {
    adminOnly = true,
    syntax = "<string name> <string faction>",
    onRun = function(client, arguments)
        local target = nut.command.findPlayer(client, arguments[1])
        local name = table.concat(arguments, " ", 2)

        if (IsValid(target) and target:getChar()) then
            local faction = nut.faction.teams[name]

            if (!faction) then
                for k, v in pairs(nut.faction.indices) do
                    if (nut.util.stringMatches(L(v.name, client), name)) then
                        faction = v

                        break
                    end
                end
            end

            if (faction) then
                local oldFaction = nut.faction.indices[target:getChar():getFaction()]
                target:getChar().vars.faction = faction.uniqueID
                target:getChar():setFaction(faction.index)

                if (faction.onTransfered) then
                    faction:onTransfered(target, oldFaction)
                end

                for k, v in ipairs(player.GetAll()) do
                    nut.util.notifyLocalized("cChangeFaction", v, client:Name(), target:Name(), L(faction.name, v))
                end
            else
                return "@invalidFaction"
            end
        end
    end
})
О, спасибо, помогло!
 
Назад
Сверху Снизу