28

» WarCraft 3 / Пиратка против лицензии.

вот ред алерт 3 там такая скука, че то не зашла.
Неистово плюсую, после распада Westwood единственной годной игрой вышла C&C 3.
28

» WarCraft 3 / Не могу найти не удалённый эффект

Принятый ответ
А что тут vJass требует? Глобалки?
Блок глобалок, что я объявил, и многострочные комментарии /*...*/.
PT153:
Переписал код, оставил кое-какие комментарии.
xD, я просто скопипастил создание эффекта, а ведь нужно было убрать под таймером GetSpellTargetUnit().
Вот так верно будет.
раскрыть
globals
    constant string Effect_A000 = "Abilities\\Spells\\Orc\\LightningBolt\\LightningBoltMissile.mdx"
    constant string AttEffect_A000 = "origin"
endglobals

function spell1_dmg takes nothing returns nothing
    local integer h = GetHandleId(GetExpiredTimer())
    local unit target = LoadInteger(udg_spells_hashtable, h, 0)
    local integer tik_count = LoadInteger(udg_spells_hashtable, h, 2)
    // Вместо определения локалки для кастера, сразу пихаем его в UnitDamageTargetBJ.
    // Локалку всё также можно определить, но после endif её нужно обнулить.
    // set caster = null
    call DestroyEffect(LoadEffectHandle(udg_spells_hashtable, h, 3))
    if tik_count > 0 then
        call UnitDamageTargetBJ(LoadUnitHandle(udg_spells_hashtable, h, 1),/*
                                              */ target, udg_spell1_dmg_period_count, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC)
        call DisplayTextToPlayer(GetLocalPlayer(), 0., 0., I2S(tik_count))  // асинхронно, работает по сети.
        call SaveInteger(udg_spells_hashtable, h, 2, tik_count - 1)
        call SaveEffectHandle(udg_spells_hashtable, h, 3, AddSpecialEffectTarget(Effect_A000, target, AttEffect_A000))
    else
        call FlushChildHashtable(udg_spells_hashtable, h)  // удаляет все записи с parent ключом h.
        call DestroyTimer(GetExpiredTimer())  // удаляет таймер.
    endif
    set target = null
endfunction

function Trig_spell1_cast_jass_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local integer h = GetHandleId(t)
    call TimerStart(t, 0.05, true, function spell1_dmg)
    call SaveUnitHandle(udg_spells_hashtable, h, 0, GetSpellTargetUnit())
    call SaveUnitHandle(udg_spells_hashtable, h, 1, GetSpellAbilityUnit())
    call SaveInteger(udg_spells_hashtable, h, 2, udg_spell1_time_period_count)
    call SaveEffectHandle(udg_spells_hashtable, h, 3, AddSpecialEffectTarget(Effect_A000, GetSpellTargetUnit(), AttEffect_A000))
    set t = null  // обнуление.
endfunction
28

» WarCraft 3 / Не могу найти не удалённый эффект

Переписал код, оставил кое-какие комментарии.
Должен быть включён vJass в JNGP.
раскрыть
globals
    constant string Effect_A000 = "Abilities\\Spells\\Orc\\LightningBolt\\LightningBoltMissile.mdx"
    constant string AttEffect_A000 = "origin"
endglobals

function spell1_dmg takes nothing returns nothing
    local integer h = GetHandleId(GetExpiredTimer())
    local integer tik_count = LoadInteger(udg_spells_hashtable, h, 2)
    // Вместо определения локалок для юнитов, сразу их пихаем в UnitDamageTargetBJ.
    // Локалки всё также можно определить, но после endif их нужно обнулить.
    // set caster = null и set target = null
    call DestroyEffect(LoadEffectHandle(udg_spells_hashtable, h, 3))
    if tik_count > 0 then
        call UnitDamageTargetBJ(LoadUnitHandle(udg_spells_hashtable, h, 1),/*
                             */ LoadUnitHandle(udg_spells_hashtable, h, 0),/*
                             */ udg_spell1_dmg_period_count, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC)
        call DisplayTextToPlayer(GetLocalPlayer(), 0., 0., I2S(tik_count))  // асинхронно, работает по сети.
        call SaveInteger(udg_spells_hashtable, h, 2, tik_count - 1)
        call SaveEffectHandle(udg_spells_hashtable, h, 3, AddSpecialEffectTarget(Effect_A000, GetSpellTargetUnit(), AttEffect_A000))
    else
        call FlushChildHashtable(udg_spells_hashtable, h)  // удаляет все записи с parent ключом h.
        call DestroyTimer(GetExpiredTimer())  // удаляет таймер.
    endif
endfunction

function Trig_spell1_cast_jass_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local integer h = GetHandleId(t)
    call TimerStart(t, 0.05, true, function spell1_dmg)
    call SaveUnitHandle(udg_spells_hashtable, h, 0, GetSpellTargetUnit())
    call SaveUnitHandle(udg_spells_hashtable, h, 1, GetSpellAbilityUnit())
    call SaveInteger(udg_spells_hashtable, h, 2, udg_spell1_time_period_count)
    call SaveEffectHandle(udg_spells_hashtable, h, 3, AddSpecialEffectTarget(Effect_A000, GetSpellTargetUnit(), AttEffect_A000))
    set t = null
endfunction
28

» WarCraft 3 / Не могу найти не удалённый эффект

Не понимаю.
Так ты же таймер не паузишь и не уничтожаешь, вот он и продолжает тикать.
28

» WarCraft 3 / Не могу найти не удалённый эффект

Апд. Ну и просто советы по улучшению кода принимаются, да. Если вдруг кто захочет...
Все BJ функции на нативки замени. Некоторые просто превращаются в нативки удалением постфикса BJ.
Все локалки, что наследуются от handle, нужно обнулять в конце функции.
После окончания действия таймер нужно удалить, а хеш почистить.

Не понял изначальный вопрос.
28

» WarCraft 3 / Не работает даммикаст от лица врага

в общем я уже забил
Вот это зря, у меня тоже так проблемы "сами" решались, а потом вновь появлялись, потому что так и не разобрался, в чём же дело.

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

Я вел речь про игрока, который вообще не обозначен (стоит None в настройках игроков), ему тоже нужен обзор, и я уверен, что дело в этом, потому что вряд ли у кого-то будет союз на Shared Vision с ним. Сделай ему во время инициализации модификатор видимости.
call FogModifierStart(CreateFogModifierRect(MyPlayer, FOG_OF_WAR_VISIBLE, GetWorldBounds(), false, true))
// Вместо GetWorldBounds() можно использовать bj_mapInitialPlayableArea.
Если поможет, то дело было в обзоре.
Bergi_Bear:
причём тут ***** москиты
Есть идея, что москиты убирают обзор у юнита.
28

» WarCraft 3 / Обратная функция к GetHandleId()

Или использовать готовый Unit Indexer.
Он не всегда необходим, ибо не каждый юнит, что у появляется на карте, должен быть проиндексирован, к тому же порой можно допустить повторение индексов.
Вот у меня на башни и миньоны разные структуры, то есть индексы повторяются. А некоторые юниты привязываются уже к ним (даммики, например), то есть они не индексируются.
Indexer больше подходит для новичков или не сильно продвинутых людей.
28

» WarCraft 3 / Не работает даммикаст от лица врага

У меня вот такая "мистика" была.

Ещё такая мистика была: у меня иногда юниты переставали кастовать способности, но иногда кастовали, что вообще сбивало с толку. Дело было опять-таки в кланах, когда я убирал Shared Vision или перемещал в другой клан, обзора у юнитов не было, потому и кастовать не могли, а иногда кастовали, только потому что при атаке область вокруг атакующего подсвечивается в определённом радиусе.
PT153:
обзор ещё раз
Важный момент: обзор вокруг цели, а не вокруг даммика.
28

» WarCraft 3 / Не работает даммикаст от лица врага

игрок 5 и 6 не могут делать москитный даммикаст.
Проверь кд способности, дальность, ману, время каста и отхода у даммика, обзор ещё раз. Игрок, которым вообще не управляют (то есть его даже не обозначили) тем более должен делать дамми касты.
Ещё проверь доступность способности этим игрокам.
28

» WarCraft 3 / Библиотека Code

Ок. незнал что есть можно объявить тип key.
Есть проблема с LoadCode, потому что сохранение идёт через "code" + s, а загрузка через s. Я думаю, что нужно либо убрать вообще конкатенацию с "code", или добавить ей в LoadCode, а в RunCode её убрать.
Я думаю, всё же это стоит поправить.
28

» WarCraft 3 / Не работает даммикаст от лица врага

Bergi_Bear:
да, это у меня какая-то беда, вылечил костылями, но проблему так и не нашёл
На обзор проверял? ИИ паузил?
28

» WarCraft 3 / Два вопроса. Как сделать так, чтобы мана тратилась ежесекундно и

А вот событие Жизнь/Мана равно 0 может быть одноразовым
Даже если одноразовое, то и пусть, юнит же всё равно умирает. После смерти маны нет.
28

» WarCraft 3 / Два вопроса. Как сделать так, чтобы мана тратилась ежесекундно и

Принятый ответ
Почему 2 вопроса в одном вопросе?

1. Поставь отрицательный реген у маны. Если напрямую не получается, то выдели поле с регнерацией маны в Редакторе объектов и нажми Shift+Enter.
2. Нужен такой триггер.
Событие: Мана юнита ТвойЮнит становится Равно 0.
Действия: Убить юнита ТвойЮнит.
28

» WarCraft 3 / На основе какого юнита, лучше всего делать даммика ?

Окей
За идею даммика с аттачем спасибо. Но эта модель всё равно не воспроизводит эффекты способностей.

Сделал простую модель для даммика, можно выделять, а также все эффекты способностей будут отображаться на нём.
Есть аттач Origin Ref и анимация Stand. Больше ничего.
Загруженные файлы
28

» XGM Конкурсы / Warcraft III Mini-Game Contest-2018

Что нарушает идею миниигр и у меня появится шанс выиграть))
Так оцениваться будут те версии, что были отправлены Raised.
28

» WarCraft 3 / Проблема с объявлением глобальных переменных

WAGARAX, вместо 0 напишите null.
8gabriel8:
когда карта на Рабочем столе или в папке Загрузки
Нет, к этим папкам пусть всегда на латинице, на кириллице только в том случае, если имя пользователя на кириллице.
28

» WarCraft 3 / Вопрос по устройству мемхака

То что читает варик и то что читает другой софт по тем же адресам вообще отличается радикально.
Ну так и них разные сегменты, варик читает то, что ось отвела для варика, а твоя прога читает то, что ось отвела для неё, вот и всё.
28

» WarCraft 3 / Библиотека Code

  integer   CodeHandle = GetHandleId(Location(0,0))
Переделай на это. Возможно, обёртка в //! nocjass не потребуется.
//! nocjass
key CodeParentKey
//! endnocjass

Есть проблема с LoadCode, потому что сохранение идёт через "code" + s, а загрузка через s. Я думаю, что нужно либо убрать вообще конкатенацию с "code", или добавить ей в LoadCode, а в RunCode её убрать.
28

» WarCraft 3 / Сокрытие эффекта способности "восстановить ману и здоровье"

Эффект лежит отдельно от модели, получается.
Да, этот эффект прописан в способности.
ArchOracle:
Это же сделает воду прозрачной для всех?
Думаю, да.