Рассуждения: Разбор скриптовых команд
#1
002 Add ( flA : float , flB : float ): float
Возвращает сумму чисел flA и flB.

003 AddLoot ( fl : float , strA: string , strB: string )
Назначение пока неизвестно. Строка strA, видимо, обозначает партию.

004 AddMob ( strMob : string )
Загружает .mob-файл strMob из подкаталога MAPS. Имя файла указывается с расширением.

005 AddObject ( grp : group , obj : object )
Назначение пока неизвестно.

006 AddRectToArea ( idArea : float , x1: float , y1: float , x2 : float , y2 : float )
Добавляет к области idArea прямоугольник c диагональю(x1,y1)-(x2,y2). (информация Чейза)
Что такое "область" и зачем к ней что-то добавлять, пока неясно.

007 AddRoundToArea ( idArea : float , x : float , y : float , rad : float )
Добавляет к области idArea круг радиуса rad с центром в точке (x,y).
(информация Чейза)
Что такое "область" и зачем к ней что-то добавлять, пока неясно.

009 AddUnitToServer ( intName : string , typeUnit : string , visName : string , x : float , y : float , z : float)
Добавляет на карту юнит типа typeUnit с отображаемым названием visName и внутренним именем intName в точку с горизонтальными координатами (x, y) на высоте z над поверхностью. Если в точке (x,y) находится водоём (озеро лавы), то левитирующие юниты устанавливаются на данной высоте относительно поверхности воды (лавы), а остальные - относительно поверхности дна. В дальнейшем юнит всегда будет перемещаться на данной высоте относительно твёрдой поверхности или поверхности воды (для левитирующего). В игре все юниты установлены с параметром z=0.
Юниты добавляются в текстурированном виде, если они относятся к группе помощников в таблице Pers базы данных игры, а остальные - без текстур. Некоторые параметры нового юнита фиксированы: Здоровье - 1, Запас сил - 0, Броня - 0. Остальные определяются значением typeUnit, причём для юнитов, не относящихся к помощникам, эти параметры будут такими же, как и в игре.

015 AttachParticles ( idSource : float , objUnit : object)
Присоединяет источник частиц с идентификатором idSource к юниту objUnit. Источник будет двигаться c постоянным смещением от юнита. Это смещение равно координатам (x , y , z), взятым в процедуре CreateParticleSource при создании данного источника.
Пример:
@CreateParticleSource(1234,1,-2,2,-1,"fire")
@AttachParticles(1234, GetLeader())

Перевёрнутый вверх тормашками огонь радиусом 1 будет перемещаться около Зака на расстоянии 1 по X, -2 по Y и 2 по Z.

016 AttachParticleSource ( idSource : float , idUnit : float )
Присоединяет источник частиц с идентификатором id к юниту c идентификатором idUnit. Источник будет двигаться c постоянным смещением от юнита. Это смещение равно координатам (x , y , z), взятым в процедуре CreateParticleSource при создании данного источника. Пример см. выше.

031 CreateParticleSource ( idSource : float , x : float , y : float , z : float , R : float , strType : string )
Создает источник частиц типа strType с радиусом R и идентификатором idSource в точке (x,y,z). При отрицательном значении радиуса источник частиц переворачивается по вертикали. На данный момент известны следующие типы источника частиц (в процедуре пишутся в кавычках):
transform
portalstar
portal
mushroom
nuke
geyser
poisonfog
smoke
fire
lightningblast
fireblast
campfire
fireball
firearrow
teleport


038 DeleteParticleSource ( idSource : float )
Удаляет источник частиц с идентификатором idSource.

051 GetAIClass ( objUnit : object ): float
Возвращает тип AI для юнита objUnit. Что обозначает этот тип, пока неясно. Но для несуществующего юнита результат всегда -1 (минус один), а для Зака - 3 (три), как, например, для орков в Предгорьях и для скелетов в МГ.

