Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
- Конференция мира Аладон - > Уголок билдера > Alua |
Автор: Калевала Sep 13 2012, 12:10 | ||||
1. Исправлены баги функций aff_tochar,aff_toobj, aff_toroom,aff_toarea 2. Добавлена функция mobcast. Действие функции аналогично mob cast из OLC Синтаксис: mobcast("строка заклинания и цель",ch) ch - исполнитель
Результат:
Функция сделана именно для кастов, по функции order мобы не кастуют. |
Автор: Калевала Sep 14 2012, 16:12 | ||||
К нашему Алуа прикручен модуль Pluto. Модуль предназначен для сериализации данных в алуа и последующей загрузки данных из файлов. Для работы с модулем не требуется его загружать в скриптах и прогсах. То есть конструкция require "pluto" не нужна (да и не работает). Вместо этого реализованы три функции для работы с Плуто. 1. pluto_save. Синтаксис: pluto_save(filename,object). Функция сохраняет полностью object в файл с именем filename 2. pluto_load. Синтаксис: object=pluto_load(filename). Функция загружает из filename все в object. 3. pluto_delete. Синтаксис: pluto_delete(filename). Функция удаляет файл с указанным именем. Файлы хранятся в специальной директории. Не сттоит задавать слишком большие имена файлов (максимум 255 символов хотя нафиг такие нужны.) Сервер будет ругаться и писать ошибки. Использовать слэши так же не получится. В файлы сохраняются любые объекты Алуа: переменные, таблицы, функции, потоки, но соблюдается один принцип - один объект в один файл. Ну естественно никто немешает набить таблицу потоками и функциями и сохранить эту таблицу с последующим восстановлением. Простой пример использования:
Результат:
В примере переменной присваивается значение "Проверка1" и выводим на экран. Затем сохраняем переменную в файл kalevala_data.dat После этого меняем значение на "Сохранили" выводим на экран. После чего загружаем данные из файла в переменную и опять выводим на экран. После чего файл удаляем за ненадобностью. |
Автор: Калевала Nov 14 2012, 13:41 |
Добавлен для работы новый объект КЛАНЫ. Так же добавлены две функции для работы с кланами и объект кланов и фукнции доступны только в скриптах, но не в прогсах: get_clanlist() - возвращает первый объект клана в списке кланов get_clan(name или id клана) - возвращает первый объект клана в списке кланов Поля доступные для объекта КЛАН: id - (get) номер клана title - (get set) титул клана name - (get ) имя клана master - (get) имя клан мастера desc - (get set) описание клана date_create - (get) дата создания depot - (get) первый объект в списке на складе клана дальше получать через next_content reput - (set get) репутация клана rating - (set get) рейтинг клана recall - (set get) если у клана есть своя комната рекола то она будет тут. cnext - (get) следующий по списку объект клана |
Автор: Калевала Dec 12 2012, 16:20 |
Добавлена функция can_see_obj(obj,ch) в Луа видит ли ch предмет obj в случае если да возвращает true в противном false |
Автор: Калевала Dec 18 2012, 16:16 |
Добавлены функции: know_skill - Узнать знает ли умение персонаж и на сколько процентов. Два варианта использования. Синтаксис: know_skill(number,ch) - первым параметром номер умения, вторым объект игрока know_skill(str,ch) - первым параметром имя умения, вторым объект игрока get_variable - функция для связи Алуа скриптового и Алуа прогсов. Поскольку это две разные виртуальные машины Луа пространство имен в них не пересекается и функция призвана служить каналом передачи переменных, таблиц, строк если необходимо. Синтаксис: local varname=get_variable("имя переменной"). В varname будет возвращена перменная с именем "имя переменной" из другой виртуальной машины Луа. Если вы вызвали это функцию из прогсов, то получите переменную из пространства скриптов и наоборот. ВНИМАНИЕ! если вы передаете таблицу и таблица имеет подтаблицы то они не передаются. Реализовать это пока не удалось. |
Автор: Калевала Dec 21 2012, 16:07 |
Отлажена наконец-то работа функций set_bit remove_bit is_set Использование примеры: Проверка битов: if(tobj.item_type==CONST.ITEM_WEAPON and is_set(tobj.value4,CONST.WEAPON_TWO_HANDS)) then echo("У "..vic.rod.." двуручное оружие - "..tobj.im,ch.room) if(is_set(tobj.value4,CONST.WEAPON_FLAMING)) then echo("Оружие с флагом флэйминг - "..tobj.im,ch.room) end end Установка бита: tobj.value4=set_bit(tobj.value4,CONST.WEAPON_TWO_HANDS) Удаление бита: tobj.value4=remove_bit(tobj.value4,CONST.WEAPON_TWO_HANDS) Добавлены следующие константы для флагов оружия: WEAPON_FLAMING WEAPON_FROST WEAPON_VAMPIRIC WEAPON_SHARP WEAPON_VORPAL WEAPON_TWO_HANDS WEAPON_SHOCKING WEAPON_POISON WEAPON_HOLY |
Автор: Калевала Jan 29 2013, 14:53 |
Добавлена функция damage - наносит дамаг от ch на vic Синтаксис функции: damage(ch,vic,dam,dt,dam_type,show) ch - объект игрока/моба кто наносит дамаг vic - объкт игрока/моба кто получает дамаг dam - величина дамага dt - номер умения каким наносится дамаг (например как будто выпадом если поставить номер выпада) можно просто оставить 0 dam_type - тип наносимого дамага например укол или негатив. Можно оставить 0 show - или 0 не будет видно сообщения или 1 будет видно сообщение. Функция вызывает системную функцию damage - отсюда вытекает что эта функция не снимает автоматически указанное количестьво в dam количество жизни. В функции идет куча проверок на резисты, иммуны и прочая и прочая, то есть то что проверяется когда вы просто начинаете бой или деретесь в бою. ------------------------------------------------------------------------------------------------- Добавлены следующие флаги-константы для поля структуры эффектов where TO_AFFECTS TO_OBJECT TO_IMMUNE TO_RESIST TO_VULN TO_WEAPON TO_DETECTS TO_PLAYER |
Автор: Калевала Mar 21 2013, 13:26 |
Непосредственно в Аладоне реализовано. Функции l_setrec(ch,var,varvalue) - устанавливает (или переустанавливает переменную на персонажа) l_getrec(ch,var) - возвращает занчение переменной на персонаже по ее имени. Возвращает nil если персонажа нет в таблица переменных или если переменная с таким именем неопределена l_delrec(ch,var) - удаляет указанную переменную с персонажа. Возвращает nil, если нет такого персонажа в таблице переменных или если переменная неопределена. Где - ch объект игрока, var имя переменной (например: "test"), varvalue - значение переменной (например: "012345") И имя переменной и ее значение задаются в скриптах непосредственно как строки. |
Автор: Калевала Mar 29 2013, 10:56 |
Добавлена функции : look Синтаксис: look(ch,arg) - где ch объект игрока моба, arg аргумент - что смотрим Примеры: look(ch,"") - игрок осмотрит текущую комнату look(ch,"раук") - игрок попытается посмотреть на моба Раук если он есть в комнате look(ch,"в пояс") - игрок попытается посмотреть в пояс если он у него есть. |
Автор: Калевала May 23 2013, 10:54 |
Добавлена луашная функция для повышения процентов умения луашных функция l_check_improve(ch,vic,sn,res,multi,val,name) Где: ch - тот у кого пытаемся повысить умение vic - если в бою или еще как то это цель. Если нет то просто ставим на место vic - ch sn - номер луашного умения res - откуда вызов, если при провале умения то ставим false, если при удачном применении то ставим true multi - модификатор сложности изучения, чем выше тем выше шанс что сработает. Ставится обычно в пределах от 1 до 7,8 val - насколько будет повышено или понижено при удаче либо положительно, либо отрицательно name - имя умения которое проверяем отличие от increase_skill в проверках, рэндоме и прочем. Функция схоже с аналогичной в коде. В случае удачного срабатывания возвращает 1 В случае неудачного срабатываания возвращает 0 В случае неожиданного прерывания возвращает 2 |
Автор: Калевала May 24 2013, 14:43 |
Функция: l_get_char_room(ch,arg) Ищет в комнате где находится ch моба или персонажа указанного в arg. Поиск идет по количеству букв указанных в arg. То есть ищутся и сравниваются буквы в имени указанные в arg с 1 буквы имени итд. Если поиск успешный возвращается объект персонажа/моба. Так же можно задавать номер искомого объекта в комнате, то есть если у нас допустим в комнате 5 мобов то можно задавать arg равным 4.<name mob> Пример: Доупустим в комнате 4 командора и нам нужен второй из них l_get_char_room(ch,"2.ком") |
Автор: Калевала Nov 6 2014, 18:01 | ||||
добавлена функция для получения таблиц данных get_globaltables(const) Параметр запрашиваемое имя таблицы. Берется из констант. Таблиц пока две - материалы и жидкости. Константы соответственно: CONST.TABLES_MATERIALS, CONST.TABLES_LIQUIDS Пример:
Вывод:
У каждой таблицы свое количество поле. Посмотреть как в примере можно по key2 |
Автор: Калевала Nov 10 2014, 17:42 |
Для работы с кастомными эффектами на объектах добавлены поля c1_aff,c1_prog ................... c5_aff,c5_prog c1_aff - установка номера эффекта из кастомной таблицы внутри пространства имен олц (не скриптов) c1_prog - установка номера обрабатывающего прогса. Поля можно как устанавливать так и получать. |
Автор: Калевала Feb 4 2015, 13:00 |
Добавлены следующие функции: send_tochar(string,ch) - функция отправляет сообщение персонажу указанному в аргументе. Сообщение посылается даже спящему. Функция не отрабатывается триггерами и прочим. Просто сообщение. string.lower2(string),string.upper2(string) - функции переводят аргумент в верхний или нижний регистр. За функции спасибо Фазеусу. |
Автор: Калевала Feb 19 2016, 09:38 |
Кхм, забыл вписать. Поле morph объекта ch будет возвращать оригинальный объект игрока или моба, если он находится под морфизацией, если нет, то будет возвращен nil. На уровне кода установлен запрет на перемещение игрока средствами lua или mobprogs из комнаты известной как "Хранилище душ". |
Автор: Калевала Mar 3 2017, 10:13 |
Для объекта ch добавлено новое поле remort (get) - получает количество ремортов персонажа, только считывание. |
Автор: Калевала Oct 19 2017, 22:26 |
Для объекта ch добавлено три новых поля hitgain (get) - получает количество единиц жизни добавляемое персонажу в секунду. managain (get) - получает количество единиц маны добавляемое персонажу в секунду. movegain (get) - получает количество единиц ходов добавляемое персонажу в секунду. |
Автор: Калевала Dec 14 2017, 15:34 |
Добавлены функции lookup_skill(номер) - возвращает имя умения/заклинания по номеру. В том числе и луашное lookup_damtype(номер) - Возвращает имя дамага по номеру damtype_lookup("имя") - возвращает номер дамага по имени |
Автор: Калевала Apr 6 2018, 13:52 | ||
Добавлено поле deity(get) Пример:
|
Автор: Калевала Mar 18 2019, 13:56 | ||||
Для мобов добавлена работа с полем off и spec Для работы с полем off два варианта off_flags - (get set) получение или установка флагов off (см ниже) на мобе. Проверка через функцию is_set off_flags_ptype - (get) получение флагов off (см ниже) на прототипе моба. Проверка через функцию is_set Пример:
Программа на мобе может стоять только одна то есть не может быть программ CONST.SPEC_BREATH_ANY и CONST.SPEC_CAST_CLERIC только что-то одно Установка CONST.SPEC_NONE означает, что у моба не будет никаких специальных программ spec - (get set) получение или установка специальной программы моба (список см ниже) spec_ptype - (get) получение специальной программы на протортипе моба (список см ниже) Пример:
Примечание в справке неверно указана работа с функциями set_bit и remove_bit берите из примера выше Добавлены константы для флагов offensive в ALUA CONST.OFF_AREA_ATTACK CONST.OFF_BACKSTAB CONST.OFF_BASH CONST.OFF_BERSERK CONST.OFF_DISARM CONST.OFF_DODGE CONST.OFF_FADE CONST.OFF_FAST CONST.OFF_KICK CONST.OFF_KICK_DIRT CONST.OFF_PARRY CONST.OFF_RESCUE CONST.OFF_TAIL CONST.OFF_TRIP CONST.OFF_CRUSH CONST.ASSIST_ALL CONST.ASSIST_ALIGN CONST.ASSIST_RACE CONST.ASSIST_PLAYERS CONST.ASSIST_GUARD CONST.ASSIST_VNUM -------------------------------------------------------- Добавлены имена spec функций для ALUA CONST.SPEC_BREATH_ANY CONST.SPEC_BREATH_ACID CONST.SPEC_BREATH_FIRE CONST.SPEC_BREATH_FROST CONST.SPEC_BREATH_GAS CONST.SPEC_BREATH_LIGHTNING CONST.SPEC_CAST_ADEPT CONST.SPEC_CAST_CLERIC CONST.SPEC_CAST_JUDGE CONST.SPEC_CAST_MAGE CONST.SPEC_CAST_UNDEAD CONST.SPEC_EXECUTIONER CONST.SPEC_FIDO CONST.SPEC_GUARD CONST.SPEC_EVIL_GUARD CONST.SPEC_JANITOR CONST.SPEC_JANITOR CONST.SPEC_MAYOR CONST.SPEC_MERCENARY CONST.SPEC_POISON CONST.SPEC_THIEF CONST.SPEC_NASTY CONST.SPEC_TROLL_MEMBER CONST.SPEC_OGRE_MEMBER CONST.SPEC_PATROLMAN CONST.SPEC_PET CONST.SPEC_NONE ------------------------------------------------------- |
Автор: Юлши Mar 25 2019, 10:13 | ||
Сделали функцию произнесения заклинания l_say_spell Пример:
Как выглядит: Юлши произносит слова, 'пзархп кандускуаззфл'. (для всех) Юлши произносит слова, 'health recovery'. (у кого class совпадает) |
Автор: Фисара Jan 11 2022, 14:28 | ||
Очень не хватает списка констант предметов (комнат и зон впридачу) Уже чуток надоело спотыкаться в справке по Луа 🙂 Буду сюда постепенно скидывать ошибки. При добавлении эффекта на персонажа:
Смысл - добавить ХП персонажу эффектом. Но на деле повышаем хитролл. CONST.APPLY_HIT присваивает почему-то CONST.APPLY_HITROLL (числовое значение 18) Опытным путем было установлено что числовое значение константы CONST.APPLY_HIT - 13. Поэтому пока локацию задаю тупо числом (af.loc=13), а не обозначением константы (что может быть черевато в будущем при добавлении других констант). |
Автор: Калевала Jan 13 2022, 13:25 |
Не используйте APPLY_HIT, это если мне память не изменяет заменено на APPLY_HEALTH поскольку APPLY_HIT Аладон расценивает как APPLY_HITROLL |
Автор: Калевала Jan 13 2022, 13:36 |
Эффекты комнат и зон CONST.AFF_ROOM_SHOCKING CONST.AFF_ROOM_L_SHIELD CONST.AFF_ROOM_THIEF_TRAP CONST.AFF_ROOM_RANDOMIZER CONST.AFF_ROOM_ESPIRIT CONST.AFF_ROOM_CURSE CONST.AFF_ROOM_POISON CONST.AFF_ROOM_SLEEP CONST.AFF_ROOM_PLAGUE CONST.AFF_ROOM_SLOW CONST.AFF_ROOM_PORTALRESIST CONST.AFF_AREA_PORTALRESIST Константы дверей CONST.EX_ISDOOR CONST.EX_CLOSED CONST.EX_LOCKED CONST.EX_PICKPROOF CONST.EX_NOPASS CONST.EX_EASY CONST.EX_HARD CONST.EX_INFURIATING CONST.EX_NOCLOSE CONST.EX_NOLOCK CONST.EX_HIDDEN Константы типов местности CONST.SECT_INSIDE CONST.SECT_CITY CONST.SECT_FIELD CONST.SECT_FOREST CONST.SECT_HILLS CONST.SECT_MOUNTAIN CONST.SECT_WATER_SWIM CONST.SECT_WATER_NOSWIM CONST.SECT_AIR CONST.SECT_DESERT CONST.SECT_DESERT CONST.SECT_ROAD Константы погоды, времени суток и года CONST.SUN_RISE CONST.SUN_DARK CONST.SUN_LIGHT CONST.SUN_SET CONST.SUN_RISE CONST.SKY_CLOUDLESS CONST.SKY_CLOUDY CONST.SKY_RAINING CONST.SKY_LIGHTNING CONST.SKY_SNOWING CONST.SKY_SNOWSTORM CONST.SKY_AFTERSNOW CONST.SKY_AFTERRAIN CONST.WEATHER_WINTER CONST.WEATHER_SPRING CONST.WEATHER_SUMMER CONST.WEATHER_AUTUMN |
Автор: Калевала Jan 13 2022, 13:36 |
Больше никаких констант относительно зон и комнат пока не заложено. |
Автор: Фисара Jan 17 2022, 06:56 | ||||
Выявил особенность: Имеем моба, на котором висит триггер (условно COMMAND), при котором выполняется код до вот этого момента:
Переменная на мобе ch.var0 имеет уже числовое значение, присвоеное раньше в другом прогсе. В этом коде это значение увеличивается на 1. Присвоение идет (это я проверял). На условии (if) и все что будет ниже код выполнятся не будет. Могу только предположить, что переменная на мобе (var0, var1, и так далее до var5) имеет определенный тип, который не может сопоставляться с числовым значением (даже если в этих переменных содержится только число), да даже проверку на nil не проходит. Выйти из ситуации смог только так:
Т.е. создал локальную переменную, которой задал именно числовой тип, а потом уже "переписал" в нее числовое значение ch.var0.[/B] |
Автор: Калевала Mar 4 2022, 11:36 |
Переменная на мобе имеет тип char причем длиной не более 20 символов. Соответственно для использование как число надо преобразовывать. |