[lua] Каст бар

Published
» Способ реализации: Lua
» Тип: Наработка
» Версия Warcraft: 131+
Берги не спит, а значит пришло время для очередной бесполезной и багованной наработки
И так встречайте каст бары
Сразу о том что это.

Примеры использования:

За основу взят на 99% ЭТОТ простой бар
Можно вообще хоть оттуда всё перекопировать и сделать по инструкции перенос, а по факту никакого, РО просто импорт и инициализация через TOС в любом месте.

Причины создания и смысл происходящего:

  1. Первая причина это ты
  2. А вторая - все твои коты
  3. Использование Канала в РО, оно на столько сильно криво реализовано, что просто "ажтрясет"
  4. Визуализация, мы видим полностью время каста будь оно 0.1 сек, 1 секунду, или же минуту
  5. Например через эту "систему" можно сделать воскрешение, без всяких таймеров обратного отсчета
  6. Подобное уже было скорее всего на текстагах или эффектах, но почему-то люди продолжают насилывать стандартную систему из РО
  7. Можно использовать при телепортации, при захвате точки, да как угодно...

Как этим пользоваться

  1. Скопировать код, что ниже
  2. Поднастроить импорт
  3. Вызывать через
CallingBarCreate(hero,5,"Высасывание жизни",false)
Где: hero - наш юнит, игроку которого будет видеть бар, 5 - число секунд. Остальные 2 параметра не обязательные, можно не указывать. "Высасывание жизни" - слово внутри бара, если не указать, будет написано поддержание. И логический параметр, если указать true, будет задействована проверяющая функция содержащая условия прерывания, стан, молчанка, сдвиг юнита, каст другого заклинания и что угодно. Об этом распишу подробнее
» тот самый код, что ниже
do --Инициализация
	TimerStart(CreateTimer(), 0.1, false, function()
		if BlzLoadTOCFile("SystemGeneric\\Main.toc") then
		--print("успех")
		else
			print("провал загрузки ток кастом бара")
		end
	end)
end


function CallingBarCreate(u,cd,text,support)
	if not text then text="Подготовка" end
	local amount=5/cd
	local full=0
	local bar = BlzCreateSimpleFrame("MyFakeBar", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0)
	BlzFrameSetAbsPoint(bar, FRAMEPOINT_CENTER, 0.4, 0.15)
	BlzFrameSetValue(bar, 0)
	BlzFrameSetTextSizeLimit(bar,1)
	if support then
		CallingBarCancelCond(u,bar)
	end

	if GetLocalPlayer()==GetOwningPlayer(u)  then -- хп бары, они точно в норме
		BlzFrameSetVisible(bar,true)
	end
	BlzFrameSetTexture(bar, "Replaceabletextures\\Teamcolor\\Teamcolor0"..(GetConvertedPlayerId(GetOwningPlayer(u))-1)​..".blp", 0, true)
	BlzFrameSetTexture(BlzGetFrameByName("MyFakeBarBorder",0),"SystemGeneric\\MyBarBorder​.blp", 0, true)
	BlzFrameSetText(BlzGetFrameByName("MyFakeBarTitle",0), text)--‡ Сердце ™ щит

	local lefttext = BlzGetFrameByName("MyFakeBarLeftText",0)
	local righttext = BlzGetFrameByName("MyFakeBarRightText",0)
	BlzFrameSetText(lefttext, "")
	BlzFrameSetText(righttext, "")

	TimerStart(CreateTimer(), 0.05, true, function()
		full=full+amount
		BlzFrameSetValue(bar, full)
		--print(full)
		if full>=100 then
			--print("destroy")
			CallingBarDestroy(u,bar)
		end
	end)
	return bar
end

function CallingBarDestroy(hero,bar)
	if UnitRemoveAbility(hero,FourCC('Abun')) then
	--	print("атака возвращена")
	end
	DestroyTimer(GetExpiredTimer())
	BlzDestroyFrame(bar)
end

function CallingBarCancelCond(hero,bar) --
	UnitAddAbility(hero,FourCC('Abun'))
	TimerStart(CreateTimer(), TIMER_PERIOD, true, function()
		CallingBarIsStatus(hero,bar)
	end)
end

function CallingBarIsStatus(hero,bar)
	local status=true
	if IsUnitPaused(hero) or GetUnitCurrentOrder(hero)~=String2OrderIdBJ("")	then -- указываем списо условий который могус сбить каст
		if GetUnitCurrentOrder(hero)~=String2OrderIdBJ("doom") then
			--print(OrderId2String(GetUnitCurrentOrder(hero)))
			--print("Каст сбит")
			UnitRemoveAbility(hero,FourCC('Abun'))
			CallingBarDestroy(hero,bar)
			status=false
		end
	end
	return status
end


Views: 403

Bergi_Bear #1 - 5 months ago 0
Голосов: +0 / -0
Если это надо будет хоть 1 человеку, сделаю карту пример с бураном или лайф дрейном
ScorpioT1000 #2 - 5 months ago 0
Голосов: +0 / -0
Превью выглядит как будто ты гуи прогу выложил
pro100master #3 - 5 months ago 1
Голосов: +1 / -0
ScorpioT1000, Ну зато скоро берги станет гуру-программист =)
Nelloy #4 - 5 months ago 0
Голосов: +0 / -0
Bergi_Bear, создание фрейма лучше перенести в инициализацию, а при необходимости его прятать/показывать.
Bergi_Bear #5 - 5 months ago (изм. ) 0
Голосов: +0 / -0
Nelloy, можно да, но я создаю новые всякий раз, потому что на будущее будет этих баров гораздо больше
Кстати по моему ты и делал такой же воскрешающий, в дискорде спрашивал как сделать шкалу (или это не ты был, не важно)

ScorpioT1000:
Превью выглядит как будто ты гуи прогу выложил
А это я опять рофлю, но по факту можно и такие прогресс бары делать, есть идеи на что поменять? или выложить тот же самый, что и в гифках используется?