Респаун героев

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

UZzip

Продвинутый
2 Янв 2016
282
1
Скопировал стандартного героя к себе в мод, но к сожалению не нашел строки отвечающей за его респаун, я хочу сократить его до 1 секунды на всех уровнях, как это сделать?
 
Скопировал стандартного героя к себе в мод, но к сожалению не нашел строки отвечающей за его респаун, я хочу сократить его до 1 секунды на всех уровнях, как это сделать?
Код:
unit:SetTimeUntilRespawn(1)
 
Последнее редактирование модератором:
Это куда прописывать?
Заместо unit писать к примеру "npc_dota_hero_axe" ????
npc_dota_hero_axe:SetTimeUntilRespawn(1)
 
Последнее редактирование модератором:
))

Нет, unit - это переменная, тип которой должен быть "CDOTA_BaseNPC". В общем, подобно тому, как ты уровень абилки героев при старте качаешь.
 
Последнее редактирование модератором:
Ну в любом языке программирования пользуются переменными. Объектами, что позволяют хранить значения других объектов.

В данном случае unit (сама переменная может и по другому называться, это просто ее имя) должен хранить объект, который характеризует NPC.

Знаешь же как применяются функции GetTeamNumber()? Эта так же применяется, из того же разряда.
 
с переменными разобрался, их только в луа файлах использовать можно? мне вообще с каким файлом работать для респауна героев???
 
с переменными разобрался, их только в луа файлах использовать можно? мне вообще с каким файлом работать для респауна героев???
Давай ты пойдешь почитаешь урок по программированию какой нибудь, без этого тут никак. И прочитай про объекты и что это такое(ну и ООП вдобавок, многое объяснит).
 
Последнее редактирование модератором:
У тебя консоль ошибок не выдает на эту строчку?

Я в ней совершенно не уверен.

По идеи ты должен для каждого героя при старте игры задвать этот респавн, а не как ты пытался: сразу для всего (и хз, что конкретно возвращает GetGameModeEntity())


Вот тебе пример на скорую руку написанного и не проверенного метода (естественно main везде замени на название своего скрипта):

Код:
 function main:GameRulesStateChange(keys)
	local newState = GameRules:State_Get()
	if newState == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then 
		
		for i=0,5 do
			if PlayerResource:IsValidPlayer(i) then
				PlayerResource:GetSelectedHeroEntity(i):SetFixedRespawnTime(1)
			end
		end
					
	end
end

Код не проверен только в строчке задачи респавна. А так он берет и в момент старта игры проверяет первые 5 свободных индексов на принадлежность их к игрокам (ну, всегда начинается счет с 0, если у те будет больше 5, то лишних не тронет, если меньше, ниче страшного не произойдет) и задействованным индексам, т.е. игрокам, задает этот респавн.


И не забудь добавить слушателя в свой initial метод :

Код:
ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(main, 'GameRulesStateChange'), self)
 
[quote author=Илья link=topic=710.msg2704#msg2704 date=1453949101]
У тебя консоль ошибок не выдает на эту строчку?

Я в ней совершенно не уверен.

По идеи ты должен для каждого героя при старте игры задвать этот респавн, а не как ты пытался: сразу для всего (и хз, что конкретно возвращает GetGameModeEntity())


Вот тебе пример на скорую руку написанного и не проверенного метода (естественно main везде замени на название своего скрипта):

Код:
 function main:GameRulesStateChange(keys)
	local newState = GameRules:State_Get()
	if newState == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then 
		
		for i=0,5 do
			if PlayerResource:IsValidPlayer(i) then
				PlayerResource:GetSelectedHeroEntity(i):SetFixedRespawnTime(1)
			end
		end
					
	end
end

Код не проверен только в строчке задачи респавна. А так он берет и в момент старта игры проверяет первые 5 свободных индексов на принадлежность их к игрокам (ну, всегда начинается счет с 0, если у те будет больше 5, то лишних не тронет, если меньше, ниче страшного не произойдет) и задействованным индексам, т.е. игрокам, задает этот респавн.


И не забудь добавить слушателя в свой initial метод :

Код:
ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(main, 'GameRulesStateChange'), self)
[/quote]
Код:
SetFixedRespawnTime(time)
работает не на юнита, а на всю игру, то есть на гейментити.
 
Ну то есть она вообще всем задаст респавн в секунду?)

Это пояснение к функции "Get the game mode entity " лично мне ничего не говорит. Может, просто я понятия не имею, что за "game mode entity", потому что работал только с hero entity, tree entity и npc entity.

Пусть скинет свою консоль с отработкой этой функции.
 
Последнее редактирование модератором:
А так авторитетные люди делают так же. Однако, кто же может пояснить, на всех entity это распространяется (и деревья в том числе) или на какую-то конкретную группу?

А в случае с героями, ему скорее придется делать так, как я писал.
 
блин вы мне голову морочите =D
я нешел однокликовое решение, причём вообще случайно, искал совсем другое.
 
Ну потому что мы кодеры, и в хаммер лазаем редко)
 
Есть варик прост добавить хидден абилку, событе он овен дайд вызывает скрипт, а там изи caster:SetTimeUntilRespawn(1)
 
Не знаю как вам лучше задавать вопросы - в созданной ранее теме или создавать новую. Но оказалось что я забыл одно из обновлений в котором кажется что то говорилось об "если герой убит нейтралами или Рошаном то он будет воскресать..." на какое то время дольше. Так вот пишу поэтому поводу от нейтралов я ресаюсь через 25-26 сек. А от враж фонтана по моему хотению 4-5. Неужели такую функцию тоже можно отключить? Кто-нибудь знает ее кодик?
 
Последнее редактирование модератором:
Реклама: