CustomGames.ru - Dota 2 пользовательские игры

Ошибки

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Gaben

  • 15
  • Мощь: 0
Ошибки
« : 30-07-2017, 08:04:15 »
Используя чужие функции, что найду на этом форуме или в исходниках некоторых проектов, постоянно возникают ошибки. С чем это связано? С повторяющимися названиями функций?  Или их надо вставлять в отдельные файлы? У меня ни одна  из функций не работает, а из-за этого и вовсе все скрипты отключаются. Как вставлять функции без ошибок?

Оффлайн ZLOY

  • Супермодератор
  • 456
  • Мощь: 6
Re: Ошибки
« Ответ #1 : 30-07-2017, 09:38:37 »
Читаешь ошибки -> анализируешь -> исправляешь

Оффлайн Gaben

  • 15
  • Мощь: 0
Re: Ошибки
« Ответ #2 : 30-07-2017, 10:52:11 »
Читаешь ошибки -> анализируешь -> исправляешь


Ну, например, вот эта ошибка. Взял код с этого форума, функция делает проигравшего того, у кого не осталось ни одного живого героя на карте. Всё должно работать, но вылетает ошибка. В чём проблема?
Код, для наглядности пробовал на чистом аддоне:
Спойлер
Код
-- Generated from template

if CAddonTemplateGameMode == nil then
CAddonTemplateGameMode = class({})
end

function Precache( context )
--[[
Precache things we know we'll use.  Possible file types include (but not limited to):
PrecacheResource( "model", "*.vmdl", context )
PrecacheResource( "soundfile", "*.vsndevts", context )
PrecacheResource( "particle", "*.vpcf", context )
PrecacheResource( "particle_folder", "particles/folder", context )
]]
end

-- Create the game mode when we activate
function Activate()
GameRules.AddonTemplate = CAddonTemplateGameMode()
GameRules.AddonTemplate:InitGameMode()
end

function CAddonTemplateGameMode:InitGameMode()
print( "Template addon is loaded." )
GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
end

-- Evaluate the state of the game
function CAddonTemplateGameMode:OnThink()
if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
--print( "Template addon script is running." )
elseif GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then
return nil
end
return 1
end

function GameMode:_OnEntityKilled( keys )
  -- The Unit that was Killed
  local killedUnit = EntIndexToHScript( keys.entindex_killed )
  -- The Killing entity
  local killerEntity = nil
  local count = HeroList:GetHeroCount()
  if keys.entindex_attacker ~= nil then
    killerEntity = EntIndexToHScript( keys.entindex_attacker )
  end

  if killedUnit:IsRealHero() then
       EmitGlobalSound("scp.scp_death")
   local allisdead, i = true, 0
while i < HeroList:GetHeroCount() and allisdead do
    if HeroList:GetHero(i):GetTeamNumber() == 2 and HeroList:GetHero(i):IsAlive() then
        allisdead = false
    end
i = i + 1
end
    if allisdead then
      GameRules:SetSafeToLeave( true )
      GameRules:SetGameWinner( killerEntity:GetTeam() )
    end

    --PlayerResource:GetTeamKills
    if SHOW_KILLS_ON_TOPBAR then
      GameRules:GetGameModeEntity():SetTopBarTeamValue ( DOTA_TEAM_BADGUYS, GetTeamHeroKills(DOTA_TEAM_BADGUYS) )
      GameRules:GetGameModeEntity():SetTopBarTeamValue ( DOTA_TEAM_GOODGUYS, GetTeamHeroKills(DOTA_TEAM_GOODGUYS) )
    end
  end
end
[свернуть]
« Последнее редактирование: 30-07-2017, 10:54:18 от Gaben »

Оффлайн Илья

  • Супермодератор
  • 2142
  • Мощь: 21
Re: Ошибки
« Ответ #3 : 30-07-2017, 11:13:04 »
Для каждой функции создаются соответствующие условия. Их надо связывать между собой. Иди читай.

Если просто копировать чужой код и пихать в свой - то естественно будут ошибки.
Это как если собирать башню из какого детского конструктора, и в процессе  взять пару блоков из конструктора Lego, где выемки меньше и блоки постоянно будут слетать.

Опубликованная тобой ошибка говорит что объект GameMode не определен, и ты пытаешься вызвать у пустоты (nil) какую-то там функцию _OnEntityKilled().