14

» WarCraft 3 / Просьба проверить мой код

ScopteRectuS:
Здесь вы переводите из радианов в градусы, а потом при использовании данной переменной снова переводите её в радианы:
        set s.Angle = bj_RADTODEG * Atan2(GetUnitY(s.Target) - y, GetUnitX(s.Target) - x)
        call SetUnitX(s.Caster,x + s.Speed * Cos(s.Angle * bj_DEGTORAD))
        call SetUnitY(s.Caster,y + s.Speed * Sin(s.Angle * bj_DEGTORAD))
Лучше заменить на :
        set s.Angle = Atan2(GetUnitY(s.Target) - y, GetUnitX(s.Target) - x)
        call SetUnitX(s.Caster,x + s.Speed * Cos(s.Angle))
        call SetUnitY(s.Caster,y + s.Speed * Sin(s.Angle))
щет, спасибо!
14

» WarCraft 3 / Что за объект или integer вызывает фатал на Варкрафт III?

quq_CCCP:
goodlyhero, кстати координаты 0,-11 в доте лича иногда вызывали фаталы, поэтому юзать предлагается другие координаты чтобы скрывать кнопку.
какие если не секрет
14

» WarCraft 3 / Время каста триггерных спелов

Extremator:
Гуванч:
если использовать юнит заканчивает каст то цель теряется
Для подобного рода манипуляций отдельно записывают кастера и цель каста.
А уже по окончанию каста обращаются к этой паре юнитов (кастер+цель).
Я не настаиваю на том что бы ты делал именно так, но если смотреть в общем - то да, так можно сделать, и если бы мне нужно было, то именно так бы я и сделал.
А в чем плюс такого рода действий?
то что я сам не хочу
-Отдельный триггер
-Сохранения юнитов
-Загрузка юнитов
То что я сделал
-Написал одну строчку
14

» WarCraft 3 / Время каста триггерных спелов

quq_CCCP:
Как насчёт другое событие юзать а не вейты?
цель таргетное и ждать надо пока герой не раздвинет руки это всего 0.5 сек
если использовать юнит заканчивает каст то цель теряется

rsfghd:
если ты обнулишь ссылку на таймер то не будет утечным...
ну это само собой
14

» WarCraft 3 / альфа каналы

Bergi_Bear:
Гугли "как добавить альфу", к варкарфту это отношение не имеет, удаляешь белый фон хоть в паинте, созраняешь в PNG, потом конвертируешь в блп через блп-лаб, в пункте прозрачность оставляешь галочку на "оставить без изменений". Готово!
оу спасибо большое
14

» WarCraft 3 / Нужна модель? - Вам сюда!

Всем привет, не сделаете мне так что бы моделька из первого архива была с анимация со второго за ранее спасибо

пожалуйста если не трудно сделайте модельку с этой картинкой и что бы она просто и плавно крутилась
можно с этим
и можно с этим
14

» WarCraft 3 / Герой заходит в зону и начинается действие

не совсем понял что ты хочешь

скрин скидывай ты что то не так делаешь

при событии
Юнит входит в область
зачитывается все кто туда заходит и если туда зайдет например 3 пехотинца то действия будут происходить 3 раза, если хочешь что бы при вхождении определенного юнита например паладина то в условии указываешь его
EnteringUnit() == 'Hpal"
Входящий юнит равно Паладин
далее действия
14

» WarCraft 3 / Hiraishin no Jutsu (Техника летающего бога грома)

rsfghd:
Проясню кое-что для тебя, это не "двигается невероятно быстро от одного места к другому", это телепортация к печати - пространственно-временное ниндзюцу подробнее...
у тебя же никаких печатей нет, соответственно техникой летящего бога грома назвать это нельзя
способ реализации не Jass, а vJass, библиотеки и возможность объявлять глобалки прямо в коде это фишки вджасса, сам спелл хорош, только настройки урона и периодичности урона вынести бы в очевидное место

