Ошибка с GameMode

ZerH

Новичок
26 Апр 2020
2
0
В какой-то момент появилась ошибка, не понимаю с чем связана. Нашёл тему на форуме с похожей проблемой, но она мне не помогла. Поискав в гугле, нашёл статью такую статью (https://wiki.facepunch.com/gmod/Lua_Error_Explanation), но это явно не то что нужно.
Script Runtime Error: ...e\dota_addons\meepo\scripts\vscripts\addon_game_mode.lua:54: attempt to call global 'GameMode' (a table value)
stack traceback:
...e\dota_addons\meepo\scripts\vscripts\addon_game_mode.lua:54: in function <...e\dota_addons\meepo\scripts\vscripts\addon_game_mode.lua:53>
Ошибка указывает сюда
photo_2020-05-07_10-48-51.jpg
Код спокойно работал до того момента, пока я не написал скрипт для появления юнита. Код скрипта - был отдельным файлом.

Lua:
require( 'timers' )
function rune_Attack()
    local point = Entitities:FindByName(nil,"spawn_rune"):GetAbsOrigin()

    print("Cords get")

    local repeat_interval = 45
    Timers:CreateTimer(15, function()
        rune_spawn = CreateUnitByName("npc_rune", point, true, nil, nil, DOTA_TEAM_NEUTRALS)
        return repeat_interval
    end)

end
Удалив файл со скриптом, ошибка не пропала.
Я понял что "addon_game_mode" пытается вызвать глобальный GameMode. Но до этого всё работало нормально.
Lua:
--[[
    Basic Barebones
]]

-- Required files to be visible from anywhere
require( 'timers' )
require( 'barebones' )

function Precache( context )

    -- NOTE: IT IS RECOMMENDED TO USE A MINIMAL AMOUNT OF LUA PRECACHING, AND A MAXIMAL AMOUNT OF DATADRIVEN PRECACHING.
    -- Precaching guide: https://moddota.com/forums/discussion/119/precache-fixing-and-avoiding-issues

    --[[
    This function is used to precache resources/units/items/abilities that will be needed
    for sure in your game and that cannot or should not be precached asynchronously or
    after the game loads.

    See GameMode:PostLoadPrecache() in barebones.lua for more information
    ]]

    print("[BAREBONES] Performing pre-load precache")

    -- Particles can be precached individually or by folder
    -- It it likely that precaching a single particle system will precache all of its children, but this may not be guaranteed
    PrecacheResource("particle", "particles/econ/generic/generic_aoe_explosion_sphere_1/generic_aoe_explosion_sphere_1.vpcf", context)
    PrecacheResource("particle_folder", "particles/test_particle", context)

    -- Models can also be precached by folder or individually
    -- PrecacheModel should generally used over PrecacheResource for individual models
    PrecacheResource("model_folder", "particles/heroes/antimage", context)
    PrecacheResource("model", "particles/heroes/viper/viper.vmdl", context)
    PrecacheModel("models/heroes/viper/viper.vmdl", context)

    -- Sounds can precached here like anything else
    PrecacheResource("soundfile", "soundevents/game_sounds_heroes/game_sounds_gyrocopter.vsndevts", context)

    -- Entire items can be precached by name
    -- Abilities can also be precached in this way despite the name
    PrecacheItemByNameSync("example_ability", context)
    PrecacheItemByNameSync("item_example_item", context)

    -- Entire heroes (sound effects/voice/models/particles) can be precached with PrecacheUnitByNameSync
    -- Custom units from npc_units_custom.txt can also have all of their abilities and precache{} blocks precached in this way
    PrecacheUnitByNameSync("npc_rune", context)
    PrecacheUnitByNameSync("npc_dota_hero_ancient_apparition", context)
    PrecacheUnitByNameSync("npc_dota_hero_enigma", context)
end

-- Create the game mode when we activate
function Activate()
    GameRules.GameMode=GameMode()
    GameRules.GameMode:InitGameMode()
    GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_GOODGUYS, 5 )
    GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_BADGUYS, 0 )
end
1588838515356.png
Прошу помочь с моей проблемой, и желательно указать что у меня не так. Буду премного благодарен
 
20 Дек 2016
892
170
Код спокойно работал до того момента, пока я не написал скрипт для появления юнита.
Удалив файл со скриптом, ошибка не пропала.
Звучит как какая-то магия. Если изначально все работало, значит помимо того скрипта ты подключил какие-то файлы.

Посмотри все подключаемые через require скрипты. Предполагаю, что в каком-то из них должно быть что-то типа GameMode = class({}), а в еще каком-то GameMode = {}. Второе стоит удалить, и мб все заработает.

А вообще лучше подобным не заниматься, если не до конца понимаешь что к чему. Если это возможно, рекомендую создать новый аддон без barebones, самому зарегистрировать нужные эвенты, и подключать библиотеки по мере необходимости.
В пустом аддоне по дефолту создается CAddonTemplateGameMode (или как-то похоже), его можно переименовать просто в GameMode для удобства, и перенести код из старого InitGameMode в новый InitGameMode, который тоже там по дефолту есть. Потом (если использовались эвенты), регистрируешь нужные слушатели на нужные функции, и любым удобным способом подключаешь сам код с эвентами.
 
  • Нравится
Реакции: ZerH
Реклама: