mirror of
https://github.com/SoDOff-Project/sodoff.git
synced 2025-10-11 08:18:49 -07:00
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:
parent
2a0b62552e
commit
fb582b4c24
@ -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]
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user