Coder Social home page Coder Social logo

trashmonks / qud-wiki Goto Github PK

View Code? Open in Web Editor NEW
11.0 11.0 3.0 989 KB

Desktop app for creating and updating the official Caves of Qud wiki

Home Page: https://wiki.cavesofqud.com/

License: GNU Affero General Public License v3.0

Python 100.00%
caves-of-qud gui pyside2 python3 qud roguelike wiki

qud-wiki's People

Contributors

dependabot[bot] avatar egocarib avatar elvres avatar heladodebrownie avatar kernelmethod avatar librarianmage avatar robbyblum avatar syntaxaire avatar wreckstation avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

qud-wiki's Issues

load individual creature water ritual skills

we can use this for this section in order to provide a dynamically compiled comprehensive list of all water ritual skills, rather than just the faction ones

(special consideration is also due to neelahind, who gains the ritualable flag dynamically)

Include ElementalDamage For Weapons

Weapons can have an ElementalDamage attribute which applies additional elemental damage to the target on hit (regardless of penetration), similar to elemental mods. We don't currently extract this data to the wiki.

Some creatures apply damage exclusively in this way, including Haggabah (whose weapon currently shows as doing 0 damage on the wiki). In other cases, weapons do both regular damage and ElementalDamage, like the Chrome Pyramid's distortion field.

InventoryObjects Should Specify % Chance

I believe some inventoryobjects have a specified chance to be present in the character's inventory. For example, Trash Monk doesn't always have an electrobow, but we don't currently export the % chance to the wiki.

Qud Shader Spacing issue

In the title of articles, QBE needs to add a space between multiple instances of qud shader.

For example, this affects "crysteel long sword" and makes it appear as "crysteellong sword" on the wiki.

  • DisplayName="{{K|{{crysteel|crysteel}} long sword}}"
  • current QBE output: | title = {{Qud text|{{Qud shader|crysteel|crysteel}}{{Qud shader|K| long sword}}}}
    • the wiki strips spaces from the long sword template parameter with this output, so it won't work.
  • recommended QBE output: | title = {{Qud text|{{Qud shader|crysteel|crysteel}} {{Qud shader|K|long sword}}}}

inconsistent templates for plants and fungus

some are characters and some are not. for example, lah blooms are items (?) although they certainly have combat abilities. to be fair the item/character dichotomy was not great in the first place but they should be more consistent. i propose that characters match what i put in ALL_CHARS (has physics, nontakeable, and also is not a gas).

Load Gas "Seeping" Property

It would be nice to load the "Seeping" property for the Gas part and add it to the Gas wiki template. This property controls whether gas can pass through walls or other solid objects.

refactor qudobject.py

qudobject has gotten too long and we should refactor it (as @syntaxaire previously pointed out).

I'm not 100% sure the best way to refactor, being less experienced with python. Some internet searches seem to suggest there are multiple ways to handle splitting up a class across more than one file (making the class inherit from other classes, import methods into the class, create subclasses, etc.) and I'm not sure which method should be preferred.

Thematically we could likely split qudobject into smaller modules such as qudobject_character, qudobject_weapon/qudobject_item, or similar.

track Inorganic intproperty

i'd like to upload basically a true or false value to the wiki for each item (and possibly other types of things if relevant) stating whether they're organic

QBE returns [[No results (cooking effect)|No results]] for all preserved foods.

This is perhaps an issue with {{CookEffect ID to name}}, as QBE correctly displays the cooking effect in QBE itself.

For example, spine fruit jam has "| cookeffect = {{CookEffect ID to name|reflect}}" in the template it exports to the wiki, but the cooking effect still shows up as "no results" on the actual wiki.

Import Experience Info for Creatures

We should import XP info for creatures to display on the wiki.

If we pull in the base XP, we can combine that with the creature's level to show some level-based XP scaling info, perhaps in the Creature navbox.

image 1

Include HitBonus with MeleeWeapons

HitBonus isn't currently being included with Items (from the MeleeWeapon part). For example, Amber-Tipped Staff has +1 to hit. Many natural weapons of creatures also have this property, such as the Chrome Pyramid's distortion field, which has +10 HitBonus.

Miscellaneous Wiki Template Upload Issues

