Город Джунов
Рассуждения: Разбор скриптовых команд - Версия для печати

+- Город Джунов (https://www.gipat.ru/forum)
+-- Форум Аддон для Проклятых Земель (https://www.gipat.ru/forum/forum-20.html)
+--- Форум Программирование (https://www.gipat.ru/forum/forum-6.html)
+--- Темы: Рассуждения: Разбор скриптовых команд (/thread-659.html)

Страницы: 1 2 3


Рассуждения: Разбор скриптовых команд - Nivea - 14.02.2002

Немного повести ...

Итак вроде простая команда команда WasLooted, но я решил ее попинать.
Вот мой план, чего я сделал;
включил
filter ai 1
посморел у орка id=4502
На карте предгорья орк недалеко от людоеда

набрал
@ConsoleFloat(WasLooted(GetObjectbyId("4502")))
вернула 0

Убил Орка набрал
@ConsoleFloat(WasLooted(GetObjecrtbyId("4502")))
вернула 0

Обыскал орка на предмет добычи набрал
@ConsoleFloat(WasLooted(GetObjecrtbyId("4502")))
вернула 1

так
еще людоед 4746
@ConsoleFloat(WasLooted(GetObjecrtbyId("4746")))
вернула 0

Украл у людоеда 4746 несколько монет
(для этого пришлось дать Заку @GiveDexterity(GetLeader(),100))

набрал после этого:
@ConsoleFloat(WasLooted(GetObjectbyId("4746")))
вернула 1

Так же проверил убил Заком Хадором и обыскал его труп
(у живого дружественного юнита украсть ничего нельзя)
@ConsoleFloat(WasLooted(GetObjectbyName("Merc1")))
вернула 1

Вывод:
Функция (по-сути булева )
WasLooted(objUnit : object):float
Возвращает значения (0(false) или 1(true))
0-Вражеский или дружеский юнит жив или мертв, но не обыскан
1-Обкраден живой(враг) или обыскан труп(любой)

Пример:
Script VCheck#0#221
(
if
(
WasLooted( LoneWolf )
Not( IsEqual( GSGetVar( 0, "ZT7" ) , 1 ) )
)
then
(
KillScript( )
VTriger#0#225( this )
)
)


VCheck#0#221 в примере проверяет был ли обыскан после победы самый первый враг- одинокий волк
и если да - запускает обучающий экран: (Магия исцеления)
"... После боя вы можете использовать заклинание исцеления,
чтобы вылечить повреждения, нанесенные вашему персонажу....."


По CreatePointLight:
CreatePointLight(idPointLight,x,y,z,rad,Red,Green,Blue : float)

создает источник света с RGB составляющими цвета
в точке X,Y,Z радиусом rad с уникальным идентификатором idPointLight
Насколько я понял на практике - idPointLight -любое число на выбор юзера(типа индекса массива)которое в дальнейшем нужно например для
DeletePointLight(idPointLight:float)

[ 14 февраля 2002: Изменил: Nivea ]</p>


Рассуждения: Разбор скриптовых команд - Nivea - 15.02.2002

О группах:

Рядом Хадор Merc1
@ConsoleFloat(GroupHas(PlayerSee(0),GetObjectByName("Merc1")))
Возвращает 1

Рядом гоблин 5025
@ConsoleFloat(GroupHas(PlayerSee(0),GetObjectByID("5025")))
Возвращает 1

Можно написать
@AddObject(PlayerSee(0),GetObjectByID("5025"))
ничего не произошло но
GroupSize(grpUnits : Group):float
возвращает уже 4 (Зак, Хадор, Ная, юнит 5025)

Еще есть UnitSee(objUnit):group


Исходя из того PlayerSee(0) возвращает любую группу юнитов
с совершенно различной дипоматией представляется возможность
сделать вывод, что дипломатия к Group не имеет никакого отношения и поведение юнитов не зависит от принадлежности к той или другой Group
Group - это временная или постоянная коллекция обьектов
Group нужен для облегчения работы c коллекциями обьектов
для проверок приблизилась ли одна нгруппа к другой например.

GroupCross(grpOne,grpTwo : Group):group

GroupSize(grpUnits : Group):float


Рассуждения: Разбор скриптовых команд - Nivea - 17.02.2002

CreateFXSource( id : float , x : float , y : float , z : float , Volume : float , maxDist : float , NameWav : string )
Cоздает и начинает воспроизведение WAV файла NameWav в точке XYZ с радиусом слышимости
maxDist громккостью Volume с идентификатром id. Пригрывание происходит по замкнутому циклу до
тех пор пока источник звука не будет удален командой DeleteFXSource по его id.

CreateFX( x : float , y : float , z : float , Volume : float , maxDist : float , NameWav : string )
Воспроизводит (один раз) WAV файла NameWav в точке XYZ с радиусом слышимости
maxDist громккостью Volume. см. CreateFXSource.

CreateLightning( id : float , x1 : float , y1 : float , z1 : float , x2 : float , y2 : float , z2 : float , Intensity : float )
Создает постоянно действующую застывшую молнию бъющую из точки: (x1,y1,z1) в (x2,y2,z2) с интенсивностью: Intensity.
При положительном значении: : Intensity точка: (x2,y2,z2) - представляет собой шар - как результат удара молнии в объект.
При отрицательном значении: Intensity молния представляет собой застывшую молнию природного происхождения.
При значении: Intensity = 0 молния представляети собой вид заклинания: Преграда из молний с интенсивностью (толшиной разрядов) по умолчанию.
Значение интенсивность: Intensity отличное от нуля графически представляется как толщина разрядов. Не следует устанавливать значение Intensity большим 20 так как это сильно замедляет игру на игровой зоне. Если установить значение: Intensity = 100, то получ
и рельефа игровой зоны, следует это учесть устанавливая значение координат: z1 и z2. Удалить все подмножество молний с одинаковым кодом можно командой: DeleteLightning.

[ 18 февраля 2002: Изменил: Nivea ]</p>