Собственно первая часть скриптов, она полностью посвящена юнитам.
CreateUnit takes player id, integer unitid, real x, real y, real face returns unit - создаем юнита
KillUnit takes unit whichUnit returns nothing - убивает юнита с анимацией смерти RemoveUnit takes unit whichUnit returns nothing - удаляет юнита
SetUnitX takes unit whichUnit, real newX returns nothing - устанавливает Х координату юнита SetUnitY takes unit whichUnit, real newY returns nothing - устанавливает У координату юнита SetUnitPosition takes unit whichUnit, real newX, real newY returns nothing - устанавливает позицию юнита
SetUnitOwner takes unit whichUnit, player whichPlayer, boolean changeColor returns nothing - устанавливает владельца юнита SetUnitColor takes unit whichUnit, playercolor whichColor returns nothing - устанавливает цвет юнита
SetUnitLookAt takes unit whichUnit, unit lookAtTarget returns nothing - устанавливает взгляд юнита на другого юнита SetUnitLookAtPoint takes unit whichUnit, int direction returns nothing - устанавливает взгляд юнита по направлению
PauseUnit takes unit whichUnit, boolean flag returns nothing - делает юнита не активным, не выделяемым, не контролируемым, никакие действия юнит не выполняет IsUnitPaused takes unit whichUnit returns boolean - проверка на активyость
SelectUnit takes unit whichUnit returns nothing - выделяет юнита
GetUnitX takes unit whichUnit returns real - возвращает координату х GetUnitY takes unit whichUnit returns real - возвращает координату у GetUnitLoc takes unit whichUnit returns location - возвращает точку GetUnitFacing takes unit whichUnit returns real - возвращает напрвление взгляда GetOwningPlayer takes unit whichUnit returns player - возвращает владельца юнита GetUnitTypeId takes unit whichUnit returns integer - возвращает тип юнита
IsUnitInGroup takes unit whichUnit, group whichGroup returns boolean - возвращает находится ли юнит в определенной группе IsUnitOwnedByPlayer takes unit whichUnit, player whichPlayer returns boolean - возвращает принадлежит ли юнит определнному игроку IsUnitAlly takes unit whichUnit, player whichPlayer returns boolean - возвращает союзный ли юнит выбранному игроку IsUnitEnemy takes unit whichUnit, player whichPlayer returns boolean - возвращает враг ли юнит выбранному игроку IsUnitFogged takes unit whichUnit, player whichPlayer returns boolean - возвращает скрыт ли туманом войны для выбранного игрока IsUnitSelected takes unit whichUnit, player whichPlayer returns boolean - возвращает выбран ли юнит игроком IsUnitType takes unit whichUnit, unittype whichUnitType returns boolean - возвращает того ли типа юнит IsUnitInRange takes unit whichUnit, unit otherUnit, real distance returns boolean - возвращает находится ли юнит на определеннном расстоянии от другого юнита IsUnitInRangeXY takes unit whichUnit, real x, real y, real distance returns boolean - возвращает находится ли юнит на определенном расстоянии от ху IsUnitInRangeLoc takes unit whichUnit, location whichLocation, real distance returns boolean - аналогично только для точки
IssueImmediateOrder takes unit whichUnit, string order returns boolean - отдать безтаргетный приказ IssueImmediateOrderById takes unit whichUnit, integer order returns boolean - аналогично IssuePointOrder takes unit whichUnit, string order, real x, real y returns boolean - отдать точечный по ху приказ IssuePointOrderLoc takes unit whichUnit, string order, location whichLocation returns boolean - отдать точечный приказ IssuePointOrderById takes unit whichUnit, integer order, real x, real y returns boolean - аналогично IssuePointOrderByIdLoc takes unit whichUnit, integer order, location whichLocation returns boolean - аналогично IssueTargetOrder takes unit whichUnit, string order, widget targetWidget returns boolean - таргетный приказ IssueTargetOrderById takes unit whichUnit, integer order, widget targetWidget returns boolean - аналогично
GetUnitCurrentOrder takes unit whichUnit returns integer
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Спасибо! Я в тексте прокомментировал. С первой половиной согласен, а со второй надо смотреть, так как местами это дублирование, а местами сильное вдавание в детали. Подновил список скриптов на страничке согласно твоим предложениям: http://code.google.com/p/castlesand/wiki/MissionScripts
Quote (Jery)
CreateUnit годится ) KillUnit(UnitId) - убивает юнита с анимацией смерти, годится, только про Id надо подумать, как поудобнее устроить это все RemoveUnit(UnitId) - удаляет юнита, годится
GetUnitPosition, отдельно х и у не нужны, а вот так - годится SetUnitPosition, и эта тоже годится
GetUnitOwner, годится SetUnitOwner - неуверен что нужно, но сделаю SetUnitColor, - не получится, цвет четко связан с владельцем, предедущей команды хватит.
SetUnitDirection SetUnitDirection SetUnitDirectionAtPoint, добавлю пока 1й вариант
PauseUnit, мне кажется лишнее, как это пригодится? IsUnitPaused
SelectUnit, для каких целей?
GetUnitType годится
Большинство из того что ниже - либо дублирует то что выше (IsUnitOwnedByPlayer(66,Х) == GetUnitOwner(66) = Х), либо слишком микроменеджмент (IsUnitInRangeLoc), который мне кажется для скриптов не нужен.
IsUnitInGroup takes unit whichUnit, group whichGroup returns boolean - возвращает находится ли юнит в определенной группе IsUnitOwnedByPlayer takes unit whichUnit, player whichPlayer returns boolean - возвращает принадлежит ли юнит определнному игроку IsUnitAlly takes unit whichUnit, player whichPlayer returns boolean - возвращает союзный ли юнит выбранному игроку IsUnitEnemy takes unit whichUnit, player whichPlayer returns boolean - возвращает враг ли юнит выбранному игроку IsUnitFogged takes unit whichUnit, player whichPlayer returns boolean - возвращает скрыт ли туманом войны для выбранного игрока IsUnitSelected takes unit whichUnit, player whichPlayer returns boolean - возвращает выбран ли юнит игроком IsUnitType takes unit whichUnit, unittype whichUnitType returns boolean - возвращает того ли типа юнит IsUnitInRange takes unit whichUnit, unit otherUnit, real distance returns boolean - возвращает находится ли юнит на определеннном расстоянии от другого юнита IsUnitInRangeXY takes unit whichUnit, real x, real y, real distance returns boolean - возвращает находится ли юнит на определенном расстоянии от ху IsUnitInRangeLoc takes unit whichUnit, location whichLocation, real distance returns boolean - аналогично только для точки
IssueImmediateOrder takes unit whichUnit, string order returns boolean - отдать безтаргетный приказ IssueImmediateOrderById takes unit whichUnit, integer order returns boolean - аналогично IssuePointOrder takes unit whichUnit, string order, real x, real y returns boolean - отдать точечный по ху приказ IssuePointOrderLoc takes unit whichUnit, string order, location whichLocation returns boolean - отдать точечный приказ IssuePointOrderById takes unit whichUnit, integer order, real x, real y returns boolean - аналогично IssuePointOrderByIdLoc takes unit whichUnit, integer order, location whichLocation returns boolean - аналогично IssueTargetOrder takes unit whichUnit, string order, widget targetWidget returns boolean - таргетный приказ IssueTargetOrderById takes unit whichUnit, integer order, widget targetWidget returns boolean - аналогично
GetUnitCurrentOrder takes unit whichUnit returns integer
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
Селект и пауза нужна, чтобы если вдруг мы возьмем и будем перемещать юнита скриптами (длинный цикл передвижения все правее и правее) нам нужно его заблокировать, чтобы он не делал никакой непредсказуемой ерунды во время движянеия (не сдвинулся на клетку в низ, не атаковал или не убил кого), а после паузы нужно дать контроль игроку обратно и выделить его. Кстати стоит еще добавить что-то типа IsUnitSelected(whichUnit) return boolean - проверяет в фокусе ли данный юнит
GetUnitHungryLevel(whichUnit) return int - возвращает уровень сытости SetUnitHungryLevel(whichUnit, hungry) return nothing - устанавливает уровень сытости
Пока по юнитам вроде все, я знаю что там половина команд по смыслу дублирована, выбирай сам как будет удобнее.
Через некоторое время выложу скрипты для игроков, тумана войны, групп, таймеров и возможно кое чего еще. В принципе это все копипаст с редактора варкарфта переложенный на реалии КаМ(вырезано все что связано с героями, опытом, спосбностями и тд).
Насколько сложно сделать модификацию ландшафта по ходу игры, модификацию проходимости и карты высот. «Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Сообщение отредактировал Jery - Суббота, 01.12.2012, 19:19
Jery, хотелось бы обсудить идеологию использования команд (селект, пауза, фокус и т.п.) написал в аську.
Про голод - принял.
Изменения ландшафта - не думаю что получится, надо обсуждать в комплексе с реальным применением этих дел ) Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
constant unitevent EVENT_UNIT_TRAIN_START - началась тренировка юнита constant unitevent EVENT_UNIT_TRAIN_CANCEL - отменена тренировка constant unitevent EVENT_UNIT_TRAIN_FINISH - закончена тренировка constant unitevent EVENT_UNIT_CHANGE_OWNER - юнит сменил владельца constant unitevent EVENT_UNIT_FIND_HOME - нашел дом constant unitevent EVENT_UNIT_LOST_HOME - потерял дом constant unitevent EVENT_UNIT_HUNGRY - стал голодным constant unitevent EVENT_UNIT_GET_FOOD - получил еды(повысил сытость) «Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Сообщение отредактировал Jery - Воскресенье, 02.12.2012, 10:14
Jery, Вижу что большинство скриптов нацелено на индивидуальное управление, в то врмея как КаМ игра более стратегическая, надо это как-то учесть. То есть с такими скриптами можно сделать миссию с 3-4 "героями" и тесным наблюдением их жизни. В то же время КаМ это игра массовая - тут управляют городами и армиями.
Думаю стоит сделать одну-две пробных миссии с "героями" и посмотреть что из этого получится, может быть направление тупиковое. Для этого надо сюжет и базовый список команд. Просто не хочется делать 50 команд которые вдруг никому не нужны будут. Давай сделаем 12 и посмотрим на реакцию. Можно даже сделать, записать на ютуб и выложить, до оф.релиза. Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.