Список форумов
Гипат.org
Найдется место всем!


:: В чате сейчас никого нет
Разбор скриптовых команд.
Страницы 1, 2  След.
   Список форумов -> Все остальное
Автор
Сообщение
Vasya
Привратник


Пришел: 20.12.2001
Сообщения: 338
Откуда: Москва
Добавлено: 26 января 2002, 02:08 [?] [PM]   [«»]

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 - вражеский юнит, то единственным эффектом будет то, что у него обнулится здоровье всех частей тела и максимальный уровень энергии. Впоследствии юнит может быть вылечен или регенерирует сам. Персонаж из команды тоже теряет часть здоровья при использовании этой команды (но не умирает, даже если оно в результате становится нулём).

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

[ 01 февраля 2002: Изменил: Vasya ]

Nivea
Смерть гоблинов


Пришел: 21.12.2001
Сообщения: 266
Откуда: Samara
Добавлено: 26 января 2002, 04:18 [?] [PM] [M] [w]   [«»]

001 ActivateTrap(objTrap : object,flOnOff:float)

001 Включение(1)/Выключение(0) ловушки objTrap
Пример:
1.@ActivateTrap(GetObjectByName("Pyramid"),0)

2.GSSetVarMax( 0, "q.gz11k.q45ak.5", 2 )
// Квест: Раздобыть Священный Цветок Subobj:5 Отключить ловушку Subs: 8
ActivateTrap( DMT, 0 )
EraseQuestItem( 0, 39 )
GSSetVarMax( 0, "q.gz11k.q45ak.6", 1 )
// Квест: Раздобыть Священный Цветок Subobj:6 Подойти к Хранителю Subs: 8



Комментарий:
Запустить пока не получилось...

004 AddMob(strMobFileName : string)

004 Загружает .mob-файл strMob из подкаталога MAPS.
Имя файла указывается с расширением.
Комментарий:
В этих файлах в частности задаются юниты и их позиции на карте.
При загрузке файла юниты появляются на карте.
Именно таким образом в ПЗ реализуются засады - например, засада у главных ворот на сингл-карте
"Портал".

Пример:
AddMob( "Zone12Magess.mob" )
...
//"Zone12Magess.mob"
Sleep( 2 )
Magess = GetObjectByID( "1000094" )
AddObject( Magessa, GetObject( 1000095 ) )
AddObject( Magessa, GetObject( 1000096 ) )
AddObject( Magessa, GetObject( 1000094 ) )
...


005 AddObject(grp:group,objUnit : object)

005 Включает юнит objUnit в поименованную группу grp
Пример:
AddObject( TigerS, GetObject( 4218 ) )
AddObject( TigerS, GetObject( 4219 ) )
AddObject( TigerS, GetObject( 4220 ) )
AddObject( Workers, GetObject( 65 ) )
AddObject( Workers, GetObject( 66 ) )
AddObject( Workers, GetObject( 70 ) )


018 BlockUnit(objUnit : object, bfBlock : float)

018 Если bfBlock - истина, то блокирует юнит, лишая игрока возможности его передвигать и применять заклинания, в противном случае разблокирует его. См. также IsUnitBlocked().
Пример:
...
GSSetVarMax( 0, "FirstComing", 2 )
BlockUnit( GetObjectByName( "Hero" ) , 1 )
// Зак
...

CreateFX( 62, 62, 3, 10, 30, "Scenar.wav" )
Walk( GetObjectByName( "Hero" ) )
// Зак
MoveToPoint( GetObjectByName( "Hero" ) , 63, 66.8 )
// Зак
SleepUntilIdle( GetObjectByName( "Hero" ) )
// Зак
GSSetVar( 0, "StW", 1 )
SendStringEvent( 0, "briefing s1" )
...
GSSetVarMax( 0, "FrTP", 2 )
BlockUnit( GetObjectByName( "Hero" ) , 0 )
// Зак
...


020 CastSpellPoint ( strSpell:string , x1:float , y1:float , x2:float , y2:float )