проверил спелл, не так уж и хорош как казался, у тебя карта зависает/крашается если кастануть спелл у границы карты
я ее еле как сделал и по моему для моего уровня знаний нет так уж плохо, насчет печатей, я не имею модельки печати, и этот спелл я увидел на карте BvO New World 5.0 и там не было печатей или другого и там спелл применялся на юнита а не на точку я так сказать создал и изменил чутка то что увидел и да, какой чел станет делать карту убрав границы? я нигде такого не видел да, есть такие люди которые так делают и может даже есть такие карты не отрицаю, а так сойдет для новичков вроде меня

rsfghd:
Проясню кое-что для тебя, это не "двигается невероятно быстро от одного места к другому", это телепортация к печати - пространственно-временное ниндзюцу подробнее...
у тебя же никаких печатей нет, соответственно техникой летящего бога грома назвать это нельзя
способ реализации не Jass, а vJass, библиотеки и возможность объявлять глобалки прямо в коде это фишки вджасса, сам спелл хорош, только настройки урона и периодичности урона вынести бы в очевидное место

проверил спелл, не так уж и хорош как казался, у тебя карта зависает/крашается если кастануть спелл у границы карты
и что же тебя не устроило в этом спеле кроме того что игра выдает краш при столкновении с границей?
14

» WarCraft 3 / Плавное исчезновение

rsfghd:
Гуванч, если ты закидываешь юнитов в группу одновременно и хочешь чтобы они все исчезнули, то достаточно одного таймера, а иначе на каждый локальный таймер сохраняешь юнита и его текущую прозрачность, каждый раз изменяя её
мм, нет тогда не надо и так сойдет
14

» WarCraft 3 / Плавное исчезновение

GetUnitVertexColor или что то типа этого нет, и да для каждого создавать дамми создавать отдельный таймер? или через группу можно?

если не трудно покажи пожалуйста
14

» WarCraft 3 / Плавное исчезновение

и если не трудно пожалуйста подскажите есть ли в коде утечки и т.п
14

» WarCraft 3 / Способности и алгоритмы на заказ

Гуванч:
Название: Омнислеш
Методы: GUI+MUI/Jass/vJass(что бы можно было настроить под себя желательно с комментами)
Цель: Область(Радиус 700)
Уровни: 3
Описание: В указанной области герой с огромной скоростью перемещается на случайную точку задевая противников тем самым нанося 125 + (AGI x 4) урона.
Длительность заклинания: 3 сек.
Промежуток времени нанесения урона: 0.75(тоесть за 3 сек. 4 раза)
П.С при касте нужно создать вот этот эффект:
Abilities\Spells\NightElf\Rejuvenation\RejuvenationTarget.mdl
а при скачке на точку на месте героя вот эту:
Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl
можете не принимать заказ я уже сам сделал вот кому надо
Загруженные файлы
14

» WarCraft 3 / крипы после боя не идут к центру

rsfghd:
ну периодическим таймером раз в 5 сек находи крипов чей текущий приказ равен "" и прикажи им двигаться в центр
пасиб помогло
14

» WarCraft 3 / Нужна модель? - Вам сюда!

зачем тебе сакура? у меня есть вот такие модельки если хочешь могу скинуть

скорее не у меня а у моего друга есть вот его не доделанная карта там много моделей саске итачи портгас д эйси т.д
Загруженные файлы
14

» WarCraft 3 / Способности и алгоритмы на заказ

rsfghd:
Гуванч, тю, ты хочешь спелл минато из какой-то версии нинпы?
именно))

самому хз как реализовать на джассе на гуи за 5 мин смогу а так нет
14

» WarCraft 3 / Способности и алгоритмы на заказ

Название: Омнислеш
Методы: GUI+MUI/Jass/vJass(что бы можно было настроить под себя желательно с комментами)
Цель: Область(Радиус 700)
Уровни: 3
Описание: В указанной области герой с огромной скоростью перемещается на случайную точку задевая противников тем самым нанося 125 + (AGI x 4) урона.
Длительность заклинания: 3 сек.
Промежуток времени нанесения урона: 0.75(тоесть за 3 сек. 4 раза)
П.С при касте нужно создать вот этот эффект:
Abilities\Spells\NightElf\Rejuvenation\RejuvenationTarget.mdl
а при скачке на точку на месте героя вот эту:
Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl
14