After doing a mass upload the other day, noticed the following minor issues that should be resolved:

  • QBE should add the telepathy rules text to The Kesil Face, Shemish Face, and Earth Face (see here, here, and here)
  • Amaranthine prism values need adjustment because they're hard coded (see here)
  • Something happened to the poison output values on poison spear, that needs to be fixed (see here)
  • Putrescense (clue) should have its display name overridden to "putrescense (clue)" to avoid favilink conflicts with putrescence)

Overall there were many improvements and very few things wrong from what I spot checked.

Issue with 437 codes in descriptions with legendary smith marks

Mostly likely an issue with escapeampersands, but the scoped masterwork carbine contains the mark of Sparafucile (the mars symbol) using the character sequence &#11. However, the output in QBE completely erases it. We should probably find some way to separate it out of the Mark string and properly pass it into cp437_to_unicode

Exception when accessing qud_object for natural weapons

Simply clicking on natural weapons like Sawhander_Saw (and stuff around it) raises a NoneType exception that gets printed to the console. There seems to be some issue retrieving the qud_object for these items inside tree_selection_handler even though similar code works without error in wiki_check_selected.

Export Flyover Tag to Wiki

There's a Flyover tag on some objects that indicates the player can fly over them. One example is Debris. Would be good to export this to the wiki to show as Extra data on the object.

