forked from SoDOff-Project/sodoff
stable mission rewards
- implement SetAchievementByEntityIDs endpoint - add stable achivments to achievementsids.xml (generated from TimedMissionDO.xml) - remove AddAchievementPointsAndGetReward, AddAchievementPoints now return AchievementReward - add ApplyPayout to proxy
This commit is contained in:
parent
45a105af2e
commit
82d31853ea
@ -82,6 +82,7 @@ Then run School of Dragons.
|
||||
- RerollUserItem
|
||||
- FuseItems
|
||||
- AddBattleItems
|
||||
- SetAchievementByEntityIDs
|
||||
|
||||
#### Implemented enough (probably)
|
||||
- GetRules (doesn't return any rules, probably doesn't need to)
|
||||
@ -107,6 +108,7 @@ Then run School of Dragons.
|
||||
- ProcessRewardedItems (need add cash reward)
|
||||
- SellItems (need add cash reward)
|
||||
- ApplyRewards
|
||||
- ApplyPayout
|
||||
|
||||
#### Currently static or stubbed
|
||||
- GetAllRanks (needs to be populated with what ranks the user has)
|
||||
@ -123,4 +125,3 @@ Then run School of Dragons.
|
||||
- GetAverageRatingForRoom (return max rating)
|
||||
- GetUserActivityByUserID (returns an empty array)
|
||||
- GetUserGameCurrency (return 65536 gems and 65536 coins)
|
||||
- SetAchievementByEntityIDs (returns a static achievement)
|
||||
|
@ -79,6 +79,7 @@ methods = [
|
||||
'DeleteAccountNotification',
|
||||
'SetUserAchievementAndGetReward',
|
||||
'ProcessRewardedItems',
|
||||
'ApplyPayout',
|
||||
]
|
||||
|
||||
def routable(path):
|
||||
|
@ -167,10 +167,10 @@ public class AchievementController : Controller {
|
||||
public IActionResult ApplyPayout(Viking viking, string ModuleName, int points) {
|
||||
// TODO: use args (ModuleName and points) to calculate reward
|
||||
return Ok(new AchievementReward[]{
|
||||
achievementService.AddAchievementPointsAndGetReward(viking, AchievementPointTypes.PlayerXP, 10),
|
||||
achievementService.AddAchievementPointsAndGetReward(viking, AchievementPointTypes.GameCurrency, 5),
|
||||
achievementService.AddAchievementPointsAndGetReward(viking, AchievementPointTypes.DragonXP, 6),
|
||||
achievementService.AddAchievementPointsAndGetReward(viking, AchievementPointTypes.UDTPoints, 6),
|
||||
achievementService.AddAchievementPoints(viking, AchievementPointTypes.PlayerXP, 10),
|
||||
achievementService.AddAchievementPoints(viking, AchievementPointTypes.GameCurrency, 5),
|
||||
achievementService.AddAchievementPoints(viking, AchievementPointTypes.DragonXP, 6),
|
||||
achievementService.AddAchievementPoints(viking, AchievementPointTypes.UDTPoints, 6),
|
||||
});
|
||||
}
|
||||
|
||||
@ -178,16 +178,11 @@ public class AchievementController : Controller {
|
||||
[Produces("application/xml")]
|
||||
[Route("AchievementWebService.asmx/SetAchievementByEntityIDs")]
|
||||
[VikingSession]
|
||||
public IActionResult SetAchievementByEntityIDs(Viking viking, [FromForm] int achievementID) {
|
||||
// TODO: This is a placeholder
|
||||
return Ok(new AchievementReward[1] {
|
||||
new AchievementReward {
|
||||
Amount = 25,
|
||||
PointTypeID = AchievementPointTypes.PlayerXP,
|
||||
EntityID = Guid.Parse(viking.Id),
|
||||
EntityTypeID = 1,
|
||||
RewardID = 552
|
||||
}
|
||||
});
|
||||
public IActionResult SetAchievementByEntityIDs(Viking viking, [FromForm] int achievementID, [FromForm] string petIDs) {
|
||||
Guid[] petGuids = XmlUtil.DeserializeXml<Guid[]>(petIDs);
|
||||
|
||||
return Ok(
|
||||
achievementService.ApplyAchievementRewardsByID(viking, achievementID, petGuids)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1103,8 +1103,6 @@ public class ContentController : Controller {
|
||||
achievementRewards.Add(new AchievementReward{
|
||||
EntityID = petInfo.EntityID,
|
||||
PointTypeID = AchievementPointTypes.DragonXP,
|
||||
EntityTypeID = 3, // dragon ?
|
||||
RewardID = 1265, // TODO: placeholder
|
||||
Amount = dragonXp
|
||||
});
|
||||
}
|
||||
@ -1112,10 +1110,10 @@ public class ContentController : Controller {
|
||||
|
||||
// player XP and gems
|
||||
achievementRewards.Add(
|
||||
achievementService.AddAchievementPointsAndGetReward(viking, AchievementPointTypes.PlayerXP, 60 * rewardMultipler)
|
||||
achievementService.AddAchievementPoints(viking, AchievementPointTypes.PlayerXP, 60 * rewardMultipler)
|
||||
);
|
||||
achievementRewards.Add(
|
||||
achievementService.AddAchievementPointsAndGetReward(viking, AchievementPointTypes.CashCurrency, 2 * rewardMultipler)
|
||||
achievementService.AddAchievementPoints(viking, AchievementPointTypes.CashCurrency, 2 * rewardMultipler)
|
||||
);
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -44,4 +44,8 @@ public class AchievementReward
|
||||
|
||||
[XmlElement(ElementName = "cid")]
|
||||
public int CommonInventoryID;
|
||||
|
||||
public AchievementReward Clone() {
|
||||
return (AchievementReward) this.MemberwiseClone();
|
||||
}
|
||||
}
|
||||
|
@ -58,9 +58,20 @@ namespace sodoff.Services {
|
||||
}
|
||||
}
|
||||
|
||||
public void AddAchievementPoints(Viking viking, AchievementPointTypes? type, int? value) {
|
||||
public AchievementReward? AddDragonAchievementPoints(Dragon dragon, int? value) {
|
||||
dragon.PetXP = (dragon.PetXP ?? 0) + (value ?? 0);
|
||||
|
||||
return new AchievementReward{
|
||||
// NOTE: RewardID and EntityTypeID are not used by client
|
||||
EntityID = Guid.Parse(dragon.EntityId),
|
||||
PointTypeID = AchievementPointTypes.DragonXP,
|
||||
Amount = value ?? 0
|
||||
};
|
||||
}
|
||||
|
||||
public AchievementReward? AddAchievementPoints(Viking viking, AchievementPointTypes? type, int? value) {
|
||||
if (type == AchievementPointTypes.DragonXP && viking.SelectedDragon != null) {
|
||||
viking.SelectedDragon.PetXP = (viking.SelectedDragon.PetXP ?? 0) + (value ?? 0);
|
||||
return AddDragonAchievementPoints(viking.SelectedDragon, value);
|
||||
} else if (type != null) {
|
||||
AchievementPoints xpPoints = viking.AchievementPoints.FirstOrDefault(a => a.Type == (int)type);
|
||||
if (xpPoints is null) {
|
||||
@ -71,48 +82,59 @@ namespace sodoff.Services {
|
||||
viking.AchievementPoints.Add(xpPoints);
|
||||
}
|
||||
xpPoints.Value += value ?? 0;
|
||||
}
|
||||
}
|
||||
|
||||
public AchievementReward AddAchievementPointsAndGetReward(Viking viking, AchievementPointTypes type, int value) {
|
||||
AddAchievementPoints(viking, type, value);
|
||||
return new AchievementReward{
|
||||
EntityID = Guid.Parse(viking.Id),
|
||||
PointTypeID = type,
|
||||
EntityTypeID = 1, // player ?
|
||||
RewardID = 1265, // TODO: placeholder
|
||||
Amount = value
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void ApplyAchievementReward(Viking viking, AchievementReward reward) {
|
||||
public AchievementReward? ApplyAchievementReward(Viking viking, AchievementReward reward) {
|
||||
if (reward.PointTypeID == AchievementPointTypes.ItemReward) {
|
||||
inventoryService.AddItemToInventory(viking, reward.ItemID, (int)reward.Amount!);
|
||||
|
||||
AchievementReward grantedReward = reward.Clone();
|
||||
grantedReward.EntityID = Guid.Parse(viking.Id);
|
||||
return grantedReward;
|
||||
} else { // currencies, all types of player XP and dragon XP
|
||||
AddAchievementPoints(viking, reward.PointTypeID, reward.Amount);
|
||||
return AddAchievementPoints(viking, reward.PointTypeID, reward.Amount);
|
||||
}
|
||||
}
|
||||
|
||||
public AchievementReward[] ApplyAchievementRewards(Viking viking, AchievementReward[] rewards) {
|
||||
public AchievementReward[] ApplyAchievementRewards(Viking viking, AchievementReward[] rewards, Guid[]? dragonsIDs = null) {
|
||||
if (rewards is null)
|
||||
return null;
|
||||
|
||||
List<AchievementReward> grantedRewards = new List<AchievementReward>();
|
||||
foreach (var reward in rewards) {
|
||||
ApplyAchievementReward(viking, reward);
|
||||
/* TODO we don't need this?
|
||||
if (reward.PointTypeID == AchievementPointTypes.DragonXP) {
|
||||
reward.EntityID = Guid.Parse(viking.SelectedDragon.EntityId)
|
||||
} else {
|
||||
reward.EntityID = Guid.Parse(viking.Id)
|
||||
} */
|
||||
if (dragonsIDs != null && reward.PointTypeID == AchievementPointTypes.DragonXP) {
|
||||
double amountDouble = (reward.Amount ?? 0)/dragonsIDs.Length;
|
||||
int amount = (int)Math.Ceiling(amountDouble);
|
||||
foreach (Guid dragonID in dragonsIDs) {
|
||||
Dragon dragon = viking.Dragons.FirstOrDefault(e => e.EntityId == dragonID.ToString());
|
||||
grantedRewards.Add(
|
||||
AddDragonAchievementPoints(dragon, amount)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
grantedRewards.Add(
|
||||
ApplyAchievementReward(viking, reward)
|
||||
);
|
||||
}
|
||||
// TODO: check trophies, etc criteria and id need apply and add to results extra reward here
|
||||
return rewards;
|
||||
}
|
||||
|
||||
public AchievementReward[] ApplyAchievementRewardsByID(Viking viking, int achievementID) {
|
||||
// TODO: check trophies, etc criteria and id need apply and add to results extra reward here
|
||||
|
||||
return grantedRewards.ToArray();
|
||||
}
|
||||
|
||||
public AchievementReward[] ApplyAchievementRewardsByID(Viking viking, int achievementID, Guid[]? dragonsIDs = null) {
|
||||
var rewards = achievementStore.GetAchievementRewardsById(achievementID);
|
||||
if (rewards != null) {
|
||||
return ApplyAchievementRewards(viking, rewards);
|
||||
return ApplyAchievementRewards(viking, rewards, dragonsIDs);
|
||||
} else {
|
||||
return new AchievementReward[0];
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user