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

Спавн крипов

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

Оффлайн BobyStik

  • 6
  • Мощь: 0
Спавн крипов
« : 23-06-2017, 14:31:09 »
Сделал спавн крипов, сделал босса с которого падает предмет, всё работает отлично.
Но, когда я первый раз умер в кастомке, где умер, создается такой же персонаж и становится нейтралом.
При каждой его смерти, где он умер будет спавниться ещё один персонаж "нейтрал" , и их становится миллион, если их убивать.
В чём ошибка?
Код :
Спойлер
--------------------------------------------------------------------------------
-- Integer constants
--------------------------------------------------------------------------------
_G.nNEUTRAL_TEAM = 4
_G.nCREATURE_RESPAWN_TIME = 2
 
if CAddonTemplateGameMode == nil then
        CAddonTemplateGameMode = class({})
end

xpTable = {0,250,500,750,1000,1250,1500,1750,2000,2250,2500,2750,3000,3250,3500,3750,4000,4250,
4500,4750,5000,5250,5500,5750,6000,6250,6500,6750,7000,7250,7250,7250,7250,7250,7250,7250,7250,
7250,7250,7250,7250,7250,7250,7250,7250,7250,7250,7250,7250,7250,7250,7250}  -- 52
 
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
 
function OnEntityKilled (event)
    local killedEntity = EntIndexToHScript(event.entindex_killed)
        local sCreatureName = killedEntity:GetUnitName()
        local vSpawnLoc = killedEntity.vSpawnLoc
        if (vSpawnLoc == nil) then
                print ("location not found")
                vSpawnLoc = killedEntity:GetOrigin()
        end
      
      
      if (sCreatureName ~= "npc_dota_neutral_kobold_taskmaster") then
         
                GameRules:GetGameModeEntity():SetContextThink (string.format( "CreatureThink_%d", event.entindex_killed ), function () SpawnUnit(sCreatureName, vSpawnLoc) end, nCREATURE_RESPAWN_TIME)
        else
                local newItem = CreateItem("item_relic", nil, nil)
                newItem:SetPurchaseTime(0)
                CreateItemOnPositionSync(killedEntity:GetOrigin(), newItem)
                newItem:LaunchLoot(false, 300, 0.75, killedEntity:GetOrigin())
        end
 end
 
 function SpawnUnit (sCreatureName, vSpawnLoc)
        local hUnit = CreateUnitByName(sCreatureName, vSpawnLoc, true, nil, nil, nNEUTRAL_TEAM )
        hUnit.vSpawnLoc = vSpawnLoc
 end
 
-- Create the game mode when we activate
function Activate()
        GameRules.AddonTemplate = CAddonTemplateGameMode()
        GameRules.AddonTemplate:InitGameMode()
        ListenToGameEvent("entity_killed", OnEntityKilled, nil)
       
        local allUnits = FindUnitsInRadius(nNEUTRAL_TEAM,
                              Vector(0, 0, 0),
                              nil,
                              FIND_UNITS_EVERYWHERE,
                              DOTA_UNIT_TARGET_TEAM_FRIENDLY,
                              DOTA_UNIT_TARGET_ALL,
                              DOTA_UNIT_TARGET_FLAG_NONE,
                              FIND_ANY_ORDER,
                              false)   
        print (allUnits)
        for k, hUnit in pairs( allUnits ) do
                hUnit.vSpawnLoc = hUnit:GetOrigin()
                hUnit.vSpawnVector = hUnit:GetForwardVector()
                print (hUnit.vSpawnVector)
        end
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()
        GameRules:GetGameModeEntity():SetUseCustomHeroLevels( true )
        GameRules:GetGameModeEntity():SetCustomHeroMaxLevel( 52 )       
        GameRules:GetGameModeEntity():SetCustomXPRequiredToReachNextLevel( xpTable )
       print( "Template addon is loaded." )
      
      GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
        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
[свернуть]
« Последнее редактирование: 23-06-2017, 15:04:53 от BobyStik »

Оффлайн Adam Smith

  • Друзья CG
  • 468
  • Мощь: 6
  • жрять жри его
Re: Спавн крипов
« Ответ #1 : 23-06-2017, 14:38:16 »
Можно писать в спойлерах для кода или в hastebin??
By PG.Freeman

Оффлайн BobyStik

  • 6
  • Мощь: 0
Re: Спавн крипов
« Ответ #2 : 23-06-2017, 15:03:22 »
Я тут один день, не знаю что к чему.
И кстати, убив  любого , он станет нейтралом.

Оффлайн Илья

  • Супермодератор
  • 1912
  • Мощь: 16
Re: Спавн крипов
« Ответ #3 : 23-06-2017, 16:41:52 »
Ты, похоже, свой код нихрена не понимаешь, а тупо скопировал его откуда-нибудь (даже знаю, что с виде с ютюба, т.к. узнаю этот почерк).

Событие OnEntityKilled  срабатывает при смерти любой сущности. Хоть то герой или еще кто.

Код
sCreatureName ~= "npc_dota_neutral_kobold_taskmaster"
Эта строчка активирует твою функцию SpawnUnit после смерти каждого, чье имя не "npc_dota_neutral_kobold_taskmaster".

А нейтралами создаются твои "перерожденные", потому что, ты, бл*ть, указываешь им быть нейтралами:
 
Код
_G.nNEUTRAL_TEAM = 4
CreateUnitByName(sCreatureName, vSpawnLoc, true, nil, nil, nNEUTRAL_TEAM )

Советую сесть и разобрать каждую строчку своего кода. Если хочешь дальнейших ответов по нему, то в следующий раз выкладывай код с комментарием к каждой строчке, что и как она делает.
« Последнее редактирование: 23-06-2017, 16:44:46 от Илья »