WarCraft 3: Квестовый указатель [готово]

Содержание:

Визуализация квестов

Создаём простейший квест с маркером, и показываем игроку прямой путь куда идти, по прибытию в указанную точку завершаем квест.
Таким образом мы оказуаливаем сами квесты, что позволяет больше сосредоточиться на других аспектах геймплея.
Просто код
---
function AddQuest(hero, qx, qy,message)
	local x, y = GetUnitX(hero), GetUnitY(hero)
	local model = "AneuCaster"
	local player = GetOwningPlayer(hero)
	local isEnd = false
	if GetLocalPlayer() ~= player then
		model = ""
	else
		--print("звук созданного квеста")
		StartSound(bj_questSecretSound)
	end
	local QuestPointer = AddSpecialEffect(model, x, y)
	BlzSetSpecialEffectPitch(QuestPointer, math.rad(-90))--/bj_DEGTORAD
	print(message)
	TimerStart(CreateTimer(), TIMER_PERIOD, true, function()
		local z = BlzGetLocalUnitZ(hero)
		local xc, yc = GetUnitX(hero), GetUnitY(hero)
		local angle = AngleBetweenXY(xc, yc, qx, qy)
		BlzSetSpecialEffectPosition(QuestPointer, MoveX(xc, 130, angle / bj_DEGTORAD), MoveY(yc, 130, angle / bj_DEGTORAD), z + 10)
		BlzSetSpecialEffectYaw(QuestPointer, angle)

		if IsUnitInRangeXY(hero, qx, qy, 200) then
			isEnd = true
		end

		if isEnd then
			if GetLocalPlayer() == player then
				StartSound(bj_questCompletedSound)
			end
			DestroyTimer(GetExpiredTimer())
			DestroyEffect(QuestPointer)
			print("квест №" .. "1" .. " выполнен, даём награду")
		end
	end)
	TimerStart(CreateTimer(), 10, true, function()
		if isEnd then
			DestroyTimer(GetExpiredTimer())
			--print("Выключаем мигалку")
		else
			PingMinimapForPlayer(player, qx, qy, 3)
		end
	end)
end
Небольшой вспомогательный код, часто встречается в моих картах
TIMER_PERIOD = 0.03125
function AngleBetweenXY(xa, ya, xb, yb)
	return math.atan(yb - ya, xb - xa)
end
function MoveX(x, distance, angle)
	return x + distance * math.cos(angle * bj_DEGTORAD)
end

function MoveY(y, distance, angle)
	return y + distance * math.sin(angle * bj_DEGTORAD)
end
Просто гифка
Модифицированная модель стрелочки, которую можно наклонить кодом
Карта пример


Views: 393

Это сообщение удалено
МрачныйВорон #2 - 9 months ago 1
Голосов: +1 / -0
мне кажется, это самый простой квестовый указатель.
Можно ли было пунктирными линиями на мини-карте показать (старик 2)? располагается ли варик таким функционалом?
Bergi_Bear #3 - 9 months ago 0
Голосов: +0 / -0
Он простой да, он не ищет даже пути, но отрисовка пунктира согласно поиска пути конечно интересная идея, мб далее попробую, но порой даже таких 3х стрелок, показывающих на 3х волков никто не делает, эту систему я подчеркнул в одной карте, может даже у клапма, но там были даммики юниты, а не поворот эффекта