Простые вопросы

Статус
В этой теме нельзя размещать новые ответы.
Ты имеешь в виду то, что ты расставил по карте модельки и герой через них проходит?
Есть много способов блочить местность, один из них - сущность simple_point_abstraction (найдешь во вкладке с лампочкой).

Да именно. Спасибо) А какие еще варианты есть? И еще хотел спросить, можно как то привязку к сетке убрать?
 
Последнее редактирование модератором:
Я не разбираюсь в hammere.

Вот этот человек постил видео о способах блокировки. Можешь покопаться в истории его сообщений или в личку спросить. На ютюбе вроде так же хватает дизайнеров, что ковырялись в hammere.
 
Можно узнать какой keys.caster нужно прописать чтобы получить опыт? Вместо Heal и HealthRestore что нужно прописать?
Код:
function item_tome_of_knowledge2_start(keys)
keys.caster:Heal(keys.HealthRestore, keys.caster)

И еще я не уверен что это верно)
Код:
		{
			"01"
			{
				"var_type"				"FIELD_INTEGER"
				"xp_bonus"				"500"
			}
		}
	{
		"RunScript"
		{
			"ScriptFile"			"tome.lua"
			"Function"				"item_tome_of_knowledge2_start"
			"XpBonus"			"%xp_bonus"
		}
	}
 
Последнее редактирование модератором:
Чет я не понял твой вопрос: что тебе нужно?

А касательно кода твоего:

Этот блок
Код:
		"RunScript"
		{
			"ScriptFile"			"tome.lua"
			"Function"				"item_tome_of_knowledge2_start"
			"XpBonus"			"%xp_bonus"
		}

Вызывает функцию "item_tome_of_knowledge2_start", которая описана в скрипте "tome.lua", который хранится в папке vscripts твоего проекта. Вызывает функцию и еще передает в неё параметр "XpBonus" со значением (%) "xp_bonus". "xp_bonus" в свою очередь у тебя должен быть описан в ability special, что собственно и сделано.

Но вот блок вызова скрипта - он сам по себе не будет работать. Его надо поместить в блок любого события/действия.
Читай тут, к примеру.

Вот эта же часть:
Код:
function item_tome_of_knowledge2_start(keys)
keys.caster:Heal(keys.HealthRestore, keys.caster)

Должна находиться в скрипте tome.lua. function - оператор объявления функции, метода, с именем "item_tome_of_knowledge2_start" и, в твоем случае, таблицей значений "keys", которые передаются в функцию из вне (из того блока запуска скрипта). Далее идет тело функции, там у тебя строчка:
Код:
keys.caster:Heal(keys.HealthRestore, keys.caster)
, в которой ты обращаешься к таблице "keys", запрашиваешь у неё через оператор "." объект "caster", у которого в свою очередь вызываешь метод Heal(). Однако этот метод не сработает, так как у тебя попросту нет кастера (caster), ведь ты блок скрипта вызываешь не в блоке каста способности, а вообще не пойми где (походу просто впихнул его после abil spec). Но да еслиб у тебя был кастер, то во первых, он должен быть класса CDOTA BaseNPC (это по сути герои и юниты), а во вторых ты должен передать в него два значения: (float amount, handle source), где amount - это число с плавающей точкой, а source - объект-источник хила. Можно того же кастера указать. Что ты и делаешь:
Код:
(keys.HealthRestore, keys.caster)
Однако, у тебя нет keys.HealthRestore, потому что ты в таблицу данных keys передал только "XpBonus" и стандартные объекты, вроде кастера. И еще не хватает "end" после этой строчки, если это все тело твоей функции.

Стал понятнее собственный код?
 
Последнее редактирование модератором:
Ну когда ночь наступит, запусти таймер на отсчет минуты и по его истечению выполни эту команду в коде:
GameRules:SetTimeOfDay( 0.75 )

В итоге у тебя ночь опять откатится на начало и снова будет идти 4 минуты, а плюс ту минуту, что уже прошла - вот тебе и пять минут ночи. Ну либо поэкспериментируй с цифрой в SetTimeOfDay( ). Я только знаю то, что 0.75 - это начало ночи.


То же самое с днем. Только выясни, какая цифра отвечает за начало дня.
Плз скинь полный код, у меня не выходит.
Пробовал этот код но он мало того что не работает, так ещё и делает кол-во команд стандартным.
Код:
function HDGSurvival:GameRulesStateChange(keys) 
local newState = GameRules:State_Get() 
if newState == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then 

Timers:CreateTimer(180, function() 
GameRules:SetTimeOfDay( 0.251 ) 
Timers:CreateTimer(300, function() 
GameRules:SetTimeOfDay( 0.751 ) 
return 720.0 
end 
end 
end 
end 
end 
end
 
Последнее редактирование модератором:
Илья, я хочу создать предмет который дает опыт или увеличивает уровень на 1. И я не понимаю как это сделать)
 
Илья, я хочу создать предмет который дает опыт или увеличивает уровень на 1. И я не понимаю как это сделать)
1.Ищешь на сайте гайд по айтемам
2.https://developer.valvesoftware.com...cripting/API/CDOTA_BaseNPC_Hero.AddExperience
3.https://developer.valvesoftware.com.../Scripting/API/CDOTA_BaseNPC_Hero.HeroLevelUp
 
Последнее редактирование модератором:
Плз скинь полный код, у меня не выходит.
Пробовал этот код но он мало того что не работает, так ещё и делает кол-во команд стандартным.

