27

» WarCraft 3 / Как сделать, чтобы большие юниты рассталкивали маленьких

ZeroCaty, стремительность работает на обычных юнитов, а вот через здания не может ходить. Можно больших делать здания.
27

» WarCraft 3 / Проблемы с ордером

DemonoiD, можно сделать =) но очень плохо понимаю, что вы хотите сделать)
27

» WarCraft 3 / Как сделать, чтобы большие юниты рассталкивали маленьких

Пушистый:
pro100master, Тоадкоп делал систему, если не ошибаюсь (там такие шарики зеленые были, которые скатывались с горок и толкались). Сейчас найду.
вот эта xgm.guru/forum/showthread.php?t=19531
красочное отталкивание сфер =))
27

» WarCraft 3 / Проблемы с ордером

почему карта (см. приложение) после 10-15 итераций ломается и крестьяне стоят.
  1. потому что не удалена руна, так как указана другая переменная, вместо manipulated item удаляется picked item. Поэтому руна была не удалена (ее не видно, но она на карте есть), но она была самой ближайшей. Короче рабы стояли около нее. Очень долго из-за неудаленного итема мучался, просто не могло быть так. Когда мало, объектов мало, откуда в ней лимит кода. А то у меня после 5-6 сборов, больше не хотели идти, стояли.
  2. нужно проверять приказ Current Order of Unit вместо Issued Order (лучше проверять координаты, я координаты юзаю, сохраняю в хэш, и при смерти вычищаю). лучше каждый раз периодически каждую 1 секунду проверять группу, не стоят ли они. А то есть те, кто могут стоять без дела. завел группу, и в нее заносил всех созданных юнитов. Мне нет нужных пикать всех
  3. если создается предмет (прям в триггере), то нужно перепроверить всех. артефакт может находится рядом, короче юнит может развернуться и подбежать к тока что заспавненному итему, нет смысла бежать за дальним.
  4. не естественно смотрится, когда целое стадо голодное дурачье бежит за ближайшей едой. Если вижу, что спереди бежит два чела, я понимаю, что не успею съесть, и пойду в другую сторону. Понимаете, на карте например 4-5 айтемов, а все бегут за одним, потому что он ближе =), это неправильно..А то и подохнет раньше, или эволюционирует в хитрое и умное. Бывает отделяются несколько челиков от группы (в моей карте), но это чисто случайно. А так бегают группами, так как пищи не много спавнится.
Загруженные файлы
27

» WarCraft 3 / Проблемы с ордером

у меня похожее было, когда толпа бегала за одним итемом. система
чтобы такого не было, я короче ставил на итем метку, что за ним уже идут. Когда циклом будешь перебирать, надо смотреть если ли на итеме метка, если нет, то бегом за ним.
27

» WarCraft 3 / Древа

Принятый ответ
PT153, "съесть дерево" связано с "пустить корни". древа-здания у них изначально не показывается абилка "съесть дерево", а когда вытаскивает корни и становится ходячим, у древа оно появляется. Короче какая механика в варе. Мог бы попробовать триггерно, взял бы пустышку.
Хотя только что пробовал. Взял дал сторожевому дереву пустышку типа канал, у дерева-здания оно изначально есть, но способность "съесть дерево" отсутствует. Пробую вытащить корни, и у меня пустышка пропадает, а "съесть дерево" наоборот показывается.
Пробовал способ пушистика, добавлял и делал пермаментным - работает только "съесть дерево". А канал-пустышка все также не хочет работать (лень разбираться ^_^ )
Загруженные файлы
27

» WarCraft 3 / Как работает "Защита от магии"?

Принятый ответ
вот раздел "сопротивление"
про ульту только там немного о другом
потому что приравнивается к герою. То есть у скила полиморф есть в целях "не герои". Было бы странно, если бы я захватил самого сильного юнита вражеской армии, или убрал. на урон никак не вляет, только на баффы
27

» WarCraft 3 / Снова эти функции

нет, не нужно. это аргументы (это тоже локалки), говорят, что обнуляется само по завершению функции. А то что объявляем через local надо обнулять. строки вообще не обязательно обнулять (хоть не шарю в этом программировании, но обнулять не нужно). Уже многие пишут не надо строки обнулять, и аргументы. Можешь поискать.
27

» WarCraft 3 / Поясните функцию

quq_CCCP, точно? )) я просто брал юнитов, давал пассивки и наносил им урона. ну не знаю, это надо проверять. Я же тестил давно. мб и выводы неверно даю. наверное так и есть
Загруженные файлы
27

» WarCraft 3 / Поясните функцию

Принятый ответ
только этот триггерный урон может не блокировать некоторые защитные физические способности.
weapontype weaponType - звук оружия
27

» WarCraft 3 / Убивать вне радиуса области относительно юнита - триггерно

Принятый ответ
чем-то напоминает завод тинкера. там тоже есть такая фишка. только спавнит автоматически =(
вот
Завод 'ANfy'/ Мини-завод 'ANsy'/'ANs1'/'ANs2'/'ANs3' - пассивка с иконкой, каждый раз создает новых маленьких заводных гоблинов. Интервал порождения - время, через которое создается новый гоблин. Есть "радиус подчинения" - если гоблин отойдет дальше этого радиуса от завода, то погибнет. Это очень похоже на призыв, там таймер жизни нацепляют, наносится дополнительный урон, как вызванным существам, от магических заклинаний. Но не ловится событием "юнит призвал боевую единицу", зато можно ловить по событию "юнит вошел в область". Неплохо сочетается со способностью "сбор" 'ARal', "Сборный пункт" - указываешь флаг в точку, где будет скапливаться все войско (как только появится рядом, он побежит к точке сбора).
Чтоб спавнил на постоянно основе, задайте длительность = 0. А чтоб спавнил в нужный момент, добавляйте абилку, и после спавна сразу же удаляйте абилку (иначе дофига наспавнит, так как абилка автоматом спавнит).
только вот вам нужно триггерно, но вам уже все расписали.
вот простой пример 2. тут заранее добавляем в группу. у каждого дома должна быть создана своя группа, в которую добавляешь. короче если вы строите дом, нужно создавать группу. Если дом умирает, группу удаляете. И счетчик надо делать, чтоб запоминать скока.
Загруженные файлы
27

» WarCraft 3 / HEX to DEC to ASCII (конвертация равкодов)

Lelouch, переводит из одной системы счисления в другую. но она немного старая, там ретурн баг старый.
я немного доработал ее, и есть пример впрочем есть пример в ссылке получше с StringHash =)
27

» WarCraft 3 / Система покупки и продажи предмета

Принятый ответ
Тестил, тестил. Думал найду ошибку. Короче не знаю в чем дело, видимо и в правду баг. Решил по-другому. Ловить поставку, и ловить продажу. То есть ловить то, что пришло, и то, что ушло.
событием - "юнит закладывает в лавку" (EVENT_PLAYER_UNIT_PAWN_ITEM) ловим продажу итемов.
GetSellingUnit() =продающий торговец (типа всякие предметы закладывает в магазин и получает деньги)
GetBuyingUnit()=GetTriggerUnit() = покупающий торговец (это обычно магазин)

событием - "юнит закладывает из лавки (продает артефакт)" (EVENT_PLAYER_UNIT_SELL_ITEM) ловим покупку итемов
GetSellingUnit()=GetTriggerUnit()=продающий торговец (обычно это магазин)
GetBuyingUnit() = покупающий торговец (наш герой получает артефакты)
Решил, я по-своему. Короче, видимо, итем в магазине исчезает при добавлении. Попробовал запоминать все добавленные итемы, и при добавлении я сначала удалю всё в магазине, а потом заново добавлю. Пришлось, еще порядок (номер слотов) запоминать, а то строятся ключи хэша на строгом порядке. Если возьму и заберу итем посередине, придется заново выстраивать порядок.
Не знаю, пока тестил много времени, пока без косяков. Главное, что работает. Меня это радует. Но пока не буду спешить. Мне бы хотелось затестить норм.
Загруженные файлы
27

» WarCraft 3 / Система покупки и продажи предмета

Решил добить эту систему, но что-то не понимаю, почему так происходит (логически все верно). Мне кажется дело в варе, а не в коде.
пример
Вот, допустим, у вас есть пустой магазин, и кучу валяющих айтемов.
Вы забиваете полностью магазин предметами. У вас ограничение максимум 11 слотов, больше не может занять. Дебаг пишет, что максимум 11. Там своего рода счетчик. Короче удаляется у магазина абилка 'Apit' (Лавка: Продать предмет), вы не сможете ничего продавать в этот магазин, так как удалена абилка.
Далее покупаем "талисман здоровья", счетчик становится 10. Абилка 'Apit' (Лавка: Продать предмет) добавляется обратно
Далее покупаем "пояс богатыря", счетчик становится 9.
Следом - прикупим "перчатки скорости". счетчик становится 8
покупаем "флейту меткости". счетчик становится 7.
покупаем "одеяние мага". счетчик становится 6.
не хватило места, поэтому будем продавать. часто багуется тогда, когда итемы закладываешь в магазин. Короче может быть так что пропадает из магазина какой-то итем. В этом и баг. Например, продажа произошла, а в магазине новый итем заменил слот со старым, а старый пропал. Или просто пропадает. Увидите ниже. Не знаю, в чем дело. Очень бесит.
Продаю "сапоги скорости", счетчик становится +7
продаю "талисман здоровья", счетчик становится +8. А вот на самом деле в магазине предметов всего 7. Пропало кольцо защиты из магазина.
продаю "пояс богатыря", счетчик становится +9. !!А на самом деле в магазине предметов по прежнему становится 7. Пропал "Огненный плащ".
продаю "перчатки скорости", счетчик становится +10. Конечно изменилось немного +8 стало
продаю "флейту меткости", счетчик показывает +11 (все, я больше не могу продавать/закладывать в этот магазин, так как абилку 'Apit' (Лавка: Продать предмет) удалил). Кол-во итемов в магазине +9
Хотел бы по-другому:
если было бы известно какому магазину ты продаешь, а так сложно узнать. регулировать поставки итемов в магазин и их продажу.
27

» WarCraft 3 / Выброс в главое меню

сложно сказать. вы же нам не показываете код или карту, ошибки
вам нужно выключить Cjass, скачать Pjass.exe и возможно где-то ошибки из-за не существующих данных. у меня часто критовало из-за того, что я обращался к данным несуществующих юнитов. А допустил ошибку в массиве. еще нужно антивирус выключать, и на виндовс 10 выключить антивирус. Представь на 10-ке что-то блочит JNGP.
ну вылет у меня был из-за обращения к Memory с малым адресом и др
переписывал все подобные операции с уровня кода (кроме инициализации хака) на RMem/WMem с проверками. Пока в интернете не нашел пофиксинную. там где возвращает несуществующие, будет норм возвращать нули или нужные значения, чтобы вар не вылетал. Советую с Драколичем пообщаться
я всегда на рабочий стол сохраняю. и карту на английском языке. надо 2 раза сохранять. выдает хоть какие ошибки jass hepher?
вот пример скинул новой версии - карта C +исходники

старая версия
Бери этот мемхак xgm.guru/p/wc3/179535 - оттда скачай pjass.exe
вот пример старой версии - карта Test
Загруженные файлы
27

» WarCraft 3 / Очередные вопросы по триггерам

Принятый ответ
PT153:
Вспомнил про один баг. Есть сделать PauseTimer() на периодический таймер, а потом на этой таймер использовать ResumeTimer(), то таймер повторит свой цикл лишь раз, а потом остановится.
сам не пользуюсь ResumeTimer, но щас проверил, действительно не работает что-то. Видимо, это работает только тогда, когда таймер не до конца дошел.
можно обойтись и без ResumeTimer
понимаю, ты хочешь сделать какое-то ограничение после возвращения урона. Спустя 3 секунды возвратка может снова возвращать урон.
Можно было сделать по-другому.
Еще не понимаю, зачем нам нужен периодический таймер.
  1. можем логическую переменную b завести и таймер t
  2. нанес противник урон = проверяем логическую переменную, если истина, запускаем одноразовый таймер, и ставим ложь в логической переменной = false
if b then 
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.?mdl",u,"origin"))
call UnitDamageTarget(udg_u,u,r*5,false, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS)
call BJDebugMsg("Reflected:"+R2S(r*5))
call TimerStart(udg_t,0.5,false,function t3a)
set b = false
endif
  1. когда таймер запустится
function t3a takes nothing returns nothing
    call PauseTimer(udg_t)
    set b = true
endfunction
думаю все что надо это call ResumeTimer() заменить на call TimerStart()
27

» WarCraft 3 / Как дать возможность выбора расы через лобби?

eriel222, +
в Necris тоже сделан выбор через диалоговое окно. Там правда менюшки и голоса с музоном не поменяешь, выдают интерфейс с музыкой тот что указано в слоте. Зато выбираешь на какой стороне герой будет спавнится. Здесь тоже самое, можно выдать диалоговое окно с кнопками, где нужно выбирать расу. и заспавнить базу на карте, по-моему в какой-то карте сделано похоже было.
27

» WarCraft 3 / Очередные вопросы по оптимизации

PyCCKuu_4eJl, прочитай вот этк тему xgm.guru/p/100/192427 особенно про то что макс число на каждого игрока, и что их обнулять нет смысла
блин не в эту тему. ну ладно
27

» WarCraft 3 / Очередные вопросы по оптимизации

PyCCKuu_4eJl, прочитай вот этк тему xgm.guru/p/100/192427 особенно про то что макс число на каждого игрока, и что их обнулять нет смысла
27

» WarCraft 3 / Очередные вопросы по оптимизации

Принятый ответ
Если нет задержек, то локалки нет смысла использовать - в основном для удобства.
Там все потоки выполняются последовательно. Друг за другом идут потоки - переменные никогда не могут перезаписаться. Такое не видел. Например, запустилось событие - пустили поток: сработало условие, действие. Все. Запускается следующий поток - либо событием либо таймером. Короче потоки одновременно не могут в одно и то время работать. Иначе бы триггеры в варе не работали из-за станд варкрафтоских переменных - тогда бы значения в варкрафтовских переменных перезаписывали в ходе потоков.
Потоки мгновенно срабатывают, за одно мгновение можно много потоков запустить можно - и вам будет казаться, что сработало сразу или одновременно. Это можно проверить дебагом, выводи текстом в какой последовательности выходят потоки, и тут увидите, что потоки последовательны. Вам могут еще помочь эти функции ссылка
Обычно риск есть только во время паузы или задержки, ибо глобалки перезаписываются во время задержки, например через 5 минут в одной переменной может оказать другой юнит. Поэтому локалки и используют. Еще локалки используют тем, кому лень глобалки плодить
27

» WarCraft 3 / Очередные вопросы по оптимизации

Принятый ответ
нет, достаточно одной глобалки bj_lastCreatedTextTag на все. И тогда не нужна никакая локалка. Так использую во многих системах, и работает. Глобалка bj_lastCreatedTextTag является темповой - ну то есть временной ссылкой, чтобы что-то там сделать дальше: цвета прозрачность настроить, время жизни и так далее.
Раньше давно-давно тоже думал, что нужно прям везде и на всё локалки ставить для мультиплеера. А как оказалось нет. Работает и глобалка. Дело в том, что у тебя задержек никаких нет, то и локалки не нужны. Потому что делаешь лишние операции - объявить - обнулить. Ну и во-вторых, у текстагов можно задавать время жизни, сами удаляться.
27

» WarCraft 3 / Воскрешение всех героев

мне кажется дело во втором условии. Там где проверяешь TriggeringUnit is Hero. Так как триггеринг юнит работает только по событию. попробуй удалить