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