- Read loot ranges with commas as thousands separators, like
1,000-2,000, as 1000 to 2000 instead of 0 to 2. This covers creature loot and the Loot Statistics pages. A Loot Statistics entry likeGold Coin, times:1,234, amount:1,000-2,000keeps1,234and1,000-2,000whole, and an entry whosetimeshas no number is skipped instead of stopping the task. Neither side of a range has a sign, as before, and1,0002-3still reads as 2 to 3. No current value changes. - Read a currency linked with a leading colon, like
[[:Gold Token]], asGold Tokeninstead of:Gold Token, initem.value_buy_currencyandmount.price_currency. Colon links to files, images and categories are still skipped. No current value changes. - Keep the Loot Statistics task running past a bad page. An entry without
timesis skipped, and a page whosekillsis 0, missing or not a number gets no drop rows, since no chance can be computed. Before, each of these stopped the task for every later page. A page with negativekillsalso gets no drop rows, and an entry with negativetimesis skipped, instead of replacing a drop with a negative chance. No current value changes.
- Read numbers with commas as thousands separators, like
50,000, as the whole number instead of the digits before the first comma. This fixes creaturehitpointsandexperience, itemvalue_buyandvalue_sell, outfitfull_priceand other quantities. A comma not followed by exactly three digits still ends the number, and an ID list likeitemid = 629,630,631ormount_id = 421,437,438,747still gives its first ID. A creature's max damage without a{{Max Damage}}template reads1,300+as 1300, and a range like600-1000?by its larger number. - Keep the first number of every ID field, like the client IDs, so
achievementid = 12,345gives 12, not 12345. This covershouse.house_id,achievement.achievement_id,world.world_board,world.trade_board,game_update.news_idanditem_key.number. No current value changes. - Add the
item.value_buy_currencycolumn. It holds the article'spricecurrency, otherwise a currency written after the price innpcprice, like50 [[Gold Token]]s, otherwiseGold Coin, andNULLwhenvalue_buyisNULLor 0. A linked currency gives the page it links to, so[[Silver Token]]sgivesSilver Token, andmount.price_currencynow reads links the same way. 25 Years Backpack's price of 7197 is now inTheons, not gold.
- Store
spell.effect,spell.spell_type,spell.group_spell,spell.levelandspell.cooldownasNULLwhen a spell's article has no such field, andspell.cooldownasNULLwhen it is not a whole number of seconds, like1-2s, instead of dropping the spell. A spell with nomanafield gets0, which means special conditions apply. Force Strike, Broadcast, Poison Storm, Undead Legion, Sniper, Second Wind and Ultimate Explosion are now kept. - Read a charm's three costs split by commas, like
800, 1200, 4000, when itscostfield has no slash, instead of dropping the charm. Low Blow is now kept. - Store
npc.cityasNULLwhen an NPC's article has nocityfield, instead of dropping the NPC. Such an NPC's travel legs start where aFrom [[Place]]note or a shuttle names, and otherwise have aNULLorigin. A Blue Stone is now kept. - Store
achievement.nameandachievement.descriptionasNULLwhen an achievement's article has no such field, instead of dropping the achievement.achievement.descriptionis now nullable. Achievement 563 is now kept. - Add the
mount.price_currencycolumn. It holds the article'spricecurrency, otherwiseTournament Coinsfor a tournament mount, otherwiseTibia Coins, andNULLwhen the mount has no price. Landsailer's price of 140 is now inEvent Points, not Tibia Coins.
- Store
versionasNULLingame_update,house,outfitandmountwhen an article has noimplementedfield, instead of dropping the article. A misspelled field likeimplementationis not read, as the wiki does not show it. - Store
mount.taming_methodasNULLwhen a mount's article has notaming_methodfield, instead of dropping the mount. Landsailer is now kept.
- Drop everything after an unclosed
<!--increature.race_id,outfit.male_client_id,outfit.female_client_idandmount.client_id, as MediaWiki hides it. A value like<!-- 51952is now stored asNULL. - List up to 100 issues in the upstream check, and fail when the list reaches that limit. A cut-short list could miss the "Upstream has new commits" issue and open a second one.
- Ship
CHANGELOG.mdin the sdist, which named aCHANGELOG.rstthat does not exist, and leave out the upstream check's test, which tests CI tooling the sdist does not ship.
- Start each leg of a shuttle NPC at the other leg's destination when no
From [[Place]]note names the start. An NPC is a shuttle when it has exactly two positions and exactly two destinations, and each position matches exactly one destination by city, subarea or geolabel, ignoring case, each destination by a different position. Harlow's and Tarak's legs now start at the other end of their route. - Add
creature.race_id, the client race ID of a creature: the first integer in therace_idfield of its article, orNULLwhen there is none. - Ignore wiki comments in
creature.race_id,outfit.male_client_id,outfit.female_client_idandmount.client_id. A value that is only a comment, like<!-- objectID: 51952-->, is stored asNULL. - Add a weekly upstream check. A scheduled workflow compares
Galarzaa90/tibiawiki-sqlwith ourmain. When upstream has commits ourmainlacks, it opens, updates or reopens one "Upstream has new commits" issue that lists them. When there are none, it closes that issue.
- Add the
npc_locationtable with every position of an NPC, numbered 1 to 7. Each position has its city, subarea, geolabel andx,yandzcoordinates. - Add
npc_destination.origin, the place where each travel leg starts. It comes from a note that is only aFrom [[Place]]link. Without one, it is the NPC's city if the NPC has a position in that city whose city, subarea and geolabel all differ from the destination, ignoring case. Otherwise it isNULL. - Add the item attributes
restores_hp_min,restores_hp_max,restores_mana_minandrestores_mana_max, parsed from therestores between A and B Hit Points, and between C and D Mana Pointssentence in an item's notes. - Add
outfit.male_client_id,outfit.female_client_idandmount.client_id, the client IDs (look types) of outfits and mounts. - Store a missing or malformed client ID or
npc_locationcoordinate asNULL. The existingnpc.xandnpc.ykeep upstream's behaviour.
- Fix NPC offers with thousand separators not being parsed properly (e.g. NPC Coco)
Creature.mitigationis now a float.- Also consider
Category:Unavailablewhen skipping deprecated articles. Charm.costreplaced bycost_level_1,cost_level_2andcost_level_3for each charm's level.- Renamed many item attributes (
item_attribute) for more clarity:level->required_levelvocation->required_vocationattack+->attack_extraimbue_slots->imbuement_slotshit%+->hit_chance_extramagic->magic_levelmagic_level->required_magic_levelcritical_chance->critical_hit_extra_chancecritical%->critical_hit_extra_damagehpleech_chance->hp_leech_chancehpleech%->hp_leech_amountmanaleech_chance->mana_leech_chancemanaleech%->mana_leech_amountfire_attack->attack_fireenergy_attack->attack_energyice_attack->attack_iceearth_attack->attack_earthdeath_attack->attack_deathphysical%->resistance_physicalearth%->resistance_earthfire%->resistance_fireenergy%->resistance_energyice%->resistance_iceholy%->resistance_holydeath%->resistance_deathdrowning%->resistance_drowningdeath_magic_level->magic_level_deathearth_magic_level->magic_level_earthenergy_magic_level->magic_level_energyfire_magic_level->magic_level_firehealing_magic_level->magic_level_healingholy_magic_level->magic_level_holyice_magic_level->magic_level_ice
- Parse additional item attributes:
hit_chancemantrabase_powerwrappablecooldown
- Add
-I/--include-deprecated-imagesargument to download images from deprecated entities even when skipping them.
- Add spell base power (
base_power) to parser, schema and models.
- Add support for new NPC transport template.
- Add support for new update date format.
- Add argument to print parsing errors to file.
- Spell changes
- Remove
npc_spelltable. - Remove spell teacher relations from API models (
Npc.teaches,Spell.taught_by). - Remove spell purchase price (
spell.price) from parser, schema and models. - Remove spell-offer generation from
Module:ItemPrices/spelldata.
- Remove
- Creature changes
- Fix elemental modifier mapping:
energyDmgModnow maps tomodifier_energyandiceDmgModtomodifier_ice.
- Fix elemental modifier mapping:
- Item changes
- Add missing item infobox mapping for
death_attack. - Add weapon proficiency perks.
- Add
proficiency_perkstoItem(stored initem_proficiency_perk).
- Add missing item infobox mapping for
- Fix SQL generation not working on Docker due to not having the
CONCATSQLite extension.
- Fix key's
item_idnot being saved correctly.
- Add
vocationandelemental_bondto item attributes.
WikiClientis no longer a "static class", an instance must now be created in order to better reuse HTTP sessions.- General model changes:
- All
timestampproperties are nowdatetime.datetimeobjects. Their database counterparts are IS08601 strings. - Added many model classes that simplify the data displayed.
- All
- Achievement changes
- Spoiler properly handles quest links.
- Rename
spoilertois_spoiler. - Rename
premiumtois_premium. - Links now cleaned from
description.
- Spell changes
- Added
monkattribute. - Rename
typetospell_type - Added
cooldown2andcooldown3for reduced cooldowns by the Wheel of Destiny. - Rename
premiumtois_premium. - Rename
promotiontois_promotion. - Added
is_wheel_spellattribute. - Added
is_passiveattribute.
- Added
- Item changes
- Added
is_immobileattribute. - Rename
promotiontois_promotion. - Added parseable attributes:
is_rotatableaugments
- Renamed attributes:
hangabletois_hangable.writabletois_writable.rewritabletois_rewritable.consumabletois_consumable.unshootabletoblocks_projectiles.walkabletois_walkable.
- Added
- Creature changes
- Added
mitigationattribute. - Added
spawn_typeattribute. - Added
cooldownattribute. - Renamed
bosstois_boss.
- Added
- Quest changes
- Added missing
premiumattribute, renamed tois_premium - Renamed
rookgaardtois_rookgaard_quest.
- Added missing
- House changes
- Renamed
guildhalltois_guildhall
- Renamed
- Outfit changes
- Renamed
typetooutfit_type. - Renamed
premiumtois_premium. - Renamed
boughttois_bought. - Renamed
tournamenttois_tournament.
- Renamed
- World changes
online_since,offline_sinceandprotected_sinceare nowdatetime.dateobjects.- Renamed
experimentaltois_experimental. - Renamed
previewtois_preview. - Renamed
experimentaltois_experimental.
- Mount changes:
- Renamed
buyabletois_buyable.
- Renamed
- Update changes:
- Renamed
datetorelease_date.
- Renamed
- Fix database generation failing due to invalid date format.
- Added
bosstiary_classto creatures. - NPC Offers are read from the ItemPrices data list.
- NPC Spell offers are read from the ItemPrices spell list.
- Performance improvements.
- Added
upgrade_classificationto item attributes. - Fixed empty creature and item sounds being saved.
- Fixed empty creature abilities being saved.
- Marked more SQLite columns as
NOT NULL.
- Fixed spell effects including file names.
- Fixed some creature drops not being parsed properly, resulting in incomplete data.
- Books are now parsed.
- Changes to creature's max damage and abilities parsing:
- Added
creature_max_damageandcreature_abilitytables to parse more detailed information about creature's max damage and abilities. - Added the respective classes
CreatureMaxDamageandCreatureAbility. - Removed
max_damageandabilitiescolumns fromcreaturetable. Creatureclass attributesmax_damageandabilitieswere updated to new types.
- Added
- Added
achievement_idcolumn and attribute toachievementtable andAchievementclass respectively. - Changes to NPC jobs and races.
- Jobs and races are now stored on a separate table as there are usually multiple entries per NPC.
- Removed
jobandjob_additionalscolumns and attributes fromnpctable andNpcclass respectively. - Replaced
jobsproperty onNpcmodel with an attribute. - Removed
racecolumn and attribute fromnpctable andNpcclass respectively. - Added
racesattribute with the list of races of the NPC. - Added
job
- Item's store information is now parsed.
- Added
item_store_offertable andItemStoreOfferclass. - Added
store_offersattribute toItemclass.
- Added
- Renamed
typeattributes and columns to more specific names to avoid conflict with Python's builtintypefunction.- Renamed to
item_typeinitemtable andItemclass. - Renamed to
creature_typeincreaturetable andCreatureclass.
- Renamed to
- Parsing relies more on mwparserfromhell and less on regular expressions.
- TibiaWiki merged items into "objects" (non pickupable). So now the
itemtable will contain a lot more records.- More attributes related to "objects" are now added to the
item_attributetable.
- More attributes related to "objects" are now added to the
- Added support for attributes added in the Summer Update 2020 and some other missing attributes.
- Fixed wrong attribute definition for
Spellmodel.
- Added
Updatesmodel andgame_updatetable. - Added
infobox_attributestoWikiEntryclass to easily extract any infobox attribute. - Added missing
premiumattribute toAchievementmodel. Column was already saved. - Added
battleye_typeclass and column toWorldmodel andworldtable. - Added
library_race,runs_at,modifier_healing, andlocationtoCreaturemodel andcreaturetable. - Added
slotsclass and column toImbuementmodel andimbuementtable. - Added
group_secondary,group_rune,premium,promotion,cooldown_group, andcooldown_group_secondaryattributes and columns toSpellclass andspelltable. - Added
job_additionalstoNpcmodel andnpctable. - Breaking change: Renamed
classzcolumn togroup_spellinspelltable.
- Added missing
bestiary_killsandcharm_pointsvalues for creatures in the Challenging class.
- Added missing
versionattribute toSpell.
- Improved image cache, the timestamp of images are now saved and checked on subsequent calls.
- By default, all articles are parsed, including deprecated, they can be skipped using
--skip-deprecated. - Added
statuscolumn and field to main tables and models. Indicates the status of the entity (active, deprecated, event, ts-only). - Fixed Worlds not being parsed due to the corresponding category being renamed on TibiaWiki.
- Updated API to consider the changes on Fandom's API for pagination.
- Fixed database generation failing for images with redirects
- Added indexes to various columns and various tables, this should increase search performance.
- Made title and name columns case insensitive.
- Added
locationcolumn toHouseclass andhousetable. - Added
Outfitclass andoutfittable.- Added
OutfitImageclass andoutfit_imagetable since outfits have multiple images. - Added
OutfitQuestclass andoutfit_questtable for quests required for outfits or its addons.
- Added
- Added
type_secondarycolumn and field toitemandcreaturetables andItemandCreatureclasses. - Added
look_textproperty toItem, renders the item's look text. - Added
reistancesproperty toItem, gets a dictionary of the item's resistances. - Breaking change: Renamed
classcolumns and fields initemtable andItemclass toitem_class. - Breaking change: Renamed
classcolumns and fields increaturetable andCreatureclass tocreature_class.
Item.attribute_dictreturns empty dictionary instead ofNoneifItem.attributesis empty.
- Charms are now read from their TibiaWiki articles instead of a static json file.
Charmclass andcharmtable changes:- Added
article_id,title,timestampandversion - Renamed
descriptiontoeffect.
- Added
- New
creature_soundanditem_sound, containing "sounds" made by creatures and items respectively. Creatureclass andcreaturetable changes:- Added
push_objects. - Added
soundsto class.
- Added
Questclass andquesttable changes:- Added
rookgaard,type,quest_log,active_timeandestimated_time.
- Added
Itemclass anditemtable changes:- Added
marketable,pickupable,light_colorandlight_radius, - Added
soundsto class.
- Added
- New tracked attributes in
item_attributedestructibleholds_liquidwriteablerewriteableconsumablewritable_chars
- New table
mount, containing all mounts and their information. - Fixed incorrect potions entries due to NPC Minzy.
- Fixed physical and earth modifiers not showing up in
weak_to,immune_toandresistant_toCreatureproperties. - Fixed incorrect
weak_toproperty. - Fixed missing
modifier_hpdrainCreatureattribute.
elemental_attackItem Attribute split intofire_attack,ice_attack,energy_attackandearth_attackto reflect changes in TibiaWiki's template.- Added
bestiary_killsandcharm_pointsproperties toCreature. - Added
elemental_modifiers,weak_to,immune_toandresistant_toproperties toCreature. - New table
worldand modelWorld. Contains information of Game worlds, including now offline worlds.
- Elemental protection and required vocation item attributes were not getting set.
- Fixed imbuement materials not getting saved in the database.
- New model classes, to unify the generation process.
- Live fetching is now possible, obtain data directly from the Wiki.
- Database generation now shows progress bars and time estimates.
- The database schema is now generated dynamically.
- The database structure has changed:
- Renamed tables:
achievements->achievementcreatures->creaturecreatures_drops->creature_drophouses-houseimbuements->imbuementimbuements_materials->imbuement_materialitems->itemitems_attributes->item_attributenpcs->npcnpcs_buying->npc_offer_buynpcs_selling->npc_offer_sellnpcs_destinations->npc_destinationnpcs_spells->npc_spellquests->questquests_dangers->quest_dangerquests_rewards->quest_rewardrashid_positions->rashid_positionspells->spell
- Renamed columns:
- All tables:
id->article_idlast_edit->timestamp
- Table:
creature:summon->summon_costconvince->convince_costoccurrence->bestiary_occurrencesee_invisible->sees_invisiblewalkthrough->walks_throughwalksaround->walks_around- All element columns now have
modifierat the beginning (e.g.phyisical->modifier_phyisical)
- Table:
itemvalue->value_sellprice->value_buy
id->house_idin tablehouseattribute->valuein tableitem_attributedestination->namein tablenpc_destination
- All tables:
- Added columns:
titlein all tables, except child tables andcharm,rashid_positionandmap:client_idin tableitemlocationinnpcandrashid_positiontables.effectin tablespell.
- Removed columns:
day_namefromrashid_position
- Renamed tables:
- New
charmtable, contains information about all charms.
- Improved parsing of
walksaroundandwalksthrough
-
Added new columns to creatures table:
walksaroundwalksthrough
- Fixed bug caused when a category had a number of articles that was exactly a multiple of 50.
-
idis now TibiaWiki’s article id for the element, making them more reliable than autoincremented ids. -
Fixed bug with potion’s prices.
-
Fixed bug with paralysable being inverted.
-
New tables
imbuementsandimbuements_materials. -
Unknown creature attributes are no longer parsed as
False, butNone. -
New columns in creatures table:
bestiary_classbestiary_leveloccurrencearmorspeed
- New
items_keystable, contains key numbers with their uses and locations. - New
rashid_positionsdatabase, contains Rashid’s coordinates for each weekday. - Added
article,classandtypetocreaturestable. - Added
article,classandclient_idtoitemstable. - Added
last_editcolumn to most tables.
- Improved the parsing of all data tables, resulting in more
consistency in values, less empty strings (not
NULL) and better handling of default values. - New
database_infotable, it contains two rows, “version” and “generated_date”, containing the script vused and the date the database was generated respectively. - Added a new
currencycolumn tonpcs_buyingandnpcs_selling, it contains the id of the item used as currency for that transaction (e.g. gold coins, gold tokens, silver tokens, etc). - Better parsing for item npc offers, a lot more offers are saved now, including item trades (e.g. 1 fighting spirit for 2 royal helmets).
- More item attributes are saved to
item_attributes.
- Better attribute parsing, this means values should me more consistent
and there are no entries without the
namecolumn - No changes were made to the schema.
- Creatures table, with all their attributes, including a separate table for all their loot.
- Loot drop percentage are calculated from loot statistics
- Item table, with their basic attributes, and their separate attributes on a separate table
- NPCs table with their information, including spawn location.
- NPCs sell and buy offers
- Achievements, with their spoiler info
- Quests basic infor