052 GetBSZValue ( x : float, y : float ): float
Возвращает высоту местности в точке с горизонтальными координатами (x,y). Отличие от команды GetZValue в том, что если в точке (х,у) находится незамёрзший водоём (озеро лавы), то выводится высота поверхности воды (лавы), а не дна. В остальных случаях выводимые значения совпадают.

053 GetDiplomacy ( nPlayerA : float , nPlayerB : float ): float
Возвращает тип дипломатии: кем является игрок номер nPlayerA для игрока номер nPlayerB. Возможные значения:
1 - союзник
0 - нейтрал
-1 - враг

054 GetFutureX ( objUnit : object, flTime : float ): float

055 GetFutureY ( objUnit : object , flTime : float ): float

Экстраполируют координаты х и y, соответственно, юнита objUnit через время flTime, основываясь на его текущем направлении движения и скорости.
Время flTime измеряется в единицах, равных 1/15 секунды (на нормальной скорости игры).
Если точка назначения юнита близка к текущей позиции, то экстраполяция с достаточно большим временем даёт координаты точки назначения. При большИх значениях flTime (порядка 200) функции перестают выдавать правильный результат.

056 GetLeader (): object
Возвращает объект юнита - лидера команды. В сингле это будет Зак, а в мультиплеере - действующий персонаж игрока.

057 GetLeverState ( objLever : object ): bool
Возвращает истину, если "рычаг" objLever "включен", и ложь в противном случае.
(Данные CHaSE, как проверить, не знаю.)

058 GetLootItemsCount ( nPlayer : float ): float
Возвращает количество поднятых трупов с предметами (не с деньгами) на текущей игровой зоне игроком номер nPlayer.
В мультиплейере с самого начала зоны это число может быть не нулём, поэтому там ситуация не вполне ясна.

059 GetMercsNumber ( nPlayer : float ): float
Возвращает число наемников у игрока номер nPlayer (не включает лидера).

060 GetMoney ( nPlayer : float ): float
Возвращает количество денег у игрока номер nPlayer.

061 GetObjectID ( objUnit : object ): float
Возвращает идентификатор объекта objUnit.

211 GetObject ( idObject : float ): object
Возвращает экземпляр object для объекта с идентификатором idObject.
При больших значениях idObject (например, у героя он немного больше миллиарда) не работает.

212 GetObjectByID ( strID : string ): object
Возвращает экземпляр object для объекта с идентификатором idObject, еcли строка strID имеет вид "idObject".

213 GetObjectByName ( strName : string ): object
Возвращает экземпляр object для объекта с именем strName.

062 GetPlayer ( objUnit : object ): float
Возвращает номер игрока для юнита objUnit.
Персонажи, управляемые человеком, всегда относятся к игроку 0.

063 GetPlayerUnits ( nPlayer : float ): group
Возврашает группу юнитов игрока номер nPlayer.

064 GetUnitOfPlayer ( nParty : float , nUnit : float ): object
При nParty=0 возвращает экземпляр object для юнита номер nUnit команды игрока-человека.
Юнит номер 0 - это Зак, члены команды имеют номера 1 и 2. В мультиплейере юнит номер 0 - свой персонаж.

065 GetWorldTime (): float
Возвращает текущее время внутриигроых суток (в часах).

066 GetX ( objUnit : object ): float

067 GetY ( objUnit : object ): float

068 GetZ ( objUnit : object ): float

Возвращают текущие координаты x,y и z, соответственно, юнита objUnit.

069 GetZValue( x : float , y : float ): float
Возвращает высоту твёрдой поверхности земли (независимо от наличия над ней слоя воды или лавы) в точке с горизонтальными координатами (x,y).
(Но по команде filter graphics 1 всегда выводится чуть меньшая третья координата.)
Про отличия от GetBSZValue см. выше.

070 GiveDexterity ( objUnit : object , flAmount : float )
Добавляет юниту objUnit flAmount пунктов ловкости. Работает только вне магазина. Если objUnit - вражеский юнит, то единственным эффектом будет то, что у него обнулится здоровье всех частей тела и максимальный уровень энергии. Впоследствии юнит может быть вылечен или регенерирует сам.