Might also be worth exporting similar intproperty AllowMissiles (which I think allows you to shoot over it, though I haven't verified that)

Coloration Issue with AnimatedMaterialLuminous

Luminous Hoarshroom appears with black coloration on the wiki, but it should probably have Y set as its detail color instead. This coloration appears to be controlled in game by the AnimatedMaterialLuminous part.

I assume we could do something similar to what we have done for holographic item tile coloration.

Forced Logout Issue?

Have been encountering this issue fairly frequently as of late. Seems to have started after the UCP transition, maybe?

It seems easy to reproduce - upload 20 or 30 page templates, and then let QBE sit idle for 20 or 30 minutes. When you come back and try to upload something, you'll often get an error similar to this. I also sometimes run into it even while actively doing things, perhaps there's a page limit before it boots the account or something? Unsure exactly.

It would be nice if QBE could recover from this gracefully and re-log you in without having to restart the client each time it happens.

Traceback (most recent call last):
  File "D:\Users\<username>\PycharmProjects\qud-wiki\qbe\explorer.py", line 524, in upload_selected_templates
    self.upload_wikidata(self.upload_wiki_template, 'templates')
  File "D:\Users\<username>\PycharmProjects\qud-wiki\qbe\explorer.py", line 557, in upload_wikidata
    object_handler(qud_object, num)
  File "D:\Users\<username>\PycharmProjects\qud-wiki\qbe\explorer.py", line 578, in upload_wiki_template
    if page.upload_template() == 'Success':
  File "D:\Users\<username>\PycharmProjects\qud-wiki\qbe\wiki_page.py", line 90, in upload_template
    result = self.page.save(text=new_text, summary=self.EDITED_SUMMARY)
  File "C:\Users\<username>\.virtualenvs\hagadias-C3wQwRSd\lib\site-packages\mwclient\page.py", line 179, in save
    return self.edit(*args, **kwargs)
  File "C:\Users\<username>\.virtualenvs\hagadias-C3wQwRSd\lib\site-packages\mwclient\page.py", line 184, in edit
    return self._edit(summary, minor, bot, section, text=text, **kwargs)
  File "C:\Users\<username>\.virtualenvs\hagadias-C3wQwRSd\lib\site-packages\mwclient\page.py", line 200, in _edit
    raise mwclient.errors.AssertUserFailedError()
mwclient.errors.AssertUserFailedError: By default, mwclient protects you from accidentally editing without being logged in. If you actually want to edit without logging in, you can set force_login on the Site object to False.

Some turret types exist in-game but are not given a wiki page

Seemingly, there are several turret types which exist in-game as the product of a specific, corresponding turret tinker, but do not show up in ObjectBlueprints.xml, and thus do not have a corresponding page on the wiki. Specifically, these are:

  • blast cannon turrets (from blast cannon tinkers)
  • eigenturrets (from eigenturret tinkers)
  • low light laser turrets (from low-light laser turret tinkers)

Dynamic turret tinkers throw another wrench into this, as they can create a turret from any ranged weapon, almost none of which have a corresponding wiki page, as they do not show up in ObjectBlueprints.xml.

Idea: Scanning on Wiki

My pipe dream: folks can go to wiki pages like any of the following and click an "Equip" or "Start scanning..." button that toggles a preference setting on the wiki...

  • VISAGE
  • Telemetric Visor
  • Bio-Scanning Bracelet

...After doing that, you can go to other wiki pages and those pages will show their scanning status details in the description of the page. So for example, if I go to VISAGE and click "Equip this item in the wikiverse", and then I go visit Blood-gradient hand vacuum, I will see the following additional details included in the Description box at the top of the page, which weren't visible before:

image

Modding abilities

Add the ability to create a new object that inherits from a parent object.
Add the ability to save modifications to the object tree to XML.
Add a new object view, the tag tree, which has branches for Parts, Tags, Inventory objects and so on.
When loading the game tree, store all parts and attributes that we encounter, so that a modder can browse available parts or part attributes while adding them to a new or existing object.

roll_average incorrectly handles xdy-z

For example, Goatfolk Sower has an ego value of 7+1d3+3d2-1+1, which expands out to a range of 11-16. However, roll_average calculates this as having an average of 11.

Use OAuth Login for QBE

We should use OAuth login for QBE, because it's recommend and more secure than "Old-school login":

This might require setting up our bot accounts slightly differently from the looks of it:

Came across this while investigating the fact that QBE seems to be fairly agressively rate limited to about 30 pages per minute, we think it might be related to the login method. According to this mediawiki page on rate limiting, using OAuth tokens with the highvolume grant would make it so QBE isn't rate limited.

Example of status quo (QBE gets rate limited every 30 pages):

OrderedDict([('result', 'Success'), ('pageid', 390), ('title', 'Brick'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2028), ('title', 'Metal wall'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3087), ('title', 'Tarnished chrome'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1885), ('title', 'Machine wall (hot)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3290), ('title', 'Vacuum column tape drive'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1899), ('title', 'Mainframe status panel'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1898), ('title', 'Mainframe monitor'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1897), ('title', 'Mainframe control panel'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2714), ('title', 'Shale'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2639), ('title', 'Sandstone'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1822), ('title', 'Limestone'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1918), ('title', 'Marl'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2572), ('title', 'Rock salt'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1475), ('title', 'Gypsum'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 323), ('title', 'Black shale'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 656), ('title', 'Coral rag'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2253), ('title', 'Oolite'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2715), ('title', 'Shale wall with agate deposits'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2720), ('title', 'Shale wall with topaz deposits'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2718), ('title', 'Shale wall with jasper deposits'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2716), ('title', 'Shale wall with amethyst deposits'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2719), ('title', 'Shale wall with sapphire deposits'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2717), ('title', 'Shale wall with emerald deposits'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2032), ('title', 'Meteorite wall with peridot deposits'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2706), ('title', 'Serpentinite'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2799), ('title', 'Slate'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 423), ('title', 'Burnished azzurum'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2459), ('title', 'Quartzite'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 319), ('title', 'Black marble'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 819), ('title', 'Dirt'), ('contentmodel', 'wikitext'), ('nochange', '')])
Page edit rate-limited. Retrying in 3 seconds...
Page edit rate-limited. Retrying in 6 seconds...
Page edit rate-limited. Retrying in 12 seconds...
Page edit rate-limited. Retrying in 24 seconds...
OrderedDict([('result', 'Success'), ('pageid', 3120), ('title', 'Thatched wall'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2350), ('title', 'Plant matter'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3400), ('title', 'Weathered wood'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2305), ('title', 'Petal-strewn brinestalk wall'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1145), ('title', 'Fluted marble column'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1167), ('title', 'Forcefield'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1163), ('title', 'Force barrier'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 10135), ('title', 'Stasis field'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 900), ('title', 'Ebon fulcrete'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2963), ('title', 'Steaming vents'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1232), ('title', 'Fuming vents'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2894), ('title', 'Sparking vents'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2679), ('title', 'Scratched vents'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3165), ('title', 'Ticking vents'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3295), ('title', 'Vents with hexagonal residue'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3297), ('title', 'Vents with moss particulate'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3296), ('title', 'Vents with mold particulate'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1207), ('title', 'Frosted pillar'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1341), ('title', 'Gilded marble from the sultanate (first period)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1343), ('title', 'Gilded marble from the sultanate (second period)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1344), ('title', 'Gilded marble from the sultanate (third period)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1342), ('title', 'Gilded marble from the sultanate (fourth period)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1340), ('title', 'Gilded marble from the sultanate (fifth period)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1345), ('title', 'Gilded marble from the sultanate of Resheph'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 478), ('title', 'Carved stone from the sultanate (first period)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 480), ('title', 'Carved stone from the sultanate (second period)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 481), ('title', 'Carved stone from the sultanate (third period)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 479), ('title', 'Carved stone from the sultanate (fourth period)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 476), ('title', 'Carved stone from the sultanate (fifth period)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 482), ('title', 'Carved stone from the sultanate of Resheph'), ('contentmodel', 'wikitext'), ('nochange', '')])
Page edit rate-limited. Retrying in 3 seconds...
Page edit rate-limited. Retrying in 6 seconds...
Page edit rate-limited. Retrying in 12 seconds...
Page edit rate-limited. Retrying in 24 seconds...
OrderedDict([('result', 'Success'), ('pageid', 477), ('title', 'Carved stone from the sultanate (fifth period, ornate)'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 778), ('title', 'Debris'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1571), ('title', 'Holographic shale'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 211), ('title', 'Basalt'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1916), ('title', 'Marble wall'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3388), ('title', 'Wax block'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1430), ('title', 'Granite'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3082), ('title', 'Tangled mudroot'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3118), ('title', 'Tetraxenonoglass wall'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1570), ('title', 'Holographic marble wall'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1212), ('title', 'Fulcrete'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1149), ('title', 'Foamcrete'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 627), ('title', 'Concrete'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2343), ('title', 'Pigskin wall'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 396), ('title', 'Brinestalk wall'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 531), ('title', 'Charred wood'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 395), ('title', 'Brinestalk stakes'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 142), ('title', 'Arrowslit'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 450), ('title', 'Canvas'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3443), ('title', 'Wooden fence'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 3475), ('title', 'Wrought iron fence'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1866), ('title', 'Low wall'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 393), ('title', 'Brinestalk fence'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2135), ('title', 'Mushroom flesh'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1357), ('title', 'Glass wall'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2776), ('title', 'Sinister wall'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 557), ('title', 'Chrome plaque'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 1259), ('title', 'Fused security door'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2268), ('title', 'Ornately carved marble'), ('contentmodel', 'wikitext'), ('nochange', '')])
OrderedDict([('result', 'Success'), ('pageid', 2270), ('title', 'Ornately filigreed marble'), ('contentmodel', 'wikitext'), ('nochange', '')])
Page edit rate-limited. Retrying in 3 seconds...
Page edit rate-limited. Retrying in 6 seconds...
Page edit rate-limited. Retrying in 12 seconds...
Page edit rate-limited. Retrying in 24 seconds...
OrderedDict([('result', 'Success'), ('pageid', 2807), ('title', 'Sleep gas grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2808), ('title', 'Sleep gas grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2809), ('title', 'Sleep gas grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2379), ('title', 'Poison gas grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2380), ('title', 'Poison gas grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2381), ('title', 'Poison gas grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 3017), ('title', 'Stun gas grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 3018), ('title', 'Stun gas grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 3019), ('title', 'Stun gas grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 22), ('title', 'Acid gas grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 23), ('title', 'Acid gas grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 24), ('title', 'Acid gas grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1113), ('title', 'Flashbang grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1114), ('title', 'Flashbang grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1115), ('title', 'Flashbang grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 3146), ('title', 'Thermal grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 3147), ('title', 'Thermal grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 3148), ('title', 'Thermal grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1181), ('title', 'Freeze grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1182), ('title', 'Freeze grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1183), ('title', 'Freeze grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1527), ('title', 'High explosive grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1528), ('title', 'High explosive grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1529), ('title', 'High explosive grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 887), ('title', 'EMP grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 888), ('title', 'EMP grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 889), ('title', 'EMP grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2202), ('title', 'Normality gas grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2203), ('title', 'Normality gas grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2204), ('title', 'Normality gas grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
Page edit rate-limited. Retrying in 3 seconds...
Page edit rate-limited. Retrying in 6 seconds...
Page edit rate-limited. Retrying in 12 seconds...
Page edit rate-limited. Retrying in 24 seconds...
OrderedDict([('result', 'Success'), ('pageid', 2944), ('title', 'Stasis grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2945), ('title', 'Stasis grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2946), ('title', 'Stasis grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2545), ('title', 'Resonance grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2546), ('title', 'Resonance grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2547), ('title', 'Resonance grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 788), ('title', 'Defoliant grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 789), ('title', 'Defoliant grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 790), ('title', 'Defoliant grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1247), ('title', 'Fungicide grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1248), ('title', 'Fungicide grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1249), ('title', 'Fungicide grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2920), ('title', 'Spring-turret grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2921), ('title', 'Spring-turret grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2922), ('title', 'Spring-turret grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 3169), ('title', 'Time dilation grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 3170), ('title', 'Time dilation grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 3171), ('title', 'Time dilation grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1362), ('title', 'Glitter grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1363), ('title', 'Glitter grenade mk II'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1364), ('title', 'Glitter grenade mk III'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2316), ('title', 'Phase shift grenade mk I'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 1487), ('title', 'Hand-E-Nuke'), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 2880), ('title', "Sower's seed"), ('contentmodel', 'wikitext'), ('nochange', ''), ('watched', '')])
OrderedDict([('result', 'Success'), ('pageid', 10495), ('title', 'Mine'), ('contentmodel', 'wikitext'), ('nochange', '')])

Calculate Encounter/Drop Info for Characters and Items

It'd be cool if we could eventually show some basic info on the wiki about where particular enemies are able to spawn, and maybe also where an item can be obtained (i.e. dropped from certain enemy).

This would help answer questions like "Where should I hunt for bloated leeches for my fungal cure?" or "What's the best place to look for an electric snail shell?"

Tier Doesn't Factor in Mods - Should It?

A good example is the Sparbine. QBE lists this as Tier 4, which is technically correct. However, for the purposes of adding additional mods, it has an effective tinkering level of 6, because it already has two mods, and the tinkering screen treats it as a Tier 6 item.

I'm not sure if Tier has meaning anywhere else in the game - I confirmed that the game code doesn't actually increase the Tier when you mod something, it just adds Tier + Number_of_Mods when the Tinkering Screen is open to determine which bits you need to use for adding an additional mod.

So I guess my question is:

  • Should we continue to list items with their "base" Tier, or should we show the effective Tier instead?

A page not uploading due to a database error causes the cursor to be permanently busy in app

Attempting to upload carbide dagger with QBE causes a DB error (possibly because there is another cargo storage on the page? Manually updated it myself). This is only a visual bug, since you are still able to do normal functions with the mouse.
The error:
mwclient.errors.APIError: ('internal_api_error_DBTransactionStateError', '[7224e3ea0d47644c7f9849c9] Exception caught: A database query error has occurred. This may indicate a bug in the software.', None)

Tiles of creatures with the part "HologramMaterial"/"HologramWallMaterial" do not have their hologram color

Hologram colors are defined in cs and flicker often, but I think there should at least be an attempt, say to replace the detail color with C and tile color to b. I tried to implement this myself but realized qud tile had no reference to the object and took everything from the init, making it more complicated than I thought.

Thing this affects: Wraith-Knights (although must specifically check for this bc the hologram part is added in code), holographic ivory, holographic beth, Hologram Distraction, hologram of shekinah, HoloMarble

Add Template:As of Patch

it might make sense for the wiki uploader to add Template:As of Patch to articles that don't already have one, particularly when the only content on the page is automatically generated.

Load property for Trade Goods

We already assign [[Category:Trade Goods]] to trade goods, but I'd like to also export this data as a parameter in the template so that I can do some custom Item template formatting for trade goods.

Creature MA Should Factor in Willpower

Currently QBE just returns the base MA value, which is 0 for just about everything (good example: Elder Irudad). Willpower needs to be factored in. Here's the formula the game uses:

		public static int GetCombatMA(GameObject GO)
		{
			int num = 4;
			if (GO.Statistics.ContainsKey("Willpower"))
			{
				num += GO.Statistics["Willpower"].Modifier;
			}
			if (GO.Statistics.ContainsKey("MA"))
			{
				num += GO.Statistics["MA"].Value;
			}
			return num;
		}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.