- allow to add items to store while using replace action in server-side mods
- fixed wrong (inverted) logic for LastLevelCompleted
- fixed 'already an open DataReader' isse on GetTopRated* endpoints
- disabled AchievementTaskID 37 (WoJS) due to causing bug
rework achievements system:
- support for Achievements page in journal
- register achievement tasks in database to avoid duplicate rewards and to register progress (achievement levels)
- better achievement tasks xml database (for multiple games)
- support for older games SetUserAchievementTask (V1)
- add some missed achievement IDs
- move achievement data to Resources/achievements/
additionally:
- add mmo zones for MaM and some additional mmo zones for EMD
- move missions Resources into Resources/missions/
- split SoD/MaM missions into separte files
- move rank data to Resources/ranks/
- cleanup sodoff.csproj
SQLite database schema changes:
```
CREATE TABLE "AchievementTaskState" (
"VikingId" INTEGER NOT NULL,
"TaskId" INTEGER NOT NULL,
"Points" INTEGER NOT NULL,
CONSTRAINT "PK_AchievementTaskState" PRIMARY KEY("TaskId","VikingId"),
CONSTRAINT "FK_AchievementTaskState_Vikings_VikingId" FOREIGN KEY("VikingId") REFERENCES "Vikings"("Id") ON DELETE CASCADE
);
```
This is for minisaurs in WoJ, but I think it would be a good idea in general, so I didn't limit it to WoJ.
The issue happens because if you buy medicine for minisaurs. It takes away one coin, and so if you already have 0 coins, the server currently returns your coin count as int.MaxValue.
This is tested in WoJ 1.1.0 and 1.21.0. I tested buying, overflowing, underflowing, using commands with big and negative values and playing games.
* Mutt Couch Fixes
Removed duplicate mutt from the couch.
Mutts on couch in other players' mutt pods will now reflect that player's account.
* Buddies list will now appear on the sidebar, making the mutt pod tutorial possible.
---------
* Fixed some issues that were pointed out.
* ContentController.GetUnselectedPetByTypes now uses regular IF check for setting owner viking.
* remove unused apiKey from GetActiveRaisedPet args
- fix removing item from inventtory in SetCommonInventory (regresion after switch to InventoryService)
- fix null exception in SellItem on invalid UserInventoryCommonIDs
- remove unused fields in AchievementService (are in AchievementStoreSingleton)
* return battle item as battle items
placeholder - no saved stats, always use default stats
* Blacksmith API implementation
* ApplyRewards (DT rewards) and AddBattleItems
also temporary disable some AchievementsTask rewards from DT ... probably should not be repeatable ...
* support "box tickets" blueprints
- add OpenBox in ItemService (should be useful for other boxes also)
- move checking item category to ItemService (ItemHasCategory)
* InventoryService and full DragonTactics rewards
- move "add to inventory" to InventoryService
- move creating CommonInventoryData from inventory to InventoryService
- move CreateItemStats() to ItemService
- assigning random "item" reward from DT based on dtrewards.xml (at this moment list of all DT items not listed in store)
- rework dragon XP and add player XP and gems reward to DT
- add task and id reward xml databases
- thanks to Project Edge community for sniffed network data!
- implement SetAchievementAndGetReward, SetUserAchievementAndGetReward
- partially implement SetUserAchievementTask
- move rewards logic to AchievementService
- show real value of farming and fishing XP
- show UDP points
Co-authored-by: Spirtix <michal.prazak1@gmail.com>
* GetPetAchievementsByUserID and enum for PointTypes
* add RankService
* use AchievementPointTypes for PointTypeID
... insted of int in schema
* support for player XP, fix dragon XP
- database table
- return correct value in API call
- save XP from mission
* rename RankService to AchievementService
* use addAchievementPoints for all non item reward
this could be a good place for wallet servicing too ... so currency reward too
* return const XP value for farming and fishing
we don't have gathering method for those XPs yet
* fix avatar schema, fix coding style