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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

Помощь в работе с классами


Гость untomas

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

Пишу аддон - и столкнулся с проблемой при работе с классами,

очень хочется разобраться с этим

код аддона

Code:

Global("tmp", 0)

Global("param1", "param1")

Global("param2", "param2")

Global("param3", "param3")

Global("obj1", "obj1")

Global("obj2", "obj2")

--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! КЛАССЫ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

--------------------------------------Класс "data"------------------------------------------------------------------

Global("data" , {

 ["List"]  = {}

})

function data:Initialize()

common.LogInfo(common.GetAddonName(),"Создаем ",obj1)

self:AddNewObject(obj1)

common.LogInfo(common.GetAddonName(),"Создаем ",obj2)

self:AddNewObject(obj2)

-- добавляем к каждому обьекту параметры "param2"

common.LogInfo(common.GetAddonName(),"добавляем к ",obj1, " параметр ", param2)

data.List [obj1] :AddNewParam(param2)

common.LogInfo(common.GetAddonName(),"добавляем к ",obj2, " параметр ", param2)

data.List [obj2] :AddNewParam(param2)

-- выводим в mods.txt список обьектов и их параметров

for k1,v1 in data.List do

common.LogInfo(common.GetAddonName(),k1)

for k2,v2 in v1.ParamsList do

common.LogInfo(common.GetAddonName()," ",k2," ",common.FormatInt(v2.data,"%i"))

end

end

--меняем у первого обьекта значение первого параметра

common.LogInfo(common.GetAddonName(),"изменяем ",param1," у ",obj1, " на 10")

data.List [obj1] .ParamsList [param1] .data = 10

common.LogInfo(common.GetAddonName(),"добавляем ",param3," к ",obj1)

data.List [obj1] :AddNewParam(param3)

-- выводим в mods.txt список обьектов и их параметров

for k1,v1 in data.List do

common.LogInfo(common.GetAddonName(),k1)

for k2,v2 in v1.ParamsList do

common.LogInfo(common.GetAddonName()," ",k2," ",common.FormatInt(v2.data,"%i"))

end

end

end

function data:AddNewObject(name)

local NewObject = {}

setmetatable( NewObject, {__index = ObjectData})

common.LogInfo(common.GetAddonName()," инициализируем ",name)

NewObject:Initialize(name)

self.List [name]  = NewObject

end

--------------------------------------конец класса "data"-----------------------------------------------------------

--------------------------------------Класс "ObjectData"------------------------------------------------------------------

Global("ObjectData" , {

 ["ParamsList"]  = {}

})

function ObjectData:Initialize(name)

-- при инициализации обьекта к нему сразу добавляется параметр "param1"

common.LogInfo(common.GetAddonName()," добавляем параметр ",param1)

self:AddNewParam(param1)

end

function ObjectData:AddNewParam(name)

local NewParam = {}

setmetatable( NewParam, {__index = Params})

common.LogInfo(common.GetAddonName()," инициализируем параметр ",name)

NewParam:Initialize(name)

self.ParamsList [name]  = NewParam

end

--------------------------------------конец класса "ObjectData"-----------------------------------------------------------

--------------------------------------Класс "Params"------------------------------------------------------------------

Global("Params" , {

 ["data"]  = 0

})

function Params:Initialize(name)

tmp = tmp + 1

common.LogInfo(common.GetAddonName()," было ",common.FormatInt(self.data,"%i"))

self.data = tmp

common.LogInfo(common.GetAddonName()," стало ",common.FormatInt(self.data,"%i"))

end

--------------------------------------конец класса "Params"-----------------------------------------------------------

--!!!!!!!!!!!!!!!!!!!!!!!!!!конец раздела "КЛАССЫ" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ФУНКЦИИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

function Init()

common.LogInfo(common.GetAddonName(),"аддон включен")

data:Initialize()

end

--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! конец раздела "ФУНКЦИИ" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Init()

информация из mods.txt

Code:

Info: addon test: аддон включен

Info: addon test: Создаем obj1

Info: addon test:  инициализируем obj1

Info: addon test:  добавляем параметр param1

Info: addon test:  инициализируем параметр param1

Info: addon test:  было 0

Info: addon test:  стало 1

Info: addon test: Создаем obj2

Info: addon test:  инициализируем obj2

Info: addon test:  добавляем параметр param1

Info: addon test:  инициализируем параметр param1

Info: addon test:  было 0

Info: addon test:  стало 2

Info: addon test: добавляем к obj1 параметр param2

Info: addon test:  инициализируем параметр param2

Info: addon test:  было 0

Info: addon test:  стало 3

Info: addon test: добавляем к obj2 параметр param2

Info: addon test:  инициализируем параметр param2

Info: addon test:  было 0

Info: addon test:  стало 4

Info: addon test: obj2

Info: addon test:  param2 4

Info: addon test:  param1 2

Info: addon test: obj1

Info: addon test:  param2 4

Info: addon test:  param1 2

Info: addon test: изменяем param1 у obj1 на 10

Info: addon test: добавляем param3 к obj1

Info: addon test:  инициализируем параметр param3

Info: addon test:  было 0

Info: addon test:  стало 5

Info: addon test: obj2

Info: addon test:  param2 4

Info: addon test:  param1 10

Info: addon test:  param3 5

Info: addon test: obj1

Info: addon test:  param2 4

Info: addon test:  param1 10

Info: addon test:  param3 5

т.е. изменяем параметр param1 только у первого обьекта - он изменяется у обоих

при добавлении нового параметра к обьекту obj1 - он появляется у обоих обьектов.

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

Очень грамотно составленный запрос о помощи. Странно, что никто до сих пор не отозвался, аж стыдно за коллег :)

Лично я ещё не сделал ни одного аддона, в котором бы активно использовались классы. Поэтому я ещё не разбирался, как классы работают в LUA, и конкретно в Аллодах. И не стесняюсь признаться в этом :)

То есть, мне, по существу, посоветовать нечего :) Я только подозреваю, что в вышеприведённом коде, ты создаёшь НЕ новые объекты, а просто линкуешь один и тот же объект в нескольких местах. Поэтому, когда он изменяется, он изменяется везде. Конечно, я могу ошибаться, т.к. нихрена не смыслю в этом. :)

Но я могу посоветовать посмотреть, как устроена библиотека классов AOClassLibrary.lua, которую можно найти в аддоне DarkDPSMeter. Там всё отлично работает, думаю, ты найдёшь подходящее решение там :)

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

да, мысль о том что создаются линки на один экземпляр мне тоже приходила в голову, но я никак не могу разобраться почему это происходит =)

ну а AOClassLibrary.lua я просто как настольную книгу использую =D

эх... буду дальше ковырять..ну и ждать, может ктонить разжует =\

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

Зря :)

В Аллодах используется обычный Lua 5.0.

Поэтому, обучиться работе с классами поможет любой учебник по Lua.

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

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

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

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

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

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

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

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

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

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