Jump to content
Alloder.pro  about Allods with love 😱
Search In
  • More options...
Find results that contain...
Find results in...

Results of the competition "Allods and Life"

Stories, that warm souls.

Read More

Digest April

We talk about what was done and updated in the past month. We help keep abreast of events.

Read more

Game tooltips

Tooltips provide a way for 3rd party fansites and extensions to display detailed information on mouseover.

Read more

Делимся опытом ...


DarkMaster
 Share

Recommended Posts

Я заметил что народу - который пишет становитсья все больше, но все варяться в собственном соку *))) Это не дело товарищи, давайте делиться опытом - того что нарыли.

1. Данные. В АО - данные часто имеют структурированный вид, в отличии от ВОВ в которой любая функция всегда возврашает просто параметры, что к с лову удобнее нежели структурный вид возврата данных. Данные всегда представленны как обычная структура в любом из языков программирования, но возможны структуры с вшитыми массивами данных. Как поянть что мне нужно для работы ? Как уже приводилось в одном из постов выводить информацию о структурах данных можно выводить в user.cfg ( AllodsOnline\Personal\user.cfg ).

И так структура состоит из - имени структуры, переменных, саб-таблиц, таблиц массивов.

Срутктура описания данных:

table_begin ИмяСтурктуры

table_begin data

имя_переменой1 = значение

имя_переменой2 = значение

имя_переменой3 = значение

table_begin ИмяСабТаблицы

имя_переменой1 = значение

имя_переменой2 = значение

имя_переменой3 = значение

table_end ИмяСабТаблицы

int_keys_begin ИмяДатыМассива

table_begin 0

имя_переменой1 = значение

имя_переменой2 = значение

table_end 0

table_begin 1

имя_переменой1 = значение

имя_переменой2 = значение

table_end 1

int_keys_end ИмяДатыМассива

table_end data

table_end ИмяСтурктуры

Думаю тут все понятно *))). Обратите внимание на int_keys_begin ИмяДатыМассива - это обьявление таблицк в виде массива, где table_begin i ... table_end i описание элемента этого массива. В основном структуры вам возврашают после своей работы различные функции GetЧтоТо(), иногда они передаються в функции обработчики событий - в виде params - параметров. Как считывать данные :

local MyData = GetЧтоТо()

if MyData.имя_переменой1 == true then GO() end

if MyData.ИмяСабТаблицы.имя_переменой2 == true then SuperGO() end;

local size = GetTableSize(MyData.ИмяДатыМассива)

for i = 0, size - 1 do

local MyDataElement = MyData.ИмяДатыМассива

if MyDataElement.имя_переменой1 == true then MegaGo() end

end

Думаю тоже все понятно. Возможно есть что-то еше, я пока не сталкивался. Ну а теперь больше конкретики.

1. Как узнать можно ли всели условия спелла удовлетворительны ( дальность, наличие оружия в руке и т.д. )

function MyAddon_IsSpellRedyForUse( myspellid )

local spellInfo = avatar.GetSpellObjectInfo( myspellid ) - берем инфо о спеле

if spellInfo then - если инфо есть то можно работать далее

spellInfo.requirements = avatar.GetSpellRequirements( spellInfo.id ) - считываем требования для спелла

local AllReqIsSuccess = false -- переменная флаг

local ValidReqCount = 0 -- счетчик удов.требования

--requirements.targetConditions -- это таблица где храняться требования для цели ( например "не может быть большим"

--requirements.casterConditions -- это для игрока ( цель далеко и т.д)

local size = GetTableSize( spellInfo.requirements.casterConditions )

local sizeChilds = 0

for i = 0, size - 1 do

local req = spellInfo.requirements.casterConditions - берем i-ое требование

-- иногда у некоторых спеллов требования расположенны не в основной таблице а в доп.

-- таблице childs, что мы тут и обрабатываем

if GetTableSize(req.childs) > 0 then

sizeChilds = GetTableSize(req.childs)

for j = 0, sizeChilds - 1 do

local reqChild = req.childs[j]

if ( reqChild.success == true ) then -- если требование удовлетворительно , то увеличиваем счетчик удов.требования

ValidReqCount = ValidReqCount + 1

end

end

else

-- обработка для спеллов у которых нет childs

if ( req.success == true ) then -- если требование удовлетворительно , то увеличиваем счетчик удов.требования

ValidReqCount = ValidReqCount + 1

end

end

end

-- Возможно тут не совсем правельно написано, но из наблюдений если есть childs

-- то нету норм требований и наоборот, возможно есть случаи когда есть и то и то

if sizeChilds > 0 then -- если есть childs - проверяем по ним

if ValidReqCount == sizeChilds then - если счетчик удов.требований = размеру требований, значит все требования в норме

AllReqIsSuccess = true

end

elseif ValidReqCount == size then

- если счетчик удов.требований = размеру требований, значит все требования в норме

AllReqIsSuccess = true

end

-- Дебаг вывод данных

--local section = {}

--for i,v in spellInfo do

-- section [ i ] = v

--end

--common.SetGlobalConfigSection( "SPELLINFO", section )

local CurrentMana = unit.GetMana( avatar.GetId() ) -- считываем ману игрока

if spellInfo.cooldownRemainingMs == 0 and AllReqIsSuccess == true and CurrentMana.mana>=spellInfo.currentValues.manaCost then -- главное условие проверяем кулдаун, требования, и ману

return true

end

end

return false

end

Спрашивайте, пишите, дополняйте ....

P.S. Больщая просьба - не флудить, не оффтопить, не засерать пост. Давайте сделаем удобный мини справочник в котором можно быстро найти полезные наработки.

Link to comment
Share on other sites

Вот пару вопросв сразу на вскидку:

1. Баффв, Дебаффы - я нашел как получить баффы\дебаффы, но не понял как проверить тот ли это бафф\дебафф который мне нужен. Может кто то уже решил это проблему ? Получение баффа\дебаффа

local buff

buff = unit.GetBuff( avatar.GetTarget(), 0 )

if buff then

if buff.isPositive == false then -- это бафф иначе дебафф

if buff.name == "Супер бафф" then -- сравнение по имени неработает 8(((

end

end

end

2. Как получить SpellID - я нашел только способ через ActionBar, но это не удобно, что бы взять инфу требуеться ложить спелл в слот. Как получить напрямую без использования ActionBar ?

local ActionSlotInfo0 = GetActionInfo( 0 ) -- функци описанна в нутри ScriptContextActionbar.lua

ActionSlotInfo0.id -- это id спелла.

*)))

Link to comment
Share on other sites

Guest Valltron

SpellID получают разные события, там где оно нужно. например EVENT_ACTION_RESULT_SPECIAL_SPELL. при этом это не какойто глобальный ID спелла, а конкретно именно твоего спелла в какойто таблице на сервере...даже если ты его перенесешь в другой слот на панели экшн бар (как в твоем случае), или перезайдешь в игру - то ID уже присвоется другой...

Link to comment
Share on other sites

Да это я понял - но это как раз и не удобно. Напрмиер в ВОВ АПИ - можно взеять СпеллИнфо - как по имени спелла так и по его ИД, а ИД в свою очередь получить из СпеллБука - спомощью опять же имени спелла. Вообщем буду копать СпеллБук АО - мож че найду. Проблема с Бафами\Дебафами - актуально просто жуть как *))))

Link to comment
Share on other sites

я только начал разбираться с аддонами поэтому куча вопросов

1) функция unit.GetHealth( avatar.GetTarget() ) - возвращает пустую строку

тогда как unit.GetHealthPercentage( avatar.GetTarget() ) - возвращает правильное число - но охото не в процентах а именно число

2) как получить все НАЗВАНИЯ полей таблицы ?

3) прочитал ваше API - там не описано какие параметры нужно передавать в функции и что именно они возвращают

( эти данные не известны или просто я незнаю как их смотреть? )

4) как узнать id спела который вешает бафф если info баффа известно ( unit.GetBuff( avatar.GetId(),i) - это информация - а как узнать именно id )

жду ответов :)

Link to comment
Share on other sites

1. А вот потому что нельзя напрямую, потому и пустая. Позвращает НР только если айди - айди игрока.

2. какой таблицы? какие названия? Юзай тот же способ для вывода инфы в файл.

Link to comment
Share on other sites

4. А хз как - id спелла я беру из слота акшен бара - поместив абилку в слот - можно взять инфо по этому слоту и от него можно взять ид спелла. Смотри в первом посте там пример есть ....

Link to comment
Share on other sites

я видимо неправильно выразился

как получить id спела из акшен бара я знаю и как скастовать его тоже

я пытаюсь сделать автобаффалку - если баффа нет то повесить его.

но я незнаю как проверить что нет именно нужного баффа !!!

поэтом пока работает тупо - если вообще баффов нет - то скастовать. :(

зато кастует автоматически сам - ниче нажимать не надо :)

Link to comment
Share on other sites

Читерим *)))) А никак - пока не доступны фукции конвертирования строки сравния типа:

if buff.name = "CoolBuff" then .... или local SpellInfo = GetSpellInfo("SuperSpell") сделать нельзя

Вывод - ждем релиза норм АПИ от нивала

Link to comment
Share on other sites

Guest gsomgsom

Вопрос по ID предметов.

Функция avatar.GetItemInfo() выдаёт временный (сеансовый) ID предмета, относительно персонажа.

Т.е. Алебарда Воздаяния с аука у меня вышла с ID = 6132 и 6135.

В этом ID нет ничего полезного... Нужен ID шаблона вещи, чтобы по этому ID всегда можно было выдать информацию о вещи. Пусть и не полную (без рун, без рандомных характеристик и т.п.)

Есть идеи?

Link to comment
Share on other sites

  • 2 weeks later...
Guest skillcoder

Пока единственным уникальным id вещи можно юзать тока её имя.

Других идей нет (

Link to comment
Share on other sites

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use