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