Доработки кода Арда MUD, имеющие значение для строительства игровых зон ======================================================================= В данном файле будут регулярно помещаться новости, относящиеся к доработкам кода игры. Преимущественно речь пойдет о новых возможностях в мобпрограммах (новых триггерах, операторах, проверках на условие). Кроме того, вы узнаете о новых флагах комнат, мобов, предметов и других вещах, которые могут оказаться полезными тем, кто создает игровые зоны для нашего мира. К новостям будем относить то, что отсутствует в демо-версии Арды MUD 1.2 либо не описано в справке к редактору зон Arda World Editor 1.2. Если у вас возникнут вопросы по использованию описанных тут нововведений, пишите по адресу alanna@mail.ru Аланна -------------------------------------------------------------------------------- ?......... - Новый оператор "mphunt" Оператор "mphunt" заставляет моба "начать охоту" за указанным персонажем. Моб будет пытаться "выследить" жертву, переходя из комнаты в комнату и двигаясь по кратчайшему пути к цели. Как только моб окажется рядом с жертвой, он нападет на нее. Пример (моб, на котором программа, вызывает стражника на помощь). fight_prog 10 ------------- if mobinsroom(1500) == 5200 yell Стража, на помощь! mpat 5200 mpforce guard1500 stand mpat 5200 mpforce guard1500 mphunt $n endif При этом предполагается, что стражник VNUM 1500 сидит в казарме VNUM 5200. Примерно так работает вызов стражи в городах. ?......... - Новый тип сопротивляемости/иммунитета/уязвимости: к "заклинаниям" Вы можете задавать сопротивляемость, иммунитет или уязвимость моба к любым повреждающим заклинаниям. Можно также создавать предметы с подобными аффектами. Для того, чтобы "научить" AWE 1.2 этому типу, введите следующую строку в разделе [RISFlags] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag22= заклинаниям | заклинаниям - к любым повреждающим заклинаниям 26.12.2005 - Новый флаг комнаты "nodig" В комнате с этим флагом нельзя копать и закапывать предметы (вне зависимости от типа комнаты). Используйте этот флаг для мостов, скальных выступов, ветвей деревьев и т.п. - тех мест, где по смыслу должен стоять тип комнаты, позволяющий копать (например, hills, forest, mountain), но копать, тем не менее, нельзя. Для того, чтобы "научить" AWE 1.2 флагу, введите следующую строку в разделе [RoomFlags] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag4= nodig | nodig - в комнате нельзя копать 03.02.2006 - Новый флаг навыка "mustsee" Для использования в редакторе умений (встроен в AWE 1.2). Данное заклинание или умение не подействует на жертву, если она не видит того, кто использует навык. Для того, чтобы "научить" AWE 1.2 флагу, введите следующую строку в разделе [SkillFlags] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag24= MUSTSEE | не действует на жертву, если она не видит колдующего 03.02.2006 - Новый вариант оператора "mpjunk" Используйте "mpjunk inventory" для того, чтобы уничтожить все предметы в инвентаре моба, на котором программа. Если использовать "mpjunk all", будут уничтожены также и все те предметы, которые надеты на мобе, что не всегда требуется. 03.02.2006 - Новые проверки "afraid", "angry" if afraid($n) Данное условие считается выполненным, если моб, на котором программа, боится $n (так будет, если моб с флагом wimpy перед этим сбегал из боя с $n). При этом моб будет стремиться покинуть комнату, если в ней находится $n. if angry($n) Данное условие считается выполненным, если моб, на котором программа, ненавидит $n (сражается или ранее сражался с ним) или же охотится на него (см. оператор "mphunt"). В этом случае моб нападет на $n при первой возможности. Целесообразно использовать проверку, например, в greet_prog: вряд ли моб станет радостно приветствовать того, кого собирается убить. 03.02.2006 - Новые проверки "canseeroom", "canseemob" (C) Алдарил, 2004 if canseeroom($n) Данное условие считается выполненным, если $n способен видеть то, что происходит в той комнате, где он в данный момент находится. При этом учитываются слепота, темнота, инфразрение, истинное зрение и т.д. if canseemob($n) Данное условие считается выполненным, если $n видит моба, на котором программа. 20.02.2006 - Новая проверка "roomtype" (C) Алдарил, 2004 if roomtype($n) == 3 Данное условие считается выполненным, если $n находится в комнате, тип которой FOREST (лес). Возможные типы комнат: INSIDE 0 CITY 1 FIELD 2 FOREST 3 HILLS 4 MOUNTAIN 5 WATER_SWIM 6 WATER_NOSWIM 7 UNDERWATER 8 AIR 9 DESERT 10 DUNNO 11 OCEANFLOOR 12 UNDERGROUND 13 20.02.2006 - Новая проверка "nodig" if nodig($n) Данное условие считается выполненным, если $n находится в комнате, в которой невозможно копать и закапывать предметы. 20.02.2006 - Новая проверка "isdark" if isdark($n) Данное условие считается выполненным, если $n находится в комнате, в которой в данный момент темно. Обратите внимание, что комната считается освещенной, если в ней находится источник света или кто-нибудь с зажженным светильником. 20.02.2006 - Новые проверки "month", "sunlight" if month($n) == 9 Данное условие считается выполненным, если сейчас сентябрь (по времени Арды, естественно). Возможные значения изменяются от 1 (январь) до 12 (декабрь). if sunlight($n) Данное условие считается выполненным с 5 до 18 часов включительно. В это время солнце освещает те комнаты, в которых освещенность зависит от времени суток. Проверяется только время (рассвет или день), местоположение $n не играет роли. 16.03.2006 - Новый оператор "mpcast" mpcast 50 'ethereal funnel' mpcast 60 bless $n Данный оператор позволяет мобу колдовать заклинание заданного уровня. Первый аргумент - это уровень заклинания, далее следуют те же аргументы, что и при использолвнии команды cast. В дальнейшем этот оператор предполагается доработать в плане разных режимов выдачи сообщений при действии заклинания. 15.05.2006 - Новая проверка "insameroom" if insameroom($n) Данное условие считается выполненным, если $n находится в одной комнате с мобом, на котором программа. Полезно использовать эту проверку после повреждающих атак в программах, если программа на этом не завершается (после повреждающей атаки персонаж может либо умереть, либо сбежать). Вообще же следует всегда выдавать все соответствующие сообщения (mpechoat $n $I1 ударил вас камнем по голове!) ДО повреждения. Многие операторы выдают сообщение об ошибке, если цель не в одной с мобом комнате. 15.05.2006 - Новая проверка "age" (C) Алдарил, 2004 if age($n) > 20 Данное условие считается выполненным, если $n больше 20 лет. Обратите внимание, что для мобов эта проверка лишена смысла. 15.05.2006 - Новая проверка "blood" (C) Алдарил, 2004 if blood($n) > 10 Данное условие считается выполненным, если кровь игрока $n превышает 10. Эта проверка лишена смысла для мобов или персонажей игроков всех классов, кроме умертвия. 15.05.2006 - Новая проверка "mentalstate" (C) Алдарил, 2004 if mentalstate($n) < 0 Данное условие считается выполненным, если $n утомлен. Mentalstate может изменяться от -100 до 100. Отрицательные значения соответствуют усталости, положительные - излишнему возбуждению. Например, при значении -100 персонаж засыпает без команды, при значении 100 сам просыпается, не может уснуть. Оба крайних случая серьезно ухудшают возможности персонажа и его реакцию на вводимые игроком команды. Проверку можно использовать и для мобов. 15.05.2006 - Новые проверки "hunger", "thirst", "drunk" (C) Алдарил, 2004 if hunger($n) < 4 Данное условие считается выполненным, если игрок $n ощущает голод. Уменьшение здоровья будет происходить при нулевом значении. Параметр сытости может принимать значения от 0 до 48. Значения больше 40 говорят о том, что персонаж объелся и больше не может есть. if thirst($n) < 4 Данное условие считается выполненным, если игрок $n ощущает жажду. Уменьшение здоровья будет происходить при нулевом значении. Параметр жажды может принимать значения от 0 до 48. Значения больше 40 говорят о том, что персонаж выпил слишком много жидкости и больше не может пить. if drunk($n) > 0 Данное условие считается выполненным, если игрок $n пил крепкие напитки. Параметр опьянения может принимать значения от 0 (персонаж трезв) до 48. Обратите внимание, что все три проверки имеют смысл ТОЛЬКО для игроков! 15.05.2006 - Новая проверка "isobjflag" (C) Алдарил, 2004 if isobjflag($o) == nodrop Данное условие считается выполненным, если на предмете $o установлен флаг "нельзя бросить". Допустимые флаги: glow hum dark loyal evil invis magic nodrop bless antigood antievil antineutral noremove inventory antimage antithief antiwarrior anticleric organic metal donation clanobject clancorpse antivampire antidruid hidden poisoned covering deathrot buried prototype nolocate groundrot shoprot norent rotanyplace runed balanced owned stopmelt Обратите внимание, что поддерживаются только операторы "==" и "!=". 15.05.2006 - Доработка проверки "isaffected" Теперь в этой проверке можно использовать оператор "!=" (ранее допускался только оператор "=="). ?......... - Операторы в проверках "name" и "race" В данных проверках, наряду с обычными операторами "==" и "!=", можно использовать операторы "/" и "!/". Первый из них проверяет наличие указанной подстроки в строке, второй дает обратный результат. Пример: if ispc($n) if race($n) / Эльф say Я чувствую в тебе эльфийскую кровь, $N1! endif endif Эта фраза будет выдана персонажам следующих рас: высокий эльф, сумеречный эльф, эльфинит. Пробел в конце "Эльф " учитывается, поэтому его тут быть не должно. Регистр не учитывается. Вообще говоря, эти операторы применимы и в некоторых других проверках (например, "clan", "deity"), но там их использование ничего интересного не сулит. 26.05.2006 - Оператор "and" для совместного использования проверок if ispc($n) and level($n)<10 Данное условие считается выполненным, если $n - игрок, уровень которого ниже 10. Вместе с оператором "or" этот новый оператор позволяет создавать более сложные проверки на основе простых. Оба условия, объединенные "and", должны быть выполнены, чтобы программа отработала последующие команды (до соответствующего "endif"). Напомним, что "or" требует выполнения любого из двух условий. Можно создавать сложные проверки, где после "if" следуют в произвольном порядке другие условия (каждое с новой строки), перед которыми стоит "or" или "and". Пример: if str($n)>15 and dex($n)>15 or level($n)>20 and hitprcnt($n)>60 ... endif Обратите внимание, что операторы всегда выполняются по порядку. В приведенном примере сначала определяется результат1 == ( str($n)>15 ) and ( dex($n)>15 ), затем уже результат2 == ( результат1 ) or ( level($n)>20 ) и, в конце концов, итог == ( результат2 ) and ( hitprcnt($n)>60 ). ?......... - Об использовании проверок "ovnuminv", "otypecarry" и подобных Следует иметь в виду, что правильный способ вызова проверок, позволяющих оценить количество предметов, мобов и т.п., такой: if ovnuminv(100)>0 Это условие считается выполненным, если у моба, на котором программа, в инвентаре есть хотя бы один предмет VNUM 100. Еще пример: if ovnuminv(100)==2 Это условие считается выполненным, если у моба, на котором программа, в инвентаре ровно два предмета VNUM 100. Вызов без оператора и второго операнда "if ovnuminv(100)" является неправильным и дает ошибочный результат! 26.05.2006 - Новая проверка "speaking" if speaking($n) == entish Данное условие считается выполненным, если в данный момент $n говорит на энтском языке. Допустимые языки: westron quenya khuzdul sindarin entish black trollese rodent insectoid mammal reptile dragon spiritual magical goblin god ancient halfling clan gith Рекомендуется использовать только языки, доступные для изучения игрокам ( westron quenya khuzdul sindarin entish black ). Поддерживаются только операторы "==" и "!=". Используется английское название. 26.05.2006 - Новые проверки "learned", "skilled" if learned($n) == create spring Данное условие считается выполненным, если $n уже обладает указанным навыком (можно использовать умения, заклинания, языки или навык в оружии). if skilled($n) == create spring Данное условие считается выполненным, если $n достиг высот в указанном навыке (освоил навык более, чем на 66%, или же достиг максимума развития в навыке для своего текущего класса). Обе проверки имеет смысл использовать только для игроков. Поддерживаются только операторы "==" и "!=". Используется английское название навыка без кавычек. 26.05.2006 - Новые проверки "cangivevnum", "invobjvnum" if cangivevnum($n) == 100 Данное условие считается выполненным, если в инвентаре у $n есть хотя бы один предмет VNUM 100, причем $n видит его (в этом случае $n может бросить этот предмет или же отдать тому персонажу, которого видит). if invobjvnum($n) == 100 Данное условие считается выполненным, если в инвентаре у $n есть хотя бы один предмет VNUM 100. Примечание: эта проверка появилась в феврале 2006 года, но поначалу она обладала смыслом нынешней "cangivevnum". Изменено для большей согласованности названий проверок. В обеих проверках поддерживается только оператор "==". Предметы, находящиеся в контейнерах, не учитываются. Схожие проверки: "wearobjvnum", "haveobjvnum". Не забывайте, пожалуйста, что для моба, на котором программа, рекомендуется использовать другие проверки: "ovnuminv", "ovnumwear", "ovnumcarry" и т.д. 26.05.2006 - Новые проверки "invobjtype", "wearobjtype" if invobjtype($n) == 22 if invobjtype($n) == лодка Данное условие считается выполненным, если в инвентаре у $n есть хотя бы один предмет типа "лодка". Предметы, находящиеся в контейнерах, не учитываются. if wearobjtype($n) == 5 if wearobjtype($n) == оружие Данное условие считается выполненным, если в экипировке $n есть хотя бы один предмет типа "оружие". В обеих проверках поддерживается только оператор "==". Название типа предмета указывается в том же виде, какой дает заклинание познания. Можно указывать тип предмета по номеру. Не забывайте, пожалуйста, что для моба, на котором программа, рекомендуется использовать другие проверки: "otypeinv", "otypewear", "otypecarry" и т.д. В них также можно указывать тип предмета и по номеру, и по названию. Пример: if otyperoom(огонь) > 0 Некоторые типы предметов: 1 лампа 17 флЯжка 32 травка 2 свиток 18 ключ 34 огонь 3 жезл 19 еда 35 книга 4 посох 20 деньги 37 рукоЯтка 5 оружие 21 карандаш 39 кнопка 8 сокровище 22 лодка 47 бумага 9 доспехи 23 труп 59 лопата 10 зелье 24 труп_игрока 60 мазь 12 предмет 25 фонтан 61 сыраЯ_еда 13 мусор 26 таблетка 15 контейнер 30 трубка 10.06.2006 - Новая проверка "objhere" if objhere($n) == 'great sword' Данное условие считается выполненным, если у $n или в комнате, где находится $n, имеется предмет с такими ключевыми словами (в списке ключевых слов предмета они могут следовать в любом порядке). Кроме того, $n должен видеть этот предмет. Проверку можно использовать для поиска переименованных (например, с помощью mposet) предметов. Кроме того, можно искать "меч" любого типа (то есть предмет с любым VNUM по ключевому слову "меч"), если этого требует алгоритм. 16.06.2006 - Новая проверка "roomflag" if roomtype($n) == safe Данное условие считается выполненным, если на комнате, в которой находится $n, имеется флаг "safe", то есть в ней не может начаться схватка. Допустимые флаги: dark death nomob indoors nodig neutral chaotic nomagic tunnel private safe solitary petshop norecall donation nodropall silence logspeech nodrop clanstoreroom nosummon noastral teleport teleshowdesc nofloor nosupplicate arena nomissile r4 r5 prototype clanroom Обратите внимание, что поддерживаются только операторы "==" и "!=". 23.06.2006 - Новая проверка "remorts" if remorts($n) > 0 Данное условие считается выполненным, если $n игрок и имеет хотя бы одно перерождение (реморт). Для мобов эта проверка лишена смысла. 14.07.2006 - Новые проверки "objinv", "objwear", "objcarry" if objinv($n) == 'great sword' Данное условие считается выполненным, если у $n в инвентаре имеется предмет с такими ключевыми словами (в списке ключевых слов предмета они могут следовать в любом порядке). Кроме того, $n должен видеть этот предмет. if objwear($n) == 'great sword' Аналогично objinv, но проверяется экипировка $n. if objcarry($n) == 'great sword' Аналогично objinv, но проверяется и инвентарь, и экипировка $n. Проверки можно использовать для поиска переименованных (например, с помощью mposet) предметов. Кроме того, можно искать "меч" любого типа (то есть предмет с любым VNUM по ключевому слову "меч"), если этого требует алгоритм. Схожая проверка: objhere (введена ранее). 28.07.2006 - Новый флаг поведения моба "noreceive" Если на мобе установлен флаг "noreceive", ни игроки, ни мобы не смогут ничего отдать этому мобу. Полезно для всяких бабочек, чтобы им не давали в инвентарь утюги. Обратите внимание, что на мобах с программами give_prog этот флаг не должен использоваться. Для того, чтобы "научить" AWE 1.2 этому типу, введите следующую строку в разделе [ActFlags] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag36= noreceive | noreceive - мобу нельзя что-либо дать В том же разделе нужно также исправить значение Number на 37. 08.09.2006 - Новая проверка "mobfighting" if mobfighting($n) Данное условие считается выполненным, если персонаж $n в бою, причем его противник - какой-либо моб. 13.09.2006 - Новая проверка "isdefined" if isdefined($r) Данное условие считается выполненным, если переменная $r определена. Если переменная $r не определена (так будет, когда при старте программы в той комнате, где находится моб $i, он не видит ни одного игрока) попытка использовать ее приведет к ошибке, вплоть до прекращения обработки программы. Чтобы избежать этого, перед использованием $r вставьте новую проверку if isdefined($r) ... endif и обращайтесь к $r только внутри данной ветки программы. Обратите внимание: проверка "if mortcount(0) > 0" не дает гарантии, что $r определена, поэтому используйте только проверку "isdefined". С помощью этой проверки можно также выяснить, присвоены ли значения другим переменным. Как правило, для каждого триггера заранее известно, определены ли $n и $o, а $i определена всегда. Переменные $t и $p могут обрабатываться только в act_prog и также, вообще говоря, могут быть не определены. 13.09.2006 - Новая проверка "mortsinarea" if mortsinarea($i) Данное условие считается выполненным, если в зоне, в которой находится моб с этой программой, есть хотя бы один игрок (не считая бессмертных). 13.09.2006 - Новая проверка "freewearpos" if freewearpos($n) == 6 Данное условие считается выполненным, если у персонажа $n ничего не надето на голове. К примеру, так можно определить, нанесет ли свалившийся сверху камень больше повреждений $n. Поддерживаются только операторы "==" и "!=". Допустимые позиции: 0 - для освещения 13 - пояс 1 - на пальце левой руки 14 - на левом запястье 2 - на пальце правой руки 15 - на правом запястье 3 - на шее 16 - оружие 4 - на шее 17 - зажато в руке 5 - на теле 18 - второе оружие 6 - на голове 19 - в ушах 7 - штаны 20 - на глазах 8 - на ногах 21 - метательное 9 - на руках 22 - за спиной 10 - на плечах 23 - на лице 11 - щит 24 - на лодыжке левой ноги 12 - накидка 25 на лодыжке правой ноги 13.09.2006 - Доработка проверки "ispassage" Теперь в этой проверке можно использовать операторы "==" и "!=" (ранее любой оператор воспринимался как "=="). Пример: "if ispassage($n) != s" ?......... - Об использовании операторов "mpopenpassage", "mpclosepassage" Оператор "mpopenpassage <направление>" открывает проход из комнаты под номером VNUM1 в комнату VNUM2 по заданному направлению. На уже имеющиеся проходы не действует. В справке к редактору зон AWE 1.2 ошибочно указан способ вызова с буквенным обозначением направления. На самом деле, в отличие от проверки "ispassage", необходимо направление указывать числом. Пример: mpopenpassage 1000 1001 5 Этот оператор создает односторонний проход из комнаты VNUM 1000 в комнату VNUM 1001, ведущий вниз. Направления можно указывать такие: 0 - север 5 - вниз 1 - восток 6 - северо-восток 2 - юг 7 - северо-запад 3 - запад 8 - юго-восток 4 - вверх 9 - юго-запад С помощью оператора "mpopenpassage" нельзя создать выход, ведущий "куда-то". Обратите внимание, что для создания двухстороннего прохода этот оператор необходимо использовать дважды, например: mpopenpassage 1000 1001 5 mpopenpassage 1001 1000 4 Оператор "mpclosepassage <направление>" закрывает проход из комнаты VNUM по заданному направлению. Работает только на проходах, ранее созданных с помощью оператора "mpopenpassage". Как и в "mpopenpassage", направление нужно указывать числом. Пример: mpclosepassage 1000 5 Обратите внимание, что для закрытия двухстороннего прохода этот оператор необходимо использовать дважды: mpclosepassage 1000 5 mpclosepassage 1001 4 Учтите, что проходы, создаваемые и удаляемые таким образом, не приходят в исходное состояние после репопа, так что тщательно продумывайте и тестируйте алгоритмы работы программ с этими операторами. ?......... - Об использовании проверок со строковыми вторыми операндами Если вы используете проверку с оператором и стоящим после него строковым операндом (в том числе из одной буквы), между оператором и этим операндом должен стоять пробел. Если операнд - число, то пробел можно не ставить. Примеры: if ispassage($i)!= n if isaffected($n)== sneak if level($n)>20 15.09.2006 - Новые проверки "carryobjvnum", "carryobjtype" if carryobjvnum($n) == 100 Данное условие считается выполненным, если в инвентаре у $n есть хотя бы один предмет VNUM 100 или же на $n надет хотя бы один такой предмет. if carryobjtype($n) == 5 if carryobjtype($n) == оружие Данное условие считается выполненным, если в инвентаре у $n есть хотя бы один предмет типа "оружие" или же на $n надет хотя бы один такой предмет. В обеих проверках поддерживается только оператор "==". Предметы, находящиеся в контейнерах, не учитываются. Схожие проверки: "invobjvnum", "wearobjvnum", "invobjtype", "wearobjtype". Название типа предмета указывается в том же виде, какой дает заклинание познания. Можно указывать тип предмета по номеру (см. выше о проверке "invobjtype"). Не забывайте, пожалуйста, что для моба, на котором программа, рекомендуется использовать другие проверки: "ovnumcarry", "otypecarry" (они позволяют оценить и количество предметов, но без указания персонажа). 02.10.2006 - Новый параметр оператора "mpdamage" mpdamage $n 200 30 В операторе "mpdamage" теперь можно указывать третий (необязательный) параметр, который отражает возможный разброс наносимого повреждения в процентах. В данном примере персонажу $n наносится случайно выбранное число от 140 (200-30%) до 260 (200+30%) единиц повреждения. Разброс должен задаваться числом от 1 до 90. 10.10.2006 - Новые расы "паукообразное" и "растение" Введена раса "паукообразное". Для всех пауков следует выбирать эту расу, а не расу "насекомое". В AWE 1.2 поставьте галочку "Все расы" и выберите из расширенного списка рас "spider". Введена раса "растение". В отличие от энта, растение автоматически нельзя очаровать и призвать, на него не действует умение "вглаз" и некоторые другие (считается, что у растения нет головы, глаз и других атрибутов "нормального" тела). "Оглушить" и "сбить", в общем случае, действуют, но с выдачей сообщений без упоминания головы. Из растений не выпадают волшебные книги. Большинство мобов-цветов, кустиков и деревьев, лишенных "квазиразумного" поведения и специфического антуража, следует делать растениями, а не энтами. В AWE 1.2 поставьте галочку "Все расы" и выберите из расширенного списка рас "ooze". В Арде этот моб будет восприниматься как "растение". Не обращайте внимания на сообщения редактора зон о том, что упомянутые две расы не рекомендуется использовать. 23.12.2006 - Об использовании кнопок и рукояток в строящихся игровых зонах В демо-версии Арда MUD 1.2 имеются следующие ошибки: 1) У рукояток (lever) перепутано сообщение о позиции при попытке их потянуть или нажать. 2) У кнопок (button) и рукояток (lever) перепутано сообщение о позиции при попытке их осмотреть. В коде игры эти ошибки уже исправлены. Рукоятку теперь можно нажать, если она "в верхнем положении" (и кнопку тоже), потянуть - если она "в нижнем положении". Учтите это при тестировании зон в демо-версии и при передаче вашей зоны на проверку внесите соответствующие изменения в флаги "в верхнем положении" кнопок и рукояток. 26.12.2006 - Об использовании программ act_prog в строящихся игровых зонах В демо-версии Арда MUD 1.2 параметры act_prog необходимо было задавать с цветами, например, "act_prog &Gзеленый свисток". Обратите внимание, что в коде игры сейчас триггер act_prog срабатывает на строку, в которой все переводы цвета и фона удалены. Поэтому, закончив тестирование, при передаче вашей зоны на проверку удалите все переводы цвета и фона в параметрах программ act_prog. 10.01.2007 - Новый флаг моба "nonormalbody", новые флаги навыков Для мобов введен новый флаг "nonormalbody". Его следует ставить на мобах, не имеющих "обычного" тела, то есть головы, глаз, шеи и т.п. Для мобов расы "растение" этот флаг ставить необязательно, он подразумевается автоматически. Для того, чтобы "научить" AWE 1.2 флагу, введите следующую строку в разделе [ActFlags] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag4= nonormalbody | nonormalbody - моб лишен обычного тела, головы и глаз (это проверяется при атаках stun, bash, gouge и др.) Для навыков (умений и заклинаний) в skills.dat введены новые флаги: 1) "whofighting" - навык действует лишь в бою и только на вашего непосредственного противника. Пример - "пнуть (kick)". 2) "charmustsee" - вы должны видеть жертву, чтобы успешно применить навык. Пример - "вглаз (gouge)". Флаг "mustsee" переименован в "victimmustsee" с сохранением его смысла (см. выше). 3) "onlynormalbody" - навык не действует на мобов, не имеющих "обычного" тела, то есть на туман, рой насекомых, башню, слизь и т.п. (на практике навык с таким флагом не будет действовать на мобов с флагом "nonormalbody" и растения). Пример - "вглаз (gouge)". Данный флаг не отображается в справке по навыку в разделе "Свойства". Чтобы "научить" AWE 1.2 этим флагам, введите следующие строки в разделе [SkillFlags] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag24= VICTIMMUSTSEE | не действует на жертву, если она не видит использующего навык Flag25= CHARMUSTSEE | не сработает, если использующий навык не видит жертву Flag26= ONLYNORMALBODY | не действует на мобов с флагом NONORMALBODY Flag27= WHOFIGHTING | действует только в бою и на непосредственного противника Прежнюю строку Flag24= MUSTSEE ... нужно удалить. 14.01.2007 - Введен новый тип предмета "руна" Появился новый тип предмета "руна" - смотрите справку на темы РУНЫ(RUNES), ИССЛЕДОВАТЬ(EXPLORE), УЛУЧШИТЬ(IMPROVE) в игре. В AWE 1.2 поставьте галочку "Все типы" и выберите из расширенного списка типов предмета "rune". Если руна в вашей зоне уже "исследована", поставьте на нее флаги "glow" и "runed" и какие-либо аффекты, которые перейдут на оружие при успешном применении навыка "улучшить". Если руна еще не исследована, не вздумайте устанавливать на нее кучу полезных аффектов, поскольку при исследовании что-то добавится! ВНИМАНИЕ! Никогда не размещайте предметы типа "руна" в строящихся зонах без согласования с администрацией MUD'а! Если вы хотите запросить разрешение на это, предварительно ТЩАТЕЛЬНО И ВСЕСТОРОННЕ продумайте меры, чтобы НИКТО не мог получить такой предмет (даже без начальных аффектов) на халяву, чтобы нельзя было вскоре повторно получить такой предмет. Если вы не уверены, что способны придумать такие алгоритмы, лучше ОТКАЖИТЕСЬ от мысли использовать руны в вашей зоне! 27.01.2007 - Новые семейства операторов "mpact..." и "mpshow..." Как известно, сообщения в мобпрограммах можно выдавать с помощью операторов: mpecho ... - послать сообщение "..." всем в комнате; mpechoat $n ... - только одному персонажу, в данном случае - $n; mpechoaround $n ... - всем в комнате, кроме указанного персонажа ($n). На все эти сообщения, вообще говоря, могут отреагировать триггеры act_prog на других мобах, предметах или комнате. Все эти сообщения автоматически начинаются с большой буквы. Подсказка: если вам надо сделать сообщение обычного цвета, начинающееся с маленькой буквы, сделайте так: mpecho &W&wтекст сообщениЯ Однако во многих случаях выдача сообщений операторами mpecho... выглядит нелогичной. К примеру, сообщение "ВасЯ посмотрел вам прЯмо в глаза." персонаж должен, по идее, получить только тогда, когда видит Васю. Если использовать оператор "mpechoat", слепой получит сообщение "Кто-то посмотрел вам прЯмо в глаза.", что, конечно, выглядит глупо. Еще пример: сообщение "На травинках висЯт капельки росы." должны получить только те персонажи, которые способны видеть в комнате (см. выше о введении проверки "canseeroom". Правда, такая проверка хороша, когда сообщение надо выдать одному персонажу - можно проверить, видит ли он в комнате). Большинство подобных ситуаций способны разрешить новые операторы, построенные по аналогии с mpecho... и выдающие сообщения для всех или некоторых персонажей в текущей комнате: mpact ... - выдает сообщение "..." всем, кто видит персонажа, совершающего действие (обычно это моб, на котором размещена программа) mpactat $n ... - сообщение выдается персонажу $n, если он видит моба mpactaround $n ... - сообщение выдается всем тем в комнате, кто видит моба, кроме $n mpshow ... - выдает сообщение "..." всем, кто способен видеть происходящее в комнате mpshowat $n ... - сообщение выдается персонажу $n, если он способен видеть происходящее в комнате mpshowaround $n ... - сообщение выдается всем тем, кто способен видеть происходящее в комнате, кроме $n Все эти три группы операторов учитывают видимость персонажей и предметов индивидуально для каждого игрока, которому отправляется сообщение (подставляя в нужных случаях "кто-то" и "что-то" в нужном падеже вместо имен и названий). Если некто не видит происходящее в комнате, он, конечно же, не видит ни одного другого персонажа в комнате. Обратите внимание: считается, что инфразрение не позволяет персонажу видеть происходящее в темной комнате (поскольку не видны название комнаты, ее основное и дополнительные описания). Этим операторы семейства mpshow... отличаются от проверки canseeroom. Пример: если вы хотите сообщить персонажу что-то вроде "Панцирь черепашки осталсЯ неповрежденным." при убийстве моба, стоит воспользоваться проверкой canseeroom (действительно, игрок с инфразрением увидит панцирь на теле моба и в темной комнате), а сообщение выдавать оператором mpechoat. Но если нужно сообщить одному персонажу "В развилке ствола вы заметили самострел, нацеленный в вашу сторону.", то логично воспользоваться оператором mpshowat (инфразрение не поможет заметить самострел в темноте). Это только общие рекомендации - в каждом случае решайте сами, какой вариант предпочтительнее. Все три группы операторов (включая mpecho...) теперь не поддерживают установку цвета в начале строки посредством сокращений типа "_cha", "_blu" и т.п. Используйте только перевод цвета с помощью символа & и (если очень надо) перевод фона с помощью символа ^. 31.01.2007 - О работе триггеров на комнате "entry_prog" и "leave_prog" Оба этих триггера на комнате отныне не срабатывают на бессмертных в визинвизе. 31.01.2007 - Новые переменные в мобпрограммах $V1-$V6 Введены новые переменные в мобпрограммах, которые используются для отображения нестандартного названия моба, на котором программа, с учетом видимости. К примеру, пусть моба зовут "разбойник" ($I2 - "разбойника"). Если вы выводите в программе много строк с именем моба (переменные $I1-$I6), это не очень хорошо выглядит (повторение одного слова). Тогда вы можете написать так: mpechoat $n Удар $V2(мужчины) едва не свалил вас с ног! Если тот, кому адресовано сообщение (то есть $n) видит моба, он увидит сообщение "Удар мужчины едва...", если не видит - "Удар кого-то едва...". Таким образом, в случае, если персонаж видит моба, на котором программа, вместо $V2 будет подставлено слово в скобках, если не видит - соответствующий падеж местоимения "кто-то". $V3 соответствует дательному падежу ("кому-то") и так далее. Слово в скобках нужно задавать сразу в правильном падеже. 31.01.2007 - Новые параметры вызова оператора "mptransfer" mptransfer all players 20000 Как известно, этот оператор перемещает всех игроков в текущей комнате в комнату VNUM 20000. mptransfer all awake 20000 Этот новый вариант оператора перемещает всех игроков в текущей комнате, кто находится в сознании, в комнату VNUM 20000 (то есть не перемещает спящих игроков и тяжело раненых, лишившихся сознания, не перемещает тех, кто находится под действием слабости от магии перемещений). Если игрок не был верхом и не стоял на ногах, он при этом "встанет" (без выдачи дополнительных сообщений). mptransfer all npc 20000 Этот новый вариант оператора перемещает всех мобов в текущей комнате в комнату VNUM 20000. Во всех случаях, как и ранее, можно в самом конце указывать параметр "show". 06.05.2007 - Введение "алхимии" Появилось новое умение СМЕШАТЬ(MIX) (смотрите справку в игре). Оно позволяет создавать зелья, размельчая и смешивая в ступке несколько ингредиентов, которые содержат различные магические эффекты. Во всем мире появилось около 100 разных ингредиентов и несколько ступок разной эффективности. Допускается введение новых ингредиентов и ступок в ваших зонах (свойства - по согласованию). Новый тип предмета "ступка" (пока что нужно в AWE 1.2 поставить галочку "все типы" и выбрать тип предмета empty1). В поле V3 задается "эффективность" ступки, то есть добавка к уровню магии получающегося зелья. Минимальное значение равно 0, максимально допустимое - 15. Обратите внимание, что хорошие ступки (с качеством 5 и более) могут добываться в ваших зонах ТОЛЬКО в результате выполнения достаточно сложного квеста, а качество 10 и более может быть только на ступках-артефактах! Каждая ступка должна допускать возможность зажать ее в левую руку (иначе нельзя будет использовать "смешать"). Новый тип предмета "ингредиент" (пока что нужно в AWE 1.2 поставить галочку "все типы" и выбрать тип предмета empty2). В полях V0-V5 задаются: V0 - количество ингредиентов на зону (только для растущих ингредиентов. Такие ингредиенты автоматически распределяются случайным образом по комнатам типа field, forest и hills зоны, исключая комнаты с флагами indoors, dark, nodig, nofloor. Количество также подсчитывается и поддерживается автоматически). Если этот ингредиент не растет, V0 должно равняться 0! V1 - эффект номер 1 (Sn). Например, для "подводного дыхания" Sn=8. В AWE 1.2 можно воспользоваться "редактором умений", который вызывается по клавише F11. Далее нажимаете кнопку "выбрать" и смотрите, какое число стоит слева от названия нужного эффекта. Можно найти Sn и в skills.dat. V2 - эффект номер 2 (Sn). V3 - эффект номер 3 (Sn). Каждый ингредиент должен содеражать 3 разных(!) эффекта. Обратите внимание, что для размещения в вашей зоне нескольких ингредиентов с одним и тем же эффектом нужно особое разрешение. Если вы хотите поместить ингредиенты с особо ценными эффектами, получение их должно быть особо трудным! V4 - ставьте тут 0 (служебное поле - текущее остаточное количество для "высева" растущих ингредиентов). V5 - ставьте тут 1 (уровень ингредиента, не проверяется). Для смешивания зелья нужен также стеклянный пузырек (VNUM 38, продается в магазине "Зеркало и Посох" в Брыле). 07.08.2007 - Доработка оператора "mpopenpassage" Оператор mpopenpassage теперь дополнительно позволяет устанавливать флаги создаваемого выхода, ключ и ключевые слова. Это открывает довольно интересные новые возможности в мобпрограммах! Пример использования: mpopenpassage 1000 1001 5 7 1005 'решетку решетка grate' Этот оператор открывает односторонний проход из комнаты VNUM 1000 в комнату VNUM 1001 в направлении 5, то есть "вниз" (см. выше в этом файле о численном задании направления выхода в операторах mpopenpassage и mpclosepassage!). Этот проход автоматически получает флаг PASSAGE (его не нужно указывать). В данном примере набор флагов "7" означает: 1=ISDOOR (дверь), 2=CLOSED (закрытая дверь), 4=LOCKED (запертая дверь), так как указанное значение флагов выхода 7=1+2+4. VNUM ключа, которым можно отпереть данную дверь, равен 1005. Кстати, обратите внимание, что предмет-ключ, VNUM которого указывается в свойствах некоторого выхода, не обязательно должен иметь тип "ключ" (впрочем, если у вас нет особых причин поступить иначе, все-таки используйте предмет типа "ключ"). И, наконец, ключевые слова выхода будут "решетку решетка grate". Первое слово должно быть русским названием в винительном падеже (открыть что: решетку). Список ключевых слов задается в одинарных или двойных кавычках. Флаги выходов (просуммируйте нужные значения): ISDOOR 1 CLOSED 2 LOCKED 4 SECRET 8 EX_SWIM 16 (не используйте) PICKPROOF 32 EX_FLY 64 CLIMB 128 DIG 256 EATKEY 512 NOPASSDOOR 1024 HIDDEN 2048 PASSAGE 4096 (не используйте) PORTAL 8192 (не используйте) RES1 16384 (не используйте) RES2 32768 (не используйте) xCLIMB 65536 xENTER 131072 xLEAVE 262144 xAUTO 524288 (не используйте) NOFLEE 1048576 xSEARCHABLE 2097152 BASHED 4194304 (не используйте) BASHPROOF 8388608 NOMOB 16777216 WINDOW 33554432 xLOOK 67108864 Описание флагов имеется в справке к AWE, а также во всплывающих подсказках, появляющихся в AWE при наведении курсора на квадратик, соответствующий флагу. 23.08.2007 - Новый оператор "mpfixdoor" и новая проверка "doorbashed" Добавлен оператор "mpfixdoor" для снятия флага BASHED с выбитой с помощью умения "выломать (doorbash)" двери (то есть для ее "ремонта"). Чаще всего он не нужен, поскольку при ресете зоны дверь, как правило, закрывается и запирается, а ресет двери теперь снимает флаг BASHED автоматически. Если же галочка ресета выхода в вашей зоне намеренно не поставлена (как на воротах Брыля: их открывает и закрывает привратник по часам либо по просьбе игроков) либо вы, скажем, хотите изобразить внеплановый ремонт (производимый мобами, которые случайно обнаружили беспорядок), тогда этот оператор вам пригодится. Проверка "doorbashed" позволяет определить, выбита ли дверь. Пример: if doorbashed($i) == n mpfixdoor n mpact &c$I1 починил ворота.&w endif Проверяется дверь, которая находится к северу ("n", "с", "north" или "север") от моба, на котором программа ($i). Если она выломана, производится "ремонт" (обратный выход также ремонтируется, если он есть). Пока что в этой проверке (как и в "isopen" или "islocked") любой оператор будет воспринят как "==". И все-таки используйте именно "==", так как в будущем, скорее всего, эта недоработка будет устранена. 26.08.2007 - Новая проверка "overmatch" У каждого моба теперь имеется численный параметр overmatch, в котором запоминается максимальное превышение уровня противника (включая других мобов) над уровнем этого моба за все время его жизни. Таким образом, если игрок 48 уровня когда-либо бил моба 45 уровня оружием либо заклинаниями, значение этого параметра устанавливается в 3. Более того, если с тем же мобом будет драться игрок 30 уровня (к примеру), но того во время боя станет лечить либо помогать ему полезными заклинаниями другой игрок 50 уровня, overmatch все равно станет равным 5. Этот параметр позволяет оценивать "честность" схватки в мобпрограммах с учетом взаимодействия с другими персонажами и определять, стоит ли победа над мобом награды! > death_prog 100 if overmatch($i) < -2 mpoload 10000 endif Данная программа на мобе загружает при его смерти предмет VNUM 10000 только в том случае, когда самый сильный противник моба (либо поддерживавший противника персонаж) был слабее по крайней мере на три уровня. Эту проверку желательно использовать при загрузке самых хороших предметов вместо старой проверки уровня победителя if ispc($n) and level($n) < 43 mpoload 10000 endif 19.10.2007 - Новый флаг поведения моба "rangedattack" Появился совершенно новый интересный алгоритм автоматического поведения мобов. Если на мобе установлен флаг "rangedattack", он будет пытаться атаковать игроков (только игроков) в соседних комнатах - посредством выстрелов из метательного оружия либо дальнобойных заклинаний (пока такое одно - "волшебная ракета (magic missile)". Цель выбирается случайно для агрессивного моба (то есть моба с флагом "aggressive"), для других мобов это игрок, на которого моб охотится или которого ненавидит (после прошлых сражений между ними). Любой моб без этого нового флага никогда не будет самостоятельно (автоматически) пытаться атаковать противника в соседней комнате, даже если у него есть, к примеру, лук и стрелы. Впрочем, моба можно заставить делать это программами. При наличии в экипировке моба с флагом "rangedattack" метательного оружия и отсутствии соответствующих метательных снарядов (возможно, закончились) перед выстрелом автоматически загружается стандартный метательный снаряд нужного типа. Агрессивный моб с флагом "rangedattack", обнаружив игрока в соседней комнате и предприняв первую попытку атаковать на расстоянии (если это возможно), будет также пытаться подойти к этому игроку и напасть на него вблизи (если сможет). Фактически, агрессивный бродячий моб с новым флагом, даже без средств напасть издали, обладает способностью автоматически находить игроков в соседних комнатах и настигать их там! Это повышает динамичность игры и делает зону более опасной. Если моб стационарный (с флагом "sentinel"), он стреляет, не сходя с места. Если моб одновременно агрессивный и трусливый ("aggressive" и "wimpy"), то он подло стреляет издалека, но к игроку специально не подходит (кроме того, на кого моб охотится). Кстати, моб с таким странным, казалось бы, сочетанием флагов сам нападает только на игроков, которые спят либо при смерти. Примером такого моба является белый волк в Восточном Арноре. Для того, чтобы "научить" AWE 1.2 флагу "rangedattack", введите следующую строку в разделе [ActFlags] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag3= rangedattack | rangedattack - моб атакует преследуемого игрока из стрелкового оружия и дальнобойными заклинаниями 19.10.2007 - Новая атака моба "magicmissile" Неиспользуемая атака мобов "gaze" заменена на новую атаку "magicmissile". Моб будет использовать заклинание "волшебная ракета (magic missile)" против игроков, находящихся в соседних комнатах (только при наличии флага "rangedattack"). Во время ближнего боя эта атака не используется вообще. Для того, чтобы "научить" AWE 1.2 этой атаке, введите следующую строку в разделе [MobAttacks] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag20= magicmissile | magicmissile - при наличии флага 'rangedattack', моб использует заклинание 'волшебная ракета' как дальнобойное 01.12.2007 - Доработка автоматического призыва у мобов Теперь моб, который автоматически призывает сбежавшего игрока (мобы с одной из способностей cast_cleric, cast_mage и cast_undead), способен призвать игрока в комнату с флагом noastral, если на этой комнате нет флага norecall. 02.12.2007 - Новый флаг предмета "poisonaffect" Вообще говоря, этот флаг появляется на метательном снаряде, если нанести на него зелье с вредным эффектом командой "намазать (apply)". Флаг означает, что аффект weaponspell на метательном снаряде (стреле, например) обусловлен особым ядом. Вследствие этого заклинание не подействует на того, кто поражен такой стрелой, но имеет иммунитет к яду либо сделал успешный спасбросок по стойкости и избежал действия яда. В этом состоит отличие от обычного weaponspell. Познание покажет, к примеру, "Предмет отравлен Ядом с эффектом 'слепота' 50 уровнЯ." Допустимо использовать этот флаг (вместе с определенным aффектом weaponspell!) в зонах на метательных снарядах или даже на оружии (в последнем случае - только на артефактах, поскольку стрела одноразовая, а эффект на оружии постоянен! И если вы захотите сделать такой артефакт, пусть он будет нехранимым или тающим за 2-3 дня, поскольку яд не может долго держаться на оружии). Для того, чтобы "научить" AWE 1.2 этому флагу, введите следующие строки в разделе [ItemFlags] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag39= stopmelt | stopmelt - не используйте Flag40= poisonaffect | poisonaffect - эффект weaponspell на этом метательном снаряде или оружии обусловлен ядом В том же разделе нужно также исправить значение Number на 41. Служебный флаг "stopmelt" используется для остановки таяния предмета. 08.12.2007 - Доработка мест ремонта в зоне Теперь разрешено задавать в зоне два места ремонта подряд на одном и том же мобе (в AWE это делается в диалоговом окне "Магазины и места ремонта зоны"). Сделано это для того, чтобы кузнец мог ремонтировать не три, а шесть различных типов предметов, а формат файла зоны при этом не менялся бы. 08.12.2007 - Изменение "трусости" у мобов Теперь моб с флагом "wimpy", который может сбежать из боя, сбегает не на одну клетку, а на две, если это возможно (не обязательно по прямой, но не возвращаясь к обидчику). Изменение связано с возможностью стрелять вдогон убежавшему мобу, что заставило бы его вернуться и напасть на игрока. Ну и выслеживание сбежавшего моба стало немного более сложным. 11.12.2007 - Введение стрельбы Разрешено применение метательного оружия (смотрите подробности в десятке тем справки, начав, например, с темы МЕТАТЕЛЬНОЕ ОРУЖИЕ(MISSILE WEAPONS). Ранее в Арде технически существовало и действовало метательное оружие, однако оно не использовалось, поскольку пришедшие из SMAUG алгоритмы не выдерживали серьезной критики. Разработан целый ряд новых алгоритмов, внесено множество изменений и доработок, направленных на следующие цели: 1) использование метательного оружия игроками не должно позволять безнаказанно убивать мобов; 2) использование метательного оружия мобами должно быть гибким, динамичным и в значительной степени автоматизированным, что позволит оживить игру и сделать действия стреляющих мобов более опасными и неожиданными для игроков; 3) в связи с целью 1), метательное оружие не может отличаться большими повреждениями, однако его использование должно давать игрокам некоторые интересные возможности. Цели 1) и 2), по моему мнению, достигнуты в полной мере. Что касается третьей, в нынешней ситуации, когда большинство игроков имеет десятки ремортов и, как следствие, большой опыт, эффективность в бою и возможности разных классов, они вполне обходятся и без метательного оружия. Тем не менее, антураж и новые возможности для игроков появились, см. справку на тему СТРЕЛЬБА(FIRING). Итак, дополнительные типы предметов, которые можно использовать в зонах: missile_weap - метательное оружие одного из 5 типов; projectile - метательный снаряд одного из 5 типов; quiver - колчан для метательных снарядов одного из 5 типов или для любых. Все эти типы предметов доступны в AWE 1.2, если поставить галочку "Все типы". Для missile_weap и projectile значения V0, V1, V2, V4 задаются так же, как и для предмета типа "weapon" (см. раздел справки к AWE 1.2 "Значения для разных типов предметов"). Учтите, что повреждения, которые вы задаете для метательного снаряда, являются ДОПОЛНИТЕЛЬНЫМИ к повреждениям, заданным для метательного оружия. Именно поэтому для стандартных метательных снарядов повреждения составляют всего 1-2 или 1-3. Для quiver флаги задаются аналогично предмету типа "container". При расчете вместимости колчана обратите внимание, что разные стандартные метательные снаряды имеют разный вес (дротики и камни - 2, стрелы, болты и шипы - 1). Для всех трех новых типов V5 - уровень предмета. Игрок не может использовать метательные снаряды более высокого уровня, чем собственный уровень. Для всех трех новых типов V3 - тип метательного оружия и метательного снаряда. ----------------------------------------------------------------------------- V3 сообщение тип снаряда, VNUM тип оружия, VNUM ----------------------------------------------------------------------------- 13 "Выстрелом из арбалета" арбалетный болт 121 арбалет 126 14 "Выстрелом из лука" стрела 122 лук 127 15 "Броском дротика" дротик 123 копьеметалка 128 16 "Камнем из пращи" округлый камень 124 праща 129 17 "Своим плевком" острый шип 125 духовая трубка 130 ----------------------------------------------------------------------------- В таблице приведены VNUM стандартных образцов метательного оружия и стандартных снарядов, которые вы можете использовать в своих зонах, если не хотите создавать новые предметы либо ограничены в VNUM'ах. Существуют также стандартные колчаны для каждого типа метательного снаряда, соответственно VNUM 131-135, а также "универсальный" колчан VNUM 136. У него V3=0, что позволяет складывать туда метательные снаряды любого типа (однако в одно и то же время - только одного определенного типа. То есть, положив в универсальный колчан первую стрелу, вы не можете добавлять туда дротики, пока не опустошите колчан). Логичнее, мне кажется, создавать новые колчаны для определенных типов снарядов (то есть явно указать V3 для колчана). Все необходимое для тестирования стрельбы можно взять в комнате VNUM 102 ("Лавка призрачного лучника", зона Limbo) демо-версии 1.3 игры. Если вы экипируете моба метательным оружием, не забудьте поставить ему флаг "rangedattack", чтобы он смог автоматически использовать его! 11.12.2007 - Автоматическое помещение стрел в колчан моба Поскольку в зоне нельзя поместить предметы в контейнер, который надет на моба, (в данном случае это колчан), реализован алгоритм, автоматически помещающий (по возможности) все метательные снаряды подходящего типа из инвентаря моба в надетый на него колчан. Таким образом, вы можете в AWE поместить моба в комнату, надеть на него колчан и дать ему в инвентарь 10 стрел - он незаметно сложит их в колчан, как только появится в мире при ресете зоны. Напоминаю, при недостатке метательных снарядов моб с флагом "rangedattack" (см. выше) автоматически загружает перед выстрелом стандартный метательный снаряд нужного типа. Однако каждому мобу, экипированному метательным оружием, желательно изначально дать 10 стандартных метательных снарядов либо несколько особых, сделанных вами в зоне (с особым названием, с повышенными повреждениями или смазанных каким-либо ядом, см. выше описание флага "poisonaffect"). Это нужно для того, чтобы игроки смогли забрать неиспользованные мобом снаряды. 24.12.2007 - Новый флаг комнаты "nevermob" Существуют комнаты, в которые мобы не должны попадать вообще (за исключением мобов, специально помещенных туда ресетами). К примеру, это комнаты таверн, куда некоторые озорники любили заталкивать мобов, встречающих каждого входящего программами greet_prog с выдачей кучи сообщений, а также определенные служебные комнаты (например осуществляющие перемещение вошедших игроков программами entry_prog, как комната перед входом в зону "Пещеры алчных гномов"). Введен новый флаг комнаты "nevermob", который является расширенным вариантом флага "nomob". В комнату с новым флагом моб не может зайти сам, его нельзя ни затолкать туда, ни призвать. В такой комнате моб может быть только если: - он помещается туда ресетом; - либо это место возврата, куда игрок может вернуться верхом на лошади; - либо это моб, следующий за бессмертным, который использовал goto; - либо это моб, перемещенный командой transfer/mptransfer/minvoke и т.п. Для того, чтобы "научить" AWE 1.2 флагу, введите следующую строку в разделе [RoomFlags] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag5= nevermob | nevermob - расширенный вариант флага nomob: моба нельзя сюда ни затолкать, ни призвать 27.12.2007 - Новые типы аффектов, действующих на моба Начиная с 27.12.2007, в связи с введением новых расовых умений игроков, в течение примерно месяца появились 4 новых аффекта, которые могут быть использованы на мобах в зонах. Правда, не для каждого из них в этом есть смысл. Аффект "courage" ("мужество") улучшает концентрацию, а аффект "fear" ("страх") ее ухудшает (см. справку на тему КОНЦЕНТРАЦИЯ(CONCENTRATION)). Оба этих аффекта на данный момент не оказывают влияния на мобов. Аффект "disguise" ("маскировка") означает новую улучшенную форму скрытности. Пока моб с таким аффектом не перемещается, не произносит вслух фраз, не производит действий, которые заметны в комнате (социалы, mpact в программах и т.д), его можно заметить только при наличии истинного зрения. Исключение - хоббиты, которые замечают замаскированных персонажей. Если моб выдал свое присутствие, маскировка отменяется и возобновляется только с ресетом зоны. Аффект "absorb_magic" ("поглощение магии") позволяет мобу поглощать примерно одну десятую часть повреждений от любых заклинаний. Для того, чтобы "научить" AWE 1.2 новым аффектам, введите такие строки в разделе [A_Flags] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag40= courage | courage - улучшает концентрацию. На мобах не имеет смысла - не используйте Flag41= fear | fear - ухудшает концентрацию. На мобах не имеет смысла - не используйте Flag42= disguise | disguise - неподвижного персонажа видят лишь хоббиты и обладающие истинным зрением Flag43= absorb_magic | absorb_magic - одна десятая урона от любых заклинаний поглощается и восполняет магию В том же разделе нужно также исправить значение Number на 44. 06.03.2008 - Новый флаг навыков "physical" Для навыков (умений и заклинаний) в skills.dat введен новый флаг "physical" - данный навык подразумевает физический контакт (удары, наносящие физический урон, навыки "сбить", "оглушить" и т.п.). При применении этого навыка должны сработать активные щиты жертвы (например огненный щит). Чтобы "научить" AWE 1.2 этому флагу, введите следующую строку в разделе [SkillFlags] файла настроек arda.ini (в том же каталоге, что и редактор зон): Flag28= PHYSICAL | удар, наносЯщий физический урон 03.04.2008 - Введен новый тип предмета "сейф" Введены персональные сейфы игроков (см. справку на тему СЕЙФ(SAFE)). Появился новый тип предмета "сейф", который заменил ранее не использовавшийся тип "runepouch". Стандартный личный сейф имеет VNUM 194. В поле V0 задается количество предметов, которые можно поместить в данный сейф, когда он находится в банке. Создание предметов типа "сейф" в игровых зонах не разрешено. 13.04.2008 - Об использовании типов сопротивляемости, иммунитета, уязвимости В названиях типов сопротивляемости, иммунитета, уязвимости (RIS) символы подчеркивания заменены пробелами. Если вы ранее работали с демо-версией, обратите внимание, что теперь там нужно, к примеру, набирать команду mset маслютик resistant "рубящее оружие" кислота (с одинарными или двойными кавычками для типа RIS, состоящего из нескольких слов) вместо прежней формы этой команды mset маслютик resistant рубящее_оружие кислота Изменение связано с доработкой отображения списка флагов либо типов RIS (в частности, в заклинании познания, в командах "эффекты все", "mstat" и др.). 24.04.2008 - Задание типа потока для выхода в комнате Внесен ряд доработок в использование потока для выхода в комнате. В справке к AWE 1.2 раздел "Тип потока для выхода" устарел. Пользуйтесь приведенной ниже информацией. Тип Использование Сообщение в первой комнате Примечание Сообщение во второй комнате -------------------------------------------------------------------------------- MYSTERIOUS (нет) (нет) WHIRLPOOL водоворот всосан 1) вылетел VACUUM любое всосан вылетел LAVA поток воды поплыл 2) вплыл CURRENT поток воды поплыл 1) вплыл BREEZE течение в воздухе поплыл, увлекаемый ветром 3) вплыл по ветру GEYSER мощная волна волна унесла приплыл в потоке воды WAVE мощная волна волна унесла 1) приплыл в потоке воды EARTHQUAKE землетрясение упал 2) упал SINKHOLE яма-ловушка упал 2) упал QUICKSAND зыбучий песок зыбучий песок поглотил 2) упал в туче песка LANDSLIDE оползень пласт земли увлек 2) въехал на пласте земли SLIP скользкая поверхность потерял равновесие и заскользил 2) соскользнул VORTEХ любое разноцветный вихрь всосал 4) разноцветный вихрь выбросил HOTAIR горячий ветер порыв горячего ветра отбросил 5) влетел на крыльях горячего ветра COLDWIND ледяной ветер пронизывающе-холодный ветер отбросил 5) влетел на крыльях ледяного ветра WIND штормовой ветер порыв штормового ветра бросил 5) влетел на крыльях штормового ветра STORM ураганный ветер беснующаяся буря понесла влетел на крыльях ураганного ветра 5) Примечания: 1) На поверхности воды не работает, если на персонаже fly или float. 2) Не работает, если на персонаже fly или float. 3) Легкий ветерок (бриз) не перемещает персонажей. 4) Направление перемещения не указывается. 5) Перемещает персонажа, если на нем fly или float. В противном случае рассматривается позиция персонажа, его сила, переносимый вес и сила потока, чтобы определить, может ли он удержаться на месте. 24.04.2008 - Новый параметр вызова оператора "mptransfer" mptransfer objects 10000 Данный оператор перемещает все предметы из комнаты, в которой находится моб с программой, в комнату VNUM 10000. Если вы хотите переместить и персонажей, и предметы, сначала переместите предметы, а потом уже персонажей командой mptransfer all 10000 show В этом случае перемещенные персонажи увидят все предметы на новом месте. ========================================================================== ВНИМАНИЕ! Демонстрационная версия 1.3 Арда MUD, выпущенная в конце апреля 2008 года, не поддерживает тех нововведений, о которых пойдет речь дальше! ========================================================================== -------------------------------------------------------------------------------- Этот информационный файл время от времени дополняется без специальных объявлений