Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
- Конференция мира Аладон - > Уголок билдера > Alua


Автор: Калевала Sep 13 2012, 12:10
1. Исправлены баги функций aff_tochar,aff_toobj, aff_toroom,aff_toarea
2. Добавлена функция mobcast. Действие функции аналогично mob cast из OLC
Синтаксис: mobcast("строка заклинания и цель",ch)
ch - исполнитель
CODE

mobcast("благословение "..vic.im,ch)
order("ск благословляю",ch)


Результат:
CODE

ск тест
Ты произносишь: тест
Ты чувствуешь себя праведником.
Пан произносит: благословляю


Функция сделана именно для кастов, по функции 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 символов хотя нафиг такие нужны.) Сервер будет ругаться и писать ошибки. Использовать слэши так же не получится.

В файлы сохраняются любые объекты Алуа: переменные, таблицы, функции, потоки, но соблюдается один принцип - один объект в один файл. Ну естественно никто немешает набить таблицу потоками и функциями и сохранить эту таблицу с последующим восстановлением.

Простой пример использования:
CODE

--Lua
test="Проверка 1"
echo(test,ch.room)
pluto_save("kalevala_data.dat",test)
test="Сохранили"
echo(test,ch.room)
test=pluto_load("kalevala_data.dat")
echo(test,ch.room)
pluto_delete("kalevala_data.dat")



Результат:
CODE

ск тест
Проверка1
Сохранили
Проверка1

В примере переменной присваивается значение "Проверка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

Пример:


CODE

local tdat=get_globaltables(CONST.TABLE_MATERIALS)
for key,value in pairs(tdat) do
   for key2,value2 in pairs(value) do
        echo(key..":"..key2..":"..tostring(value2),ch.room)
end
end



Вывод:

CODE

1:Rusname:неизвестно
1:Name:unknown
1:CanSwim:false
2:Rusname:кислота
2:Name:acid
2:CanSwim:false
3:Rusname:адамантит
3:Name:adamantite
3:CanSwim:false
4:Rusname:воздух
4:Name:air
4:CanSwim:true
5:Rusname:зола, пепел
5:Name:ash
5:CanSwim:false
6:Rusname:бальзам
6:Name:balm
6:CanSwim:true
7:Rusname:бамбук
7:Name:bamboo
7:CanSwim:true


У каждой таблицы свое количество поле. Посмотреть как в примере можно по 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 из комнаты известной как "Хранилище душ". blink.gif biggrin.gif

Автор: Калевала 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)
Пример:
CODE

echoat(ch.deity,ch)



Автор: Калевала Mar 18 2019, 13:56
Для мобов добавлена работа с полем off и spec
Для работы с полем off два варианта

off_flags - (get set) получение или установка флагов off (см ниже) на мобе. Проверка через функцию is_set
off_flags_ptype - (get) получение флагов off (см ниже) на прототипе моба. Проверка через функцию is_set
Пример:
CODE

if(is_set(ch.off_flags,CONST.OFF_DODGE)) then
 echo('У меня установлена увертка -'..ch.im,ch.room)
end
ch.off_flags=remove_bit(ch.off_flags,CONST.OFF_DODGE)
if(!is_set(ch.off_flags,CONST.OFF_DODGE)) then
 echo('А теперь у меня НЕ установлена увертка -'..ch.im,ch.room)
end
if(is_set(ch.off_flags_ptype,CONST.OFF_DODGE)) then
 echo('Но на прототипе у меня все равно установлена увертка -'..ch.im,ch.room)
end


Программа на мобе может стоять только одна то есть не может быть программ CONST.SPEC_BREATH_ANY и CONST.SPEC_CAST_CLERIC только что-то одно
Установка CONST.SPEC_NONE означает, что у моба не будет никаких специальных программ
spec - (get set) получение или установка специальной программы моба (список см ниже)
spec_ptype - (get) получение специальной программы на протортипе моба (список см ниже)
Пример:
CODE

if(ch.spec==CONST.SPEC_PATROLMAN)) then
 echo('У меня программа патрульного -'..ch.im,ch.room)
end
ch.spec=CONST.SPEC_THIEF
if(ch.spec==CONST.SPEC_THIEF)) then
 echo('А теперь у меня программа вора -'..ch.im,ch.room)
end
if(ch.spec_ptype==CONST.SPEC_PATROLMAN)) then
 echo('Но на прототипе у меня все равно установлена программа патрульного -'..ch.im,ch.room)
end


Примечание в справке неверно указана работа с функциями 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

Пример:
CODE
l_say_spell(ch,'health recovery')


Как выглядит:
Юлши произносит слова, 'пзархп кандускуаззфл'. (для всех)
Юлши произносит слова, 'health recovery'. (у кого class совпадает)

Автор: Фисара Jan 11 2022, 14:28
Очень не хватает списка констант предметов (комнат и зон впридачу)

Уже чуток надоело спотыкаться в справке по Луа 🙂
Буду сюда постепенно скидывать ошибки.

При добавлении эффекта на персонажа:
CODE
af=new_affect()
af.where=CONST.TO_AFFECTS
af.type=skill_lookup("Ярость")         --тут любой закл можно, не суть
af.level=vic.level
af.dur=20
af.secdur=0
af.loc=CONST.APPLY_HIT
af.mod=100
affect_tochar(af,vic)


Смысл - добавить ХП персонажу эффектом. Но на деле повышаем хитролл.
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), при котором выполняется код до вот этого момента:

CODE
ch.var0=ch.var0+1
if ch.var0>0 then
  order("say Привет",ch)
end


Переменная на мобе ch.var0 имеет уже числовое значение, присвоеное раньше в другом прогсе.
В этом коде это значение увеличивается на 1. Присвоение идет (это я проверял).
На условии (if) и все что будет ниже код выполнятся не будет.
Могу только предположить, что переменная на мобе (var0, var1, и так далее до var5) имеет определенный тип, который не может сопоставляться с числовым значением (даже если в этих переменных содержится только число), да даже проверку на nil не проходит.

Выйти из ситуации смог только так:
CODE
local v = 0
ch.var0=ch.var0+1
v=v+ch.var0
if v>0 then
  order("say Привет",ch)
end


Т.е. создал локальную переменную, которой задал именно числовой тип, а потом уже "переписал" в нее числовое значение ch.var0.[/B]

Автор: Калевала Mar 4 2022, 11:36
Переменная на мобе имеет тип char причем длиной не более 20 символов. Соответственно для использование как число надо преобразовывать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)