From 1cff53eef1b5f7c1fc03666e5f7246f7fb24ee73 Mon Sep 17 00:00:00 2001 From: Freewood <948+freewood@noreply.octowow.st> Date: Tue, 27 Oct 2026 14:09:50 +0000 Subject: [PATCH] Dateien nach "/" hochladen --- CodexZones.lua | 237 ++++++++ Freewood-OctoWoW-Codex.toc | 41 ++ Locales.lua | 1093 ++++++++++++++++++++++++++++++++++++ 3 files changed, 1371 insertions(+) create mode 100644 CodexZones.lua create mode 100644 Freewood-OctoWoW-Codex.toc create mode 100644 Locales.lua diff --git a/CodexZones.lua b/CodexZones.lua new file mode 100644 index 0000000..86c5e01 --- /dev/null +++ b/CodexZones.lua @@ -0,0 +1,237 @@ +-- Freewood-OctoWoW-Codex: Gebiete mit Stufenspanne, berechnet aus den gesammelten Kreaturen. +-- +-- Jede Kreatur zaehlt mit ihren Sichtungen (Zellen) in den Karten, in denen sie gesehen wurde, Instanzen mit ihrer +-- Instanz-ID (negative Zone). Pro Gebiet: +-- lo, hi typische Spanne: alle Stufen, die mindestens 5 % des Gewichts normaler Kreaturen haben +-- avg gewichteter Durchschnitt innerhalb der Spanne +-- out Ausreisser: normale Kreaturen ausserhalb der Spanne +-- special Elite / Selten / Boss usw. (fliessen nicht in die Spanne ein) +-- few zu wenig Daten (weniger als MIN_UNITS normale Kreaturen): Spanne nur grob +-- manual Spanne von Berechtigten von Hand gesetzt (db.ied, siehe Codex.ZoneEdID) +-- Wird mit den geteilten Kreaturdaten berechnet, daher sehen alle dasselbe. + +local ADDON, NS = ... + +local FW = _G.Freewood +if not FW or not FW:RequireAPI(1, ADDON) then + return +end + +local Codex = NS and NS.Codex +if not Codex then + return +end + +local Zones = {} +Codex.Zones = Zones + +local GRID = Codex.GRID or 200 +local MIN_UNITS = 3 -- weniger normale Kreaturen: "zu wenig Daten" +local LEVEL_SHARE = 0.05 -- Mindestanteil einer Stufe am Gewicht, damit sie zur typischen Spanne gehoert +local WEIGHT_CAP = 30 -- eine haeufig gesehene Kreatur zaehlt hoechstens so viel +local MAP_SHARE = 0.10 -- Karte zaehlt fuer eine Kreatur erst ab diesem Anteil ihrer Sichtungen +local CACHE_SECS = 5 + +local cache, cacheAt, dirty = nil, 0, true + +function Zones.Invalidate() + dirty = true +end + +FW:On("CODEX_CHANGED", function() dirty = true end, Zones) + +local function Now() + return GetTime and GetTime() or 0 +end + +-- Gewichte einer Kreatur je Gebiet: { [zoneKey] = Gewicht } +local function Spread(u) + local out = {} + if type(u.ez) == "table" and #u.ez > 0 then + local each = 1 / #u.ez + local total = 0 + for _, n in pairs(u.cells or {}) do total = total + n end + total = math.max(1, total) + for _, m in ipairs(u.ez) do out[m] = total * each end + return out + end + if type(u.iz) == "table" and next(u.iz) and u.dg ~= false then + for id, n in pairs(u.iz) do out[-id] = n end + return out + end + local per, total = {}, 0 + for key, n in pairs(u.cells or {}) do + local m = math.floor(key / (GRID * GRID)) + per[m] = (per[m] or 0) + n + total = total + n + end + for m, n in pairs(per) do + if total > 0 and n / total >= MAP_SHARE then out[m] = n end + end + return out +end + +local function ManualRange(ied, key) + local rec = ied and ied[Codex.ZoneEdID(key)] + if not rec then return nil end + local l1 = rec.l1 or (rec.ed and rec.ed.l1) + local l2 = rec.l2 or (rec.ed and rec.ed.l2) + if l1 then return l1, l2 or l1 end + return nil +end + +local function Compute() + local V = Codex.V() + local zones = {} + local function Zone(key) + local z = zones[key] + if not z then + z = { id = key, normal = {}, special = {}, out = {} } + zones[key] = z + end + return z + end + for id, u in pairs(V.units or {}) do + if u.l1 and u.bad ~= true then + local special = u.c ~= nil and u.c ~= false + local l2 = u.l2 or u.l1 + for key, n in pairs(Spread(u)) do + local w = math.max(1, math.min(WEIGHT_CAP, n)) + local entry = { id = id, l1 = u.l1, l2 = l2, w = w, c = special and u.c or nil, mid = (u.l1 + l2) / 2 } + local z = Zone(key) + if special then + z.special[#z.special + 1] = entry + else + z.normal[#z.normal + 1] = entry + end + end + end + end + for key, z in pairs(zones) do + local byLevel, total = {}, 0 + local minL, maxL + for _, e in ipairs(z.normal) do + -- eine Kreatur mit Spanne (Stufe 3-4) zaehlt je zur Haelfte fuer beide Stufen + local a, b = e.l1, e.l2 + local half = e.w / ((b > a) and 2 or 1) + byLevel[a] = (byLevel[a] or 0) + half + if b > a then byLevel[b] = (byLevel[b] or 0) + half end + total = total + e.w + minL = minL and math.min(minL, a) or a + maxL = maxL and math.max(maxL, b) or b + end + z.units = #z.normal + z.few = z.units < MIN_UNITS + local lo, hi + if total > 0 then + for lv, w in pairs(byLevel) do + if w / total >= LEVEL_SHARE then + lo = lo and math.min(lo, lv) or lv + hi = hi and math.max(hi, lv) or lv + end + end + lo, hi = lo or minL, hi or maxL + elseif #z.special > 0 then + for _, e in ipairs(z.special) do + minL = minL and math.min(minL, e.l1) or e.l1 + maxL = maxL and math.max(maxL, e.l2) or e.l2 + end + lo, hi = minL, maxL + z.few = true + end + local ml, mh = ManualRange(V.ied, key) + if ml then + lo, hi = ml, mh + z.manual = true + z.few = false + end + z.lo, z.hi = lo, hi + local sum, wsum = 0, 0 + for _, e in ipairs(z.normal) do + if lo and e.mid >= lo and e.mid <= hi then + sum, wsum = sum + e.mid * e.w, wsum + e.w + end + end + z.avg = wsum > 0 and sum / wsum or ((lo and hi) and (lo + hi) / 2 or nil) + for _, e in ipairs(z.normal) do + if lo and (e.l2 < lo or e.l1 > hi) then z.out[#z.out + 1] = e end + end + z.dungeon = key < 0 + z.minL, z.maxL = minL, maxL + end + -- von Hand gesetzte Spannen auch fuer Gebiete ohne Kreaturdaten + for edID, rec in pairs(V.ied or {}) do + local key = Codex.ZoneFromEdID(edID) + if key and not zones[key] then + local l1, l2 = ManualRange(V.ied, key) + if l1 then + zones[key] = { id = key, normal = {}, special = {}, out = {}, units = 0, lo = l1, hi = l2, avg = (l1 + l2) / 2, + manual = true, dungeon = key < 0 } + end + end + end + return zones +end + +-- Alle Gebiete: { [zoneKey] = Daten }. Kurz zwischengespeichert. +function Zones.All() + local t = Now() + if not cache or (dirty and t - cacheAt >= CACHE_SECS) or t < cacheAt then + local ok, res = pcall(Compute) + cache = ok and res or cache or {} + cacheAt, dirty = t, false + end + return cache +end + +-- Sofort neu berechnen (zum Beispiel nach einer Aenderung im Fenster oder in Tests) +function Zones.Refresh() + dirty = true + cacheAt = -1e9 + return Zones.All() +end + +function Zones.Get(key) + return Zones.All()[key] +end + +-- Eine Kreatur gehoert zu einem Gebiet: Liste fuer die Detailansicht, nach Stufe sortiert +function Zones.Members(key) + local z = Zones.Get(key) + if not z then return {} end + local list = {} + local outSet = {} + for _, e in ipairs(z.out) do outSet[e] = true end + for _, e in ipairs(z.normal) do + list[#list + 1] = { id = e.id, l1 = e.l1, l2 = e.l2, w = e.w, out = outSet[e] or nil } + end + for _, e in ipairs(z.special) do + list[#list + 1] = { id = e.id, l1 = e.l1, l2 = e.l2, w = e.w, c = e.c } + end + table.sort(list, function(a, b) + if a.l1 ~= b.l1 then return a.l1 < b.l1 end + if a.l2 ~= b.l2 then return a.l2 < b.l2 end + return a.id < b.id + end) + return list +end + +-- Passt die Stufe zum Gebiet? Rueckgabe: "in" (Stufe liegt in der Spanne), "below" (Spanne ist niedriger), +-- "above" (Spanne ist hoeher), nil (keine Daten). tol = Toleranz in Stufen. +function Zones.Compare(key, level, tol) + local z = Zones.Get(key) + if not z or not z.lo or z.few and not z.manual then return nil end + tol = tol or 0 + if level < z.lo - tol then return "above" end + if level > z.hi + tol then return "below" end + return "in" +end + +-- Gebiete, deren typische Spanne die Stufe enthaelt (mit Toleranz), mit genug Daten +function Zones.ForLevel(level, tol) + local out = {} + for key, z in pairs(Zones.All()) do + if Zones.Compare(key, level, tol) == "in" then out[#out + 1] = z end + end + return out +end diff --git a/Freewood-OctoWoW-Codex.toc b/Freewood-OctoWoW-Codex.toc new file mode 100644 index 0000000..a07099f --- /dev/null +++ b/Freewood-OctoWoW-Codex.toc @@ -0,0 +1,41 @@ +## Interface: 11200 +## Title: Freewood |cffc89b3cCodex|r +## Notes: Learns quests, creatures and drops while you play: who gives and takes a quest, rewards, objectives, drop chances. +## Notes-deDE: Lernt beim Spielen Quests, Kreaturen und Beute: wer eine Quest vergibt und annimmt, Belohnungen, Ziele, Drop-Chancen. +## Author: Lacustat +## Version: 0.1.148 +## Dependencies: Freewood-OctoWoW-Core +## OptionalDeps: Freewood-OctoWoW-CodexData, Freewood-OctoWoW-ForeverData + +Locales.lua +Codex.lua +CodexOwners.lua +CodexTrust.lua +CodexNames.lua +CodexSeed.lua +CodexRoles.lua +CodexRecipes.lua +CodexTime.lua +CodexShare.lua +CodexZones.lua +CodexPath.lua +CodexMapAPI.lua +CodexPathMap.lua +CodexTaxi.lua +CodexTaxiUI.lua +CodexTransport.lua +CodexSpots.lua +CodexForever.lua +CodexAvail.lua +CodexCatalog.lua +CodexQuestProbe.lua +CodexWdbChain.lua +CodexMapScan.lua +CodexSync.lua +CodexLookup.lua +CodexMap.lua +CodexUI.lua +CodexHints.lua +CodexFavUI.lua +CodexNameUI.lua +CodexShareUI.lua diff --git a/Locales.lua b/Locales.lua new file mode 100644 index 0000000..9d31679 --- /dev/null +++ b/Locales.lua @@ -0,0 +1,1093 @@ +-- Freewood-OctoWoW-Codex: Texte +local ADDON, NS = ... + +local FW = _G.Freewood +if not FW then + return +end + +FW:AddLocale("enUS", { + CODEX_SEC_EFFECTS = "Effects", + CODEX_FX_SKILL = "Skill: %s", + CODEX_FX_FW_SWIM = "Swim speed (%)", + CODEX_FX_FW_RUNSPEED = "Run speed (%)", + CODEX_FX_FW_MOUNTSPEED = "Mount speed (%)", + CODEX_FX_FW_CRIT = "Crit chance (%)", + CODEX_FX_FW_SPELLCRIT = "Spell crit chance (%)", + CODEX_FX_FW_RANGEDCRIT = "Ranged crit chance (%)", + CODEX_FX_FW_HIT = "Hit chance (%)", + CODEX_FX_FW_SPELLHIT = "Spell hit chance (%)", + CODEX_FX_FW_DODGE = "Dodge chance (%)", + CODEX_FX_FW_PARRY = "Parry chance (%)", + CODEX_FX_FW_BLOCK = "Block chance (%)", + CODEX_FX_FW_BLOCKVAL = "Block value", + CODEX_FX_FW_MP5 = "Mana per 5 sec", + CODEX_FX_FW_HP5 = "Health per 5 sec", + CODEX_FX_FW_DEFENSE = "Defense skill", + CODEX_FX_FW_FISHING = "Fishing skill", + CODEX_FX_FW_HASTE = "Attack and casting speed (%)", + CODEX_FX_FW_RANGEDSPEED = "Ranged attack speed (%)", + CODEX_FX_FW_ARMORPEN = "Armor ignored", + CODEX_FX_FW_SPELLPEN = "Spell penetration", + CODEX_FX_FW_LIFESTEAL = "Damage returned as healing (%)", + CODEX_FX_FW_AMMODPS = "Ammo damage per second", + CODEX_FX_FW_SD_ARCANE = "Arcane spell damage", + CODEX_FX_FW_SD_FIRE = "Fire spell damage", + CODEX_FX_FW_SD_FROST = "Frost spell damage", + CODEX_FX_FW_SD_HOLY = "Holy spell damage", + CODEX_FX_FW_SD_NATURE = "Nature spell damage", + CODEX_FX_FW_SD_SHADOW = "Shadow spell damage", + CODEX_FX_FW_PROC = "Effect: chance on hit", + CODEX_FX_FW_USE = "Effect: on use", + CODEX_FX_FW_SET = "Set bonus", + CODEX_FX_FW_EQUIPFX = "Effect: other equip effect", + CODEX_FX_FW_EXTRADMG = "Extra weapon damage (school)", + CODEX_TITLE = "Database", + CODEX_INSTANCE_UNKNOWN = "Instance #%d", + CODEX_PROPS_BTN = "Properties", + CODEX_PROPS_ZONES = "Zones (where it can be found)", + CODEX_PROPS_ZONES_NONE = "No zone set.", + CODEX_PROPS_HERE = "Add my current zone", + CODEX_PROPS_ZONE_HINT = "Type a zone or dungeon name (or a map ID) and pick it from the list. Useful for instances, where the game gives no locations.", + CODEX_PROPS_DUNGEON = "Dungeon / instance:", + CODEX_PROPS_CLASS = "Class:", + CODEX_PROPS_LEVELS = "Level (from - to):", + CODEX_PROPS_PRE = "Prerequisite quest IDs:", + CODEX_PROPS_NEXT = "Follow-up quest IDs:", + CODEX_PROPS_BEFORE = "Comes before quest IDs:", + CODEX_PROPS_AFTER = "Comes after quest IDs:", + CODEX_PROPS_QLEVEL = "Quest level:", + CODEX_PROPS_TEXT = "Quest text:", + CODEX_SEC_QTEXT = "Quest text (by editors)", + CODEX_PROPS_KEY = "Key item ID:", + CODEX_PROPS_STARTITEM = "Starts from item ID:", + CODEX_PROPS_KEY_HINT = "The item that opens the chest this item is in (e.g. 4882). The levelling plan then counts where the key comes from.", + CODEX_PROPS_PRE_HINT = "Comma separated, any one of them is enough. Example: 794", + CODEX_PROPS_UNKNOWN = "unknown", + CODEX_PROPS_YES = "yes (dungeon)", + CODEX_PROPS_NO = "no (open world)", + CODEX_PROPS_AUTO = "automatic (as learned)", + CODEX_PROPS_CLASS_normal = "normal", + CODEX_PROPS_CLASS_elite = "elite", + CODEX_PROPS_CLASS_rare = "rare", + CODEX_PROPS_CLASS_rareelite = "rare elite", + CODEX_PROPS_CLASS_worldboss = "boss", + CODEX_PROPS_QK = "Kill target of quest IDs:", + CODEX_PROPS_QD = "Drops quest items (Quest:Item):", + CODEX_PROPS_Q_HINT = "Quest IDs separated by commas. Quest items as QuestID:ItemID, for example 6:1234 (this one drops item 1234 for quest 6).", + CODEX_SEC_QITEMS = "Drops quest items for", + CODEX_PROPS_QB = "Belongs to quest IDs:", + CODEX_PROPS_QR = "Belongs to this quest:", + CODEX_PROPS_QR_HINT = "Items, creatures, objects: i:1234, u:38, o:55 (i = item, u = creature, o = object). They need not be in the database.", + CODEX_SEC_QREL = "Belongs to this quest", + CODEX_SEC_QTEXT = "Quest text", + CODEX_QT_D = "Description", + CODEX_QT_O = "Objective", + CODEX_QT_P = "In progress", + CODEX_QT_R = "On completion", + CODEX_CT_beast = "Beast", CODEX_CT_humanoid = "Humanoid", CODEX_CT_undead = "Undead", CODEX_CT_demon = "Demon", + CODEX_CT_dragonkin = "Dragonkin", CODEX_CT_elemental = "Elemental", CODEX_CT_giant = "Giant", + CODEX_CT_mechanical = "Mechanical", CODEX_CT_critter = "Critter", CODEX_CT_totem = "Totem", CODEX_CT_gascloud = "Gas cloud", CODEX_CT_other = "Not specified", CODEX_CT_pet = "Non-combat pet", + CODEX_SEC_QBEL = "Belongs to quest", + CODEX_MANUAL_TAG = "by hand", + CODEX_PROPS_HINT = "Saved values wait in the Dev tab until you press \"Send changes\". They override what the game learned and go to all players. Items are shared as well.", + CODEX_PROPS_LINE = "Properties (by editors)", + CODEX_PROPS_DG_YES = "Dungeon", + CODEX_PROPS_DG_NO = "Open world", + CODEX_PROPS_ZONES_LINE = "Zones: %s", + CODEX_ROLE_INFO = "Your key: %s, role: %s, Dev module: %s, permission list: %d entries (revision %d)", + CODEX_DESC = "Learns quests, creatures and drops while you play.", + CODEX_TAB = "Database", + + CODEX_KIND_QUESTS = "Quests", + CODEX_KIND_UNITS = "Creatures", + CODEX_KIND_OBJECTS = "Objects", + CODEX_KIND_ITEMS = "Items", + CODEX_SEARCH = "Search ...", + CODEX_SORT_NAME = "Sort: name", + CODEX_SORT_RECENT = "Sort: recent", + CODEX_COUNT = "%d entries", + CODEX_COUNT_MORE = "%d entries (first %d shown, narrow the search)", + CODEX_EMPTY = "Nothing recorded yet. Play on: quests, creatures and loot are learned automatically.", + CODEX_NO_MATCH = "No entries match.", + CODEX_SELECT = "Select an entry on the left.", + + CODEX_LEVEL = "Level %s", + CODEX_LEVEL_RANGE = "Level %d-%d", + CODEX_SEEN = "accepted %dx", + CODEX_DONE = "completed %dx", + CODEX_PARTIAL = "found in the quest log, no giver recorded yet", + + CODEX_SEC_GIVE = "Accepted from", + CODEX_GIVE_BY_ITEM = "Started by an item (sources: see item entry)", + CODEX_START_ITEM = "start item", + CODEX_SEC_TURN = "Turned in to", + CODEX_SEC_REWARD = "Rewards", + CODEX_SEC_OBJ = "Objectives", + CODEX_SEC_GIVES = "Gives quests", + CODEX_SEC_TURNS = "Takes quests", + CODEX_SEC_TARGET = "Objective of quests", + CODEX_SEC_LOOT = "Loot", + CODEX_SEC_ALT = "Other loot (skinning and similar)", + CODEX_SEC_DROPS = "Drops from", + CODEX_SEC_STATS = "Stats", + CODEX_SEED_ON = "Template: on", + CODEX_SEED_OFF = "Template: off", + CODEX_SEED_TAG = "template", + CODEX_CAT_TAG = "catalog", + CODEX_START_TAG = "start data", + CODEX_START_NOTE = "From the bundled start data (pfQuest/Octo), not confirmed by you yet. Your own observations always win.", + CODEX_CAT_NOTE = "Title, level, objectives, rewards and texts come from the server quest catalog. Giver, turn-in and prerequisites are learned by playing and talking to NPCs.", + CODEX_CAT_TARGET = "target of %d quest(s)", + CODEX_SEC_REP = "Reputation goal", + CODEX_SEED_NOTE = "From the Vanilla template, not confirmed in Forever yet. Your own observations always win.", + CODEX_SEED_MISSING = "Template data not installed (addon Freewood-OctoWoW-CodexData).", + CODEX_SEED_STATUS = "Template: %d quests, %d creatures, %d objects, %d items loaded.", + CODEX_SEC_PRE = "Prerequisite quests", + CODEX_SEC_NEXT = "Follow-up quests", + CODEX_MINLEVEL = "Requires level %d", + CODEX_SEC_LOOT_SEED = "Loot (template)", + CODEX_SEC_SELLS = "Sells (template)", + CODEX_SEC_SOLDBY = "Sold by (template)", + CODEX_SEC_SRC_SEED = "Sources (template)", + CODEX_SEC_SRC_START = "Sources (start data)", + CODEX_SEC_SOLDBY_START = "Sold by (start data)", + CODEX_SEED_CHANCE = "~%s%%", + CODEX_SRC_VENDOR = "Vendor", + CODEX_FILTER_ROLE = "Role: %s", + CODEX_FILTER_CHAIN = "Chain: %s", + CODEX_CHAIN_POS = "Chain %d/%d", + CODEX_FILTER_STATUS = "Status: %s", + CODEX_STATUS_DONE = "completed", + CODEX_STATUS_ACTIVE = "in progress", + CODEX_STATUS_OPEN = "not started", + CODEX_STATUS_LINE = "This character: %s", + CODEX_OP_AND = "AND", + CODEX_OP_OR = "OR", + CODEX_CHAIN_IN = "in a chain", + CODEX_CHAIN_START = "start", + CODEX_CHAIN_MID = "middle", + CODEX_CHAIN_END = "end", + CODEX_CHAIN_NONE = "standalone", + CODEX_SORT_DIST = "Sort: distance", + CODEX_WEAPON_DAMAGE = "Damage", + CODEX_WEAPON_SPEED = "Speed", + CODEX_FAC_A = "Alliance", + CODEX_FAC_H = "Horde", + CODEX_SORTBY_name = "Name", + CODEX_SORTBY_recent = "Recent", + CODEX_SORTBY_gold = "Gold per kill", + CODEX_SORTBY_ttk = "Time to kill", + CODEX_SORTBY_gpm = "Gold per minute", + CODEX_SORTBY_ahkill = "Value per kill (auction)", + CODEX_SORTBY_gpmah = "Gold per minute (auction)", + CODEX_FILTER_AH = "Auction (g)", + CODEX_BAD_MARK = "Mark as faulty", + CODEX_BAD_UNMARK = "Unmark faulty", + CODEX_SORTBY_flip = "Vendor profit (auction)", + CODEX_AH_AGE = "Last scan", + CODEX_AH_TODAY = "today", + CODEX_AH_DAYS = "%d days ago", + CODEX_AH_OLD = "old", + CODEX_AH_THIN = "~ Only a few listings: the price may be inaccurate.", + CODEX_AH_TREND_DAY = "Change since last scan day", + CODEX_AH_TREND_ALL = "Change over the whole period", + CODEX_AH_NET = "Net after 5 % fee", + CODEX_AH_VENDOR_SELL = "Vendor sell price", + CODEX_AH_SELL_AH = "Auction pays more by", + CODEX_AH_SELL_VENDOR = "Vendor pays more by", + CODEX_AH_VENDOR_BUY = "Buy from vendor", + CODEX_AH_FLIP = "Profit per item (buy at vendor, sell at auction)", + CODEX_AH_SHORT = "AH", + CODEX_SRV_NOTE = "Only name and type are known (from the server). Positions, levels and loot are learned as you play.", + CODEX_SRV_SPELL = "Teaches spell (ID)", + CODEX_SEC_STARTS = "Starts the quest", + CODEX_AH_TAG = "auction house", + CODEX_AH_NOTE = "Only known from the auction scan. Source, drop and use are learned as soon as someone plays it.", + CODEX_VALUE_ITEMS_AH = "Items (auction prices)", + CODEX_VALUE_TOTAL_AH = "Total (auction)", + CODEX_SEC_AH = "Auction house", + CODEX_AH_PRICE = "Price (as set)", + CODEX_AH_MIN = "Lowest", + CODEX_AH_AVG = "Average", + CODEX_AH_QTY = "Listed", + CODEX_SORTBY_lvl = "Level", + CODEX_SORTBY_xpm = "XP per minute", + CODEX_SORTBY_dist = "Distance", + CODEX_SORTBY_xp = "Experience", + CODEX_SORTBY_money = "Gold reward", + CODEX_SORTBY_qtime = "Quest time", + CODEX_SORTBY_price = "Sell value", + CODEX_SORTBY_buy = "Vendor price", + CODEX_SORTBY_ah = "Auction price", + CODEX_SORTBY_ilvl = "Item level", + CODEX_SORTBY_quality = "Quality", + CODEX_SORTBY_chance = "Drop chance", + CODEX_SORTBY_gph = "Gold per hour", + CODEX_SORT_DIR_TIP = "Reverse sort order", + CODEX_FARM = "Farm ranking", + CODEX_BACK = "< Back", + CODEX_SEC_BESTSRC = "Best place to farm", + CODEX_BESTSRC_ROW = "%s / h | %.0f s per kill", + CODEX_CHEAPEST = "cheapest", + CODEX_SORTBY_data = "Data (least first)", + CODEX_ROLE_combat = "Combat creature", + CODEX_ROLE_elite = "Elite", + CODEX_ROLE_boss = "Boss", + CODEX_ROLE_classtrainer = "Class trainer", + CODEX_ROLE_proftrainer = "Profession trainer", + CODEX_SEC_WARES = "Wares (%d)", + CODEX_SEC_TRAINS = "Teaches (%d)", + CODEX_SEC_FLIGHTS = "Flight destinations (%d)", + CODEX_SEC_SOLDBY_LIVE = "Sold by (observed)", + CODEX_TITLE_LINE = "Title: %s", + CODEX_WARE_LIMITED = "limited", + CODEX_WARE_TOKEN = "tokens", + CODEX_TRAIN_LEVEL = "Level %d", + CODEX_FLIGHT_FROM = "Flight point: %s", + CODEX_ROLES_EVENTS = "Events seen: %s", + CODEX_ROLES_GOSSIP = "Gossip/frame kinds seen: %s", + CODEX_ROLES_COUNTS = "Roles recorded: %s", + CODEX_ROLES_LAST = "Last recorded: %s (%s %s)", + CODEX_ROLE_vendor = "Vendor", + CODEX_ROLE_repair = "Repair", + CODEX_ROLE_flight = "Flight master", + CODEX_ROLE_innkeeper = "Innkeeper", + CODEX_ROLE_stablemaster = "Stable master", + CODEX_ROLE_spirithealer = "Spirit healer", + CODEX_ROLE_auctioneer = "Auctioneer", + CODEX_ROLE_battlemaster = "Battlemaster", + CODEX_ROLE_banker = "Banker", + CODEX_ROLE_rares = "Rare creature", + CODEX_ROLE_mailbox = "Mailbox", + CODEX_ROLE_meetingstone = "Meeting stone", + CODEX_ROLE_chests = "Chest", + CODEX_ROLE_herbs = "Herb", + CODEX_ROLE_mines = "Ore", + CODEX_ROLE_fish = "Fishing pool", + CODEX_NEAR_HEAD = "Nearest (%s):", + CODEX_NEAR_ROW = "%s - %.1f / %.1f", + CODEX_NEAR_NONE = "Nothing found on this map (or no template data).", + CODEX_NEAR_HELP = "Usage: /fwcodex near ", + CODEX_SEC_TIME = "Time", + CODEX_TTK_AVG = "Time to kill (%s)", + CODEX_TTK_XPM = "XP per minute (fighting)", + CODEX_SEC_TTK_CLASSES = "Time to kill by class", + CODEX_TTK_YOU = "(you)", + CODEX_TTK_ROW = "%.1f s | %d XP/min", + CODEX_QT_EFF = "Active time, split across quests", + CODEX_QT_RAW = "Active time, unsplit", + CODEX_QT_ALL = "Until turn-in", + CODEX_QT_N = "Measurements", + CODEX_FILTER_STAT = "Stat: %s", + CODEX_FILTER_STATV = "Min / Max", + CODEX_SEC_REWARDOF = "Reward of quests", + CODEX_SEC_QUESTITEM = "Quest item for", + CODEX_SEC_PLACES = "Seen in", + + CODEX_XP = "Experience", + CODEX_MONEY = "Gold", + CODEX_REP = "Reputation", + CODEX_FIXED = "Reward", + CODEX_CHOICE = "Choice", + CODEX_CHOSEN = "chosen %dx", + CODEX_SOURCES = "Sources", + CODEX_KILLS = "Looted: %d", + CODEX_COIN_AVG = "Average gold: %s", + CODEX_DROP_CHANCE = "%s (%d of %d)", + CODEX_LOW_SAMPLE = "few samples", + CODEX_AVG_QTY = "avg. %.1f", + CODEX_QUEST_ITEM = "quest item", + CODEX_POS = "%s (%.0f, %.0f)", + CODEX_SEC_SPOTS = "Locations", + CODEX_SPOT_HITS = "%dx", + CODEX_MAP_SHOW = "Show on world map", + CODEX_MAP_LABEL = "Codex: %s - click to hide", + CODEX_MAP_NONE = "No locations recorded yet.", + CODEX_MAP_HOVER = "Locations nearby", + CODEX_MAP_MORE = "... and %d more", + CODEX_TAG_GIVE = "Accept: %s", + CODEX_TAG_TURN = "Turn in: %s", + + CODEX_TYPE_monster = "Kill", + CODEX_TYPE_item = "Collect", + CODEX_TYPE_object = "Object", + CODEX_TYPE_event = "Event", + CODEX_TYPE_other = "Objective", + CODEX_TYPE_log = "Objective", + + CODEX_KIND_ZONES = "Zones", + CODEX_SEC_ZONE_RATE = "Your measurement", + CODEX_ZONE_RATE_NOTE = "Measured while playing with your current Quest settings; changing a setting starts a new measurement.", + CODEX_ZONE_RATE_LINE = "Level %d", + CODEX_ZONE_RATE_LEVEL = ", level-up in ~%d min", + CODEX_FILTER_ZONE = "Type: %s", + CODEX_ZONEF_WORLD = "Open world", + CODEX_ZONEF_DUNGEON = "Dungeons", + CODEX_ZONEF_FIT = "Fits my level", + CODEX_ZONEF_DATA = "Enough data", + CODEX_SORTBY_zlvl = "Level range", + CODEX_SORTBY_cnt = "Creatures", + CODEX_ZONE_AVG = "avg", + CODEX_ZONE_MANUAL = "set by hand", + CODEX_ZONE_FEW = "few data", + CODEX_ZONE_UNITS = "%d creatures", + CODEX_ZONE_OUTLIERS = "%d outliers", + CODEX_ZONE_SPECIAL = "%d elite/rare/boss", + CODEX_ZONE_DUNGEON = "Dungeon", + CODEX_ZONE_WORLD = "Open world", + CODEX_SEC_ZONE_LEVELS = "Levels", + CODEX_ZONE_TYPICAL = "Typical range", + CODEX_ZONE_COUNT = "Creatures (normal)", + CODEX_ZONE_MANUAL_NOTE = "This range was set by hand.", + CODEX_ZONE_FEW_NOTE = "Too few creatures known: the range is only a rough guess.", + CODEX_ZONE_OUTLIER_LIST = "Outliers", + CODEX_ZONE_OUTLIER = "outlier", + CODEX_SEC_ZONE_UNITS = "Creatures in this zone (%d)", + CODEX_SEC_ZONE_EDIT = "Edit", + CODEX_SEC_ZONE_QUESTS = "Quests starting in this zone (%d)", + CODEX_SEC_ZONE_FORYOU = "For your level (%d, level %d)", + CODEX_SEC_ZONE_FLIGHT = "Flight points (%d)", + CODEX_ZONE_QMIN = "from level %d", + CODEX_ZONE_EDIT = "Set level range by hand...", + CODEX_ZONE_EDIT_HINT = "Replaces the computed range for everyone after sending in the Dev tab. Leave empty or clear to use the computed range again.", + CODEX_KIND_XP = "Experience", + CODEX_KIND_LEARN = "Learning plan", + CODEX_HINT_MOVE = "Move: ON", + CODEX_HINT_MOVE_DONE = "Done - save", + CODEX_HINT_RESET = "Reset position", + CODEX_HINT_DRAG = "Drag with the left mouse button", + CODEX_FAVX_HEADER = "Favorites and notes", + CODEX_FAVX_SECTION_NOTE = "Back up your favorites and notes as text, or move them to another character or computer.", + CODEX_FAVX_OPEN = "Export / import favorites...", + CODEX_FAVX_TITLE = "Export and import favorites", + CODEX_FAVX_NOTE = "Export creates one line of text (Ctrl+C to copy). To import, paste such a line (Ctrl+V) and press Import. Existing favorites and notes are kept, new ones are added.", + CODEX_FAVX_EXPORT = "Export", + CODEX_FAVX_IMPORT = "Import", + CODEX_FAVX_CLOSE = "Close", + CODEX_FAVX_EXPORTED = "%d favorites exported. Press Ctrl+C to copy.", + CODEX_FAVX_IMPORTED = "Imported: %d new favorites, %d notes taken over, %d invalid entries.", + CODEX_FAVX_BAD = "This is not an exported favorites line.", + CODEX_SORTBY_zone = "Area (grouped)", + CODEX_GROUP_ROW = "%d open | %d active | %d done", + CODEX_ZONE_UNKNOWN = "No area", + CODEX_LISTMAX_HEADER = "Database list length", + CODEX_LISTMAX_NOTE = "How many rows the database list shows at most. Higher values show more entries but can slow the window down; the list refreshes the next time it is built.", + CODEX_LISTMAX_VALUE = "Up to %d rows", + CODEX_HINT_HEADER = "Learning hints", + CODEX_HINT_NOTE = "After a level up (out of combat) or a new profession rank, a short hint in the middle of the screen shows what you can now learn from a trainer. Based on the trainers you or others have visited.", + CODEX_HINT_CLASS_SWITCH = "Hint after a level up: what to learn from the class trainer", + CODEX_PATHMAP_LABEL = "Path network: %d path, %d drops, %d crossings, %d gaps", + CODEX_PATHMAP_NONE = "Path network: nothing recorded on this map yet", + CODEX_PATH_HEADER = "Path network", + CODEX_PATH_NOTE = "Records where you walked on foot (not mounted, flying, falling or gliding, not in instances) as a grid of cells. Only a position and direction per cell are stored, no names and no times. The level plan will use it later to find walkable routes.", + CODEX_PATH_SWITCH = "Record walked paths", + CODEX_TAXI_HEADER = "Flights", + CODEX_TAXI_NOTE = "Shows a small window with the remaining flight time while you travel by flight master.", + CODEX_TAXI_SWITCH = "Show flight window", + CODEX_TAXI_PLAN = "Use flights in the level planner (only between flight points this character knows)", + CODEX_TAXI_TITLE = "Flight to %s", + CODEX_TAXI_LEFT = "%s left", + CODEX_TAXI_ARRIVING = "Arriving...", + CODEX_TAXI_UNKNOWN = "%s (duration is being recorded)", + CODEX_TAXI_TIP_TIME = "Flight time: %s", + CODEX_TAXI_TIP_NONE = "Flight time: unknown (recorded on the first flight)", + CODEX_TAXI_TIP_COUNT = "Flown %dx, %s in total", + CODEX_PATH_STATS = "%d cells, %d connections, %d drops, %d zone links recorded", + CODEX_HINT_PROF_SWITCH = "Hint at a new profession rank: what to learn from the profession trainer", + CODEX_HINT_TEST = "Show a test hint", + CODEX_HINT_CLASS_TITLE = "Level %d: now learnable at your trainer", + CODEX_HINT_PROF_TITLE = "%s %d: now learnable at the trainer", + CODEX_HINT_MORE = "... and %d more", + CODEX_HINT_CLICK = "Click to open the learning plan", + CODEX_HINT_COST = "Cost %s", + CODEX_HINT_MISSING = "%s missing", + CODEX_HINT_DEMO = "Example ability", + CODEX_SORTBY_step = "Level (ascending)", + CODEX_LEARN_CLASS = "Class", + CODEX_LEARN_SUMSHORT = "total %s", + CODEX_LEARN_EMPTY = "No class trainer data yet. Visit class trainers, the plan fills itself.", + CODEX_LEARN_TITLE = "Level %d", + CODEX_LEARN_SUB = "%d abilities | cost %s", + CODEX_LEARN_CUM = "Total from level %d on: %s", + CODEX_LEARN_LVUNKNOWN = "Level unknown", + CODEX_SEC_LEARN_SPELLS = "Abilities (%d)", + CODEX_SEC_LEARN_TRAINERS = "Trainers (%d)", + CODEX_LEARN_NOTE = "Built from the trainers you or others have visited. Prices are the most common ones seen.", + CODEX_ROUTE = "Plan route", + CODEX_ROUTE_RANGE = "Quests in my level range (+/- 3)", + CODEX_ROUTE_BELOW = "Levels below", + CODEX_ROUTE_ABOVE = "Levels above", + CODEX_ROUTE_GO = "Calculate route", + CODEX_ROUTE_NONE = "No acceptable quests with a known position in your area in the list.", + CODEX_ROUTE_LABEL = "Quest route (%d stops)", + CODEX_ROUTE_TIP = "Opens the route planner: choose a level range, then calculate a route over the listed, acceptable quests in your area. It follows you while the map is open.", + CODEX_FAV_ONLY = "Favorites", + CODEX_FAV_ADD = "Add to favorites", + CODEX_FAV_REMOVE = "Remove from favorites", + CODEX_SEC_NOTE = "My note", + CODEX_NOTE_HINT = "Type a short note and press Enter...", + CODEX_DEVNOTE_HINT = "Dev note (only you see it, not shared)... press Enter to save", + CODEX_XP_TITLE = "You level %d > creature level %d", + CODEX_XP_ELITE = "Elite", + CODEX_XP_RARE = "Rare", + CODEX_XP_BOSS = "Boss", + CODEX_XP_ROW = "avg. %.1f | formula %d | diff %+.1f | n=%d", + CODEX_XP_BONUS_TAG = "bonus", + CODEX_XP_RESTED_TAG = "rested", + CODEX_XP_WITH_RESTED = "with rested bonus", + CODEX_SEC_XP = "Experience per kill", + CODEX_SEC_XPCALC = "Formula (Classic 1-60)", + CODEX_SEC_XPMEAS = "Measured", + CODEX_XP_SAMPLES = "Samples", + CODEX_XP_AVG = "Average", + CODEX_XP_MINMAX = "Min / max", + CODEX_XP_PRED = "Formula value", + CODEX_XP_DIFF = "Difference", + CODEX_XP_COLOR = "Creature color", + CODEX_XP_GRAY = "Gray up to creature level", + CODEX_XP_ZD = "Zero difference (ZD)", + CODEX_XP_BASE = "Base (5 x level + 45; enemy level if lower)", + CODEX_XP_NOTE = "Samples with rested, group or raid bonus are listed separately and not used for the formula check.", + CODEX_XP_UNIT_ROW = "Level %d", + CODEX_XP_UNIT_ROW2 = "Level %d (enemy %d)", + CODEX_SORT_PRICE = "Sort: price", + CODEX_SORT_ILVL = "Sort: item level", + CODEX_SORT_QUALITY = "Sort: quality", + CODEX_SORT_CHANCE = "Sort: drop chance", + CODEX_SORT_GOLD = "Sort: gold/kill", + CODEX_FILTER = "Filter", + CODEX_FILTER_N = "Filter (%d)", + CODEX_FILTER_RESET = "Reset", + CODEX_FILTER_TYPE = "Type: %s", + CODEX_FILTER_SUB = "Subtype: %s", + CODEX_FILTER_SLOT = "Slot: %s", + CODEX_FILTER_SRC = "Source: %s", + CODEX_FILTER_ZONE = "Zone: %s", + CODEX_FILTER_ALL = "all", + CODEX_FILTER_ILVL = "Item level", + CODEX_FILTER_RLVL = "Req. level", + CODEX_FILTER_PRICE = "Price (g)", + CODEX_SRC_UNIT = "Creatures", + CODEX_SRC_OBJECT = "Objects", + CODEX_SRC_REWARD = "Quest reward", + CODEX_SRC_QUEST = "Quest item", + CODEX_QUAL_0 = "Poor", + CODEX_QUAL_1 = "Common", + CODEX_QUAL_2 = "Uncommon", + CODEX_QUAL_3 = "Rare", + CODEX_QUAL_4 = "Epic", + CODEX_QUAL_5 = "Legendary", + CODEX_LOADING_ITEMS = "loading item data: %d", + CODEX_ILVL_SHORT = "iLvl %d", + CODEX_VALUE_HEAD = "Value per looted corpse", + CODEX_VALUE_COIN = "Gold (actually dropped)", + CODEX_VALUE_ITEMS = "Items (vendor price)", + CODEX_VALUE_TOTAL = "Total (average)", + CODEX_VALUE_MISSING = "%d items without price data yet", + CODEX_VALUE_SHORT = "avg %s", + CODEX_TEST_OBJ = "Objectives without a readable name: %d", + CODEX_COLOR_red = "red", + CODEX_COLOR_orange = "orange", + CODEX_COLOR_yellow = "yellow", + CODEX_COLOR_green = "green", + CODEX_COLOR_gray = "gray", + CODEX_FAMILY = "Family: %s", + CODEX_TEST_XP = "Experience: %d series measured, %d unknown messages", + CODEX_YES = "yes", + CODEX_NO = "no", + CODEX_TEST_API = "API: loot source %s, objectives %s, quest reward %s, reward hook %s", + CODEX_TEST_COUNTS = "Database: %d quests, %d creatures, %d objects, %d item names", + CODEX_TEST_STATS = "This session: %d loot sources recorded, %d skipped reads", + CODEX_REMOTE_HINT = "Includes %d of %d corpses from other players", + CODEX_REMOTE_ONLY = "Data from other players only", + CODEX_SHARE_HEADER = "Share database", + CODEX_SHARE_NOTE = "Shares what you have recorded (creatures, objects, quests, drops, experience, walked paths and zone links) with guild, party, raid and a hidden channel, and receives the same from others. Only game data is sent, no character names. Received data is kept apart from yours and added to the displayed numbers.", + CODEX_SHARE_SWITCH = "Share database data", + CODEX_SHARE_SWITCH_TIP = "One switch for everything: guild, party, raid and the hidden channel. Off by default.", + CODEX_SHARE_STATS = "Sent: %d records | received: %d records", + CODEX_SHARE_SOURCES = "Stored from %d players: %d records", + CODEX_SHARE_GLOBAL_OK = "Hidden channel: connected", + CODEX_SHARE_GLOBAL_JOINING = "Hidden channel: joining ...", + CODEX_SHARE_GLOBAL_FAILED = "Hidden channel: could not join", + CODEX_SHARE_GLOBAL_UNAVAILABLE = "Hidden channel: not available", + CODEX_SHARE_GLOBAL_OFF = "Hidden channel: off", + CODEX_SHARE_HEARD = "Players heard from in the last hour: %d", + CODEX_SHARE_LOG = "Show sharing log in chat (troubleshooting)", + CODEX_SHARE_LOG_TIP = "Prints every sent (->) and received (<-) sharing message in the chat. Off again after /reload.", + CODEX_SHARE_NOW = "Call others now", + CODEX_AVAIL_CLEARED = "All 'not possible yet' marks removed.", + CODEX_AVAIL_UNBLOCKED = "Quest %d is allowed in the plan again.", + CODEX_AVAIL_LIST = "Marked 'not possible yet': %d (/fwblock allows one again, /fwblock all allows all)", + CODEX_FOREVER_ON = "Starter data (ForeverData): %d records loaded (version %s). /fwforever off turns it off.", + CODEX_FOREVER_OFF = "Starter data (ForeverData) is off. /fwforever on turns it on.", + CODEX_FOREVER_MISSING = "Starter data (ForeverData) not found: the Freewood-OctoWoW-ForeverData addon is not installed.", + CODEX_SHARE_CLEAR = "Delete received data", + CODEX_SHARE_CLEAR_SURE = "Really delete? Click again", + CODEX_SHARE_CLEARED = "Codex: %d received records deleted.", + CODEX_EXPORT_LABEL = "Database", + CODEX_IMPORT_STATS = "%d records imported, %d skipped", + CODEX_TEST_SHARE = "Sharing: %s, %d own records, %d players with %d records stored", + CODEX_ON = "on", + CODEX_OFF = "off", + CODEX_NAME_EDIT = "Edit name", + CODEX_NAME_IMPORT = "Paste names", + CODEX_NAME_DE = "German", + CODEX_NAME_EN = "English", + CODEX_NAME_GAME = "Learned from the game: %s", + CODEX_NAME_SAVE = "Save", + CODEX_NAME_CLEAR = "Clear names", + CODEX_NAME_CANCEL = "Cancel", + CODEX_NAME_HINT = "Shared with other players. Your own entry always wins.", + CODEX_NAME_HINT_LOCAL = "Item names stay on this computer.", + CODEX_NAME_LINK = "Look it up: click the link, press Ctrl+C, paste it into your browser.", + CODEX_NAME_KILLS = "Recently defeated (click to use):", + CODEX_NAME_NOKILLS = "No kill lines seen yet. Kill something and open this again.", + CODEX_NAME_IMPORT_HELP = "One line per entry: ID, space, name (also ID;name or ID=name). Applies to the current list: %s.", + CODEX_NAME_IMPORT_GO = "Import", + CODEX_NAME_IMPORT_RESULT = "%d saved, %d skipped", + CODEX_NAME_CLOSE = "Close", +}) + +FW:AddLocale("deDE", { + CODEX_SEC_EFFECTS = "Effekte", + CODEX_FX_SKILL = "Fertigkeit: %s", + CODEX_FX_FW_SWIM = "Schwimmtempo (%)", + CODEX_FX_FW_RUNSPEED = "Lauftempo (%)", + CODEX_FX_FW_MOUNTSPEED = "Reittempo (%)", + CODEX_FX_FW_CRIT = "Kritische Trefferchance (%)", + CODEX_FX_FW_SPELLCRIT = "Kritische Zaubertrefferchance (%)", + CODEX_FX_FW_RANGEDCRIT = "Kritische Fernkampfchance (%)", + CODEX_FX_FW_HIT = "Trefferchance (%)", + CODEX_FX_FW_SPELLHIT = "Zaubertrefferchance (%)", + CODEX_FX_FW_DODGE = "Ausweichchance (%)", + CODEX_FX_FW_PARRY = "Parierchance (%)", + CODEX_FX_FW_BLOCK = "Blockchance (%)", + CODEX_FX_FW_BLOCKVAL = "Blockwert", + CODEX_FX_FW_MP5 = "Mana pro 5 Sek.", + CODEX_FX_FW_HP5 = "Leben pro 5 Sek.", + CODEX_FX_FW_DEFENSE = "Verteidigung", + CODEX_FX_FW_FISHING = "Angeln", + CODEX_FX_FW_HASTE = "Angriffs- und Zaubertempo (%)", + CODEX_FX_FW_RANGEDSPEED = "Fernkampftempo (%)", + CODEX_FX_FW_ARMORPEN = "Ignorierte Rüstung", + CODEX_FX_FW_SPELLPEN = "Zauberdurchschlag", + CODEX_FX_FW_LIFESTEAL = "Schaden als Heilung zurück (%)", + CODEX_FX_FW_AMMODPS = "Munition: Schaden pro Sek.", + CODEX_FX_FW_SD_ARCANE = "Arkanzauberschaden", + CODEX_FX_FW_SD_FIRE = "Feuerzauberschaden", + CODEX_FX_FW_SD_FROST = "Frostzauberschaden", + CODEX_FX_FW_SD_HOLY = "Heiligzauberschaden", + CODEX_FX_FW_SD_NATURE = "Naturzauberschaden", + CODEX_FX_FW_SD_SHADOW = "Schattenzauberschaden", + CODEX_FX_FW_PROC = "Effekt: Chance bei Treffer", + CODEX_FX_FW_USE = "Effekt: bei Benutzung", + CODEX_FX_FW_SET = "Set-Bonus", + CODEX_FX_FW_EQUIPFX = "Effekt: sonstiger Anlege-Effekt", + CODEX_FX_FW_EXTRADMG = "Zusätzlicher Waffenschaden (Schule)", + CODEX_TITLE = "Datenbank", + CODEX_INSTANCE_UNKNOWN = "Instanz #%d", + CODEX_PROPS_BTN = "Eigenschaften", + CODEX_PROPS_ZONES = "Zonen (wo man es findet)", + CODEX_PROPS_ZONES_NONE = "Keine Zone eingetragen.", + CODEX_PROPS_HERE = "Meine aktuelle Zone", + CODEX_PROPS_ZONE_HINT = "Zonen- oder Dungeon-Namen (oder eine Karten-ID) eintippen und aus der Liste wählen. Praktisch für Instanzen, in denen das Spiel keine Orte liefert.", + CODEX_PROPS_DUNGEON = "Dungeon / Instanz:", + CODEX_PROPS_CLASS = "Klasse:", + CODEX_PROPS_LEVELS = "Stufe (von - bis):", + CODEX_PROPS_PRE = "Vorquest-IDs:", + CODEX_PROPS_NEXT = "Folgequest-IDs:", + CODEX_PROPS_BEFORE = "Kommt vor Quest-IDs:", + CODEX_PROPS_AFTER = "Kommt nach Quest-IDs:", + CODEX_PROPS_QLEVEL = "Quest-Stufe:", + CODEX_PROPS_TEXT = "Questtext:", + CODEX_SEC_QTEXT = "Questtext (von Bearbeitern)", + CODEX_PROPS_KEY = "Schlüssel-Item-ID:", + CODEX_PROPS_STARTITEM = "Startet durch Item-ID:", + CODEX_PROPS_KEY_HINT = "Das Item, das die Truhe öffnet, in der dieses Item liegt (z. B. 4882). Der Levelplan rechnet dann ein, woher der Schlüssel kommt.", + CODEX_PROPS_PRE_HINT = "Durch Komma getrennt, eine davon genügt. Beispiel: 794", + CODEX_PROPS_UNKNOWN = "unbekannt", + CODEX_PROPS_YES = "ja (Dungeon)", + CODEX_PROPS_NO = "nein (offene Welt)", + CODEX_PROPS_AUTO = "automatisch (wie gelernt)", + CODEX_PROPS_CLASS_normal = "normal", + CODEX_PROPS_CLASS_elite = "Elite", + CODEX_PROPS_CLASS_rare = "Selten", + CODEX_PROPS_CLASS_rareelite = "Selten-Elite", + CODEX_PROPS_CLASS_worldboss = "Boss", + CODEX_PROPS_QK = "Kill-Ziel von Quest-IDs:", + CODEX_PROPS_QD = "Lässt Quest-Items fallen (Quest:Item):", + CODEX_PROPS_Q_HINT = "Quest-IDs durch Komma getrennt. Quest-Items als QuestID:ItemID, zum Beispiel 6:1234 (lässt Item 1234 für Quest 6 fallen).", + CODEX_SEC_QITEMS = "Lässt Quest-Items fallen für", + CODEX_PROPS_QB = "Gehört zu Quest-IDs:", + CODEX_PROPS_QR = "Gehört zu dieser Quest:", + CODEX_PROPS_QR_HINT = "Items, Kreaturen, Objekte: i:1234, u:38, o:55 (i = Item, u = Kreatur, o = Objekt). Sie müssen nicht in der Datenbank stehen.", + CODEX_SEC_QREL = "Gehört zu dieser Quest", + CODEX_SEC_QTEXT = "Quest-Text", + CODEX_QT_D = "Beschreibung", + CODEX_QT_O = "Ziel", + CODEX_QT_P = "Zwischentext", + CODEX_QT_R = "Abschlusstext", + CODEX_CT_beast = "Wildtier", CODEX_CT_humanoid = "Humanoid", CODEX_CT_undead = "Untoter", CODEX_CT_demon = "Dämon", + CODEX_CT_dragonkin = "Drachkin", CODEX_CT_elemental = "Elementar", CODEX_CT_giant = "Riese", + CODEX_CT_mechanical = "Mechanisch", CODEX_CT_critter = "Kleintier", CODEX_CT_totem = "Totem", CODEX_CT_gascloud = "Gaswolke", CODEX_CT_other = "Nicht spezifiziert", CODEX_CT_pet = "Haustier", + CODEX_SEC_QBEL = "Gehört zur Quest", + CODEX_MANUAL_TAG = "von Hand", + CODEX_PROPS_HINT = "Gespeicherte Werte warten im Dev-Reiter, bis du „Änderungen senden“ drückst. Sie ersetzen, was das Spiel gelernt hat, und gehen an alle Spieler. Items werden ebenfalls geteilt.", + CODEX_PROPS_LINE = "Eigenschaften (von Bearbeitern)", + CODEX_PROPS_DG_YES = "Dungeon", + CODEX_PROPS_DG_NO = "Offene Welt", + CODEX_PROPS_ZONES_LINE = "Zonen: %s", + CODEX_ROLE_INFO = "Dein Schlüssel: %s, Rolle: %s, Dev-Modul: %s, Berechtigungsliste: %d Einträge (Stand %d)", + CODEX_DESC = "Lernt beim Spielen Quests, Kreaturen und Beute.", + CODEX_TAB = "Datenbank", + + CODEX_KIND_QUESTS = "Quests", + CODEX_KIND_UNITS = "Kreaturen", + CODEX_KIND_OBJECTS = "Objekte", + CODEX_KIND_ITEMS = "Items", + CODEX_SEARCH = "Suchen ...", + CODEX_SORT_NAME = "Sortierung: Name", + CODEX_SORT_RECENT = "Sortierung: zuletzt", + CODEX_COUNT = "%d Einträge", + CODEX_COUNT_MORE = "%d Einträge (die ersten %d sichtbar, Suche eingrenzen)", + CODEX_EMPTY = "Noch nichts erfasst. Spiele weiter: Quests, Kreaturen und Beute werden automatisch gelernt.", + CODEX_NO_MATCH = "Keine passenden Einträge.", + CODEX_SELECT = "Wähle links einen Eintrag.", + + CODEX_LEVEL = "Stufe %s", + CODEX_LEVEL_RANGE = "Stufe %d-%d", + CODEX_SEEN = "%dx angenommen", + CODEX_DONE = "%dx abgegeben", + CODEX_PARTIAL = "im Questlog gefunden, Geber noch nicht erfasst", + + CODEX_SEC_GIVE = "Angenommen bei", + CODEX_GIVE_BY_ITEM = "Angenommen durch ein Item (Fundorte: siehe Item-Eintrag)", + CODEX_START_ITEM = "Startitem", + CODEX_SEC_TURN = "Abgegeben bei", + CODEX_SEC_REWARD = "Belohnung", + CODEX_SEC_OBJ = "Ziele", + CODEX_SEC_GIVES = "Vergibt Quests", + CODEX_SEC_TURNS = "Nimmt Quests an", + CODEX_SEC_TARGET = "Ziel von Quests", + CODEX_SEC_LOOT = "Beute", + CODEX_SEC_ALT = "Sonstige Beute (Häuten und Ähnliches)", + CODEX_SEC_DROPS = "Fällt bei", + CODEX_SEC_STATS = "Werte", + CODEX_SEED_ON = "Vorlage: an", + CODEX_SEED_OFF = "Vorlage: aus", + CODEX_SEED_TAG = "Vorlage", + CODEX_CAT_TAG = "Katalog", + CODEX_START_TAG = "Startdaten", + CODEX_START_NOTE = "Aus den mitgelieferten Startdaten (pfQuest/Octo), von dir noch nicht bestätigt. Deine eigenen Beobachtungen gehen immer vor.", + CODEX_CAT_NOTE = "Titel, Stufe, Ziele, Belohnungen und Texte stammen aus dem Quest-Katalog des Servers. Geber, Abgabe und Vorquests werden beim Spielen und Sprechen mit NPCs gelernt.", + CODEX_CAT_TARGET = "Ziel von %d Quest(s)", + CODEX_SEC_REP = "Ruf-Ziel", + CODEX_SEED_NOTE = "Aus der Vanilla-Vorlage, in Forever noch nicht bestätigt. Deine eigenen Beobachtungen gehen immer vor.", + CODEX_SEED_MISSING = "Vorlagen-Daten nicht installiert (Addon Freewood-OctoWoW-CodexData).", + CODEX_SEED_STATUS = "Vorlage: %d Quests, %d Kreaturen, %d Objekte, %d Items geladen.", + CODEX_SEC_PRE = "Vorquests", + CODEX_SEC_NEXT = "Folgequests", + CODEX_MINLEVEL = "Benötigt Stufe %d", + CODEX_SEC_LOOT_SEED = "Beute (Vorlage)", + CODEX_SEC_SELLS = "Verkauft (Vorlage)", + CODEX_SEC_SOLDBY = "Verkauft von (Vorlage)", + CODEX_SEC_SRC_SEED = "Quellen (Vorlage)", + CODEX_SEC_SRC_START = "Quellen (Startdaten)", + CODEX_SEC_SOLDBY_START = "Verkauft von (Startdaten)", + CODEX_SEED_CHANCE = "ca. %s%%", + CODEX_SRC_VENDOR = "Händler", + CODEX_FILTER_ROLE = "Rolle: %s", + CODEX_FILTER_CHAIN = "Kette: %s", + CODEX_CHAIN_POS = "Kette %d/%d", + CODEX_FILTER_STATUS = "Status: %s", + CODEX_STATUS_DONE = "erledigt", + CODEX_STATUS_ACTIVE = "in Arbeit", + CODEX_STATUS_OPEN = "offen", + CODEX_STATUS_LINE = "Dieser Charakter: %s", + CODEX_OP_AND = "UND", + CODEX_OP_OR = "ODER", + CODEX_CHAIN_IN = "in einer Kette", + CODEX_CHAIN_START = "Anfang", + CODEX_CHAIN_MID = "Mitte", + CODEX_CHAIN_END = "Ende", + CODEX_CHAIN_NONE = "einzeln", + CODEX_SORT_DIST = "Sortierung: Entfernung", + CODEX_WEAPON_DAMAGE = "Schaden", + CODEX_WEAPON_SPEED = "Tempo", + CODEX_FAC_A = "Allianz", + CODEX_FAC_H = "Horde", + CODEX_SORTBY_name = "Name", + CODEX_SORTBY_recent = "Zuletzt", + CODEX_SORTBY_gold = "Gold pro Kill", + CODEX_SORTBY_ttk = "Kampfdauer (TTK)", + CODEX_SORTBY_gpm = "Gold pro Minute", + CODEX_SORTBY_ahkill = "Wert pro Kill (Auktion)", + CODEX_SORTBY_gpmah = "Gold pro Minute (Auktion)", + CODEX_FILTER_AH = "Auktion (g)", + CODEX_BAD_MARK = "Fehlerhaft markieren", + CODEX_BAD_UNMARK = "Markierung aufheben", + CODEX_SORTBY_flip = "Händlergewinn (Auktion)", + CODEX_AH_AGE = "Letzter Scan", + CODEX_AH_TODAY = "heute", + CODEX_AH_DAYS = "vor %d Tagen", + CODEX_AH_OLD = "alt", + CODEX_AH_THIN = "~ Nur wenige Angebote: der Preis kann ungenau sein.", + CODEX_AH_TREND_DAY = "Veränderung seit dem letzten Tag", + CODEX_AH_TREND_ALL = "Veränderung im ganzen Zeitraum", + CODEX_AH_NET = "Netto nach 5 % Gebühr", + CODEX_AH_VENDOR_SELL = "Verkaufspreis beim Händler", + CODEX_AH_SELL_AH = "Auktion bringt mehr um", + CODEX_AH_SELL_VENDOR = "Händler bringt mehr um", + CODEX_AH_VENDOR_BUY = "Einkauf beim Händler", + CODEX_AH_FLIP = "Gewinn je Stück (Händler kaufen, Auktion verkaufen)", + CODEX_AH_SHORT = "AH", + CODEX_SRV_NOTE = "Nur Name und Typ sind bekannt (vom Server). Positionen, Stufen und Beute werden beim Spielen gelernt.", + CODEX_SRV_SPELL = "Lehrt Zauber (ID)", + CODEX_SEC_STARTS = "Startet die Quest", + CODEX_AH_TAG = "Auktionshaus", + CODEX_AH_NOTE = "Nur aus dem Auktions-Scan bekannt. Quelle, Drop und Verwendung werden gelernt, sobald jemand es spielt.", + CODEX_VALUE_ITEMS_AH = "Items (Auktionspreise)", + CODEX_VALUE_TOTAL_AH = "Gesamt (Auktion)", + CODEX_SEC_AH = "Auktionshaus", + CODEX_AH_PRICE = "Preis (wie eingestellt)", + CODEX_AH_MIN = "Niedrigster", + CODEX_AH_AVG = "Durchschnitt", + CODEX_AH_QTY = "Angebote", + CODEX_SORTBY_lvl = "Stufe", + CODEX_SORTBY_xpm = "Erfahrung/Minute", + CODEX_SORTBY_dist = "Entfernung", + CODEX_SORTBY_xp = "Erfahrung", + CODEX_SORTBY_money = "Gold-Belohnung", + CODEX_SORTBY_qtime = "Questzeit", + CODEX_SORTBY_price = "Verkaufswert", + CODEX_SORTBY_buy = "Händlerpreis", + CODEX_SORTBY_ah = "Auktionspreis", + CODEX_SORTBY_ilvl = "Itemstufe", + CODEX_SORTBY_quality = "Qualität", + CODEX_SORTBY_chance = "Drop-Chance", + CODEX_SORTBY_gph = "Gold pro Stunde", + CODEX_SORT_DIR_TIP = "Reihenfolge umkehren", + CODEX_FARM = "Farm-Ranking", + CODEX_BACK = "< Zurück", + CODEX_SEC_BESTSRC = "Wo am besten farmen?", + CODEX_BESTSRC_ROW = "%s / Std. | %.0f s pro Kill", + CODEX_CHEAPEST = "günstigster", + CODEX_SORTBY_data = "Datenlage (wenig zuerst)", + CODEX_ROLE_combat = "Kampfkreatur", + CODEX_ROLE_elite = "Elite", + CODEX_ROLE_boss = "Boss", + CODEX_ROLE_classtrainer = "Klassenlehrer", + CODEX_ROLE_proftrainer = "Berufslehrer", + CODEX_SEC_WARES = "Waren (%d)", + CODEX_SEC_TRAINS = "Lehrt (%d)", + CODEX_SEC_FLIGHTS = "Flugziele (%d)", + CODEX_SEC_SOLDBY_LIVE = "Verkauft von (beobachtet)", + CODEX_TITLE_LINE = "Titel: %s", + CODEX_WARE_LIMITED = "begrenzt", + CODEX_WARE_TOKEN = "Tauschware", + CODEX_TRAIN_LEVEL = "Stufe %d", + CODEX_FLIGHT_FROM = "Flugpunkt: %s", + CODEX_ROLES_EVENTS = "Gesehene Ereignisse: %s", + CODEX_ROLES_GOSSIP = "Gesehene Gesprächs-/Fensterarten: %s", + CODEX_ROLES_COUNTS = "Erfasste Rollen: %s", + CODEX_ROLES_LAST = "Zuletzt erfasst: %s (%s %s)", + CODEX_ROLE_vendor = "Händler", + CODEX_ROLE_repair = "Reparatur", + CODEX_ROLE_flight = "Flugmeister", + CODEX_ROLE_innkeeper = "Gastwirt", + CODEX_ROLE_stablemaster = "Stallmeister", + CODEX_ROLE_spirithealer = "Geisterheiler", + CODEX_ROLE_auctioneer = "Auktionator", + CODEX_ROLE_battlemaster = "Schlachtfeldmeister", + CODEX_ROLE_banker = "Bankier", + CODEX_ROLE_rares = "Seltene Kreatur", + CODEX_ROLE_mailbox = "Briefkasten", + CODEX_ROLE_meetingstone = "Versammlungsstein", + CODEX_ROLE_chests = "Truhe", + CODEX_ROLE_herbs = "Kraut", + CODEX_ROLE_mines = "Erz", + CODEX_ROLE_fish = "Fischschwarm", + CODEX_NEAR_HEAD = "Am nächsten (%s):", + CODEX_NEAR_ROW = "%s - %.1f / %.1f", + CODEX_NEAR_NONE = "Auf dieser Karte nichts gefunden (oder keine Vorlagen-Daten).", + CODEX_NEAR_HELP = "Benutzung: /fwcodex near ", + CODEX_SEC_TIME = "Zeit", + CODEX_TTK_AVG = "Kampfdauer (%s)", + CODEX_TTK_XPM = "XP pro Minute (im Kampf)", + CODEX_SEC_TTK_CLASSES = "Kampfdauer nach Klasse", + CODEX_TTK_YOU = "(du)", + CODEX_TTK_ROW = "%.1f s | %d XP/Min", + CODEX_QT_EFF = "Aktive Zeit, auf Quests aufgeteilt", + CODEX_QT_RAW = "Aktive Zeit, ohne Aufteilen", + CODEX_QT_ALL = "Bis zur Abgabe", + CODEX_QT_N = "Messungen", + CODEX_FILTER_STAT = "Wert: %s", + CODEX_FILTER_STATV = "Min / Max", + CODEX_SEC_REWARDOF = "Belohnung von Quests", + CODEX_SEC_QUESTITEM = "Quest-Item für", + CODEX_SEC_PLACES = "Gesehen in", + + CODEX_XP = "Erfahrung", + CODEX_MONEY = "Gold", + CODEX_REP = "Ruf", + CODEX_FIXED = "Belohnung", + CODEX_CHOICE = "Auswahl", + CODEX_CHOSEN = "%dx gewählt", + CODEX_SOURCES = "Quellen", + CODEX_KILLS = "Gelootet: %d", + CODEX_COIN_AVG = "Durchschnittliches Gold: %s", + CODEX_DROP_CHANCE = "%s (%d von %d)", + CODEX_LOW_SAMPLE = "wenig Daten", + CODEX_AVG_QTY = "Ø %.1f", + CODEX_QUEST_ITEM = "Quest-Item", + CODEX_POS = "%s (%.0f, %.0f)", + CODEX_SEC_SPOTS = "Fundorte", + CODEX_SPOT_HITS = "%dx", + CODEX_MAP_SHOW = "Auf der Weltkarte zeigen", + CODEX_MAP_LABEL = "Codex: %s – Klick zum Ausblenden", + CODEX_MAP_NONE = "Noch keine Fundorte erfasst.", + CODEX_MAP_HOVER = "Fundorte in der Nähe", + CODEX_MAP_MORE = "... und %d weitere", + CODEX_TAG_GIVE = "Annahme: %s", + CODEX_TAG_TURN = "Abgabe: %s", + + CODEX_TYPE_monster = "Töten", + CODEX_TYPE_item = "Sammeln", + CODEX_TYPE_object = "Objekt", + CODEX_TYPE_event = "Ereignis", + CODEX_TYPE_log = "Aufgabe", + CODEX_TYPE_other = "Ziel", + + CODEX_KIND_ZONES = "Gebiete", + CODEX_SEC_ZONE_RATE = "Deine Messung", + CODEX_ZONE_RATE_NOTE = "Gemessen beim Spielen mit deinen aktuellen Quest-Einstellungen; eine geänderte Einstellung beginnt eine neue Messung.", + CODEX_ZONE_RATE_LINE = "Stufe %d", + CODEX_ZONE_RATE_LEVEL = ", Level-Up in ca. %d Min.", + CODEX_FILTER_ZONE = "Art: %s", + CODEX_ZONEF_WORLD = "Offene Welt", + CODEX_ZONEF_DUNGEON = "Dungeons", + CODEX_ZONEF_FIT = "Passt zu meiner Stufe", + CODEX_ZONEF_DATA = "Genug Daten", + CODEX_SORTBY_zlvl = "Stufenspanne", + CODEX_SORTBY_cnt = "Kreaturen", + CODEX_ZONE_AVG = "Ø", + CODEX_ZONE_MANUAL = "von Hand gesetzt", + CODEX_ZONE_FEW = "wenig Daten", + CODEX_ZONE_UNITS = "%d Kreaturen", + CODEX_ZONE_OUTLIERS = "%d Ausreißer", + CODEX_ZONE_SPECIAL = "%d Elite/Selten/Boss", + CODEX_ZONE_DUNGEON = "Dungeon", + CODEX_ZONE_WORLD = "Offene Welt", + CODEX_SEC_ZONE_LEVELS = "Stufen", + CODEX_ZONE_TYPICAL = "Typische Spanne", + CODEX_ZONE_COUNT = "Kreaturen (normal)", + CODEX_ZONE_MANUAL_NOTE = "Diese Spanne wurde von Hand gesetzt.", + CODEX_ZONE_FEW_NOTE = "Zu wenige Kreaturen bekannt: die Spanne ist nur eine grobe Schätzung.", + CODEX_ZONE_OUTLIER_LIST = "Ausreißer", + CODEX_ZONE_OUTLIER = "Ausreißer", + CODEX_SEC_ZONE_UNITS = "Kreaturen in diesem Gebiet (%d)", + CODEX_SEC_ZONE_EDIT = "Bearbeiten", + CODEX_SEC_ZONE_QUESTS = "Quests, die in diesem Gebiet beginnen (%d)", + CODEX_SEC_ZONE_FORYOU = "Für deine Stufe (%d, Stufe %d)", + CODEX_SEC_ZONE_FLIGHT = "Flugpunkte (%d)", + CODEX_ZONE_QMIN = "ab Stufe %d", + CODEX_ZONE_EDIT = "Stufenspanne von Hand setzen...", + CODEX_ZONE_EDIT_HINT = "Ersetzt die berechnete Spanne für alle, sobald im Dev-Reiter gesendet wird. Leer lassen oder zurücksetzen, um wieder die berechnete Spanne zu nutzen.", + CODEX_KIND_XP = "Erfahrung", + CODEX_KIND_LEARN = "Lernplan", + CODEX_HINT_MOVE = "Verschieben AN", + CODEX_HINT_MOVE_DONE = "Fertig - speichern", + CODEX_HINT_RESET = "Position zurücksetzen", + CODEX_HINT_DRAG = "Mit der linken Maustaste ziehen", + CODEX_FAVX_HEADER = "Favoriten und Notizen", + CODEX_FAVX_SECTION_NOTE = "Sichere deine Favoriten und Notizen als Text oder übertrage sie auf einen anderen Charakter oder Rechner.", + CODEX_FAVX_OPEN = "Favoriten exportieren / importieren...", + CODEX_FAVX_TITLE = "Favoriten exportieren und importieren", + CODEX_FAVX_NOTE = "Export erzeugt eine Textzeile (Strg+C zum Kopieren). Zum Import eine solche Zeile einfügen (Strg+V) und Import drücken. Vorhandene Favoriten und Notizen bleiben, neue kommen dazu.", + CODEX_FAVX_EXPORT = "Exportieren", + CODEX_FAVX_IMPORT = "Importieren", + CODEX_FAVX_CLOSE = "Schließen", + CODEX_FAVX_EXPORTED = "%d Favoriten exportiert. Mit Strg+C kopieren.", + CODEX_FAVX_IMPORTED = "Importiert: %d neue Favoriten, %d Notizen übernommen, %d ungültige Einträge.", + CODEX_FAVX_BAD = "Das ist keine exportierte Favoriten-Zeile.", + CODEX_SORTBY_zone = "Gebiet (gruppiert)", + CODEX_GROUP_ROW = "%d offen | %d aktiv | %d erledigt", + CODEX_ZONE_UNKNOWN = "Ohne Gebiet", + CODEX_LISTMAX_HEADER = "Länge der Datenbank-Liste", + CODEX_LISTMAX_NOTE = "Wie viele Zeilen die Datenbank-Liste höchstens zeigt. Höhere Werte zeigen mehr Einträge, können das Fenster aber verlangsamen; die Liste übernimmt den Wert beim nächsten Aufbau.", + CODEX_LISTMAX_VALUE = "Bis zu %d Zeilen", + CODEX_HINT_HEADER = "Lern-Hinweise", + CODEX_HINT_NOTE = "Nach einem Stufenaufstieg (außerhalb des Kampfes) oder einer neuen Berufsstufe zeigt ein kurzer Hinweis in der Bildschirmmitte, was du jetzt beim Lehrer lernen kannst. Grundlage sind die Lehrer, die du oder andere besucht haben.", + CODEX_HINT_CLASS_SWITCH = "Hinweis nach Stufenaufstieg: was beim Klassenlehrer lernbar ist", + CODEX_PATHMAP_LABEL = "Wegenetz: %d Wege, %d Fälle, %d Übergänge, %d Lücken", + CODEX_PATHMAP_NONE = "Wegenetz: auf dieser Karte noch nichts aufgezeichnet", + CODEX_PATH_HEADER = "Wegenetz", + CODEX_PATH_NOTE = "Zeichnet auf, wo du zu Fuß gegangen bist (nicht auf Reittier, im Flug, beim Fallen oder Gleiten, nicht in Instanzen), als Raster aus Zellen. Gespeichert werden nur Position und Richtung je Zelle, keine Namen und keine Zeiten. Der Levelplan nutzt das später, um begehbare Wege zu finden.", + CODEX_PATH_SWITCH = "Gegangene Wege aufzeichnen", + CODEX_TAXI_HEADER = "Flüge", + CODEX_TAXI_NOTE = "Zeigt beim Flug mit dem Flugmeister ein kleines Fenster mit der verbleibenden Flugzeit.", + CODEX_TAXI_SWITCH = "Flugfenster anzeigen", + CODEX_TAXI_PLAN = "Flüge im Levelplaner berücksichtigen (nur zwischen Flugpunkten, die dieser Charakter kennt)", + CODEX_TAXI_TITLE = "Flug nach %s", + CODEX_TAXI_LEFT = "Noch %s", + CODEX_TAXI_ARRIVING = "Gleich da...", + CODEX_TAXI_UNKNOWN = "%s (Dauer wird erfasst)", + CODEX_TAXI_TIP_TIME = "Flugdauer: %s", + CODEX_TAXI_TIP_NONE = "Flugdauer: unbekannt (wird beim ersten Flug erfasst)", + CODEX_TAXI_TIP_COUNT = "%dx geflogen, insgesamt %s", + CODEX_PATH_STATS = "%d Zellen, %d Verbindungen, %d Fälle, %d Gebietsverbindungen aufgezeichnet", + CODEX_HINT_PROF_SWITCH = "Hinweis bei neuer Berufsstufe: was beim Berufslehrer lernbar ist", + CODEX_HINT_TEST = "Test-Hinweis anzeigen", + CODEX_HINT_CLASS_TITLE = "Stufe %d: Jetzt beim Lehrer lernbar", + CODEX_HINT_PROF_TITLE = "%s %d: Jetzt beim Lehrer lernbar", + CODEX_HINT_MORE = "... und %d weitere", + CODEX_HINT_CLICK = "Klick öffnet den Lernplan", + CODEX_HINT_COST = "Kosten %s", + CODEX_HINT_MISSING = "%s fehlt noch", + CODEX_HINT_DEMO = "Beispiel-Fähigkeit", + CODEX_SORTBY_step = "Stufe (aufsteigend)", + CODEX_LEARN_CLASS = "Klasse", + CODEX_LEARN_SUMSHORT = "gesamt %s", + CODEX_LEARN_EMPTY = "Noch keine Klassenlehrer-Daten. Besuche Klassenlehrer, der Plan füllt sich selbst.", + CODEX_LEARN_TITLE = "Stufe %d", + CODEX_LEARN_SUB = "%d Fähigkeiten | Kosten %s", + CODEX_LEARN_CUM = "Gesamt ab Stufe %d: %s", + CODEX_LEARN_LVUNKNOWN = "Stufe unbekannt", + CODEX_SEC_LEARN_SPELLS = "Fähigkeiten (%d)", + CODEX_SEC_LEARN_TRAINERS = "Lehrer (%d)", + CODEX_LEARN_NOTE = "Aus den besuchten Lehrern zusammengesetzt (eigene und geteilte). Preise: der häufigste gesehene Preis.", + CODEX_ROUTE = "Route planen", + CODEX_ROUTE_RANGE = "Quests in meinem Level-Bereich (+/- 3)", + CODEX_ROUTE_BELOW = "Stufen unterhalb", + CODEX_ROUTE_ABOVE = "Stufen oberhalb", + CODEX_ROUTE_GO = "Route berechnen", + CODEX_ROUTE_NONE = "Keine annehmbaren Quests mit bekannter Position in deinem Gebiet in der Liste.", + CODEX_ROUTE_LABEL = "Quest-Route (%d Stationen)", + CODEX_ROUTE_TIP = "Öffnet die Routenplanung: Stufenbereich wählen und eine Route über die gelisteten, annehmbaren Quests in deinem Gebiet berechnen. Sie folgt dir, solange die Karte offen ist.", + CODEX_FAV_ONLY = "Favoriten", + CODEX_FAV_ADD = "Zu Favoriten", + CODEX_FAV_REMOVE = "Aus Favoriten entfernen", + CODEX_SEC_NOTE = "Meine Notiz", + CODEX_NOTE_HINT = "Kurze Notiz eintippen und Enter drücken...", + CODEX_DEVNOTE_HINT = "Dev-Notiz (nur für dich sichtbar, wird nicht geteilt) ... Enter zum Speichern", + CODEX_XP_TITLE = "Du Stufe %d > Gegner Stufe %d", + CODEX_XP_ELITE = "Elite", + CODEX_XP_RARE = "Selten", + CODEX_XP_BOSS = "Boss", + CODEX_XP_ROW = "Ø %.1f | Formel %d | Abw. %+.1f | n=%d", + CODEX_XP_BONUS_TAG = "Zusatz", + CODEX_XP_RESTED_TAG = "Ausgeruht", + CODEX_XP_WITH_RESTED = "mit Ruhebonus", + CODEX_SEC_XP = "Erfahrung pro Kill", + CODEX_SEC_XPCALC = "Formel (Classic 1-60)", + CODEX_SEC_XPMEAS = "Gemessen", + CODEX_XP_SAMPLES = "Messungen", + CODEX_XP_AVG = "Durchschnitt", + CODEX_XP_MINMAX = "Min / Max", + CODEX_XP_PRED = "Formelwert", + CODEX_XP_DIFF = "Abweichung", + CODEX_XP_COLOR = "Farbe des Gegners", + CODEX_XP_GRAY = "Grau bis Gegnerstufe", + CODEX_XP_ZD = "Nulldifferenz (ZD)", + CODEX_XP_BASE = "Basis (5 x Stufe + 45; bei schwächerem Gegner dessen Stufe)", + CODEX_XP_NOTE = "Messungen mit Ruhe-, Gruppen- oder Raidzusatz stehen getrennt und fließen nicht in die Formelprüfung ein.", + CODEX_XP_UNIT_ROW = "Stufe %d", + CODEX_XP_UNIT_ROW2 = "Stufe %d (Gegner %d)", + CODEX_SORT_PRICE = "Sortierung: Preis", + CODEX_SORT_ILVL = "Sortierung: Itemstufe", + CODEX_SORT_QUALITY = "Sortierung: Qualität", + CODEX_SORT_CHANCE = "Sortierung: Drop-Chance", + CODEX_SORT_GOLD = "Sortierung: Gold/Kill", + CODEX_FILTER = "Filter", + CODEX_FILTER_N = "Filter (%d)", + CODEX_FILTER_RESET = "Zurücksetzen", + CODEX_FILTER_TYPE = "Typ: %s", + CODEX_FILTER_SUB = "Untertyp: %s", + CODEX_FILTER_SLOT = "Platz: %s", + CODEX_FILTER_SRC = "Quelle: %s", + CODEX_FILTER_ZONE = "Gebiet: %s", + CODEX_FILTER_ALL = "alle", + CODEX_FILTER_ILVL = "Itemstufe", + CODEX_FILTER_RLVL = "Benötigt", + CODEX_FILTER_PRICE = "Preis (g)", + CODEX_SRC_UNIT = "Kreaturen", + CODEX_SRC_OBJECT = "Objekte", + CODEX_SRC_REWARD = "Quest-Belohnung", + CODEX_SRC_QUEST = "Quest-Item", + CODEX_QUAL_0 = "Grau", + CODEX_QUAL_1 = "Weiß", + CODEX_QUAL_2 = "Grün", + CODEX_QUAL_3 = "Blau", + CODEX_QUAL_4 = "Episch", + CODEX_QUAL_5 = "Legendär", + CODEX_LOADING_ITEMS = "lade Itemdaten: %d", + CODEX_ILVL_SHORT = "Stufe %d", + CODEX_VALUE_HEAD = "Wert pro gelooteter Leiche", + CODEX_VALUE_COIN = "Gold (tatsächlich gefallen)", + CODEX_VALUE_ITEMS = "Items (Händlerpreis)", + CODEX_VALUE_TOTAL = "Gesamt (Durchschnitt)", + CODEX_VALUE_MISSING = "%d Items noch ohne Preisdaten", + CODEX_VALUE_SHORT = "Ø %s", + CODEX_TEST_OBJ = "Ziele ohne lesbaren Namen: %d", + CODEX_COLOR_red = "rot", + CODEX_COLOR_orange = "orange", + CODEX_COLOR_yellow = "gelb", + CODEX_COLOR_green = "grün", + CODEX_COLOR_gray = "grau", + CODEX_FAMILY = "Familie: %s", + CODEX_TEST_XP = "Erfahrung: %d Messreihen, %d unbekannte Meldungen", + CODEX_YES = "ja", + CODEX_NO = "nein", + CODEX_TEST_API = "API: Beutequelle %s, Ziele %s, Questbelohnung %s, Belohnungs-Hook %s", + CODEX_TEST_COUNTS = "Datenbank: %d Quests, %d Kreaturen, %d Objekte, %d Itemnamen", + CODEX_TEST_STATS = "Diese Sitzung: %d Beutequellen erfasst, %d übersprungene Lesevorgänge", + CODEX_REMOTE_HINT = "Darin %d von %d Leichen von anderen Spielern", + CODEX_REMOTE_ONLY = "Nur Daten von anderen Spielern", + CODEX_SHARE_HEADER = "Datenbank teilen", + CODEX_SHARE_NOTE = "Teilt, was du erfasst hast (Kreaturen, Objekte, Quests, Beute, Erfahrung, gegangene Wege und Gebietsübergänge), mit Gilde, Gruppe, Schlachtzug und einem versteckten Kanal und empfängt dasselbe von anderen. Gesendet werden nur Spieldaten, keine Charakternamen. Empfangene Daten liegen getrennt von deinen und fließen in die angezeigten Zahlen ein.", + CODEX_SHARE_SWITCH = "Datenbank-Daten teilen", + CODEX_SHARE_SWITCH_TIP = "Ein Schalter für alles: Gilde, Gruppe, Schlachtzug und der versteckte Kanal. Standardmäßig aus.", + CODEX_SHARE_STATS = "Gesendet: %d Datensätze | empfangen: %d Datensätze", + CODEX_SHARE_SOURCES = "Gespeichert von %d Spielern: %d Datensätze", + CODEX_SHARE_GLOBAL_OK = "Versteckter Kanal: verbunden", + CODEX_SHARE_GLOBAL_JOINING = "Versteckter Kanal: wird betreten ...", + CODEX_SHARE_GLOBAL_FAILED = "Versteckter Kanal: Beitritt fehlgeschlagen", + CODEX_SHARE_GLOBAL_UNAVAILABLE = "Versteckter Kanal: nicht verfügbar", + CODEX_SHARE_GLOBAL_OFF = "Versteckter Kanal: aus", + CODEX_SHARE_HEARD = "Spieler, von denen in der letzten Stunde etwas kam: %d", + CODEX_SHARE_LOG = "Teilen-Protokoll im Chat zeigen (Fehlersuche)", + CODEX_SHARE_LOG_TIP = "Schreibt jede gesendete (->) und empfangene (<-) Teilen-Nachricht in den Chat. Nach /reload wieder aus.", + CODEX_SHARE_NOW = "Jetzt andere rufen", + CODEX_AVAIL_CLEARED = "Alle Markierungen 'noch nicht möglich' aufgehoben.", + CODEX_AVAIL_UNBLOCKED = "Quest %d darf wieder im Plan stehen.", + CODEX_AVAIL_LIST = "Als 'noch nicht möglich' markiert: %d (/fwblock hebt eine auf, /fwblock alle hebt alle auf)", + CODEX_FOREVER_ON = "Startdaten (ForeverData): %d Datensätze geladen (Version %s). /fwforever aus schaltet sie ab.", + CODEX_FOREVER_OFF = "Startdaten (ForeverData) sind aus. /fwforever an schaltet sie ein.", + CODEX_FOREVER_MISSING = "Startdaten (ForeverData) nicht gefunden: das Addon Freewood-OctoWoW-ForeverData ist nicht installiert.", + CODEX_SHARE_CLEAR = "Empfangene Daten löschen", + CODEX_SHARE_CLEAR_SURE = "Wirklich löschen? Nochmal klicken", + CODEX_SHARE_CLEARED = "Codex: %d empfangene Datensätze gelöscht.", + CODEX_EXPORT_LABEL = "Datenbank", + CODEX_IMPORT_STATS = "%d Datensätze importiert, %d übersprungen", + CODEX_TEST_SHARE = "Teilen: %s, %d eigene Datensätze, %d Spieler mit %d gespeicherten Datensätzen", + CODEX_ON = "an", + CODEX_OFF = "aus", + CODEX_NAME_EDIT = "Name bearbeiten", + CODEX_NAME_IMPORT = "Namen einfügen", + CODEX_NAME_DE = "Deutsch", + CODEX_NAME_EN = "Englisch", + CODEX_NAME_GAME = "Vom Spiel gelernt: %s", + CODEX_NAME_SAVE = "Speichern", + CODEX_NAME_CLEAR = "Namen löschen", + CODEX_NAME_CANCEL = "Abbrechen", + CODEX_NAME_HINT = "Wird mit anderen Spielern geteilt. Dein eigener Eintrag geht immer vor.", + CODEX_NAME_HINT_LOCAL = "Itemnamen bleiben auf diesem Computer.", + CODEX_NAME_LINK = "Nachschlagen: Link anklicken, Strg+C drücken, im Browser einfügen.", + CODEX_NAME_KILLS = "Zuletzt besiegt (zum Übernehmen anklicken):", + CODEX_NAME_NOKILLS = "Noch keine Kampflog-Zeilen gesehen. Besiege etwas und öffne das Fenster danach erneut.", + CODEX_NAME_IMPORT_HELP = "Eine Zeile pro Eintrag: ID, Leerzeichen, Name (auch ID;Name oder ID=Name). Gilt für die aktuelle Liste: %s.", + CODEX_NAME_IMPORT_GO = "Übernehmen", + CODEX_NAME_IMPORT_RESULT = "%d gespeichert, %d übersprungen", + CODEX_NAME_CLOSE = "Schließen", +})