Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

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


DarkMaster

Рекомендуемые сообщения

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

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. Больщая просьба - не флудить, не оффтопить, не засерать пост. Давайте сделаем удобный мини справочник в котором можно быстро найти полезные наработки.

Ссылка на комментарий
Поделиться на другие сайты

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

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 спелла.

*)))

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Можно попробовать сравнивать с константой, она получается в wide string

Ссылка на комментарий
Поделиться на другие сайты

http://ao.arbah.ru/module

Интересный addon. Думаю что-то можно потчерпнуть.

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Есть идеи?

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

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

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

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования