• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
Форум » Корзина форума » Корзина » Варианты написания строк кода. Делаем аддон "Авто-трансфер"
Варианты написания строк кода. Делаем аддон "Авто-трансфер"
Nyll
Здравствуйте. Сегодня я расскажу вам о вариантах написания кода и о том, как сделать аддон "Авто-трансфер".

Инструкция по созданию toc файла - тык
Ссылка на предыдущие статью - тык
Скачать notepad++ - тык
API функции - тык

Варианты написания кода.


Наверное, вы знаете, что lua код чувствителен к регистру.

Давайте расмотрим пример:

Code
local i = "пример"
print(I)


В этом примере мы создаем локальную переменную и пытаемся вывести ее значение через принт.
В данном случае значение работать не будет , т.к. название переменной написано с маленькой буквы "i", а в print указана большая буква "I".

Вот пример правильной переменной:

Code
local I = "пример"
print(I)


Сейчас мы рассмотрим написание функции.

Пример:

Code
primer_function=function()

end


Как вы думаете, будет ли работать данная функция? Да, будет.
Кстати, эту функцию можно записать немного иначе:

Code
function  primer_function()

end


И оба эти варианта будут правильными.

Теперь рассмотрим способ написания кода, а точнее способ переноса строк.

Пример:

Code
function primer_function()
local i = "Ку ку"
SendChatMessage(i)
print(i)
end


Данная функция служит исключительно примером, толку от нее ноль...

Любые строки в lua (почти любые) можно переносить/разделять.
Вот пример того, как можно перенести/разделить эту функцию:

Code
function primer_function(); local i = "Ку ку"; SendChatMessage(i); print(i); end


Как вы заметили, после каждой строки, когда надо сделать отступление, мы ставим ";" Скажу сразу, делать это не обязательно.

А вот пример того, как нельзя переносить/разделять строки.

Code
function primer
_function();       
loc
al i = "Ку ку";       
SendC
hatMessage(i); print(i);       
end


Создание аддона.


Ну, теперь мы перейдем к созданию аддона. Как я вам пообещал, в начале статьи мы будем делать аддон для трансфера персонажа. Скажу сразу, я не буду делать "Полный аддон", я всего лишь покажу вам как его написать smile

Создаем папку, в которой будет находится наш аддон. Далее, создаем в папке тос и lua файл. Меняем в этих 2х файлах кодировку на UTF-8 и только в toc файле добавляем строку с названием нашей базы.

Теперь открываем наш lua файл и в нем пишем:

Code
названиебазы = {}


вот пример как должно выглядеть db = {}

Так мы обозначаем нашу базу.

Далее, делаем "подбазу" с информацией о сервере, с которого переносим персонажа:

Code
вашабаза["server"] = serverdb


Теперь создаем функцию с переменными:

Code
function transfer()
local serverdb = {}


Теперь получаем информацию о сервере:

Code
serverdb.realm = GetRealmName();
serverdb.realmlist = GetCVar("realmList");

return serverdb;


Как наш аддон будет запоминать информацию:



Сохраняется в WTF\Account\аккаунт\SavedVariables\названиеаддона.lua

Теперь закрываем функцию и все, готово.
Вот пример всего кода, который поможет вам в создании аддона для переноса ваших персонажей.

Code

function PlayerInfo()
-- Работа с базой.
local db = {}
local petdb = {}
local global ={}
local spelldb = {}
local glyphdb = {}
local emblemdb = {}
local mountdb = {}
local repdb = {}
local itemsdb = {}
local itembagdb = {}
GMTransfer = {}
ACH = ACH or {}
GMTransfer["db"] = db
GMTransfer["spell"] = spelldb
GMTransfer["global"] = global
GMTransfer["glyph"] = glyphdb
GMTransfer["emblem"] = emblemdb
GMTransfer["mount"] = mountdb
GMTransfer["pet"] = petdb
GMTransfer["reputation"] = repdb
GMTransfer["item"] = itemsdb
GMTransfer["itembag"] = itembagdb

--###############################
--# Сбор информации о персонаже #
--###############################

       db.name = UnitName("player");
       local _, class = UnitClass("player");
       db.class = class;
       db.level = UnitLevel("player");
       local _,race = UnitRace("player");
       db.race = race;
       db.gender = UnitSex("player");
       local honorableKills = GetPVPLifetimeStats()
       db.kills = honorableKills;
       db.honor = GetHonorCurrency();
       db.arenapoints = GetArenaCurrency();
       db.money = GetMoney();
       db.specs = GetNumTalentGroups();
             
--##############################
--# Сбор глобальной информации #
--##############################

       global.locale = GetLocale();
       global.realm = GetRealmName();
       global.realmlist = GetCVar("realmList");
       local version, build, date, tocversion = GetBuildInfo();
       global.clientbuild = build;

--###################
--# Сбор заклинаний #
--###################

