Ошибки

  • Автор темы Автор темы Gaben
  • Дата начала Дата начала

Gaben

Пользователь
7 Авг 2016
15
0
Используя чужие функции, что найду на этом форуме или в исходниках некоторых проектов, постоянно возникают ошибки. С чем это связано? С повторяющимися названиями функций? Или их надо вставлять в отдельные файлы? У меня ни одна из функций не работает, а из-за этого и вовсе все скрипты отключаются. Как вставлять функции без ошибок?
 
Читаешь ошибки -> анализируешь -> исправляешь
 
Последнее редактирование модератором:
Читаешь ошибки -> анализируешь -> исправляешь


Ну, например, вот эта ошибка. Взял код с этого форума, функция делает проигравшего того, у кого не осталось ни одного живого героя на карте. Всё должно работать, но вылетает ошибка. В чём проблема?
Код, для наглядности пробовал на чистом аддоне:
Код:
-- 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
 
Последнее редактирование модератором:
Для каждой функции создаются соответствующие условия. Их надо связывать между собой. Иди читай.

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

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