Создание нового героя в определенной точке, с полным удалением старого

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

oplkill

Пользователь
2 Янв 2016
34
3
Всем привет!

Я новичок в dota 2 картостроении, перешел из warcraft 3 и решил перенести оттуда карту на подобии "Random units"
И по мере создания столкнулся с одной вещью как:
Что надо после смерти старого героя игрока, полностью удалять(чтобы и следа от него и не осталось) и создать нового в нужной точке

Пробовал различные способы какие мог найти в dota 2 api wiki
Часто натыкался на ошибки типо: "Функция получила 1 аргумент, но ожидает - 2", когда в офф вики написан только 1 аргумент...

Заранее благодарю!



РЕШЕНИЕ:
Включить респавн героев
 
Последнее редактирование модератором:
Обычно в такой ситуации используют функцию:
Код:
PlayerResource:ReplaceHeroWith(PlayerID, "npc_dota_hero_name", gold, xp)

Полазий по Гитхабу, посмотри чужой код. Я реализовывал режим в своем моде подобно стандартному дотерскому death match через эту функцию. Сразу предупрежу, что могут быть напряги с Иллюзиями, ибо они тоже запускают эту функцию.

Можешь и через
handle CreateHeroForPlayer(string unitName, handle player)
попробовать. Но сомневаюсь, что она тебе подойдет.
 
Последнее редактирование модератором:
Но эти функции касаются именно смены "типа персонажа", а не инвентаря и прочего. Инвентарь ручками надо чистить.
 
Последнее редактирование модератором:
Илья, с инвентарём, скилами это все конечно, у каждого свое, но ReplaceHero, да создает новго героя, заменяя старого, но с одним но... Как избавиться от трупа старого героя? А также мертвой метки на мини-карте?
 
[quote author=oplkill link=topic=671.msg2437#msg2437 date=1451822551]
Илья, с инвентарём, скилами это все конечно, у каждого свое, но ReplaceHero, да создает новго героя, заменяя старого, но с одним но... Как избавиться от трупа старого героя? А также мертвой метки на мини-карте?
[/quote]


Труп пропадет сам, да и иконка ведь привязана к игроку, а не модельке.
 
Илья написал(а):
Труп пропадет сам, да и иконка ведь привязана к игроку, а не модельке.


pJ8Cag5kOc.png


Ну не скажи...
Код:
-- This function is called whenever any player sends a chat message to team or All
function GameMode:OnPlayerChat(keys)
 local teamonly = keys.teamonly
 local userID = keys.userid
 local playerID = self.vUserIds[userID]:GetPlayerID()

 local text = keys.text
 
 
 
 --local point = Entities:FindByName( nil, "spawnhero"):GetAbsOrigin()
 local heronew = PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_axe", 0, 0)
 --CreateHeroForPlayer("npc_dota_hero_axe", globalPlayerTEST)
end
Заменяется герой, старый умирает и оставляет за собой метку. Спустя время не заметил, чтобы они исчезли... Можно ли какнить задать время "разложения"(как в варике) если тут это конечно есть...
Код:
"DOTAHeroes"
{
 "npc_dota_hero_templar_assassin_template"
 {
  "override_hero"    "npc_dota_hero_abaddon"   // Hero to override
  "Ability1"     "templar_assassin_refraction_holdout"  // Ability 1
  "Ability2"     "unselectable"
  "VisionNighttimeRange"  "1800"          // Range of vision at night time.
  
  "MinimapIcon" "minimap_candybucket"
  "MinimapIconSize" "0"
 }
}
Задание картинки иконки и ее размера не влияют... (У второго героя AXE теже самые свойства имеются...)
 
Последнее редактирование модератором:
Весьма странная штука. Попробуй использовать GetPlayerOwnerID().

Ток для него нужен entiindex, например:

Код:
function ForTest:InitGameMode()
ListenToGameEvent('npc_spawned', Dynamic_Wrap(ForTest, 'OnNPCSpawned'), self)	
end

function ForTest:OnNPCSpawned(data)
local npc = EntIndexToHScript(data.entindex)
local id = npc:GetPlayerOwnerID()
PlayerResource:ReplaceHeroWith(id, "npc_dota_hero_abaddon", 0, 0)
end
 
Последнее редактирование модератором:
И у тебя ошибку еще выдает о том, что не может обратиться к entity, т.е. ты где-то берешь пустой entity и с ним пытаешься работать.

Если ошибка в этой функции, которой ты скинул код, то я думаю, дело в этом присваивании
Код:
 local playerID = self.vUserIds[userID]:GetPlayerID()

Ну, просто потому что я такую строчку впервые вижу, за свою недолгую практику в модах.
Ну и т.к. там именно "create" не может осуществить,а он у тебя только тут:
Код:
heronew = PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_axe", 0, 0)

ну и в закоментированном
Код:
CreateHeroForPlayer("npc_dota_hero_axe", globalPlayerTEST)
 
Последнее редактирование модератором:
Хм, я сейчас попробовал сделать новый мод ОверТхров и вставил туда замену и там такого бага нет...
Видимо Barebone что-то мутит не так...
Спасибо!
 
Найдена причина почему старые герои не удалялись!
У меня была включена эта настройка:
Код:
ENABLE_HERO_RESPAWN = false
Видимо надо позволить им респавниться, но задать время респавна можно хоть 9999, труп и метки на экране исчезают сразу после появления замены.
 
Реклама: