Тут стоит отметить важное НО, статы нужно отнимает если герой не помер, либо после возрождения, иначе будут баги с регеном, сила влияет на регенерацию здоровья, но ели в момент смерти у героя изменить кол-во силы, регенерация не изменится, в итоге будет герой с 100500 регеном. Так что нужен триггер отлавливающий смерть, время, и начало касте, чтобы вручить силу и забрать её в нужное время.
А с чего сделан такой вывод? Мне показалось это логичным и я решил сделать проверку...
В итоге, оказалось что реген работает ровно в том числе, в котором должен (от количества Силы), если вызвать у героя работу регенерации (изменение текущего хп, в том числе его изменение за счёт изменения Силы). Т.е. да, на мёртвом героем иногда отображается не верное количество регена (ибо юнита можно заставить регенерироваться будучи мёртвым), но как только он становится снова живым - реген исправляется на правильный (в том числе и реген от предмета, который на мёртвом юните не работает совсем).
Отсюда и вопрос - как именно должен происходить этот баг?
Такой вариант "просто изменить мёртвому юнита силу" ничего в итоге не меняет, когда он снова вступит в игру его реген будет нормальным. Вариант "убить + дать силы" тоже не приводит в появлению лишнего регена. Вариант "отловить смерть + дать силы" так же ничего не даёт. В итоге что ни делай - реген всегда стабильный (от 22 Силы и 0.25 баз.регена это всегда 1.35 хп/сек).
Ну обычно протекторы и оптимизаторы вырезают из карт всё лишнее из карты, что нужно лишь на этапе её создания в редакторе (файл-ординатор для РТ и подобные инструменты). Плюс к этому сам редактор не самым оптимальным образом записывает нестандартные данные (свою роль играют *.slk). Вот и получается что сразу после сохранения в редакторе карта весит обычно больше, чем после обработки спец.утилитами.
заработало с даммиком спасибо теперь не буду юзать +1 глобалы в таймерах
Ну просто если у тебя будет использоваться эта же переменная в другом потоке, то будет идти её же перезапись (пишешь в одно место данные из разных источников).
Если хочешь юзать число, то либо бей массив, либо записывай это число в свой хэш (так же, как записываешь юнита).
Размерность массива это инструкция для проставки базовыхтзнаяений для переменных. Если чисел это роли не играет, т.к. ты всегда задаёшь им новые значения. А вот для таких объектов как отряд, таймер, группа игроков - при старте создаются отдельные объекты и записываются в переменные. Надо просто знать этот момент, вот и всё.
Получается так что ты пытаешься ссылаться на объект записанный в переменную, при этом сам объект ты не создаёшь, но думаешь что он там есть по-умолчанию. А реальность такова, что в переменной нет значения, и ты тыкаешь в пустую позицию и ничего не получаешь оттуда.
...и, если не ошибаюсь, вывод текста со сбитием координат не вывадит конкретный кусок текста в указанных координатах, а просто смещает весь текстовый блок к этому положению (т.е. таким образом его можно полностью вывести за экран).
Хз. У меня есть карта в которой за 10 лет очень много изменений было произведено, и в том числе это пересоздаваемые абилки и описания к ним... Я сейчас ради интереса вытащил оттуда *.wts и вижу в нём странный лимит в 9999 строк (т.е. это последняя запись, хз чем это обусловлено). При этом проглядывая бегло сами строки - не могу найти ничего из того что было окончательно удалено из РО. Каждая строка на которой останавливаюсь - используется в предмете, абилке, юните, баффе (даже если это очень старый и уже давно забытый объект в РО, но он всё ещё там имеется).
Врядли ты найдёшь то, на что ссылается этот адрес.
Лучше скинь сюда текстовый файл с этим фаталом.
Мб кто посмотрит его и подскажет что (но это не факт).
Создай два триггера, первый на вход юнита в область, второй на ввод сообщения в чат
Первый триггер - юнит вошёл в область XXX, условие - юнит является героем или что-то типа того (что б нельзя было чем-угодно туда забрести). Действия - включить второй триггер, записать вошедшего юнита в переменную (например set QuestHero[X] = юнит триггера, при этом "X" - это номер игрока владеющего этим юнитом).
Второй триггер - игрок пишет сообщение в чат, тут ставишь если/тогда/иначе, а в нём два основных условия: Первое - юнит записанный в переменную QuestHero[X] находится в пределах области XXX, второе - сравнение строк: "введённое в чат сообщение" равно "нужное_слово". Тогда отключаешь ОБА триггера (что б больше никто не мог вводить ответ, и никто не мог опять включить 2й триггер войди в область XXX), и создаёшь нужный предмет...
Сергей45, дело в том, что когда ты ставишь юнита на карте, то при сохранении в скрипт карты добавляется кусок, который на старте игры именно в этих координатах создаст именно этого юнита, с указанным количеством здоровья, маны, уровнем, и предметами (если есть инвентарь).
Для тебя это просто "нажал, поставил, в игре он есть". На деле же - он создаётся отдельным куском скрипта (и это нормально).
Когда ты открываешь на юните (в редакторе) вкладку с выпадающими предметами, то там можно указать выпадающие предметы и их шанс при этом. Что происходит на самом деле? - в скрипт игры вшивается кусок, который регистрирует событие смерти этого юнита (а так же событие получения над ним контроля, если его захватят то предмет тоже выпадает). Умирая этот юнит пройдёт несколько простых проверок, и дальше под ним будут созданы предметы (из списка).
Список формируется в момент смерти юнита!
Когда юнит умирает, берётся глобальный список (общий), и в нём производится очистка. После этого в него добавляются предметы и числа (т.е. шанс). После этого особая хитрая функция выбрасывает случайное число и получает по нему один из предметов (записанных ранее в список).
Готово. Именно такова суть работы базового дропа предметов.
Дальше тебе надо используя событие смерти юнита, сделать проверку на его тип, и создать нужный предмет под ним (но это будет работать в 100% случаев). Если ты хочешь добавить к этому шанс, то можно просто дополнительно прикрутить выбрасывание случайного числа (например от 1 до 100), и если оно меньше некоего другого числа (например 40), то только тогда создаёшь предмет (это будет 40%-й шанс на дроп).
А вот если тебе надо сделать хитрее, например 100% что предмет выпадет, и из них 20% что это будет кольцо на +3, и остальные 80% что это будет кольцо на +2, тогда тебе придётся добавить ещё несколько проверок, и их число будет рости от количества этих вариантов дропа.
Если ты делаешь всё на 1.26 и у тебя есть JNGP, то ты можешь сразу использовать добавленные в GUI функции для работы со списком:
call RandomDistReset() очистка списка
call RandomDistAddItem(ID,X) добавление предмета ID с шансом X (число от 0 до 100)
set itemID = RandomDistChoose() получение случайного ID из списка, за счёт шанса
Первые два - на самом дне списка действий категории "Предмет" Третий - указывается вместо типа предмета, при его создании (тоже есть в списке)
Если у тебя нет возможность использовать JNGP (например из-за версии патча), тогда ты можешь просто на прямую обращаться к этим функциям (если, конечно, они не изменились). Но для этого тебе придётся чуть-чуть обрести понимания в том как работает Jass (и CS).
Вручную вложенные шмотки точно так же прописываются в скрипте карты, на конкретных указанных юнитов. Самый оптимальный вариант - перевести работу на всех подходящих юнитов (сделать что-то вроде перезаписи для новых юнитов, раз они ресаются), но для этого надо хотя бы понимать что ты делаешь.
Самое простое для тебя наверно будет вариант с написанием своей системы дропа предметов (или чего-то более простого), которая будет учитывать только тип юнита и ещё какие-то условия.
Yury13, я не до конца понимаю как это у тебя должно выглядеть, НО...
Всегда остаётся такой простой вариант - отлова ВСЕХ приказов для этого юнита, и их сброс. И как это будет работать? да?
При этом если ты хочешь отдать триггерный приказ - ты отключаешь триггер (или маркируешь юнита), отдаёшь ему нужный приказ (мб записываешь приказ, если это необходимо, как и цель приказа, т.д.), и снова включаешь этот триггер на отлов приказов (либо демаркируешь юнита).
В итоге - все попытки отдать ему приказ кроме как твоим специальном триггером будут стопиться и повторять предыдущий приказ. Да, могут быть косяки если юнит не так прост, как тот же футман, но всё же - вариант простой и рабочий.
с таймерами на 1.26 не работает автоматическое увеличение размерности как с другими переменными
Да, там не работает "автоматическое увеличение размерности",
т.к. такого механизма там (в игре) впринципе НЕТ...
И это свойственно для всех переменных которые хранят объекты,
которые создаются при инициализации карты (ибо так задумано). Создать их сразу и дать ими пользоваться.
Почему так?
Это не касается юнитов, потому что в них ты будешь записывать конкретных имеющихся на карте юнитов (тех, которые тебе нужны). А вот для таймеров обычно всё происходит по другому - ты не создаёшь новые таймеры, а просто запускаешь уже имеющийся в переменной. Откуда он там? - он был создан при инициализации карты, в том количестве, в котором ему была указана подсказка на генерацию (она же - "размерность массива"). Это так же касается и окон таймеров, и групп (отряд), и групп игроков, и много чего ещё...
Запускаешь нужный тебе таймер, создаёшь конкретно для него окно, и записываешь это окно в нужную переменную (например с таким же номером как и у таймера, но это не критично, это лишь пример того "как в гуях делать не предусмотрено, но мы всё же лет 10-15 уже так делаем").
Его там и не было никогда, поэтому делая кастомные ТП из стандартного всегда появлялась эта проблема. Что в свою очередь приводило либо в забиванию на данную проблему, либо к созданию своего ТП (полностью триггерного).
Т.е. ты хочешь сказать что абилки находящиеся в спеллбуке и "запермоменченные" - всё равно пропадают при морфе? Этого не должно быть. Я проверял это на личном примере, давно, поэтому и говорил с полной уверенностью что это должно работать так, как я описал.
У меня был герой типа Тролля Варлорда в доте, 1й скилл это морф друида-медведя, он делал героя воимном с ближним либо дальним боем. При этом если я давал ему скрытый спеллбук с абилками внутри (кольцо защиты на -4 армора и аура замедления -20% MS), который накладывал на героя бафф замедления и ослабления защиты (это был эффект другого скилла, временный, дебафф типа). И вот 1м скиллом Тролль мог спокойно скинуть с себя спеллбук и его содержимое, т.к. дополнительные абилки просто пропадали. Пермоментность для спелбука и его внутрянки помогли исправить эту проблему.
Далее я уже не использовал для этих целей спеллбуки, а делал иконки способностей сразу скрытыми с панели приказов... это было очень давно.
ПС. Давать спеллбук после найма (чтобы он сам пропадал после морфа) героя нельзя, ибо в этом случае, если герой не успел или не захотел выбрать талант, то у него пропадает такая возможность после морфа.
Делать нужно именно так. И что бы у тебя не было здесь ошибки, тебе нужно каким-либо образом обозначить то, что у героя есть непотраченный талант. Т.е. ты будешь давать герою спеллбук после морфа, если у него есть доступные очки талантов.
И ещё кое-что: если ты триггерно даёшь спеллбук и пермоментишь его (тоже триггерно), то после морфа он не пропадаёт, а если ты его отнимаешь - он не возвращается (т.е. нету лишних ненужных появлений/исчезновений абилки).
А так же смотри что бы спеллбук не остался пустым, решается это пермоментом абилок внутри спеллбука.
Ред. Extremator
» Администрация XGM / здраствуйте как привязать акк к сайту ?
» WarCraft 3 / Триггерный Спелл
Мне показалось это логичным и я решил сделать проверку...
» WarCraft 3 / Как сделать инком на основе пассивной способности?
При этом юнит должен иметь абилку "пассажир"
» WarCraft 3 / не стартует таймер
Ты его создаёшь и удаляешь своевременно.
» WarCraft 3 / Увеличение карты
» WarCraft 3 / не стартует таймер
» WarCraft 3 / Проблемы с переменной force 2
» WarCraft 3 / Центрирование текста
» WarCraft 3 / Изменить путь модели юнита напрямую через MPQ
Поменя модель футмана в игре? Или поменять модель конкретному юниту? (в РО)
» WarCraft 3 / Триггерный Спелл
Юнита-инициатора ты при таком ивенте всё равно не потеряешь.
Ред. Extremator
» WarCraft 3 / Дополнительные типы тайлов почвы
Ред. Extremator
» WarCraft 3 / Нужна помощь
» WarCraft 3 / Нужна помощь
*.w3a - очень много абилок.
» WarCraft 3 / Глобальные переменные и их количество
Ред. Extremator
» WarCraft 3 / Подскажите, на что ссылается этот адрес в памяти?
Лучше скинь сюда текстовый файл с этим фаталом.
Мб кто посмотрит его и подскажет что (но это не факт).
» WarCraft 3 / Загадки со статуями...
» WarCraft 3 / Как сделать дроп итемов из постоянно респаунящихся крипов?
На деле же - он создаётся отдельным куском скрипта (и это нормально).
Третий - указывается вместо типа предмета, при его создании (тоже есть в списке)
» WarCraft 3 / Как сделать дроп итемов из постоянно респаунящихся крипов?
» WarCraft 3 / Запрет выбора
Всегда остаётся такой простой вариант - отлова ВСЕХ приказов для этого юнита, и их сброс.
И как это будет работать? да?
При этом если ты хочешь отдать триггерный приказ - ты отключаешь триггер (или маркируешь юнита), отдаёшь ему нужный приказ (мб записываешь приказ, если это необходимо, как и цель приказа, т.д.), и снова включаешь этот триггер на отлов приказов (либо демаркируешь юнита).
Ред. Extremator
» WarCraft 3 / Как удалить окно таймера
т.к. такого механизма там (в игре) впринципе НЕТ...
которые создаются при инициализации карты (ибо так задумано).
Создать их сразу и дать ими пользоваться.
- sun9-72.userapi.com/c205816/v205816659/99502/00OL4Roexd4.jpg
- sun9-7.userapi.com/c205816/v205816659/9955a/2PC5u7biOww.jpg
» WarCraft 3 / Эффект телепортации Reforge
» WarCraft 3 / Способности в спеллбуке пропадают при морфе
» WarCraft 3 / Глобальные переменные и их количество
Забей кароче на их число, лишь бы они работали правильно.
» WarCraft 3 / Спеллбук и морф
» WarCraft 3 / Способности и алгоритмы на заказ
Можешь попробовать его поискать.
Либо взять и посмотреть как работает это...