fix farms issues

spoof levels
This commit is contained in:
Spirtix 2023-07-24 22:02:34 +02:00
parent a96a256c11
commit ffd7fd9a20
5 changed files with 74 additions and 12 deletions

View File

@ -64,7 +64,8 @@ methods = [
'GetUserRoomList',
'GetUserActivityByUserID',
'SetNextItemState',
'SetUserRoom'
'SetUserRoom',
'GetUserGameCurrency'
]
def routable(path):

View File

@ -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
},
}
};

View File

@ -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<RaisedPetData>(dragon.RaisedPetData);
data.RaisedPetID = dragon.Id;

View File

@ -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
},
}
};

View File

@ -111,7 +111,28 @@ public class RoomService {
};
UserItemPosition pos = XmlUtil.DeserializeXml<UserItemPosition>(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;