» WarCraft 3 / интересные карты

N7 Molot:
робот сити) вооще топ карта)
что то с будущего что ли там кибер атаки то се?
14

» WarCraft 3 / Создание ИИ

Vitamin:
Помоему для вашей цели лучше всего пойдет создание AI скрипта и подключение его через функцию SetMeleeAI
Пример AI скрипта ниже (если понимаете JASS, проблем в дальнешем в написании/изменении текущего не составит проблем)
AI Script
globals
	constant integer HOLY_BOLT	= 1095264354

	constant integer FOOTMAN 	= 1751543663
	constant integer KNIGHT		= 1751871081
	constant integer PRIEST		= 1752002674
	constant integer UTHER		= 1215657064

	group	g_hHurtUnitGroup	= CreateGroup()

	integer	g_iCaptainHomeX
	integer g_iCaptainHomeY

	integer g_iFountainOfLifeX
	integer g_iFountainOfLifeY

	unit 	g_hHero
endglobals

function B2S takes boolean b returns string
    if b then
        return "true"
    else
        return "false"
    endif
endfunction

function Dig2Str takes integer i returns string
    if i == 1 then
        return "1"
    elseif i == 2 then
        return "2"
    elseif i == 3 then
        return "3"
    elseif i == 4 then
        return "4"
    elseif i == 5 then
        return "5"
    elseif i == 6 then
        return "6"
    elseif i == 7 then
        return "7"
    elseif i == 8 then
        return "8"
    elseif i == 9 then
        return "9"
    else
        return "0"
    endif
endfunction

// Courtesy of AIAndy and Tommi. See source:
// http://www.hiveworkshop.com/threads/two-custom-campaign-ais-examples.8939/
function Int2Str takes integer ic returns string
    local string s = ""
    local integer i = ic
    local integer ialt = 0
    local boolean neg = false

    if i == 0 then
      return "0"
    endif
    if i < 0 then
      set neg = true
      set i = (-1)*i
    endif
    loop
      exitwhen i == 0
      set ialt = i
      set i = i / 10
      set s = Dig2Str( ialt - 10*i ) + s
    endloop
    if neg then
      set s = "-"+s
    endif
    return s
endfunction

function Event_OnHeroLevelGain takes nothing returns integer
    local integer DEVOTION_AURA = 1095262564
    local integer DIVINE_SHIELD = 1095263347
    local integer RESURRECTION	= 1095266917

	local integer iLevel		= GetHeroLevelAI()

	if 		iLevel == 1 then
		return HOLY_BOLT
	elseif	iLevel == 2 then
		return DEVOTION_AURA
	elseif 	iLevel == 3 then
		return HOLY_BOLT
	elseif	iLevel == 4 then
		return DIVINE_SHIELD
	elseif	iLevel == 5 then
		return HOLY_BOLT
	elseif	iLevel == 6 then
		return RESURRECTION
	elseif	iLevel == 7 then
		return DIVINE_SHIELD
	elseif	iLevel == 8 then
		return DEVOTION_AURA
	elseif	iLevel == 9 then
		return DEVOTION_AURA
	elseif	iLevel == 10 then
		return DIVINE_SHIELD
	endif

	return STAT_UP
endfunction

function InitAssaultGroup takes nothing returns nothing
	call InitAssault()

	call AddAssault(GetUnitCountDone(FOOTMAN) 	- IgnoredUnits(FOOTMAN)	, FOOTMAN	)
	call AddAssault(GetUnitCountDone(KNIGHT)	- IgnoredUnits(KNIGHT)	, KNIGHT	)
	call AddAssault(GetUnitCountDone(PRIEST)	- IgnoredUnits(PRIEST)	, PRIEST	)
	call AddAssault(GetUnitCountDone(UTHER)		- IgnoredUnits(UTHER)	, UTHER		)
endfunction