for i = 1, MAX_SKILLLINE_TABS do
              local name, _, _, offset, numSpells = GetSpellTabInfo(i);
              if not name then
                  break;
              end
              for s = offset + 1, offset + numSpells do
                  spellInfo = GetSpellLink(s, BOOKTYPE_SPELL);
                  if spellInfo ~= nil then
                      for spellid in string.gmatch(GetSpellLink(s, BOOKTYPE_SPELL),".-Hspell:(%d+).*") do       
                          spelldb[spellid] = spellid;

                      end       
                  end
              end
          end

--#################
--# Сбор символов #
--#################

          for i = 1, GetNumTalentGroups() do
              glyphdb[i] = {}
              local curid = {[1] = 1,[2] = 1}
              for j = 1, 6 do
                  local _, glyphType, glyphSpellID, _ = GetGlyphSocketInfo(j,i);
                  if not glyphdb[i][glyphType] then       
                      glyphdb[i][glyphType] = {}       
                  end
                  if not glyphSpellID then       
                      glyphSpellID = -1;
                  end
                  glyphdb[i][glyphType][curid[glyphType]] = glyphSpellID;
                  curid[glyphType] = curid[glyphType]+1;
              end
          end

--###############
--# Сбор валюты #
--###############

          for i = 1, GetCurrencyListSize() do
              local name, _, _, _, _, count, _, _, itemID = GetCurrencyListInfo(i)
              emblemdb[i] = {['C'] = count, ['I'] = itemID};
          end       

--#########################
--# Сбор ездовых животных #
--#########################

          for i = 1, GetNumCompanions("MOUNT") do
              local _, _, M = GetCompanionInfo("MOUNT", i);
              mountdb["Маунт:"..i] = M;
          end

--##################
--# Сбор спутников #
--##################

          for i = 1, GetNumCompanions("CRITTER") do
              local _, _, C = GetCompanionInfo("CRITTER", i);
              petdb["Спутник:"..i] = C;
          end       

--##################
--# Сбор репутации #
--##################        

          for i = 1, GetNumFactions() do       
              local name, _, _, _, _, earnedValue, _, canToggleAtWar, _, _, _, _, _ = GetFactionInfo(i)
              repdb[i] = {["Фракция"] = name, ["Репутация"] = earnedValue, ["F"] = bit.bor(((not canToggleAtWar) and 16) or 0)}       
          end

--###################################
--# Сбор информации об одетых вещах #
--###################################       

          for i = 1, 74 do       
              itemLink = GetInventoryItemLink("player", i)       
              if itemLink then       
                  count = GetInventoryItemCount("player",i)
                  for entry, chant, Gem1, Gem2, Gem3,unk1,unk2,unk3,lvl1 in string.gmatch(itemLink,".-Hitem:(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+).*") do       
                      itemsdb["Слот:"..i] =  {["ИД"] = entry, ["Количество"] = count, ["G1"] = Gem1, ["G2"] = Gem2, ["G3"] = Gem3};
                  end
              end       
          end

--####################################
--# Сбор информации об вещах в сумки #
--####################################

for bag = 0, 11 do       
              for slot = 1, GetContainerNumSlots(bag) do       
                  ItemLink = GetContainerItemLink(bag, slot)       
                  if ItemLink then       
                      local texture, count, locked, quality, readable = GetContainerItemInfo(bag, slot);       
                      local Tbag = bag + 1000;
                      for entry, chant, Gem1, Gem2, Gem3, unk1, unk2, unk3, lvl1 in string.gmatch(ItemLink,".-Hitem:(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+).*") do       
                          itembagdb[Tbag..":"..slot] = {["ИД"] = entry, ["Количество"] = count, ["G1"] = Gem1, ["G2"] = Gem2, ["G3"] = Gem3};
                      end
                  end       
              end       
          end

----------------------------------------------------
       return db, global, spelldb, glyphdb, emblemdb, mountdb, petdb, repdb, itemsdb, itembagdb;
end


Спасибо за внимание! Удачи.


За помощь в написании статьи спасибо модератору Pr.
Прикрепления: 1210475.png (14.4 Kb)
Маме беркута привет!
Сообщение # 1 отредактировано WJP - Понедельник, 09.04.2012, 19:28
Acherus
Angel Keeper
Отличная статья. Sun правда не будет доволен smile
Сообщение # 2 написано 31.03.2012 в 21:39
Andrey_ua
Скаут
Quote (Acherus)
Sun правда не будет доволен

Ето точно)
Купил лицензионный Windows - оплатил убийство детей в Ираке. (с)
Сообщение # 3 написано 10.04.2012 в 10:05
sword_Full
Скаут
Норм
Сообщение # 4 написано 10.04.2012 в 15:51
RazArt
Тазовод
почему же? чардамп с открытым кодом.. Да и веб обвязки нет
DumpMe v1.0 - система автоматического переноса персонажей

Вышла в свет первая стабильная версия. Писать в скайп - razart8
Сообщение # 5 написано 30.09.2013 в 16:16
Nyll
Данная тема была перемещена из раздела Разработка аддонов WoW.
Причина перемещения: не актуально

Переместил: Nyll.
Маме беркута привет!
Сообщение # 6 написано 01.10.2013 в 12:42
Форум » Корзина форума » Корзина » Варианты написания строк кода. Делаем аддон "Авто-трансфер"
  • Страница 1 из 1
  • 1
Поиск: