disable the flight stuff for now, we'll fix it after thanksgiving
[QuestHelper.git] / Development / zorba_qhideas.txt
blob14784aefdfe274d39404845d2cb67d979613e6ca
3 Scarlet Defender cannot be found
4 prat 3.0 conflict?
7 Cartographer waypoints scale with Cartographer
8 More map labels :(
9 There's some pvp quest in Icecrown that breaks badly, figure that out once you get there? Add a new icon for it also.
12 "I know this, but it told me that [b]both[/b] quests were completed after [b]6[/b] kills."
14 Marauders of Darrowshire
16 * Add some concept of per-user prefs
17 * /qh level per-user
19 * Routing recovery
20 * Fix the flight paths
21 * Routing infinite-loop test (and kill)
22 * Build!
24 * New data storage
25 * Build!
27 @ Remember priorities
28 @ "Too Tough For Me" button
30 @ See if it can be made faster, re-enable sanity checks on at least some level
31 * Re-enable asserts in general, ha ha
33 * Rebuild build system
34   * Re-enabled "zero nodes"
35   
36 * Rebuild routing
38 * BUGS
39 * Record drops per-instance so we don't think both Kael'Thas'es are the same
40 * Rig static.lua to break if it doesn't load or has a version mismatch
41 * Lots of things break when flightpoints are updated. Lots of them.
42 * Cartographer 3 incompatibility?
43 * Bug: Full info in Tomtom's waypoint line?
44 * Bug: The assert check is going to break if the flightpoints are updated. Make this not happen. Actually now that I think about it, I bet updating the flight points is causing a lot of those crashes!
45 QuestHelper: The Routing Co-Routine just exploded:
46 Interface\Addons\Questhelper\objective.lua:30: stack overflow
47 * The only annoying thing I've run into so far is the cartographer arrow not showing up until you do /qh cartwp twice which has always been there. 
48 * "Hide" does not function properly when entering instances.
49 * Incompatible with Mapster?
51 @ Flying mounts
52 @ Tunable not-in-group penalties
53 * Build!
55 * Better data collection - collect more from more people, prompt them to upload once they have a good chunk of data
56 * Track player paths
57 * Track quest-item drops only when quest is still unfinished
58 * Track monster spots in a more specific fashion
59 * Track quest XP
60 * Track quest followups?
61 @ Teleporters functional?
62   @ Mage teleport
63   @ Druid teleport
64   @ Hearthstone?
65 * Build!
67 * Bug: QH:ComputeTravelTime is not taking the "last leg" from the zone entry point to the destination into account when doing path optimization
68 * Bug: AddObjectiveBest is not adding objectives in the best place in any sense of the word
69 * Bug: Explicit allocation. Seriously. This is a bug. IT IS IDIOTIC. WHY DID YOU DO THIS. WHAT WERE YOU THINKING.
70 * Bug: Aaaargh wacky custom half-classes with no abstraction (eats own face, dies)
72 * Bug: ObjectiveTravelTime2 is obviously inconsistent with ComputeTravelTime2, also what the hell is it doing
73 * Bug: Crash bug on timed quests?
75 * Flavor: include the name of the boat/zeppelin
76 * Remove all those wacky random-enchant items from the drop tables
77 * Switch to GUIDs if we haven't already
78 * Less reset-pathing-information, seriously wtf
79 * Show what you should be doing when you're at a flight point
81 * Better geography and barriers
82   * Pick this up automatically after "better data collection"?
83 * Higher cost for traveling through high-level areas?
85 * Custom handling for complex quests that QH currently kind of fails on ("collect these items, then use this to combine them, then give it to me" which invariably only gives you the second part at some random place in the world)
87 * Monster spawn zones should be more obvious, not just a few "go here" spots that you can't see simultaneously without a non-obvious UI feature
88 * Drop rates for quests
90 * Quest followups added automatically
91 * "Quest-like" things
92   * Recipes
93   * Flight paths
94   * Weapon training
95   * Skill training
96   * Automatic reagent/ammo restocking
97   * Repairs
98   * Mounts
99   * Pick-up dailies?
100 * Add "get quest"?
102 * Loose prioritization
103 * Give some priority to turning in quests
104 * Tracking "leveling" as part of the route finder (ha ha oh god)
105   * Along with training, mounts
106   * What the hell let's toss reagents and repairs in here as well :D :D :D
108 * Separate CPU-usage multiplier for
109   * Combat
110   * City
111   * PvP
112   * World
113   * Instance
115 *** Unsorted
117 * Auto-/target script?
118 * Track/infer completed quests
119 * Display more vertically? Is this even possible?
123 Bug:
124 Message: ..\AddOns\QuestNav\graph.lua line 185:
125 attempt to compare nil with number
127 Message: ..\AddOns\QuestHelper\utility.lua line 190:
128 bad argument #1 to 'ceil' (number expected, got nil)
129 Debug:
130 [C]: ?
131 [C]: ceil()
132 QuestHelper\utility.lua:190:
133 QuestHelper\utility.lua:189
134 (tail call): ?
135 QuestHelper\lang.lua:25:
136 QuestHelper\lang.lua:21
137 [C]: gsub()
138 QuestHelper\lang.lua:42:
139 QuestHelper\lang.lua:40
140 QuestHelper\lang.lua:85:
141 QuestHelper\lang.lua:47
142 (tail call): ?
143 QuestHelper\flightpath.lua:68: TaxiNodeOnButtonEnter()
145 Message: ..\AddOns\QuestHelper\dodads.lua line 242:
146    attempt to index field 'pos' (a nil value)
147 Debug:
148    [C]: ?
149    QuestHelper\dodads.lua:242 GetOverlapObjectives()
150    QuestHelper\dodads.lua:441
151       QuestHelper\dodads.lua:437
153 this happens every single time I fly from Azeroth(ironforge) to Outland(quel danas, ghostlands, etc) 
155 =-=-=-=-=-=
157 What do we need?
158   
159 * Monsters
160   * Locations
161   * Levels
162   * Loot count
163   * Loot, in detail
164   * Faction
165 * Items
166   * Lootable flag
167   * Disenchantable flag
168   * Prospectible flag
169   * Ilevel
170   * Weapon/armor and weapon/armor subtype
171   * Loot, in detail
172   * Disenchanting
173   * Prospecting
174 * Objects
175   * Locations
176   * Loot, in detail
177 * Events
178   * Locations
179 * Rep gains?
180 * Quests
181   * Levels
182   * Start character
183   * End character
184   * Start/end *location*
185   * Items/events involved?
186   * Rep gain
187   * XP gain
188   * Money gain
189   * Item rewards
190     * Item reward equip testing? vs. spec, class, level
191   * Faction
192 * Flight paths that exist
193 * Flight path timing
194 * Zone boundaries
195 * Subzone boundaries
196 * Walk paths
198 QuestHelper_Collector_Version = 1
199 QuestHelper_Collector = {
200   ["0.58 on 1.2.3/enUS"] = {
201     ["monster"] = {
202       [IDnumber] = {
203         -- Standard merger base here
204         "DENSDENSDENSDENS",
205         "DENSDENSDENS",
206         "DENS",
207         level_34 = 12,
208         level_35 = 99,
209         level_36 = 29,
210         name_Hello! = 19,
211         reaction_4 = 155, -- this is the friendly-hostile stuff
212         
213         --TODO from here:
214         loot_yes = 109,
215         loot_no = 12,
216         loot_opened = 20,
217         loot_items = {
218           [itemid] = 4,
219           [itemid] = 9,
220         }
221         skin_yes = 109,
222         skin_no = 12,
223         skin_opened = 20,
224         skin_items = {
225         }
226         questloots = {
227           [itemid] = {4, 8},  -- This only triggers if we know this critter drops a specific bit of loot - in some ways, it overrides the "loots" above
228         }
229         sells = {
230           [itemid] = true,
231           [itemid] = amount,
232         }
233       }
234     },
235     ["item"] = {
236       [IDnumber] = {
237         name = "Hello!",
238         ilevel = (level),
239         minlevel = (level),
240         quality = (quality),
241         type = "type/subtype",
242         equiplocation = "LOC",
243         
244         --TODO from here:
245         loot_yes = 109,
246         loot_no = 12,
247         loot_opened = 20,
248         loot_items = {
249           [itemid] = 4,
250           [itemid] = 9,
251         }
252         de_yes = 109,
253         de_no = 12,
254         de_opened = 20,
255         de_items = {
256           [itemid] = 4,
257           [itemid] = 9,
258         }
259         looted = 12,
260         loots = {
261           [itemid] = 4,
262           [itemid] = 9,
263         }
264         equipped = {
265           "CLEVSPEC", "CLEVSPEC"
266         }
267         equipped_no = { "CLEVSPEC", "CLEVSPEC" }
268       }
269     },
270     ["object"] = {
271       ["name"] = {
272         -- Standard merger base here
273         "DENSDENSDENSDENS",
274         "DENSDENSDENS",
275         "DENS",
276         
277         herb_yes = 109,
278         herb_no = 42,
279         mine_yes = 111,
280         mine_no = 12345,
281         
282         -- TODO from here:
283         loot_opened = 20,
284         loot_items = {
285           [itemid] = 4,
286           [itemid] = 9,
287         }
288         herb_opened = 20,
289         herb_items = {
290           [itemid] = 4,
291           [itemid] = 9,
292         }
293       }
294     },
295     TODO ["event"] = {
296       [QuestID/String] = {
297         locations = {
298           "DENSDENSDENS",
299         }
300       }
301     },
302     TODO ["reputation"] = {
303       [QuestID/String] = {
304         locations = {
305           "DENSDENSDENS",
306         }
307       }
308     },
309     TODO ["quest"] = {
310       [QuestID] = {
311         name = "Hello!",
312         level = 40,
313         start = "monster/1234",
314         end = "monster/5678",
315         start_location = {
316           "DENSDENSDENS"
317         }
318         end_location = {
319           "DENSDENSDENS"
320         }
321         objectives = {
322           { "monster/1234" = 12, "monster/4456" = 2 },
323           { "item/1234" = 9, },
324           { "reputation/1234" = 14, },
325         }
326         repgain = { faction, amount }
327         xpgain = { level, amount }
328         moneygain = { level, amount }
329         itemgain = { }
330         itemchoice = { }
331         faction_1_got = 1234
332         faction_2_got = 1236
333         completedby = { "CLVSPEC", "CLVSPEC" }
334       }
335     },
336     ["flight_master"] = {
337       ["location_name"] = {
338         master = monsterid,
339         x = 123.456,
340         y = 123.456,
341       }
342     }
343     ["flight_time"] = {
344       ["src@@dst"] = {
345         ["xx:yy@xx:yy"] = time, -- these are midpoints in the path, we can only get x,y coords and they seem to be slightly inaccurate. We'll collate on the build process.
346         ["xx:yy@xx:yy##count"] = count, -- how many samples we've taken. The "time" is a sum, divide by this for final results.
347         ["xx:yy"] = time,
348         [""] = true, -- this merely indicates that the two are directly connected
349       },
350       ["src@@dst"] = {
351       },
352     },
353     ["zone"] = {
354       ["zone@@realzone@@subzone"] = {
355         border = {
356           "DENSDENS",
357           "DENS", -- merged
358         }
359         update = {
360           "DENSDENS",
361           "DENS", --merged
362         }
363         TODO xp = {
364           level = "amount"
365         }
366       }
367     },
368     ["traveled"] = {
369       building = { "decompy" }
370       compressing = {}
371       done = {
372         "COMPCOMPCOMP",
373         "COMPCOMPCOMP",
374         "COMPCOMPCOMP",
375       }
376     },
377     TODO ["achievement"] = {
378       [ID] = {
379         objectives = {
380           { "monster/1234" = 12, "monster/4456" = 2 },
381           { "item/1234" = 9, },
382           { "reputation/1234" = 14, },
383         }
384         previous = (idnumber)
385         name_enUS =
386         -- Availability should only be tagged for achievements in the static DB, since otherwise it will be heavily biased
387         faction_1_avail =
388         faction_1_noavail =
389       }
390     }
391     TODO ["history"] = {
392       ["uniqueid"] = {
393           "level 19",
394           "had quest 1234",
395           "had quest 1234",
396           "completed quest 1234",
397           "gained level 20",
398           "abandoned quest 1234",
399           "received quest 1234",
400           "available quests at X, a b c d",
401         }, {
402           "had quest 1234",
403           "had quest 1234",
404           "completed quest 1234",
405           "abandoned quest 1234",
406           "received quest 1234",
407         }
408       }
409     }
410   }
413 DENS: ZZXXYY, zone X Y. X and Y: take the value, add 9, divide by 19, bitpack that into three 8-bit values. Gives about 88k points within the standard 1-to-0. Good 'nuff.
414 COMP: DENS, then a stream of compressed eight direction vectors and a swim bit toggle (starting with the toggle if the user is already swimming) and a fall-damage notifier
417 Detect "going inside a cave"? Holy crap. I have never considered such a thing before.
420 ---- LET US THINK ABOUT LOOTING
422 So. A loot window pops up. What's it from?
424 There's a few options.
426 * Monster loot
427 * Skinning, mining, or herbing (or engineering?) (could be either from a monster, or from an entity)
428 * Using an entity
429 * Opening a container from inventory
430 * Fishing
431 * Pickpocketing
433 Alternatively, you might just get random things.
435 * Using an item from inventory (modern clams)
436 * Talking to a dude (argent dawn?)
437 * Getting it for kills (honor tokens)
438 * Getting it for end-of-BG
440 (argent clams!)
444 Now here's a question. I already have to deal with items showing up in inventory out of nowhere. Is it perhaps better to just hook that, rather than trying to interpret loot windows? Also, what do I do about groups?
446 I think there's useful info I can get from loot windows, I'll stick with that. This also means that - in general - I don't want to worry about stuff that Simply Appears unless I think the user is actually involved somehow (using item from inventory, talking to a dude.) I'm not all that hugely worried about having to track where warglaives of azzinoth come from, at least for now.
449 So let's see how I can figure these out:
451 * Monster loot - Look for events and mouseover. Might not have it targeted, so don't assume they will.
452 * Skinning, mining, or herbing - All of these are spellcasts, see what the spell is (and what it targets) and what the user has targeted in case it's a monster. Also watch the last mouseover event, or the last tooltip?
453 * Disenchanting - watch for Disenchant spellcast, look for last tooltip
454 * Using an entity - Spellcast, again. Watch tooltip for the entity and watch the cast timer?
455 * Opening a container from inventory - Tooltip, yet again. I think that's the best I can do. Also watch for the "can be opened" text.
456 * Fishing - IsFishingLoot, and spellcast. At least this one's easy.
458 Alternatively, you might just get random things.
460 * Using an item from inventory (modern clams) - tooltip, and watch for the "can be opened" text?
461 * Talking to a dude (argent dawn?) - right-click
464 * if LOOT_CLOSED fires without LOOT_OPENED firing, there just wasn't anything
465 * Watch for kills without looting! Track kill number too. If kills >> loots, use kills. Test this on those dudes in the desert.
468 Mouseover monster -> monster killed (can I detect this in any way? Maybe?) -> mouseover monster -> LOOT_CLOSED means looted ended -> might become skinnable/minable/herbable
469 We'll get lots of extra positives for group critters that are minable, since we never loot_close them, but I'm okay with that.
471 If we never LOOT_CLOSE a critter, we assume they may or may not have been looted, and we don't check skinnable/minable/herbable. We only count those if they're positive, or if there's a known LOOT_CLOSE. This will weight towards positive, but since the values should be either 0 or 1, I'm not too worried.
472 Looting and mining and the like target the creature! This helps a lot.