function FindFountainOfLive takes nothing returns nothing
	local integer	FOUNTAIN_OF_LIFE		= 1852206952
	local integer 	PLAYER_NEUTRAL_PASSIVE 	= 15

	local group 	hGroup 					= CreateGroup()
	local unit		hUnit

	call GroupEnumUnitsOfPlayer(hGroup, Player(PLAYER_NEUTRAL_PASSIVE), null)

	loop
		set hUnit = FirstOfGroup(hGroup)

		exitwhen hUnit == null

		if UnitAlive(hUnit) then
			if IsUnitType(hUnit, UNIT_TYPE_STRUCTURE) then
				if GetUnitTypeId(hUnit) == FOUNTAIN_OF_LIFE then
					set g_iFountainOfLifeX = R2I(GetWidgetX(hUnit)) + 200
					set g_iFountainOfLifeY = R2I(GetWidgetY(hUnit)) - 200

					exitwhen true
				endif
			endif
		endif

		call GroupRemoveUnit(hGroup, hUnit)
	endloop

	call DestroyGroup(hGroup)

	set hGroup 	= null
	set hUnit 	= null
endfunction

function ChangeCaptainHome takes nothing returns nothing
	local integer 	BOTH_CAPTAINS 	= 		3

	set 			g_iCaptainHomeX = 	-3700
	set 			g_iCaptainHomeY = 		0

	call SetCaptainHome(BOTH_CAPTAINS, g_iCaptainHomeX, g_iCaptainHomeY)
endfunction

function CreateUnits takes nothing returns nothing
	local integer MASK_OF_DEATH		= 1836016756
	local integer POTION_OF_HEALTH 	= 1885825125

	set g_hHero = 	CreateUnit(g_hPlayerAI, UTHER	, -1095	, -54	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1302	, -722	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1231	, -728	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1154	, -730	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1091	, -730	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1014	, -730	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -951	, -728	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -858	, -722	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -918	, 257	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1049	, 329	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1118	, 374	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -982	, 295	, 0)
    call 			CreateUnit(g_hPlayerAI, KNIGHT	, -1099	, 106	, 0)
    call 			CreateUnit(g_hPlayerAI, KNIGHT	, -1234	, 5		, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -1001	, -809	, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -991	, -112	, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -1152	, -818	, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -1103	, -232	, 0)

    call UnitAddItemToSlotById(g_hHero, MASK_OF_DEATH	, 0)
    call UnitAddItemToSlotById(g_hHero, POTION_OF_HEALTH, 1)
endfunction

function IsEnemyInRangeXY takes integer iX, integer iY, integer iRadius returns boolean
	local boolean 	bIsFindEnemy 	= false
	local group 	hGroup 			= CreateGroup()
	local unit		hUnit

	call GroupEnumUnitsInRange(hGroup,iX, iY, I2R(iRadius), null)

	loop
		set hUnit = FirstOfGroup(hGroup)

		exitwhen hUnit == null

		if UnitAlive(hUnit) then
			if IsUnitEnemy(hUnit, g_hPlayerAI) then
				set bIsFindEnemy = true

				exitwhen true
			endif
		endif
	endloop

	call DestroyGroup(hGroup)

	set hGroup 	= null
	set hUnit	= null

	return bIsFindEnemy
endfunction