020 Применяет спелл strSpell из точки (x1,y1) в точку (x2,y2).
В данной процедуре могут использоваться только спеллы, действующие на область. См. также задание спеллов и CastSpellUnit().
Пример:
CastSpellPoint( "fireball", GetFutureX( this, 3 ) , GetFutureY( this, 3 ) , GetFutureX( this, 3 ) , GetFutureY( this, 3 ) )
// Огненный шар
InflictDamage( this, 1000 )
Sleep( 60 )


Комментарий:
Проверил на практике-все верно-честный файрбол
вылетел из (X1,Y1) в (X2,Y2)

021 CastSpellUnit(strSpell : string;X,Y : float; objUnit : object)

021 Применяет спелл strSpell из точки (x,y) на юнит objUnit.
В данной процедуре могут использоваться спеллы, действующие как на область, так и на цель.
См. также задание спеллов и CastSpellPoint().
Синтаксис:
Пример:
...
CastSpellUnit( "strength{d2;d2;d2;d2}", GetX( Healing02 ) , GetY( Healing02 ) , GetObjectByName( "Hero" ) )
...
CastSpellUnit( "infravision{d2;d2;d2;d2}", GetX( Healing03 ) , GetY( Healing03 ) , GetObjectByName( "Hero" ) )
...
CastSpellUnit( "healing{e2;e2;e2;e2}", GetX( Healing01 ) , GetY( Healing01 ) , GetObjectByName( "Hero" ) )
...



058 GetLootItemsCount (nPlayer:nPlayer):float

058 Возвращает число предметов добытых на активной карте игроком номер nPlayer.
Пример:
#GetLootItemsCount(0)
Комментарий:
Примечание:
В обозе вещей больше

073 GiveMoney(idLoot:float,Money:float)

073 Добавляет деньги в обоз игрока
Пример:
@GiveMoney(0,1000)
Комментарий:
Не путать - дает или прибавляет - ПРИБАВЛЯЕТ
Проверил,разобрал типы

064 GetUnitOfPlayer(nPlayer,nUnit : float) : float

064 Возвращает экземпляр object для юнита номер nUnit игрока с номером nPlayer.
Примеры:

1. IsLess( DistanceUnitUnit( GetUnitOfPlayer( 0, 0 ) , GoGo ) , 4 )
2. Run( GoGo )
SetPlayer( GoGo, 0 )
UMFollow( GoGo, GetUnitOfPlayer( 0, 0 ) )
3. IsInArea( 3, GetX( GetUnitOfPlayer( 0, 0 ) ) , GetY( GetUnitOfPlayer( 0, 0 ) ) )
4. IsGreater( DistanceUnitPoint( GetUnitOfPlayer( 0, 0 ) , 49, 92 ) , 31 )
5. IsEqual( GetObjectID( GetUnitOfPlayer( 0, 1 ) ) , GetObjectID( Try1 ) )
IsAlive( Try1 )


116 LeaveToZone(nPlayer:float,sZone:string,nEnterMap : float)

116 Перемещает партию в локацию с именем
Пример:
@LeaveToZone(0,"gz4g",4)
Комментарий:
Первый параметр это номер или код Игрока,
второй эта карта (зона), третий- это номер вхождения на карту,
то есть номер места на карте установлены заранее
и прописаны не кодами, а так же как и проходимые зоны.
Примечание:
Переносит не только лидера, а на самом деле переносят объект Игрок и все что ему принадлежит.
Эту команду можно отдавать только тогда, когда в игре инициализирован лидер, партия и сам игрок иначе результат может быть самый непредсказуемый.
(Просто тихо вылетает или другие прикольные ситуации-убитый, но еще не упавший на землю Зак появляется как на зоне брифинга -без оружия и т п
видимо есть внутренние переменные инициализирующиеся в RunTime only)

154 RotateTo(objUnit : object,x:float,y:float)

154 Обьект поворачивается лицом по направлению к точке (X,Y)
Пример:
@RotateTo(GetLeader(),166.2,74.5)
Комментарий:
Проверил,разобрал типы-вертится как миленький

155 Run(objUnit : object)

155 Переключает обьект в режим "бег"
Пример:
@Run(GetLeader())
Комментарий:
Проверил,разобрал типы
"бег"-On, но это не значит, что
сразу побежал.

