Итак, господа, фишка такая: есть юнит-строитель, он - вот чудеса! - строит. Козырь заключается в том, что вначале строительства данный работник должен нафиг удаляться из игры. И вот тут возникает проблема - я никак не могу отследить юнита на том, что он зачал строительство какого-либо здания.
Пробовал через
Юнит начинает строительство
Триггеринг юнит равен "наш строитель"
Удалить триггеринг юнит из игры.
Как оказалось, эта конструкция работает не на юнита, который строит, а на то, что строится.
Есть какие предложения?

Принятый ответ

Steal nerves:
xgm.guru/p/100/195412?postid=359072#comment1 кто-то задавал такие вопросы. Сейчас в патче 1.26 нельзя определить строителя (только через костыли, и то это работать будет норм?!), но обещали завести в следующих патчах. Не знаю, есть ли там. В одном видосе рассказывали
можешь отслеживать:
  1. выдача приказа - Id-приказ - это rawcode. Так узнаем какое здание строится, и кто его строит, и где ее строит. Проверяем, чтоб приказ не изменился.
  2. проверяем через событие "юнит начинает строительство" - проверяем какой тип здания строится, и где строится.
А вот между этими двумя надо как-то связать
Извратился иначе. Дал строителю расу ночных эльфов. По сути, нужный эффект достигнут
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
11
6 лет назад
0
Вообщем, немного облегчу задачу. Исследования в данной области и лурканье по зарубежным сайтам дали вот такую интересную конструкцию:
Юнит получил приказ "цель-точка"
Отданный приказ равно "строить ферму"
Дальше уже можем делать с ordered unit что захотим. Беда в том, что юнит должен исчезать конкретно после начала постройки (Здание строится само, как у нежити). И вот тут мы опять возвращаемся к изначальному вопросу - как отловить что вот этот вот гадский юнит начал стройку? Можно задать таймер, по которому наш ордеред юнит исчезнет через некоторое время - беда в том, что если я захочу поставить постройку хер знает где, юнит не успеет добежать раньше, чем закончится таймер и исчезнет, так ничего и не начав :/
0
27
6 лет назад
Отредактирован MpW
0
xgm.guru/p/100/195412?postid=359072#comment1 кто-то задавал такие вопросы. Сейчас в патче 1.26 нельзя определить строителя (только через костыли, и то это работать будет норм?!), но обещали завести в следующих патчах. Не знаю, есть ли там. В одном видосе рассказывали
можешь отслеживать:
  1. выдача приказа - Id-приказ - это rawcode. Так узнаем какое здание строится, и кто его строит, и где ее строит. Проверяем, чтоб приказ не изменился.
  2. проверяем через событие "юнит начинает строительство" - проверяем какой тип здания строится, и где строится.
А вот между этими двумя надо как-то связать
0
11
6 лет назад
0
Steal nerves:
xgm.guru/p/100/195412?postid=359072#comment1 кто-то задавал такие вопросы. Сейчас в патче 1.26 нельзя определить строителя (только через костыли, и то это работать будет норм?!), но обещали завести в следующих патчах. Не знаю, есть ли там. В одном видосе рассказывали
можешь отслеживать:
  1. выдача приказа - Id-приказ - это rawcode. Так узнаем какое здание строится, и кто его строит, и где ее строит. Проверяем, чтоб приказ не изменился.
  2. проверяем через событие "юнит начинает строительство" - проверяем какой тип здания строится, и где строится.
А вот между этими двумя надо как-то связать
Извратился иначе. Дал строителю расу ночных эльфов. По сути, нужный эффект достигнут
Принятый ответ
0
15
6 лет назад
0
Юнит получил приказ "цель-точка"
Отданный приказ равно "строить ферму"
Дальше уже можем делать с ordered unit что захотим. Беда в том, что юнит должен исчезать конкретно после начала постройки (Здание строится само, как у нежити). И вот тут мы опять возвращаемся к изначальному вопросу - как отловить что вот этот вот гадский юнит начал стройку?

Легко, считаем по формуле расстояние от строителя до точки назначения строительства.;
function GetDistanceBetween takes real x1, real y1, real x2, real y2 returns real
return SquareRoot((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
endfunction
После чего делим путь на скорость движения работника, получаем время. Вот это время мы устонавливаем на таймер+1 секунду чтобы успел построить. По истечению таймера - удаляем работника.
0
11
6 лет назад
0
Легко, считаем по формуле расстояние от строителя до точки назначения строительства.;
function GetDistanceBetween takes real x1, real y1, real x2, real y2 returns real
return SquareRoot((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
endfunction
После чего делим путь на скорость движения работника, получаем время. Вот это время мы устонавливаем на таймер+1 секунду чтобы успел построить. По истечению таймера - удаляем работника.
Да, но у нас ведь могут быть модификаторы скорости бега. Впрочем, сейчас попробую
0
15
6 лет назад
0
orc01:
Легко, считаем по формуле расстояние от строителя до точки назначения строительства.;
function GetDistanceBetween takes real x1, real y1, real x2, real y2 returns real
return SquareRoot((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
endfunction
После чего делим путь на скорость движения работника, получаем время. Вот это время мы устонавливаем на таймер+1 секунду чтобы успел построить. По истечению таймера - удаляем работника.
Да, но у нас ведь могут быть модификаторы скорости бега. Впрочем, сейчас попробую
Так отлавливай текущую скорость, а не дефолтную.
Так же таймер не обязателен, можно дать работнику время жизни как у призывных юнитов. Если это в рамках твоего проекта эстетический приемлемо.
0
27
6 лет назад
Отредактирован MpW
0
DarkLigthing, ну это не совсем верно. Юнит вряд ли по прямой линий двигаться будет. Мб будет обегать вокруг ёлок и гор. Да, движение равномерное, но не прямолинейное. Хотя в TD-шках у строителей почти не бывает преград - делаем летающим, и все.
4
11
6 лет назад
4
Вообщем, для тех, кто будет извращаться в моём стиле, лайфхак:
Ставим расу строителя "Ночные Эльфы", а зданиям добавляем классификацию древа. Битте!
0
23
6 лет назад
0
а разве не проше с 2 события при постройке добавлем маркер юнит в массив что он строит и какой тип здание, и приказ ловим и сравниваем иесли завершил постройка и сверяем если есть значит он закончил работу и удаляем
2
12
6 лет назад
2
pro100master:
а разве не проше с 2 события при постройке добавлем маркер юнит в массив что он строит и какой тип здание, и приказ ловим и сравниваем иесли завершил постройка и сверяем если есть значит он закончил работу и удаляем
Каким образом это может быть проще, чем поменять два значения в РО?
Чтобы оставить комментарий, пожалуйста, войдите на сайт.