diff --git a/mitm-redirect.py b/mitm-redirect.py index 6a80298..454f36e 100644 --- a/mitm-redirect.py +++ b/mitm-redirect.py @@ -64,7 +64,8 @@ methods = [ 'GetUserRoomList', 'GetUserActivityByUserID', 'SetNextItemState', - 'SetUserRoom' + 'SetUserRoom', + 'GetUserGameCurrency' ] def routable(path): diff --git a/src/Controllers/Common/AchievementController.cs b/src/Controllers/Common/AchievementController.cs index c62623a..43af8ea 100644 --- a/src/Controllers/Common/AchievementController.cs +++ b/src/Controllers/Common/AchievementController.cs @@ -55,10 +55,22 @@ public class AchievementController : Controller { UserAchievementInfo = new UserAchievementInfo[]{ new UserAchievementInfo { UserID = Guid.Parse(userId), - AchievementPointTotal = 0, - RankID = 1, + AchievementPointTotal = 5000, + RankID = 30, PointTypeID = 1 - } + }, + new UserAchievementInfo { + UserID = Guid.Parse(userId), + AchievementPointTotal = 5000, + RankID = 30, + PointTypeID = 9 + }, + new UserAchievementInfo { + UserID = Guid.Parse(userId), + AchievementPointTotal = 5000, + RankID = 30, + PointTypeID = 10 + }, } }; diff --git a/src/Controllers/Common/ContentController.cs b/src/Controllers/Common/ContentController.cs index 3f4fe0a..81f2b73 100644 --- a/src/Controllers/Common/ContentController.cs +++ b/src/Controllers/Common/ContentController.cs @@ -767,6 +767,19 @@ public class ContentController : Controller { return Ok(roomService.NextItemState(item, request.OverrideStateCriteria)); } + [HttpPost] + [Produces("application/xml")] + [Route("ContentWebService.asmx/GetUserGameCurrency")] + public IActionResult GetUserGameCurrency([FromForm] string userId) { + // TODO: This is a placeholder + return Ok(new UserGameCurrency { + CashCurrency = 1000, + GameCurrency = 1000, + UserGameCurrencyID = 0, + UserID = Guid.Parse(userId) + }); + } + private RaisedPetData GetRaisedPetDataFromDragon (Dragon dragon) { RaisedPetData data = XmlUtil.DeserializeXml(dragon.RaisedPetData); data.RaisedPetID = dragon.Id; diff --git a/src/Controllers/Common/ProfileController.cs b/src/Controllers/Common/ProfileController.cs index 2f8a622..83cc25b 100644 --- a/src/Controllers/Common/ProfileController.cs +++ b/src/Controllers/Common/ProfileController.cs @@ -141,12 +141,24 @@ public class ProfileController : Controller { RankID = 0, // placeholder AchievementInfo = null, // placeholder Achievements = new UserAchievementInfo[] { - new UserAchievementInfo { - UserID = Guid.Parse(viking.Id), - AchievementPointTotal = 0, // placeholder - RankID = 1, // placeholder - PointTypeID = 1 // placeholder - } + new UserAchievementInfo { + UserID = Guid.Parse(viking.Id), + AchievementPointTotal = 5000, + RankID = 30, + PointTypeID = 1 + }, + new UserAchievementInfo { + UserID = Guid.Parse(viking.Id), + AchievementPointTotal = 5000, + RankID = 30, + PointTypeID = 9 + }, + new UserAchievementInfo { + UserID = Guid.Parse(viking.Id), + AchievementPointTotal = 5000, + RankID = 30, + PointTypeID = 10 + }, } }; diff --git a/src/Services/RoomService.cs b/src/Services/RoomService.cs index 3665d23..98adcdf 100644 --- a/src/Services/RoomService.cs +++ b/src/Services/RoomService.cs @@ -111,7 +111,28 @@ public class RoomService { }; UserItemPosition pos = XmlUtil.DeserializeXml(item.RoomItemData); - int nextStateID = GetNextStateID(pos, speedup); + AchievementReward[]? rewards; + int nextStateID = GetNextStateID(pos, speedup, out rewards); + + if (rewards != null) { + response.Rewards = rewards; + foreach (var reward in rewards) { + if (reward.PointTypeID == 6) { + // TODO: This is not a pretty solution. Use inventory service in the future + InventoryItem? ii = item.Room.Viking.Inventory.InventoryItems.FirstOrDefault(x => x.ItemId == reward.ItemID); + if (ii is null) { + ii = new InventoryItem { + ItemId = reward.ItemID, + Quantity = 0 + }; + item.Room.Viking.Inventory.InventoryItems.Add(ii); + } + ii.Quantity += (int)reward.Amount!; + } + } + ctx.SaveChanges(); + } + DateTime stateChange = DateTime.Now; if (nextStateID == -1) { nextStateID = pos.UserItemState.ItemStateID; @@ -137,11 +158,14 @@ public class RoomService { return response; } - private int GetNextStateID(UserItemPosition pos, bool speedup) { + private int GetNextStateID(UserItemPosition pos, bool speedup, out AchievementReward[]? rewards) { + rewards = null; if (pos.UserItemState == null) return pos.Item.ItemStates.Find(x => x.Order == 1)!.ItemStateID; ItemState currState = pos.Item.ItemStates.Find(x => x.ItemStateID == pos.UserItemState.ItemStateID)!; + rewards = currState.Rewards; + if (speedup) return ((ItemStateCriteriaSpeedUpItem)currState.Rule.Criterias.Find(x => x.Type == ItemStateCriteriaType.SpeedUpItem)!).EndStateID;