156 RunWorldTime(Hour:float)

156 Устанавливает текущее время в ПЗ (и часы идут)
Пример:
@RunWorldTime(8)//8ч утра
Комментарий:
Hour, например =(0.xxx..23.xxx)
Полученное время=(Hour mod 24) поэтому допускаются числа > 24
Часы идут, в отличие от FixWorldTime

166 SetDiplomacy ( nUnionA:float , nUnionB:float , flDiplomacy:float )

166 Изменяет дипломатию альянса nUnionA для nUnionB. Возможные значения
flDiplomacy:float )

Пример:
GSSetVarMax( 0, "Idol1", 1 )
GiveQuestItem( 0, "DragonShell00" )
// Большая Ракушка
RemoveUnitFromServer( DShell )
SetDiplomacy( 0, 1, -1 )
SetDiplomacy( 1, 0, -1 )

GSSetVarMax( 0, "q.gz4g.q15ag.2", 2 )
// Квест: Большая Ракушка Subobj:2 Забрать Большую Ракушку Subs: 2
GSSetVarMax( 0, "q.gz4g.q15ag", 2 )
// Квест выполнен: Большая Ракушка Subs: 2
SendStringEvent( 0, "say s4 Liz4" )


Комментарий:
flDiplomacy:
1 - союзник
0 - нейтрал
-1 - враг

0 для nUnionA , nUnionB-это альянс игрока

См. также SetPlayer(), GetDiplomacy() и GetPlayer().

170 SetPlayer(objUnit : object,nDipUnion:float)

170 Изменяет дипломатический альянс к которому принадлежит юнит
Синтаксис:
@SetPlayer(objUnit : object,nDipUnion:float)
Пример:
Borka = GetObjectByID( "1000263" )
Run( Borka )
SetPlayer( Borka, 0 )//Borka-союзник
UMFollow( Borka, GetUnitOfPlayer( 0, 0 ) )

Комментарий:
если nDipUnion=0 то это - альянс игрока


158 SendStringEvent(flt : float,strBriefing:string)

158 Воспроизведение разговоров-диалогов:
Пример:
@SendStringEvent(0,"briefing S1")
@SendStringEvent(0,"briefing S2")


Комментарий:
(Если находишься в зоне где этот диалог вообще возможен)
Кажется все strBriefing начинаются со слова "briefing" сообщения в ресурсах "Text"
предназначение 1-параметра-не определил
менял - все равно работает.

159 Sentry(objUnit : object,x:float,y:float)

159 Охрана указанной точки (X,Y)
Пример:
@Sentry(GetLeader(),176.0,71.0)
...
GSSetVarMax( 0, "q.gz3g.q0g.1", 2 )
// Квест: Найти дорогу к людям Subobj:1 Выйти из развалин Subs: 3
GSSetVarMax( 0, "q.gz3g.q0g.2", 1 )
// Квест: Найти дорогу к людям Subobj:2 Пойти вслед за убежавшими Subs: 3
SendStringEvent( 0, "say R3 Hero" )
UMClear( this )
UMPlayer( this )
Run( this )
UMSentry( this, Add( 55.5, Random( 2 ) ) , Add( 95, Random( 2 ) ) )
Sleep( 90 )
UMSentry( this, Add( 124, Random( 2 ) ) , Add( 48, Random( 2 ) ) )
Sleep( 90 )
UMSentry( this, Add( 185, Random( 1 ) ) , Add( 95, Random( 1 ) ) )


Комментарий:
(После этой команды Зак вам уже не подчиняется images/smiles/icon_smile.gif стоит себе в (X,Y) и вертится хе-хе
охраняет. Даже если его переместить читерски он
все-равно как баран возвращается сюда )

175 SetWaterLevel(idWBassein :float,Level:float,delay:float)

175 Устанавливает уровень воды в водоеме idWBassein
Пример:
@SetWaterLevel(2,1,50)
@SetWaterLevel(5,-2.3,100)
...