Начни с этого:
Код:
function HDGSurvival:GameRulesStateChange(keys) 
	local newState = GameRules:State_Get() 
	if newState == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then 
		GameRules:GetGameModeEntity():SetContextThink("NightTimeThink", 
			function()
				GameRules:SetTimeOfDay( 0.75 )
			end,
		0.1)
	end
end

П.С. У тебя главный скрипт называется HDGSurvival? Потому что если это не так, то тебе надо переименовать функцию. И ты слушателя то поставил? Скинь лучше вообще весь код файла своего.
 
Последнее редактирование модератором:
[quote author=Илья link=topic=849.msg8837#msg8837 date=1489507260]
Начни с этого:
Код:
function HDGSurvival:GameRulesStateChange(keys) 
	local newState = GameRules:State_Get() 
	if newState == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then 
		GameRules:GetGameModeEntity():SetContextThink("NightTimeThink", 
			function()
				GameRules:SetTimeOfDay( 0.75 )
			end,
		0.1)
	end
end

П.С. У тебя главный скрипт называется HDGSurvival? Потому что если это не так, то тебе надо переименовать функцию. И ты слушателя то поставил? Скинь лучше вообще весь код файла своего.
[/quote]
Если всё таки не сложно, то пожалуйста напиши код, чтобы день длился 7 минут, а ночь 5 минут.
Как использовать твой пример, который меняет день и ночь местами, я пока что не понимаю.
Мне нужно что-то типа:
если игра успешно началась то
подождать 3 минуты
установить начало дня
подождать 5 минут
установить начало ночи
повторять пока одна из команд не победит.
p.s. главный скрипт называется HDGSurvival, слушателя поставил.
 
Последнее редактирование модератором:
Я же тебе объясняю, что функция GameRules:SetTimeOfDay(х)выставляет в зависимости от значения "х" ночь или день. Причем "х" этот может принимать значение от 0 до 1 (может интервал и больше, я не проверял). И как раз в этом интервале и располагаются различные "стадии" дня и ночи (начало ночи, минута ночи, две минуты ночи, минута дня и т.п.). И я не знаю, какие значения каким этим "минутам"/"стадиями" соответствуют, я не проверял. Я только знаю, что значение 0.75 выставляет ночь в игре. Дальше уже сам разбирайся, тебе одно из решений, функцию SetTimeOfDay, подсказали (может даже единственное), за тебя писать код и разбираться я не буду.
 
Последнее редактирование модератором:
подождать 3 минуты
установить начало дня
Ставишь таймер на три минуты, по его истечению устанавливаешь время в "начало дня".

подождать 5 минут
установить начало ночи
Ставишь таймер на минуту после того таймера. Как закончится,устанавливаешь время в "начало дня". Ставишь таймер на 4 минуты. Как закончится,устанавливаешь время в "начало ночи".

Почитай про таймеры.
 
Последнее редактирование модератором:
Я же тебе объясняю, что функция GameRules:SetTimeOfDay(х)выставляет в зависимости от значения "х" ночь или день. Причем "х" этот может принимать значение от 0 до 1 (может интервал и больше, я не проверял). И как раз в этом интервале и располагаются различные "стадии" дня и ночи (начало ночи, минута ночи, две минуты ночи, минута дня и т.п.). И я не знаю, какие значения каким этим "минутам"/"стадиями" соответствуют, я не проверял. Я только знаю, что значение 0.75 выставляет ночь в игре. Дальше уже сам разбирайся, тебе одно из решений, функцию SetTimeOfDay, подсказали (может даже единственное), за тебя писать код и разбираться я не буду.
как сделать чтобы какое-либо действие ( например SetTimeOfDay(0.75) ) произошло через определённое время? меня только это интересует
 
Последнее редактирование модератором:
Код:
GameMode:SetContextThink("DayNightDuration",DayNightDuration,1)

function DayNightDuration()
  dayDuration = 5 --в секундах
  nightDuration = 20
  if GameRules:IsDaytime() then
    --print(1/(dayDuration*2))
    SendToServerConsole("dota_time_of_day_rate "..1/(dayDuration*2))
  else
    --print(1/(nightDuration*2))
    SendToServerConsole("dota_time_of_day_rate "..1/(nightDuration*2))
  end
  return 0.5
end
 
Последнее редактирование модератором:
Здравствуйте! В хаммере сделал пути для каждой команды. Как заставить юнита, который создаётся не спавнером, а способностью героя, идти по определенному пути
 
[quote author=Илья link=topic=849.msg8929#msg8929 date=1490397579]
Через SetInitialGoalEntity() в lua скрипте абилки, что спавнит юнита.
[/quote]
А как сделать, чтобы юнит выбрал ближайший к себе путь?
 
Интересный вопрос. Только вот, ближайший до чего?

Раз ты указываешь ему куда идти через SetInitialGoalEntity(), то рискну предположить, что ты используешь заранее подготовленный маршрут в виде блоков path corner. А значит, у тебя имеются определенные точки пути. Ну и ты можешь попросту сравнивать расположение этих точек через их координаты с расположением твоей цели или крипа, а после указывать крипу именно ближайшую. Математика.
 
Как изменить или убрать стандартные "Победа сил света" и "Победа сил тьмы"?
 
Последнее редактирование модератором:
Помогите - 1) Как сделать магазин вседоступным? (обычный+секретный) (пробовал 2 тригера с разными магазинами - они накладываются друг на друга и... объяснять дальше толку...)
2)Уточнить бы как свой предмет добавить в тот или иной столбец.
И 3) Где хранятся параметры предметов? (Нигде - Гуглить?9) Просто со способностями проще. Они в корне игры.
 
Статус
В этой теме нельзя размещать новые ответы.
Реклама: