17

» WarCraft 3 / Как закрепить в позиции героя 2х юнитов?

Как-то так. Включаете на время движения, выключаете на время бездействия.
3 глобалки :
udg_YourLoc - точка
udg_YourHero - герой (относительно чего двигается)
udg_YourMovedUnit - то, кого двигаем
он же, но в джазз варианте:
раскрыть
function Trig_t3_Actions takes nothing returns nothing
    local real x = GetUnitX(udg_YourHero)
    local real y = GetUnitY(udg_YourHero)
    call MoveLocation( udg_YourLoc,                        (x),                        (y) )
    call SetUnitPositionLoc( udg_YourMovedUnit, udg_YourLoc )
endfunction

//===========================================================================
function InitTrig_t3 takes nothing returns nothing
    set gg_trg_t3 = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_t3, 0.05 )
    call TriggerAddAction( gg_trg_t3, function Trig_t3_Actions )
endfunction
Загруженные файлы
17

» WarCraft 3 / Как закрепить в позиции героя 2х юнитов?

Создать точки относительно героя, двигать её каждые 0.05 секунд, а на точки в это же время перемещать нужных юнитов.
MoveUnit через ГУИ = каждый раз создаёт новую точку = утечная
17

» WarCraft 3 / vJass

Пушистый:
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)
?
плохой пример :c
17

» WarCraft 3 / Время

ledoed:
вроде на cjass можно
3.7 Предопределённые макросы
Для удобства программиста, cJass имеет несколько заранее определённых макросов, которые могут использоваться при написании кода. Все предопределённые макросы заменяются на свои значения во время трансляции.
DATE — возвращает текущую дату в виде гггг.мм.дд
TIME — возвращает текущее время в виде чч:мм:сс
При обработке скрипта, заменяется текущим временем (моим), а не конкретным временем в самой игре.
17

» WarCraft 3 / Функцыя вызова

Не легче перебрать юнитов в самом скилле и направлять дамаг уже на нужных юнитов?
раскрыть
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
17

» WarCraft 3 / крипы монолита

Отключайте по одной, и смотрите какая глючит.
Возможно, что он пытается атаковать кого-либо, но местная пачка крипов сбивает атаку, сообщая что на базу напали, ну или что-то подобное.
17

» WarCraft 3 / Боты ничего не строят

В первую очередь ИИ бросается строить алтарь, ферму и казармы, и после этого уже прогресс дальше не идёт.
Примерно такая же ситуация в
Возможно придётся переписывать ИИ, уча его нанимать героев из таверны, а не строить для этого алтарь.
17

» WarCraft 3 / Лимит символов

название (подсказка) = 53 символа (возможно 64, с учётом перекраски в зелёный)
описание = 31 x 33 (в каждой строке 3 пробела) = 1023 символа
Довольно таки неожиданно
В любом случае, мне вполне хватит
Загруженные файлы
17

» WarCraft 3 / Как расширить анимацию заклинания огненный столб?

Попробуйте создать юнита с моделькой столба, дать ему нужный масштаб, и создавать в точке каста заклинания.
17

» WarCraft 3 / Как сделать тавер-казарму?

Это тоже будет цитировано (ы)
Принудительный сброс таймера и запуск следующей волны при касте спелла.
В YouTD всё очень даже неплохо реализовано, мб откопаете/ пару идей оттуда
Насчёт переменных с казармами не очень понял что вы хотите сделать.
В теории:
60 глобалок с юнитами (по 3 на каждую казарму)
можно массивом, что проще
т.е.
011 -> 1й юнит 1й казармы
012 -> 2й юнит 1й казармы
013 -> 3й юнит 1й казармы
021 -> 1й юнит 2й казармы
...
201 -> 1й юнит 20й казармы
...
Один из них умирает, в момент смерти записываем айди юнита, запускаем таймер на нужное время.
Спустя это время ресаем этот тип юнита у своей казармы и отправляем копать картошку.
17

» WarCraft 3 / Дот урон

Допилил чтобы останавливалось (Ы) + прикрутил тексттаг:
раскрыть
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
17

» WarCraft 3 / Как сделать тавер-казарму?

Тогда один повторяющийся таймер в например минуту, который меняет номер волны и запускает следующую при условии что жизней больше нуля
в kingdom rush не играл поэтому хз что там да как
17

» WarCraft 3 / Как сделать тавер-казарму?

В тд обычно всё реализовано на волнах, т.е. пока текущая не будет уничтожена (или пропущена), таймер новой не стартует. Так что будет достаточно одного отряда, и пока в нём все юниты не будут мертвы (включая тех что прошли), новой волны не будет.
17

» WarCraft 3 / Как сделать тавер-казарму?

Трёхмерные массивы + привязка юнита к массиву / хэштаблица
  1. номер казармы
  2. номер юнита
  3. сам таймер, привязанный к юниту
Юнит умер -> ждать 20 секунд -> выпускать нового
17

» WarCraft 3 / И снова по прелоадам

ClotPh:
Но было обнаружено, что есть ещё 2 создающих микролаги явления, хотя и относительно небольшие:
первичное выделение некоторых объектов;
Попробуйте использовать функцию Add to selection (или как-то так), скорее всего это прогружает иконки + места для них + отображение игроку
ClotPh,
первичное открытие некоторых спеллбуков (прелоад спеллбуков давно стоит у изначально имеющихся на карте объектов, не помогает, он убирал бы лаг при добавлении скрытых спеллбуков, но не при первом открытии вот таких активных; прелоад всех имеющихся в спеллбуках абил отдельно тоже есть, не помогает).
Попробуйте не через хоткей, а через его айди приказа / сам его айди
17

» WarCraft 3 / Продажа вещей

Сделать БД с ценой каждого предмета и использовать значения оттуда.
каст абилки/подход в зону продажи/?? -> удалить предмет у героя -> взять значение из бд, или же bOrissko:
можно указать прочность предмета как его цена за продажуили использовать Custom value.
вернуть это кол-во голды игроку.
17

» WarCraft 3 / Что такое PLAYER_STATE_OBSERVER?

UrsaBoss,
По идее State = что-то типо параметра
Unit State = параметр юнита, хп/мп например
То же самое и с плеером (логика близзов) ы
17

» WarCraft 3 / Что такое PLAYER_STATE_OBSERVER?

UrsaBoss,
Возможно просто проверка на обсервера.
Если игрок - наблюдатель - то например не добавлять его в мультиборд
17

» WarCraft 3 / Что такое PLAYER_STATE_OBSERVER?

Мб конкретный слот имеется ввиду
Типо в играх 1х1 может влезть до 10 обсерверов, а в 5х5 всего 2
17

» WarCraft 3 / Что такое PLAYER_STATE_OBSERVER?

В лобби - игроки и наблюдатели, используется через продвинутые настройки хостования.
Наблюдателей можно добавить если в карте меньше 12 слотов.
17

» WarCraft 3 / Win 10 64 bit и mdlvis / w3me

У меня стоит 7 х64 и всё прекрасно работает.
В крайнем случае попробуйте "режим совместимости"
17

» WarCraft 3 / Как ходить по дну?

Sylvanas,
Сделайте кастомную воду из даммиков через декорацию "повышение уровня воды".
Но с мелководьем и глубинными водами ессно надо сделать 2 типа даммиков с разной высотой полёта.
+ на вид оно глючит в редакторе, но если всё норм "состыковать" то выглядеть будет очень даже неплохо
Они будут использовать дно речки как землю и тупо игнорировать эту воду, т.к. эта вода просто декорация.
17

» WarCraft 3 / Странные ошибки

Diaboliko,
Спасибо
Что-то увлёкся с переменными
Вот так должно было быть:
function SetSpellDamage takes unit u, real sd returns nothing
    local integer i = GetHandleId(u)
    call SaveReal(udg_GHT,i,udg_sd,sd)
endfunction
17

» WarCraft 3 / Молнии

quq_CCCP:
ну альфу неправильно значит настраиваешь, там кстати не помню у молнии вроде были настройки видимости и еще чего то, смотри все нативки.
Кстати на сайте есть система которая сама двигает молнии за обьектами и делает затухание, на одном таймере.
Раз сделали, значит смогу реализовать (есть идейка), но надо ещё с альфой пошаманить, ибо не очень понял как это работает с молниями...
17

» WarCraft 3 / Нестандартный проклятый рудник в ИИ не строится

Мб по айди юнита(рудника) идёт проброс
Или что очень маловероятно, что твой рудник просто не влез в меню строительства (ы)