GSSetVar( 0, "PlWas", 1 )
SetWaterLevel( 5, -2.3, 100 )
GSSetVarMax( 0, "q.gz8g.q34g.2", 2 )
// Квест: Вернуть воду ящерам Subobj:2 Поднять плотину Subs: 5
EraseQuestItem( 0, 70 )
Sleep( 180 )
SwitchLeverState( Plotina, 0 )



Комментарий:
level-метры
delay-задержка

210 WasLooted ( objUnit : object) :bool

210 Возвращает истину, если труп юнита objUnit уже обыскан, и ложь в противном случае (в частности, если юнит еще жив).
Пример:
if
(
WasLooted( LoneWolf )
Not( IsEqual( GSGetVar( 0, "ZT7" ) , 1 ) )
// zt7_head
)
then


[ 05 февраля 2002: Изменил: Nivea ]

Vasya
Привратник


Пришел: 20.12.2001
Сообщения: 338
Откуда: Москва
Добавлено: 26 января 2002, 12:32 [?] [PM]   [«»]

Nivea

Ты неправ. Время - это любое вещественное число, а не только целое из диапазона 0..23. Поэтому установить его можно почти с любой точностью.
Nivea
Смерть гоблинов


Пришел: 21.12.2001
Сообщения: 266
Откуда: Samara
Добавлено: 26 января 2002, 12:42 [?] [PM] [M] [w]   [«»]

Vasya
Любое-да но в диапазоне (0..24) я же тестировал.
Это ж тебе не язык программирование - здесь
имеются ввиду часы.
Vasya
Привратник


Пришел: 20.12.2001
Сообщения: 338
Откуда: Москва
Добавлено: 26 января 2002, 12:54 [?] [PM]   [«»]

Я тоже тестировал. У меня можно поставить, например, 120.437 и будет немного за полночь. Там идёт обычное приведение по модулю 24 (причём не только для целых значений).

[ 26 января 2002: Изменил: Vasya ]

sun
Опытный воин


Пришел: 22.12.2001
Сообщения: 673
Добавлено: 26 января 2002, 15:24 [?] [PM]   [«»]

Я посмотрел повнимательнее…. Молодцы! Очень хорошо.
images/smiles/icon_smile.gif
Но все же у вас обеих должен быть единый стиль. И мы его возьмем за образец.
Vasya
Привратник


Пришел: 20.12.2001
Сообщения: 338
Откуда: Москва
Добавлено: 26 января 2002, 20:01 [?] [PM]   [«»]

sun
Сначала надо сделать его единым, а потом уже брать за образец. images/smiles/icon_wink.gif

Напиши в другой теме, каким же именно должен быть стиль (на примере любой команды).
sun
Опытный воин


Пришел: 22.12.2001
Сообщения: 673
Добавлено: 26 января 2002, 23:28 [?] [PM]   [«»]

Vasya.
У тебя написано очень хорошо и читабельно. Главное что, написанное тобой будет очень легко разобрать, так как всем переменным указаны признаки через знак: «:» и все написано в одном стиле.
Я собирался представить записи команд как релятивные списки: отдельно формулы и отдельно примечания и прочее, связанные по полю код. Но в этом пока нет необходимости. Твои примечания это просто поле номер 3.
У меня ещё есть спорные вопросы, но я не хочу настаивать – я буду только предлагать. Я напишу в теме инструкция….
Alexy III
Оружейник


Пришел: 22.12.2001
Сообщения: 198
Откуда: Ярославль
Добавлено: 27 января 2002, 00:38 [?] [PM] [M]   [«»]

команды работы с партией.
Все команды работы с партией выполняются при вызове команды 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 ]

Nivea
Смерть гоблинов


Пришел: 21.12.2001
Сообщения: 266
Откуда: Samara
Добавлено: 27 января 2002, 01:00 [?] [PM] [M] [w]   [«»]

все верно верно но смысла выше 24 ставить нету
никакого Гут?
Vasya
Привратник


Пришел: 20.12.2001
Сообщения: 338
Откуда: Москва
Добавлено: 27 января 2002, 01:11 [?] [PM]   [«»]

Но к синтаксису самой команды это отношения не имеет, ведь формально ограничений на параметр нет. А если ты пишешь, что время в часах, то, я думаю, каждый поймёт, что всего в сутках их 24. images/smiles/icon_wink.gif Так что, я считаю, можно не писать об этом ограничении.
sun
Опытный воин


Пришел: 22.12.2001
Сообщения: 673
Добавлено: 27 января 2002, 01:23 [?] [PM]   [«»]

Я напишу вам инструкцию в новой теме. Давайте обсудим…. Пожалуйста.
Vasya
Привратник


Пришел: 20.12.2001
Сообщения: 338
Откуда: Москва
Добавлено: 27 января 2002, 01:26 [?] [PM]   [«»]

А здесь я предлагаю удалить все сообщения, кроме первых двух, чтобы не засорять тему.
Nivea
Смерть гоблинов


Пришел: 21.12.2001
Сообщения: 266
Откуда: Samara
Добавлено: 27 января 2002, 01:27 [?] [PM] [M] [w]   [«»]

Нет!
Оставим эту тему как черновик -потом заведем новую у нас плезные диалоги
sun
Опытный воин


Пришел: 22.12.2001
Сообщения: 673
Добавлено: 27 января 2002, 01:36 [?] [PM]   [«»]

Пожалуйста, прекратите заниматься чепухой – «….аются числа >24 (уточнил Vasya)»

Больше никаких авторских прав, приседаний и реверансов!
Не важно кто уточнил, создал написал и т д.
НЕ ОБИЖАЙТЕСЬ!
sun
Опытный воин


Пришел: 22.12.2001
Сообщения: 673
Добавлено: 27 января 2002, 02:44 [?] [PM]   [«»]

AlexIII, Vasya, Nivea
Спасибо. Очень хорошо.
Давайте продолжайте в таком же духе…. Получается очень даже здорово. Через неделю обсудим детали….
Nivea
Смерть гоблинов


Пришел: 21.12.2001
Сообщения: 266
Откуда: Samara
Добавлено: 28 января 2002, 18:25 [?] [PM] [M] [w]   [«»]

Vasya ты пишешь
цитата:

009 AddUnitToServer ( str : string , typeUnit : string , nameUnit : string , x : float , y : float , height : float)
Добавляет на карту юнит типа typeUnit с отображаемым названием nameUnit, в точку с горизонтальными координатами (x, y) на высоте height над поверхностью. (В дальнейшем юнит всегда будет перемещаться на данной высоте.) Назначение первого параметра пока неизвестно, но он должен быть уникальным (при попытке добавить второй юнит с тем же значением str первый исчезает).
Юнит добавляется без текстур и со следующими параметрами: Здоровье - 1, Запас сил - 0, Броня - 0. Остальные параметры определятся значением typeUnit



Позволь мне внести некие уточнения:
первый параметр:
внутреннее имя 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 ]

Vasya
Привратник


Пришел: 20.12.2001
Сообщения: 338
Откуда: Москва
Добавлено: 29 января 2002, 13:42 [?] [PM]   [«»]

Nivea

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

[ 29 января 2002: Изменил: Vasya ]

sun
Опытный воин


Пришел: 22.12.2001
Сообщения: 673
Добавлено: 29 января 2002, 16:17 [?] [PM]   [«»]

Что-то подтормаживает процесс….
Давайте, хотя бы в день по одной процедуре разбирайте на каждого.
А то, как ни зайду и ничего.
images/smiles/converted/ass.gif
Nivea
Смерть гоблинов


Пришел: 21.12.2001
Сообщения: 266
Откуда: Samara
Добавлено: 29 января 2002, 16:37 [?] [PM] [M] [w]   [«»]

Мне кажется пора с терминологией юнитов завести дискуссию:
Предположительно игра имеет такую структуру:
Массив или коллекция(Игроки)// размер 9?
Элемент массива:
Игрок[индекс] //nPlayer-видно сам индекс
Рюкзак,а где обоз// Loot
Лидер - без него игроку нечего делать
Партия(наемники)// Party

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

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


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

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

GetPlayer
нужно попробовать GetPlayer-врагов
Какой плеер у врагов разных? То=же 0 Вряд-ли...
sun
Опытный воин


Пришел: 22.12.2001
Сообщения: 673
Добавлено: 29 января 2002, 17:50 [?] [PM]   [«»]

Нивеа, очень хорошо. Замечательно! Поддерживаю тебя на 100%
Я обдумаю и выскажусь по этой теме. На самом деле у меня есть некие собственные представления о структуре ПЗ. Я хочу предварительно обсудить их с моими программерами и вынести на форум некоторые домашние заготовки и статьи.

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


Пришел: 20.12.2001
Сообщения: 338
Откуда: Москва
Добавлено: 29 января 2002, 21:07 [?] [PM]   [«»]

Насчёт игроков.

Игрок, управляемый человеком, всегда имеет номер 0. В частности, в сетевой игре все персонажи относятся к этому игроку (хотя фактически управляются разными людьми). Остальные юниты разбиты на игроков по-разному, но с учётом того, что одному игроку должны принадлежать заведомо дружественные существа. Например, лесные ящеры и зелёные драконы в ДГ - это игрок 1, а озёрные ящеры и синий дракон - игрок 4. Я ни разу не видел, чтобы игроков было больше десяти, хотя их номера бывают и больше девяти (например, 14), но тогда меньшие номера не используются.

Самому можно установить для юнита отрицательный номер игрока или дробный, хотя дробный всё равно округляется (проверяя через getplayer). Если поставить очень большой по модулю номер (например, -1000000), то игра вылетает.

У меня вопрос: чем понятие "коллекция"
отличается от понятия "множество"?

sun

А я всё жду, чтобы ты мне объяснил то, что я понимаю неправильно.

[ 29 января 2002: Изменил: Vasya ]

Nivea
Смерть гоблинов


Пришел: 21.12.2001
Сообщения: 266
Откуда: Samara
Добавлено: 29 января 2002, 21:26 [?] [PM] [M] [w]   [«»]

Кое -что стало проясняться:
С помощью этих так называемых игроков устанавливается так называемая дипломатия?
Это и Сан тоже доказывает, но что первичней
отношения или обьединения под началом ИгрокаN?
Может быть назвать их руководители политических блоков? Owners? Боги? Цари? Хозяева? Лидеры?Главнокомандующие? Один вместе с другими против другого ГлавыN 0. Вопрос еще сколько их или это не принципиально?
Nivea
Смерть гоблинов


Пришел: 21.12.2001
Сообщения: 266
Откуда: Samara
Добавлено: 29 января 2002, 23:40 [?] [PM] [M] [w]   [«»]

Vasya Alexy III
Что же такое Party и с чем ее едят? Я лично не понял. Как взять в партию скажем демона и таскать за собобой. У меня не получается как захожу в портал демон остается на карте черт его возьми.
AddUnnitUnderControl работает и так безовсяких партий!!!!!

[ 29 января 2002: Изменил: Nivea ]

Vasya
Привратник


Пришел: 20.12.2001
Сообщения: 338
Откуда: Москва
Добавлено: 30 января 2002, 02:27 [?] [PM]   [«»]

Я с партиями не работал, ничего сказать не могу. Да и структуру параметров, используемых в процедурах для работы с ними, я не совсем понимаю. (Что за строка "Human Hero Hadagan", например?) Наверное, Alexy III лучше разобрался.
Nivea
Смерть гоблинов


Пришел: 21.12.2001
Сообщения: 266
Откуда: Samara
Добавлено: 30 января 2002, 03:39 [?] [PM] [M] [w]   [«»]

Vasya
Human Hero Hadagan - это раздетый Зак на Хадагане с палашом.(Поле в ресурсах таблица персов Юниты). Этот Зак похож на нашего но - другой видно для того, чтобы проще было баланс считать.

Давай все-же попробуем определиться насчет определения высоты в AddUnitToServer(и подобных ей).
Такая логика:
Мы говорим о мире 3D где по координате Z ведется отсчет высот всех обьектов.
Этот параметр, в данном случае относится к объекту, а не к местности. Так как подобные параметры Х, Y отображают также местную систему координат,начинающуюся с Юго-запада карты то писать ось будет корректней, чем высоту.
А местная система координат с абсолютной системой координат может и не совпадать и к ней привязываться не стоит.
Вот и твое описание:
068 GetZ ( objUnit : object ): float
Возвращают текущие координаты x,y и z, соответственно, юнита objUnit.
Заметь- GetZ, но не GetH.

