Создать точки относительно героя, двигать её каждые 0.05 секунд, а на точки в это же время перемещать нужных юнитов. MoveUnit через ГУИ = каждый раз создаёт новую точку = утечная
method - функция внутри структуры, которая имеет право работать со структурными переменными (а если точнее - полями, если брать во внимание ООП), причем даже приватными, так как находится непосредственно внутри нее.
this - ссылка на структуру внутри метода (this.Mass = 80 - установит для данной структуры "массу" равной 80; это удобно, потому что так приходилось бы писать каждый раз myStruct.Mass = 80; myStruct.Height = 10, когда можно просто myStruct.SetParams (где уже обращение к ее переменным будет происходить через this)).
т.е. имея вначале
local unit u
мы можем спустя несколько действий сделать
this.u = FirstOfGroup(g)
//что равно
set u=FirstOfGroup(g)
вроде на cjass можно
3.7 Предопределённые макросы
Для удобства программиста, cJass имеет несколько заранее определённых макросов, которые могут использоваться при написании кода. Все предопределённые макросы заменяются на свои значения во время трансляции.
DATE — возвращает текущую дату в виде гггг.мм.дд
TIME — возвращает текущее время в виде чч:мм:сс
При обработке скрипта, заменяется текущим временем (моим), а не конкретным временем в самой игре.
Не легче перебрать юнитов в самом скилле и направлять дамаг уже на нужных юнитов?
раскрыть
function Trig_Skills_ActionsSilent takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer h = GetHandleId(t)
local unit caster = LoadUnitHandle(udg_GHT,h,1)
local group g = CreateGroup()
local unit u
local real int
local real sd = GetSpellDamage(caster) //skill damage
local real cc = GetCritChance(caster) //crit chance
call DestroyTimer(t)
set t = null
call FlushChildHashtable(udg_GHT,h)
set int = (I2R(GetHeroInt(caster,true)))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\Unsummon\\UnsummonTarget.mdl",caster,"origin"))
call GroupEnumUnitsInRange(g,GetUnitX(caster),GetUnitY(caster),400+75,null)
call GroupRemoveUnit(g,caster)
loop
set u=FirstOfGroup(g)
exitwhen u==null
call GroupRemoveUnit(g,u)
if IsUnitInRangeXY(u,GetUnitX(caster),GetUnitY(caster),400)then
if IsUnitEnemy(u,GetOwningPlayer(caster))then
if IsUnitInRangeXY(u,GetUnitX(caster),GetUnitY(caster),400)and IsUnitAliveAndEnemy(u,caster)then
if MissCalculator(u,0)==false then
else
call MagDamageWithCrit(caster, u, int*40, sd, cc, 2, "|cFF8F42B2")
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Undead\\UCancelDeath\\UCancelDeath.mdl",u,"chest"))
endif
endif
endif
endif
endloop
set u = null
call DestroyGroup(g)
set g = null
set caster = null
endfunction
Отключайте по одной, и смотрите какая глючит.
Возможно, что он пытается атаковать кого-либо, но местная пачка крипов сбивает атаку, сообщая что на базу напали, ну или что-то подобное.
название (подсказка) = 53 символа (возможно 64, с учётом перекраски в зелёный)
описание = 31 x 33 (в каждой строке 3 пробела) = 1023 символа
Довольно таки неожиданно
В любом случае, мне вполне хватит
Это тоже будет цитировано (ы)
Принудительный сброс таймера и запуск следующей волны при касте спелла.
В YouTD всё очень даже неплохо реализовано, мб откопаете/ пару идей оттуда
Насчёт переменных с казармами не очень понял что вы хотите сделать.
В теории:
60 глобалок с юнитами (по 3 на каждую казарму) можно массивом, что проще
т.е.
011 -> 1й юнит 1й казармы
012 -> 2й юнит 1й казармы
013 -> 3й юнит 1й казармы
021 -> 1й юнит 2й казармы
...
201 -> 1й юнит 20й казармы
...
Один из них умирает, в момент смерти записываем айди юнита, запускаем таймер на нужное время.
Спустя это время ресаем этот тип юнита у своей казармы и отправляем копать картошку.
Допилил чтобы останавливалось (Ы) + прикрутил тексттаг:
раскрыть
function DoTPure takes nothing returns nothing
local timer ti = GetExpiredTimer()
local integer h = GetHandleId(ti)
local integer times = LoadInteger(udg_GHT,h,0)
if times > 0 then
call SaveInteger(udg_GHT,h,0,times-1)
local unit c = LoadUnitHandle(udg_GHT,h,1)
local unit t = LoadUnitHandle(udg_GHT,h,2)
local real dmg = LoadReal(udg_GHT,h,3)
local string eff = LoadStr(udg_GHT,h,4)
local texttag tt = CreateTextTag()
local real hp1
local real hp2 = GetUnitState(t,UNIT_STATE_LIFE)
call SetTextTagPos(tt,GetUnitX(t),GetUnitY(t),GetUnitFlyHeight(t)+30)
call SetTextTagColor(tt,255,255,255,255)
call SetTextTagPermanent(tt,false)
call SetTextTagFadepoint(tt,3)
call SetTextTagLifespan(tt,2)
call SetTextTagVelocity(tt,.01775*Cos(bj_PI/ 2),.01775*Sin(bj_PI/ 2))
call DestroyEffect(AddSpecialEffectTarget(eff,t,"chest"))
call UnitDamageTarget(c,t,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_SONIC,WEAPON_TYPE_WHOKNOWS)
set hp1 = GetUnitState(t,UNIT_STATE_LIFE)
set hp2 = hp2 - hp1
call SetTextTagText(tt,"|cFFA049DC"+I2S(R2I(hp2)),10*.0023)
set c = null
set t = null
set eff = ""
else
call PauseTimer(ti)
call DestroyTimer(ti)
call FlushChildHashtable(udg_GHT,h)
endif
endfunction
function DoT takes unit c, unit t, real dmg, real sd, integer times, real period, string eff returns nothing
local timer ti = CreateTimer()
local integer h = GetHandleId(ti)
set dmg = dmg+(dmg*sd)
call SaveInteger(udg_GHT,h,0,times)
call SaveUnitHandle(udg_GHT,h,1,c)
call SaveUnitHandle(udg_GHT,h,2,t)
call SaveReal(udg_GHT,h,3,dmg)
call SaveStr(udg_GHT,h,4,eff)
call TimerStart(ti,period,true,function DoTPure)
set ti = null
endfunction
Тогда один повторяющийся таймер в например минуту, который меняет номер волны и запускает следующую при условии что жизней больше нуля в kingdom rush не играл поэтому хз что там да как
В тд обычно всё реализовано на волнах, т.е. пока текущая не будет уничтожена (или пропущена), таймер новой не стартует. Так что будет достаточно одного отряда, и пока в нём все юниты не будут мертвы (включая тех что прошли), новой волны не будет.
первичное открытие некоторых спеллбуков (прелоад спеллбуков давно стоит у изначально имеющихся на карте объектов, не помогает, он убирал бы лаг при добавлении скрытых спеллбуков, но не при первом открытии вот таких активных; прелоад всех имеющихся в спеллбуках абил отдельно тоже есть, не помогает).
Попробуйте не через хоткей, а через его айди приказа / сам его айди
Сделать БД с ценой каждого предмета и использовать значения оттуда.
каст абилки/подход в зону продажи/?? -> удалить предмет у героя -> взять значение из бд, или же bOrissko:
можно указать прочность предмета как его цена за продажуили использовать Custom value.
Sylvanas,
Сделайте кастомную воду из даммиков через декорацию "повышение уровня воды".
Но с мелководьем и глубинными водами ессно надо сделать 2 типа даммиков с разной высотой полёта.
+ на вид оно глючит в редакторе, но если всё норм "состыковать" то выглядеть будет очень даже неплохо
Они будут использовать дно речки как землю и тупо игнорировать эту воду, т.к. эта вода просто декорация.
ну альфу неправильно значит настраиваешь, там кстати не помню у молнии вроде были настройки видимости и еще чего то, смотри все нативки.
Кстати на сайте есть система которая сама двигает молнии за обьектами и делает затухание, на одном таймере.
Раз сделали, значит смогу реализовать (есть идейка), но надо ещё с альфой пошаманить, ибо не очень понял как это работает с молниями...
Ред. N1ghtSiren
» WarCraft 3 / Как закрепить в позиции героя 2х юнитов?
udg_YourLoc - точка
udg_YourHero - герой (относительно чего двигается)
udg_YourMovedUnit - то, кого двигаем
он же, но в джазз варианте:
Ред. N1ghtSiren
» WarCraft 3 / Как закрепить в позиции героя 2х юнитов?
MoveUnit через ГУИ = каждый раз создаёт новую точку = утечная
Ред. N1ghtSiren
» WarCraft 3 / vJass
плохой пример :c
» WarCraft 3 / Время
Ред. N1ghtSiren
» WarCraft 3 / Функцыя вызова
» WarCraft 3 / крипы монолита
Возможно, что он пытается атаковать кого-либо, но местная пачка крипов сбивает атаку, сообщая что на базу напали, ну или что-то подобное.
» WarCraft 3 / Боты ничего не строят
Примерно такая же ситуация в
Ред. N1ghtSiren
» WarCraft 3 / Лимит символов
описание = 31 x 33 (в каждой строке 3 пробела) = 1023 символа
Довольно таки неожиданно
В любом случае, мне вполне хватит
» WarCraft 3 / Как расширить анимацию заклинания огненный столб?
Ред. N1ghtSiren
» WarCraft 3 / Как сделать тавер-казарму?
Принудительный сброс таймера и запуск следующей волны при касте спелла.
В YouTD всё очень даже неплохо реализовано, мб откопаете/ пару идей оттуда
Насчёт переменных с казармами не очень понял что вы хотите сделать.
В теории:
60 глобалок с юнитами (по 3 на каждую казарму)
можно массивом, что проще
т.е.
011 -> 1й юнит 1й казармы
012 -> 2й юнит 1й казармы
013 -> 3й юнит 1й казармы
021 -> 1й юнит 2й казармы
...
201 -> 1й юнит 20й казармы
...
Один из них умирает, в момент смерти записываем айди юнита, запускаем таймер на нужное время.
Спустя это время ресаем этот тип юнита у своей казармы и отправляем копать картошку.
Ред. N1ghtSiren
» WarCraft 3 / Дот урон
» WarCraft 3 / Как сделать тавер-казарму?
в kingdom rush не играл поэтому хз что там да как
Ред. N1ghtSiren
» WarCraft 3 / Как сделать тавер-казарму?
» WarCraft 3 / Как сделать тавер-казарму?
Ред. N1ghtSiren
» WarCraft 3 / И снова по прелоадам
Ред. N1ghtSiren
» WarCraft 3 / Продажа вещей
каст абилки/подход в зону продажи/?? -> удалить предмет у героя -> взять значение из бд, или же bOrissko:
» WarCraft 3 / Что такое PLAYER_STATE_OBSERVER?
По идее State = что-то типо параметра
Unit State = параметр юнита, хп/мп например
То же самое и с плеером (логика близзов) ы
» WarCraft 3 / Что такое PLAYER_STATE_OBSERVER?
Возможно просто проверка на обсервера.
Если игрок - наблюдатель - то например не добавлять его в мультиборд
» WarCraft 3 / Что такое PLAYER_STATE_OBSERVER?
Типо в играх 1х1 может влезть до 10 обсерверов, а в 5х5 всего 2
» WarCraft 3 / Что такое PLAYER_STATE_OBSERVER?
Наблюдателей можно добавить если в карте меньше 12 слотов.
» WarCraft 3 / Win 10 64 bit и mdlvis / w3me
В крайнем случае попробуйте "режим совместимости"
» WarCraft 3 / Как ходить по дну?
Сделайте кастомную воду из даммиков через декорацию "повышение уровня воды".
Но с мелководьем и глубинными водами ессно надо сделать 2 типа даммиков с разной высотой полёта.
+ на вид оно глючит в редакторе, но если всё норм "состыковать" то выглядеть будет очень даже неплохо
Они будут использовать дно речки как землю и тупо игнорировать эту воду, т.к. эта вода просто декорация.
Ред. N1ghtSiren
» WarCraft 3 / Странные ошибки
Спасибо
Что-то увлёкся с переменными
Вот так должно было быть:
» WarCraft 3 / Молнии
» WarCraft 3 / Нестандартный проклятый рудник в ИИ не строится
Или что очень маловероятно, что твой рудник просто не влез в меню строительства (ы)