071 GiveIntelligence ( objUnit : object , flAmount : float )
Добавляет юниту objUnit flAmount пунктов разума. Работает только вне магазина. Если objUnit - вражеский юнит, то единственным эффектом будет то, что у него обнулится здоровье всех частей тела и максимальный уровень энергии. Впоследствии юнит может быть вылечен или регенерирует сам.

072 GiveItem ( fl : float , strItem : string )
При fl=0 помещает в обоз предмет, описываемый строкой strItem.

Предмет описывается строкой одного из следующих форматов:
"<название чертежа>.<название материала>[[ <описание спелла>]]" - для доспеха или оружия (описание спелла пишется в квадратных скобках, и эта часть строки необязательна)
"instruction weapon.<название чертежа оружия>" - для чертежа оружия
"instruction armor.<название чертежа доспеха>" - для чертежа доспеха
"instruction quick item.<название чертежа жезла>" - для чертежа жезла
"prototype.<название заклинания>" - для основы спелла
"rune.<название руны>" - для руны
"material.<название материала>[[<количество>]] " - для материала (количество пишется в квадратных скобках, и эта часть строки необязательна)
Примеры:
"bone spear.dragon green bones" - копье из кости зеленого дракона
"crystal crossbow.diamond[weak{it;d2;d2;m2;m2;m2}]" - алмазный арбалет с ослаблением
"material.steel[25]" - 25 кусков стали

076 GiveStrength ( objUnit : object , flAmount : float )
Добавляет юниту objUnit flAmount пунктов силы. Работает только вне магазина. Если objUnit - вражеский юнит, то единственным эффектом будет то, что у него обнулится здоровье всех частей тела и максимальный уровень энергии. Впоследствии юнит может быть вылечен или регенерирует сам. Персонаж из команды тоже теряет часть здоровья при использовании этой команды (но не умирает, даже если оно в результате становится нулём).

По мере проверки буду добавлять в это сообщение описания новых команд.

[ 22 апреля 2002: Изменил: Holy Warrior ]</p>
Ответ
#2
Nivea

Ты неправ. Время - это любое вещественное число, а не только целое из диапазона 0..23. Поэтому установить его можно почти с любой точностью.
Ответ
#3
Vasya
Любое-да но в диапазоне (0..24) я же тестировал.
Это ж тебе не язык программирование - здесь
имеются ввиду часы.
Ответ
#4
Я тоже тестировал. У меня можно поставить, например, 120.437 и будет немного за полночь. Там идёт обычное приведение по модулю 24 (причём не только для целых значений).

[ 26 января 2002: Изменил: Vasya ]</p>
Ответ
#5
Я посмотрел повнимательнее…. Молодцы! Очень хорошо.
Smile
Но все же у вас обеих должен быть единый стиль. И мы его возьмем за образец.
Ответ
#6
sun
Сначала надо сделать его единым, а потом уже брать за образец. Wink

Напиши в другой теме, каким же именно должен быть стиль (на примере любой команды).
Ответ
#7
Vasya.
У тебя написано очень хорошо и читабельно. Главное что, написанное тобой будет очень легко разобрать, так как всем переменным указаны признаки через знак: «:» и все написано в одном стиле.
Я собирался представить записи команд как релятивные списки: отдельно формулы и отдельно примечания и прочее, связанные по полю код. Но в этом пока нет необходимости. Твои примечания это просто поле номер 3.
У меня ещё есть спорные вопросы, но я не хочу настаивать – я буду только предлагать. Я напишу в теме инструкция….
Ответ
#8
команды работы с партией.
Все команды работы с партией выполняются при вызове команды RedeployParty(CommandGroupId : float)
Первый аргумент всех комманд - это идентификатор группы команд. При вызове команды
RedeployParty выполнятся только те команды, которые имеют соответствующий CommandGroupId.

@AddUnitToParty(CommandGroupId : float, CommandString : string, UnitType : string)
Добавляет юнит в партию.
CommandString - данная строка говорит, "кого куда добавить". Имеет вид PartyName::UnitProperty,
где PartyName - название партии, куда добавлять,
UnitProperty - "тип" добавляемого юнита.
Бывает hero - добавляется герой
mercN(N-номер(int)) -добавляется наёмник.
пример
@AddUnitToParty(0,"HeroAlone::Hero", "Human Hero Hadagan")
@AddUnitToParty(0,"merc1","Human Mercenary Warrior")
примечание: основная партия, вероятно имеет название "", поэтому и "::" не указывается.

@CopyStats( CommandGroupId : float, CommandStringSrc : string, CommandStringDest : string)
Копирует характеристики юнита.
CommandStringSrc - строка вида CommandString, описывающая юнита, чьи характеристики копируются
CommandStringDest - строка вида CommandString, описывающая юнита, куда характеристики копируются
пример
@CopyStats(0, "Hero", "HeroAlone::Hero" )

@CreateParty(CommandGroupId : float, PartyName : string)
Создаёт новую партию.
PartyName - название партии. используется в следующих командах.
пример
@CreateParty(0,"HeroAlone")


@RemoveParty(CommandGroupId : float, PartyName : string)
Удаляет партию
PartyName - имя партии
пример
@RemoveParty(0,"") - удаляет основную партию. Игрок остаётся без героя.

@removeunitfromparty(CommandGroupId : float,CommandString : string)
Удалить юнита из партии.
CommandString - строка, описывающая юнита, которого надо удалить
пример
@removeunitfromparty(0,"merc1")
примечание: пытался данной командой из партии убрать Хадора. Убрался только в посёлке.

@redeployparty(CommandGroupId : float)
Эта команда, как я понял, выполняет все команды, связанные с партиями.
пример
@redeployparty(0)

@SetCurrentParty(CommandGroupId : float, PartyName)
Устанавливает партию текущей. То есть, этой партией будет управлять игрок.
PartyName - имя партии
пример
@SetCurrentParty(0,"HeroAlone")


А вот это я выдрал из какого-то моб`а. Так при прибытии на сусл наш герой оказывается голым и безоружным
@CreateParty(0,"HeroAlone")
@AddUnitToParty(0,"HeroAlone::Hero", "Human Hero Hadagan")
@CopyStats(0, "Hero", "HeroAlone::Hero" )
@SetCurrentParty(0,"HeroAlone")
@RedeployParty(0)

[ 27 января 2002: Изменил: Alexy III ]</p>
Ответ
#9
все верно верно но смысла выше 24 ставить нету
никакого Гут?
Ответ
#10
Но к синтаксису самой команды это отношения не имеет, ведь формально ограничений на параметр нет. А если ты пишешь, что время в часах, то, я думаю, каждый поймёт, что всего в сутках их 24. Wink Так что, я считаю, можно не писать об этом ограничении.
Ответ
#11
Я напишу вам инструкцию в новой теме. Давайте обсудим…. Пожалуйста.
Ответ
#12
А здесь я предлагаю удалить все сообщения, кроме первых двух, чтобы не засорять тему.
Ответ
#13
Нет!
Оставим эту тему как черновик -потом заведем новую у нас плезные диалоги
Ответ
#14
Пожалуйста, прекратите заниматься чепухой – «….аются числа >24 (уточнил Vasya)»

Больше никаких авторских прав, приседаний и реверансов!
Не важно кто уточнил, создал написал и т д.
НЕ ОБИЖАЙТЕСЬ!
Ответ
#15
AlexIII, Vasya, Nivea
Спасибо. Очень хорошо.
Давайте продолжайте в таком же духе…. Получается очень даже здорово. Через неделю обсудим детали….
Ответ
#16
Vasya ты пишешь
цитата:</font><hr>
009 AddUnitToServer ( str : string , typeUnit : string , nameUnit : string , x : float , y : float , height : float)
Добавляет на карту юнит типа typeUnit с отображаемым названием nameUnit, в точку с горизонтальными координатами (x, y) на высоте height над поверхностью. (В дальнейшем юнит всегда будет перемещаться на данной высоте.) Назначение первого параметра пока неизвестно, но он должен быть уникальным (при попытке добавить второй юнит с тем же значением str первый исчезает).
Юнит добавляется без текстур и со следующими параметрами: Здоровье - 1, Запас сил - 0, Броня - 0. Остальные параметры определятся значением typeUnit
<hr></blockquote>

Позволь мне внести некие уточнения:
первый параметр:
внутреннее имя sInternal (case-sensitive) (для идентификации в GetObjectByName()) по которому функция уникального кода получает ID
Пример:

@AddUnitToServer("365555","Human Mercenary Warrior","ASAA",23,195,0)
@addunitundercontrol(0, getobjectbyName("365555"))

В отличии от третего параметра:
sVisual-отображаемое(видимое) имя

И название Height - возможно лучше назвать Z
для полной строгости в едином принятом стиле ( XYZ) координаты юнита на карте.

....Юнит добавляется без текстур....
На самом деле
объекты персонажи добавляются полностю готовыми к употреблению если они относятся к группе помощников в таблице Pers базы данных игры.
Попробуй даже орка - он и то с текстурами будет.

[ 28 января 2002: Изменил: Nivea ]</p>
Ответ
#17
Nivea

Спасибо. С первым параметром я действительно не разобрался. Что касается последнего, это не вертикальная координата, а именно высота над поверхностью, которую юнит выдерживает впоследствии (например, кабан может летать по воздуху, а дракон - ползать по земле). В отличие от этого, в GetZValue (или по команде filter graphics on) получаем именно координату.

[ 29 января 2002: Изменил: Vasya ]</p>
Ответ
#18
Что-то подтормаживает процесс….
Давайте, хотя бы в день по одной процедуре разбирайте на каждого.
А то, как ни зайду и ничего.
:blink:
Ответ
#19
Мне кажется пора с терминологией юнитов завести дискуссию:
Предположительно игра имеет такую структуру:
Массив или коллекция(Игроки)// размер 9?
Элемент массива:
Игрок[индекс] //nPlayer-видно сам индекс
Рюкзак,а где обоз// Loot
Лидер - без него игроку нечего делать
Партия(наемники)// Party

Группа(сама по-себе) группа юнитов Group :
тоже типа коллекции юнитов

Вообщем кто-что надыбал давайте продолжим это обсуждение иначе вся наша работа на-смарку


Player
Примеры:
@SetPlayer(GetLeader(),9)//9? что такое 9 какой диапазон числа
@SetPlayer(Borka,0)
@SetPlayer(getobjectbyName("Nivea"),3)//3?
Инициализация игрока устанавливается лидер игрока и код игрока?

нужен эксперимент

GetPlayer
нужно попробовать GetPlayer-врагов
Какой плеер у врагов разных? То=же 0 Вряд-ли...
Ответ
#20
Нивеа, очень хорошо. Замечательно! Поддерживаю тебя на 100%
Я обдумаю и выскажусь по этой теме. На самом деле у меня есть некие собственные представления о структуре ПЗ. Я хочу предварительно обсудить их с моими программерами и вынести на форум некоторые домашние заготовки и статьи.

Вообще, меня очень огорчает, что на форуме сложилась нездоровая атмосфера всезнайства и укора. И отчасти в этом виновен я. Авторитарность и безошибочность наших заявлений, на сегодняшний день, губительна для будущего проекта. Так как интересные мысли или сомнительные догадки не высказываются прямо на форум из-за боязни быть выставленным на посмешище. Может возникнуть так, что скоро споры будут переходить на личности, а это вообще крах. Я с глубоким сожалением отношусь к тем, кто меня сейчас не понимает.
Обращаюсь ко всем:
Пожалуйста, не стесняйтесь задавать некомпетентные вопросы или давать сомнительные советы. Пусть вы не понимаете структуру ПЗ и никогда не пользовались скриптовыми командами, но наш совместный мозговой штурм поможет нам в этом разобраться.
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 7 Гость(ей)