Еще ты по коллекции задал вопрос:
Коллекция -это список обьектов т е каждый элемент
имеет индекс и содержит указатель на структуру данных одного типа.
[0]-[1]-[2]...[N]
| | |
V V V
obj obj obj

Чем от множества отличается?
Множества ближе к группам ПЗ,для множества главное
содержит ли оно данный элементX или нет? По нему
быстро не пробежишься циклом от начала до конца
т к нужно перебирать все элементы в каком-то диапазоне типа проверь есть нулевой Item? ага- а а первый а второй и т д? Больше для флагов подходит. Во множества обьекты вообще не кладут.

а у коллекции есть count
for k=0 to count-1 do
if ItemOk(Item[k]) then
ProcessItem(Item[k])
.....

Но все это не принципиально. Если тебе больше понятней множество-считай это множеством. Главный вопрос что это? Игроки? ДипОтношения? или более подходящий термин найдем?

[ 30 января 2002: Изменил: Nivea ]

Alexy III
Оружейник


Пришел: 22.12.2001
Сообщения: 198
Откуда: Ярославль
Добавлено: 30 января 2002, 14:18 [?] [PM] [M]   [«»]

Nivea.
Party - хрен его знает, что это. Это явно не группа, не игрок, а какая-то самостоятельная структура. Причём, видимо через
партию ведётся управление персонажем и наёмниками.
Что бы взять демона в свою партию надо делать так:
@addunittoparty(0,"merc1","Human Gipath NPC Demon F7")
@redeployparty(0)
Причём здесь большой облом вот в чём: "merc1" означает, что добавленный в партию юнит будет называться Хадор-Забияка(для "merc2" - Ная, и т.д).
Будет иметь его характеристики. Голос и реплики так же.
sun
Опытный воин


Пришел: 22.12.2001
Сообщения: 673
Добавлено: 30 января 2002, 14:29 [?] [PM]   [«»]

Alexy III, Нивеа КалбасКа,Vasya.
Давайте пока не бедем разбирать эту функцию: addunittoparty. С ней все понятно.
Есть идеи по аддону и разбор именно её будет преждевременным. Я позже сообщу, что к чему.
Alexy III свяжись со мной.
sun
Опытный воин


Пришел: 22.12.2001
Сообщения: 673
Добавлено: 30 января 2002, 14:38 [?] [PM]   [«»]

Vasya
Скоро...
images/smiles/converted/type.gif

Я, разделяю сторону высказанную Nivea. Выражение height выглядит сомнительно, и я сказал бы неверно. Параметры в этой функции представляют собой координаты указывающие место на карте для объекта Unit, а не для карты высоту. В этой функции явно должны быть указаны координаты ОСК, где последний параметр – это начало координаты Z в каждой измеряемой точке на поверхности карты. В 3D представлениях существует несколько различных систем координат. Мировая - МСК и относительные - ОСК. Если принять твое понятие и термин height, то получается, что относительно Мировой системы координат Unit`ом можно измерить высоту поверхности ландшафта, которая представляет Z в МСК, а это может ввести в заблуждение. Объект Unit динамически перемещаемый по карте объект, привязывать к системе координат по МСК его не разумно, так как в этом случае Объект, будет измерять высоту «над уровнем моря». Для Объекта на карте, система координат МСК и ОСК практически никогда не совпадает по координате Z.
Vasya
Привратник


Пришел: 20.12.2001
Сообщения: 338
Откуда: Москва
Добавлено: 30 января 2002, 15:01 [?] [PM]   [«»]

sun

Какие есть конкретные предложения по этому параметру? Как его назвать (relZ - относительное Z?) и что мне изменить в описании процедуры?

Я не понял, почему ты считаешь, что юнитом нельзя мерить высоту местности. У меня это, вроде бы, получалось.
Показать сообщения:   
   Список форумов -> Все остальное
Страницы 1, 2  След. Версия для печати
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы
Вы можете скачивать выложенные файлы
Перейти:  
Часовой пояс: GMT +4:00