fix error and missing xp on dragon ageup

- fix error when GetAchievementsByUserID is called with dragonId instead of userID
- add dragon XP when ageUp by ticket
This commit is contained in:
Robert Paciorek 2023-08-14 23:35:59 +00:00 committed by Spirtix
parent 2a0b62552e
commit fb582b4c24
3 changed files with 45 additions and 13 deletions

View File

@ -73,20 +73,26 @@ public class AchievementController : Controller {
// TODO: check session
Viking? viking = ctx.Vikings.FirstOrDefault(e => e.Id == userId);
if (viking is null) {
return null;
if (viking != null) {
return Ok(new ArrayOfUserAchievementInfo {
UserAchievementInfo = new UserAchievementInfo[]{
achievementService.CreateUserAchievementInfo(viking, AchievementPointTypes.PlayerXP),
achievementService.CreateUserAchievementInfo(viking.Id, 60000, AchievementPointTypes.PlayerFarmingXP), // TODO: placeholder until there is no leveling for farm XP
achievementService.CreateUserAchievementInfo(viking.Id, 20000, AchievementPointTypes.PlayerFishingXP), // TODO: placeholder until there is no leveling for fishing XP
}
});
}
ArrayOfUserAchievementInfo arrAchievements = new ArrayOfUserAchievementInfo {
UserAchievementInfo = new UserAchievementInfo[]{
achievementService.CreateUserAchievementInfo(viking, AchievementPointTypes.PlayerXP),
achievementService.CreateUserAchievementInfo(viking.Id, 60000, AchievementPointTypes.PlayerFarmingXP), // TODO: placeholder until there is no leveling for farm XP
achievementService.CreateUserAchievementInfo(viking.Id, 20000, AchievementPointTypes.PlayerFishingXP), // TODO: placeholder until there is no leveling for fishing XP
}
};
Dragon? dragon = ctx.Dragons.FirstOrDefault(e => e.EntityId == userId);
if (dragon != null) {
return Ok(new ArrayOfUserAchievementInfo {
UserAchievementInfo = new UserAchievementInfo[]{
achievementService.CreateUserAchievementInfo(dragon.EntityId, dragon.PetXP, AchievementPointTypes.DragonXP),
}
});
}
return Ok(arrAchievements);
return null;
}
[HttpPost]

View File

@ -15,12 +15,14 @@ public class ContentController : Controller {
private ItemService itemService;
private MissionService missionService;
private RoomService roomService;
public ContentController(DBContext ctx, KeyValueService keyValueService, ItemService itemService, MissionService missionService, RoomService roomService) {
private AchievementService achievementService;
public ContentController(DBContext ctx, KeyValueService keyValueService, ItemService itemService, MissionService missionService, RoomService roomService, AchievementService achievementService) {
this.ctx = ctx;
this.keyValueService = keyValueService;
this.itemService = itemService;
this.missionService = missionService;
this.roomService = roomService;
this.achievementService = achievementService;
}
[HttpPost]
@ -916,7 +918,10 @@ public class ContentController : Controller {
if (newDragonData.EntityID is not null) dragonData.EntityID = newDragonData.EntityID;
if (newDragonData.Name is not null) dragonData.Name = newDragonData.Name;
dragonData.PetTypeID = newDragonData.PetTypeID;
if (newDragonData.GrowthState is not null) dragonData.GrowthState = newDragonData.GrowthState;
if (newDragonData.GrowthState is not null) {
achievementService.DragonLevelUpOnAgeUp(dragon, dragonData.GrowthState, newDragonData.GrowthState);
dragonData.GrowthState = newDragonData.GrowthState;
}
if (newDragonData.ImagePosition is not null) dragonData.ImagePosition = newDragonData.ImagePosition;
if (newDragonData.Geometry is not null) dragonData.Geometry = newDragonData.Geometry;
if (newDragonData.Texture is not null) dragonData.Texture = newDragonData.Texture;

View File

@ -10,12 +10,18 @@ namespace sodoff.Services {
Dictionary<AchievementPointTypes, UserRank[]> ranks = new();
int dragonAdultMinXP;
int dragonTitanMinXP;
public AchievementService() {
ArrayOfUserRank allranks = XmlUtil.DeserializeXml<ArrayOfUserRank>(XmlUtil.ReadResourceXmlString("allranks"));
foreach (var pointType in Enum.GetValues<AchievementPointTypes>()) {
ranks[pointType] = allranks.UserRank.Where(r => r.PointTypeID == pointType).ToArray();
}
dragonAdultMinXP = ranks[AchievementPointTypes.DragonXP][10].Value;
dragonTitanMinXP = ranks[AchievementPointTypes.DragonXP][20].Value;
}
public int GetRankFromXP(int? xpPoints, AchievementPointTypes type) {
@ -37,6 +43,21 @@ namespace sodoff.Services {
return CreateUserAchievementInfo(viking.Id, viking.AchievementPoints.FirstOrDefault(a => a.Type == (int)type)?.Value, type);
}
public void DragonLevelUpOnAgeUp(Dragon dragon, RaisedPetGrowthState oldGrowthState, RaisedPetGrowthState newGrowthState) {
if (newGrowthState.Order > oldGrowthState.Order) {
// age up
int dragonXP = dragon.PetXP ?? 0;
if (newGrowthState.Order == 4 && dragonXP < dragonAdultMinXP) {
// to adult via ticket -> add XP
dragonXP += dragonAdultMinXP;
} else if (newGrowthState.Order == 5 && dragonXP < dragonTitanMinXP) {
// adult to titan via ticket -> add XP
dragonXP += dragonTitanMinXP - dragonAdultMinXP;
}
dragon.PetXP = dragonXP;
}
}
public void AddAchievementPoints(Viking viking, AchievementPointTypes? type, int? value) {
if (type == AchievementPointTypes.DragonXP) {
viking.SelectedDragon.PetXP = (viking.SelectedDragon.PetXP ?? 0) + (value ?? 0);