26.07.2003, 13:26
Код:
возвращает истину = 1- если объект: Unit труп, и ложь =0 - в противном случае. Если объект поднят? если объект не существует?, если ввести код предмета, например ключ от пирамиды?
Пример: Гоблин Дозорный до Убийства. В консоли будут следующие значения:
@ConsoleFloat(IsAlive(GetObject(4747))) = 1
@ConsoleFloat(Not(IsAlive( GetObject(4747)))) =0
@ConsoleFloat(IsDead( GetObject(4747))) =0
@ConsoleFloat(Not(IsDead(GetObject(4747)))) =1
После убийства Гоблина:
@ConsoleFloat(IsAlive(GetObject(4747))) = 0
@ConsoleFloat(Not(IsAlive( GetObject(4747)))) =1
@ConsoleFloat(IsDead( GetObject(4747))) =1
@ConsoleFloat(Not(IsDead(GetObject(4747)))) =0
После поднятия трупа:
@ConsoleFloat(IsAlive(GetObject(4747))) = 0
@ConsoleFloat(Not(IsAlive( GetObject(4747)))) =1
@ConsoleFloat(IsDead( GetObject(4747))) =0
@ConsoleFloat(Not(IsDead(GetObject(4747)))) =1
С функцией IsDead могут быть проблемы, так если очень быстро поднять тело убитого врага (в старых версиях) напрмер после стены огня, то игра моджет не засчитать квест. Лучше использовать Not(IsAlive(Object)).С функцией isAlive и isDead не так все просто, в коде может быть не явным образом сделано отрицание, через ELSEIF и проверяться игровые моменты, которые не заменишь друг на друга этими функциями. Я не стал исправлять сразу все ошибки в ПЗ, так как каждый такой случай нужно интеллектуально оценить. Вернее, даже исправил, то о чем пишет Твистер, но потом закомментировал, так как, опять же, нужно будет «руками» все править.
Таблица процедур, что я написал - команды, функции, которые встречаются в ПЗ, это не все функции, которые мы поддержим.
Вообще, Мы собираемся ввести в конструктор ПЗ несколько больше логических команд и функций. Мы очень сильно упростили язык ПЗ, на столько сильно, что в нашем макроязыке нет вообще работы с группами, а соответственно и организации циклов. Группы обрабатывается по определенной логике. Логика нового скрипта построена на основе проверки функциями состояния переменных как: «ИСТИНА» и никогда: «ЛОЖЬ»! Дизайнеру уровней игры ненужно будет задумываться, как убить группу, просто указать: «удалить», и все. Все объекты и группы должны будут объявляться предварительно, и наш компилятор будет определять, какому объекту какой метод применен. Вот как планируется обрабатывать скрипт, и что подразумевается под понятием функций: isDead, isAlive
<TABLE BORDER=1 CELLPADDING=1>
<tr><td> Правило </td><td> Функция </td><td> Описание </td><td> <B>Пример </B></td></tr>
<tr><td> 1 </td><td> IsInAreaObj </td><td> любой из группы в любой области - истина </td><td> Any </td></tr>
<tr><td> 2 </td><td> iaNotDead </td><td> В группе нет ни единого трупа(мертвеца) </td><td> Any(i,s1,IsDead(i)) </td></tr>
<tr><td> 3 </td><td> IsEnemy </td><td> в группе хоть один враг игроку - истина (вся группа враги!) </td><td> Any(i,Peasans,IsEnemy(i,0)) </td></tr>
<tr><td> 4 </td><td> IsFriend </td><td> в группе нет ни единого врага игроку - то истина (вся группа друзья). </td><td> Not(Any(i,Peasans,IsEnemy(i,0))) </td></tr>
<tr><td> 5 </td><td> isDead </td><td> в группе хоть один трупп (мертвец) на карте! </td><td> Every </td></tr>
<tr><td> 6 </td><td> isAlive </td><td> в группе жив хоть один член группы, тогда истина </td><td> </td></tr>
<tr><td> 7 </td><td> IsLessDistanceUnitUnit </td><td> любой из группы ближе к юниту на указанное расстояние - истина </td><td> AnyIsLessDistanceUnitUnit(Heroes,BoarCage,7) </td></tr>
<tr><td> 8 </td><td> IsGreaterDistanceUnitUnit </td><td> любой из группы дальше от юнита на указанное расстояние - истина </td><td> Any </td></tr>
<tr><td> 9 </td><td> IsGreaterDistanceUnitPoint </td><td> любой из группы дальше указанного расстояния - истина. Обратное, если нужно чтобы вся группа была ближе к указанной точке. Аналог через ELSE (Every(i,Dkins,IsLess(DistanceUnitPoint(i,6,160),7)) - переделана структура на ELSE) </td><td> Any </td></tr>
<tr><td> 10 </td><td> isNotAlive </td><td> в группе убиты все , тогда истина. </td><td> </td></tr>
<tr><td> 11 </td><td> isPresent </td><td> присутствует юнит на карте. </td><td> </td></tr>
<tr><td> 12 </td><td> isAbsence </td><td> отсутствует юнит на карте. </td><td> </td></tr>
</table>
P.S: Это рабочая табличка и примеры могут не соответствовать действительности. Но, так в общих чертах...

Форумы
Вселенная аллодов

