|
Архив - только для чтения |
Модератор форума: andycrowz |
Форум » Корзина форума » Корзина » Варианты написания строк кода. Делаем аддон "Авто-трансфер" |
Варианты написания строк кода. Делаем аддон "Авто-трансфер" |
Здравствуйте. Сегодня я расскажу вам о вариантах написания кода и о том, как сделать аддон "Авто-трансфер".
Инструкция по созданию 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 Создание аддона. Ну, теперь мы перейдем к созданию аддона. Как я вам пообещал, в начале статьи мы будем делать аддон для трансфера персонажа. Скажу сразу, я не буду делать "Полный аддон", я всего лишь покажу вам как его написать Создаем папку, в которой будет находится наш аддон. Далее, создаем в папке тос и 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)
Маме беркута привет!
|
Отличная статья. Sun правда не будет доволен
Сообщение # 2 написано 31.03.2012 в 21:39
|
Данная тема была перемещена из раздела Разработка аддонов WoW.
Причина перемещения: не актуально Переместил: Nyll.
Маме беркута привет!
Сообщение # 6 написано 01.10.2013 в 12:42
|
| |||
| |||