почему карта (см. приложение) после 10-15 итераций ломается и крестьяне стоят.
потому что не удалена руна, так как указана другая переменная, вместо manipulated item удаляется picked item. Поэтому руна была не удалена (ее не видно, но она на карте есть), но она была самой ближайшей. Короче рабы стояли около нее. Очень долго из-за неудаленного итема мучался, просто не могло быть так. Когда мало, объектов мало, откуда в ней лимит кода. А то у меня после 5-6 сборов, больше не хотели идти, стояли.
нужно проверять приказ Current Order of Unit вместо Issued Order (лучше проверять координаты, я координаты юзаю, сохраняю в хэш, и при смерти вычищаю). лучше каждый раз периодически каждую 1 секунду проверять группу, не стоят ли они. А то есть те, кто могут стоять без дела. завел группу, и в нее заносил всех созданных юнитов. Мне нет нужных пикать всех
если создается предмет (прям в триггере), то нужно перепроверить всех. артефакт может находится рядом, короче юнит может развернуться и подбежать к тока что заспавненному итему, нет смысла бежать за дальним.
не естественно смотрится, когда целое стадо голодное дурачье бежит за ближайшей едой. Если вижу, что спереди бежит два чела, я понимаю, что не успею съесть, и пойду в другую сторону. Понимаете, на карте например 4-5 айтемов, а все бегут за одним, потому что он ближе =), это неправильно..А то и подохнет раньше, или эволюционирует в хитрое и умное. Бывает отделяются несколько челиков от группы (в моей карте), но это чисто случайно. А так бегают группами, так как пищи не много спавнится.
у меня похожее было, когда толпа бегала за одним итемом. система
чтобы такого не было, я короче ставил на итем метку, что за ним уже идут. Когда циклом будешь перебирать, надо смотреть если ли на итеме метка, если нет, то бегом за ним.
PT153, "съесть дерево" связано с "пустить корни". древа-здания у них изначально не показывается абилка "съесть дерево", а когда вытаскивает корни и становится ходячим, у древа оно появляется. Короче какая механика в варе. Мог бы попробовать триггерно, взял бы пустышку.
Хотя только что пробовал. Взял дал сторожевому дереву пустышку типа канал, у дерева-здания оно изначально есть, но способность "съесть дерево" отсутствует. Пробую вытащить корни, и у меня пустышка пропадает, а "съесть дерево" наоборот показывается.
Пробовал способ пушистика, добавлял и делал пермаментным - работает только "съесть дерево". А канал-пустышка все также не хочет работать (лень разбираться ^_^ )
вотраздел "сопротивление" про ультутолько там немного о другом
потому что приравнивается к герою. То есть у скила полиморф есть в целях "не герои". Было бы странно, если бы я захватил самого сильного юнита вражеской армии, или убрал. на урон никак не вляет, только на баффы
нет, не нужно. это аргументы (это тоже локалки), говорят, что обнуляется само по завершению функции. А то что объявляем через local надо обнулять. строки вообще не обязательно обнулять (хоть не шарю в этом программировании, но обнулять не нужно). Уже многие пишут не надо строки обнулять, и аргументы. Можешь поискать.
quq_CCCP, точно? )) я просто брал юнитов, давал пассивки и наносил им урона. ну не знаю, это надо проверять. Я же тестил давно. мб и выводы неверно даю. наверное так и есть
чем-то напоминает завод тинкера. там тоже есть такая фишка. только спавнит автоматически =(
вот
Завод 'ANfy'/ Мини-завод 'ANsy'/'ANs1'/'ANs2'/'ANs3' - пассивка с иконкой, каждый раз создает новых маленьких заводных гоблинов. Интервал порождения - время, через которое создается новый гоблин. Есть "радиус подчинения" - если гоблин отойдет дальше этого радиуса от завода, то погибнет. Это очень похоже на призыв, там таймер жизни нацепляют, наносится дополнительный урон, как вызванным существам, от магических заклинаний. Но не ловится событием "юнит призвал боевую единицу", зато можно ловить по событию "юнит вошел в область". Неплохо сочетается со способностью "сбор" 'ARal', "Сборный пункт" - указываешь флаг в точку, где будет скапливаться все войско (как только появится рядом, он побежит к точке сбора).
Чтоб спавнил на постоянно основе, задайте длительность = 0. А чтоб спавнил в нужный момент, добавляйте абилку, и после спавна сразу же удаляйте абилку (иначе дофига наспавнит, так как абилка автоматом спавнит).
только вот вам нужно триггерно, но вам уже все расписали.
вот простой пример 2. тут заранее добавляем в группу. у каждого дома должна быть создана своя группа, в которую добавляешь. короче если вы строите дом, нужно создавать группу. Если дом умирает, группу удаляете. И счетчик надо делать, чтоб запоминать скока.
Lelouch, переводит из одной системы счисления в другую. но она немного старая, там ретурн баг старый.
я немного доработал ее, и есть пример впрочем есть пример в ссылке получше с StringHash =)
Тестил, тестил. Думал найду ошибку. Короче не знаю в чем дело, видимо и в правду баг. Решил по-другому. Ловить поставку, и ловить продажу. То есть ловить то, что пришло, и то, что ушло.
событием - "юнит закладывает в лавку" (EVENT_PLAYER_UNIT_PAWN_ITEM) ловим продажу итемов.
GetSellingUnit() =продающий торговец (типа всякие предметы закладывает в магазин и получает деньги)
GetBuyingUnit()=GetTriggerUnit() = покупающий торговец (это обычно магазин)
событием - "юнит закладывает из лавки (продает артефакт)" (EVENT_PLAYER_UNIT_SELL_ITEM) ловим покупку итемов
GetSellingUnit()=GetTriggerUnit()=продающий торговец (обычно это магазин)
GetBuyingUnit() = покупающий торговец (наш герой получает артефакты)
Решил, я по-своему. Короче, видимо, итем в магазине исчезает при добавлении. Попробовал запоминать все добавленные итемы, и при добавлении я сначала удалю всё в магазине, а потом заново добавлю. Пришлось, еще порядок (номер слотов) запоминать, а то строятся ключи хэша на строгом порядке. Если возьму и заберу итем посередине, придется заново выстраивать порядок. Не знаю, пока тестил много времени, пока без косяков. Главное, что работает. Меня это радует. Но пока не буду спешить. Мне бы хотелось затестить норм.
Решил добить эту систему, но что-то не понимаю, почему так происходит (логически все верно). Мне кажется дело в варе, а не в коде.
пример
Вот, допустим, у вас есть пустой магазин, и кучу валяющих айтемов.
Вы забиваете полностью магазин предметами. У вас ограничение максимум 11 слотов, больше не может занять. Дебаг пишет, что максимум 11. Там своего рода счетчик. Короче удаляется у магазина абилка 'Apit' (Лавка: Продать предмет), вы не сможете ничего продавать в этот магазин, так как удалена абилка.
Далее покупаем "талисман здоровья", счетчик становится 10. Абилка 'Apit' (Лавка: Продать предмет) добавляется обратно
Далее покупаем "пояс богатыря", счетчик становится 9.
Следом - прикупим "перчатки скорости". счетчик становится 8
покупаем "флейту меткости". счетчик становится 7.
покупаем "одеяние мага". счетчик становится 6.
не хватило места, поэтому будем продавать. часто багуется тогда, когда итемы закладываешь в магазин. Короче может быть так что пропадает из магазина какой-то итем. В этом и баг. Например, продажа произошла, а в магазине новый итем заменил слот со старым, а старый пропал. Или просто пропадает. Увидите ниже. Не знаю, в чем дело. Очень бесит.
Продаю "сапоги скорости", счетчик становится +7
продаю "талисман здоровья", счетчик становится +8. А вот на самом деле в магазине предметов всего 7. Пропало кольцо защиты из магазина.
продаю "пояс богатыря", счетчик становится +9. !!А на самом деле в магазине предметов по прежнему становится 7. Пропал "Огненный плащ".
продаю "перчатки скорости", счетчик становится +10. Конечно изменилось немного +8 стало
продаю "флейту меткости", счетчик показывает +11 (все, я больше не могу продавать/закладывать в этот магазин, так как абилку 'Apit' (Лавка: Продать предмет) удалил). Кол-во итемов в магазине +9
Хотел бы по-другому:
если было бы известно какому магазину ты продаешь, а так сложно узнать. регулировать поставки итемов в магазин и их продажу.
сложно сказать. вы же нам не показываете код или карту, ошибки
вам нужно выключить Cjass, скачать Pjass.exe и возможно где-то ошибки из-за не существующих данных. у меня часто критовало из-за того, что я обращался к данным несуществующих юнитов. А допустил ошибку в массиве. еще нужно антивирус выключать, и на виндовс 10 выключить антивирус. Представь на 10-ке что-то блочит JNGP.
ну вылет у меня был из-за обращения к Memory с малым адресом и др
переписывал все подобные операции с уровня кода (кроме инициализации хака) на RMem/WMem с проверками. Пока в интернете не нашел пофиксинную. там где возвращает несуществующие, будет норм возвращать нули или нужные значения, чтобы вар не вылетал. Советую с Драколичем пообщаться
я всегда на рабочий стол сохраняю. и карту на английском языке. надо 2 раза сохранять. выдает хоть какие ошибки jass hepher?
вот пример скинул новой версии - карта C +исходники
старая версия
Бери этот мемхак xgm.guru/p/wc3/179535 - оттда скачай pjass.exe
PT153:
Вспомнил про один баг. Есть сделать PauseTimer() на периодический таймер, а потом на этой таймер использовать ResumeTimer(), то таймер повторит свой цикл лишь раз, а потом остановится.
сам не пользуюсь ResumeTimer, но щас проверил, действительно не работает что-то. Видимо, это работает только тогда, когда таймер не до конца дошел.
можно обойтись и без ResumeTimer
понимаю, ты хочешь сделать какое-то ограничение после возвращения урона. Спустя 3 секунды возвратка может снова возвращать урон.
Можно было сделать по-другому.
Еще не понимаю, зачем нам нужен периодический таймер.
можем логическую переменную b завести и таймер t
нанес противник урон = проверяем логическую переменную, если истина, запускаем одноразовый таймер, и ставим ложь в логической переменной = 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
когда таймер запустится
function t3a takes nothing returns nothing
call PauseTimer(udg_t)
set b = true
endfunction
думаю все что надо это call ResumeTimer() заменить на call TimerStart()
eriel222, +
в Necris тоже сделан выбор через диалоговое окно. Там правда менюшки и голоса с музоном не поменяешь, выдают интерфейс с музыкой тот что указано в слоте. Зато выбираешь на какой стороне герой будет спавнится. Здесь тоже самое, можно выдать диалоговое окно с кнопками, где нужно выбирать расу. и заспавнить базу на карте, по-моему в какой-то карте сделано похоже было.
PyCCKuu_4eJl, прочитай вот этк тему xgm.guru/p/100/192427 особенно про то что макс число на каждого игрока, и что их обнулять нет смысла
блин не в эту тему. ну ладно
Если нет задержек, то локалки нет смысла использовать - в основном для удобства.
Там все потоки выполняются последовательно. Друг за другом идут потоки - переменные никогда не могут перезаписаться. Такое не видел. Например, запустилось событие - пустили поток: сработало условие, действие. Все. Запускается следующий поток - либо событием либо таймером. Короче потоки одновременно не могут в одно и то время работать. Иначе бы триггеры в варе не работали из-за станд варкрафтоских переменных - тогда бы значения в варкрафтовских переменных перезаписывали в ходе потоков.
Потоки мгновенно срабатывают, за одно мгновение можно много потоков запустить можно - и вам будет казаться, что сработало сразу или одновременно. Это можно проверить дебагом, выводи текстом в какой последовательности выходят потоки, и тут увидите, что потоки последовательны. Вам могут еще помочь эти функции ссылка
Обычно риск есть только во время паузы или задержки, ибо глобалки перезаписываются во время задержки, например через 5 минут в одной переменной может оказать другой юнит. Поэтому локалки и используют. Еще локалки используют тем, кому лень глобалки плодить
нет, достаточно одной глобалки bj_lastCreatedTextTag на все. И тогда не нужна никакая локалка. Так использую во многих системах, и работает. Глобалка bj_lastCreatedTextTag является темповой - ну то есть временной ссылкой, чтобы что-то там сделать дальше: цвета прозрачность настроить, время жизни и так далее.
Раньше давно-давно тоже думал, что нужно прям везде и на всё локалки ставить для мультиплеера. А как оказалось нет. Работает и глобалка. Дело в том, что у тебя задержек никаких нет, то и локалки не нужны. Потому что делаешь лишние операции - объявить - обнулить. Ну и во-вторых, у текстагов можно задавать время жизни, сами удаляться.
» WarCraft 3 / Как сделать, чтобы большие юниты рассталкивали маленьких
» WarCraft 3 / Проблемы с ордером
Ред. MpW
» WarCraft 3 / Как сделать, чтобы большие юниты рассталкивали маленьких
красочное отталкивание сфер =))
Ред. MpW
» WarCraft 3 / Проблемы с ордером
» WarCraft 3 / Проблемы с ордером
Ред. MpW
» WarCraft 3 / Проблемы с ордером
чтобы такого не было, я короче ставил на итем метку, что за ним уже идут. Когда циклом будешь перебирать, надо смотреть если ли на итеме метка, если нет, то бегом за ним.
» WarCraft 3 / Древа
Хотя только что пробовал. Взял дал сторожевому дереву пустышку типа канал, у дерева-здания оно изначально есть, но способность "съесть дерево" отсутствует. Пробую вытащить корни, и у меня пустышка пропадает, а "съесть дерево" наоборот показывается.
Пробовал способ пушистика, добавлял и делал пермаментным - работает только "съесть дерево". А канал-пустышка все также не хочет работать (лень разбираться ^_^ )
Ред. MpW
» WarCraft 3 / Как работает "Защита от магии"?
про ульту только там немного о другом
потому что приравнивается к герою. То есть у скила полиморф есть в целях "не герои". Было бы странно, если бы я захватил самого сильного юнита вражеской армии, или убрал. на урон никак не вляет, только на баффы
Ред. MpW
» WarCraft 3 / Снова эти функции
» WarCraft 3 / Поясните функцию
Ред. MpW
» WarCraft 3 / Поясните функцию
weapontype weaponType - звук оружия
Ред. MpW
» WarCraft 3 / Убивать вне радиуса области относительно юнита - триггерно
вот простой пример 2. тут заранее добавляем в группу. у каждого дома должна быть создана своя группа, в которую добавляешь. короче если вы строите дом, нужно создавать группу. Если дом умирает, группу удаляете. И счетчик надо делать, чтоб запоминать скока.
» WarCraft 3 / Сравнение кода по производительности
Ред. MpW
» WarCraft 3 / Связанные handle-объекты
Ред. MpW
» WarCraft 3 / HEX to DEC to ASCII (конвертация равкодов)
я немного доработал ее, и есть пример впрочем есть пример в ссылке получше с StringHash =)
Ред. MpW
» WarCraft 3 / Система покупки и продажи предмета
GetSellingUnit() =продающий торговец (типа всякие предметы закладывает в магазин и получает деньги)
GetBuyingUnit()=GetTriggerUnit() = покупающий торговец (это обычно магазин)
GetSellingUnit()=GetTriggerUnit()=продающий торговец (обычно это магазин)
GetBuyingUnit() = покупающий торговец (наш герой получает артефакты)
Не знаю, пока тестил много времени, пока без косяков. Главное, что работает. Меня это радует. Но пока не буду спешить. Мне бы хотелось затестить норм.
Ред. MpW
» WarCraft 3 / Система покупки и продажи предмета
Продаю "сапоги скорости", счетчик становится +7
если было бы известно какому магазину ты продаешь, а так сложно узнать. регулировать поставки итемов в магазин и их продажу.
Ред. MpW
» WarCraft 3 / Выброс в главое меню
вам нужно выключить Cjass, скачать Pjass.exe и возможно где-то ошибки из-за не существующих данных. у меня часто критовало из-за того, что я обращался к данным несуществующих юнитов. А допустил ошибку в массиве. еще нужно антивирус выключать, и на виндовс 10 выключить антивирус. Представь на 10-ке что-то блочит JNGP.
вот пример скинул новой версии - карта C +исходники
Ред. MpW
» WarCraft 3 / Очередные вопросы по триггерам
можно обойтись и без ResumeTimer
понимаю, ты хочешь сделать какое-то ограничение после возвращения урона. Спустя 3 секунды возвратка может снова возвращать урон.
Ред. MpW
» WarCraft 3 / Как дать возможность выбора расы через лобби?
в Necris тоже сделан выбор через диалоговое окно. Там правда менюшки и голоса с музоном не поменяешь, выдают интерфейс с музыкой тот что указано в слоте. Зато выбираешь на какой стороне герой будет спавнится. Здесь тоже самое, можно выдать диалоговое окно с кнопками, где нужно выбирать расу. и заспавнить базу на карте, по-моему в какой-то карте сделано похоже было.
Ред. MpW
» WarCraft 3 / Очередные вопросы по оптимизации
блин не в эту тему. ну ладно
» WarCraft 3 / Очередные вопросы по оптимизации
Ред. MpW
» WarCraft 3 / Очередные вопросы по оптимизации
Там все потоки выполняются последовательно. Друг за другом идут потоки - переменные никогда не могут перезаписаться. Такое не видел. Например, запустилось событие - пустили поток: сработало условие, действие. Все. Запускается следующий поток - либо событием либо таймером. Короче потоки одновременно не могут в одно и то время работать. Иначе бы триггеры в варе не работали из-за станд варкрафтоских переменных - тогда бы значения в варкрафтовских переменных перезаписывали в ходе потоков.
Потоки мгновенно срабатывают, за одно мгновение можно много потоков запустить можно - и вам будет казаться, что сработало сразу или одновременно. Это можно проверить дебагом, выводи текстом в какой последовательности выходят потоки, и тут увидите, что потоки последовательны. Вам могут еще помочь эти функции ссылка
Обычно риск есть только во время паузы или задержки, ибо глобалки перезаписываются во время задержки, например через 5 минут в одной переменной может оказать другой юнит. Поэтому локалки и используют. Еще локалки используют тем, кому лень глобалки плодить
Ред. MpW
» WarCraft 3 / Очередные вопросы по оптимизации
Раньше давно-давно тоже думал, что нужно прям везде и на всё локалки ставить для мультиплеера. А как оказалось нет. Работает и глобалка. Дело в том, что у тебя задержек никаких нет, то и локалки не нужны. Потому что делаешь лишние операции - объявить - обнулить. Ну и во-вторых, у текстагов можно задавать время жизни, сами удаляться.
» WarCraft 3 / Воскрешение всех героев