function CheckUnitHealth takes nothing returns nothing
	local integer	ORDER_SMART			= 851971
	local integer	ORDER_MOVE			= 851986
	local integer	MIN_SAFE_RANGE		= 200
	local integer	MIN_UNIT_HEALTH 	= 150

	local boolean	bIsUnitInHurtGroup

	local group 	hGroup 				= CreateGroup()

	local integer	iOffsetX
	local integer	iOffsetY

	local real 		flUnitHealth
	local unit 		hUnit

	call GroupEnumUnitsOfPlayer(hGroup, g_hPlayerAI, null)

	loop
		set hUnit = FirstOfGroup(hGroup)

		exitwhen hUnit == null

		set bIsUnitInHurtGroup = IsUnitInGroup(hUnit, g_hHurtUnitGroup)

		if UnitAlive(hUnit) then
			if not (IsUnitType(hUnit, UNIT_TYPE_SUMMONED) or hUnit == g_hHero) then
				set flUnitHealth = GetWidgetLife(hUnit)

				if 		R2I(flUnitHealth) < MIN_UNIT_HEALTH then
					set iOffsetX = GetRandomInt(-50, 50)
					set iOffsetY = GetRandomInt(-50, 50)
					call RemoveGuardPosition(hUnit)

					if not bIsUnitInHurtGroup then
						call GroupAddUnit(g_hHurtUnitGroup, hUnit)
					endif

					if IsEnemyInRangeXY(g_iFountainOfLifeX, g_iFountainOfLifeY, 1000) then
						if not IsUnitInRangeXY(hUnit, g_iCaptainHomeX, g_iCaptainHomeY, MIN_SAFE_RANGE) then
							call PrintToChat("Unit go home")

							call IssuePointOrderById(hUnit, ORDER_MOVE, g_iCaptainHomeX  + iOffsetX, g_iCaptainHomeY + iOffsetY)
						endif
					else
						if not IsUnitInRangeXY(hUnit, g_iFountainOfLifeX, g_iFountainOfLifeX, MIN_SAFE_RANGE) then
							call IssuePointOrderById(hUnit, ORDER_SMART	, g_iFountainOfLifeX + iOffsetX	, g_iFountainOfLifeY  + iOffsetY)
						endif
					endif
				elseif 	flUnitHealth * 1.5 > GetUnitState(hUnit, UNIT_STATE_MAX_LIFE) then
					if bIsUnitInHurtGroup then
						call PrintToChat("Unit back to captain control")

						call RecycleGuardPosition(hUnit)
						call GroupRemoveUnit(g_hHurtUnitGroup, hUnit)
					endif
				endif
			endif
		else
			if bIsUnitInHurtGroup then
				call GroupRemoveUnit(g_hHurtUnitGroup, hUnit)
			endif
		endif

		call GroupRemoveUnit(hGroup, hUnit)
	endloop

	if FirstOfGroup(g_hHurtUnitGroup) != null then	//NOTE: Some hurt units under attack at home
		if not CaptainIsHome() then
			if IsEnemyInRangeXY(g_iCaptainHomeX, g_iCaptainHomeY, MIN_SAFE_RANGE) then
				if not CaptainRetreating() then
					call ClearCaptainTargets()
					call CaptainGoHome()
					call SetGroupsFlee(true)	// NOTE: Tested
					call SetUnitsFlee(true)
				endif
			endif
		endif
	endif

	call DestroyGroup(hGroup)

	set hGroup 	= null
	set hUnit	= null
endfunction

function DevelopmentSequence takes nothing returns nothing
	loop
		call InitAssaultGroup()
		call CheckUnitHealth()
		call Sleep(DEFAULT_SLEEP)
	endloop
endfunction

function main takes nothing returns nothing
	set g_hPlayerAI = Player(GetAiPlayer())

	call SetHeroLevels(function Event_OnHeroLevelGain)

	call CreateUnits()

	call PrintToChat("AI Script started")

	call CreateCaptains()
	call GroupTimedLife(true)
	call SetCampaignAI()
	call SetHeroesFlee(true)
	call SetHeroesTakeItems(true)
	call SetWatchMegaTargets(true)

	call Sleep(0.1)
	call ChangeCaptainHome()

	call FindFountainOfLive()

	call StartThread(function DevelopmentSequence)

	loop
		call Sleep(1)
	endloop
endfunction
спасибо
14

» WarCraft 3 / интересные карты

under11:
Гуванч:
там 11000 страниц если не ошибаюсь и наврятли кто нить сможет их по одному рассмотреть
Я и говорю, заходишь, тыкаешь на середину, качаешь несколько случайных карт и играешь
....
14

» WarCraft 3 / Создание ИИ

Hanabishi:
Ты сам даешь им приказ двигаться через атаку, вместо того чтобы просто идти. Какой еще результат ожидается?
ой, спасибо большое)

Hanabishi:
Ты сам даешь им приказ двигаться через атаку, вместо того чтобы просто идти. Какой еще результат ожидается?
не подскажешь как сделать так чтоб боты качали спелы?