mirror of
https://github.com/SoDOff-Project/sodoff.git
synced 2025-10-11 08:18:49 -07:00
181 lines
6.8 KiB
C#
181 lines
6.8 KiB
C#
using System.Reflection;
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using sodoff.Attributes;
|
|
using sodoff.Model;
|
|
using sodoff.Schema;
|
|
using sodoff.Services;
|
|
using sodoff.Util;
|
|
|
|
namespace sodoff.Controllers.Common;
|
|
public class AchievementController : Controller {
|
|
|
|
public readonly DBContext ctx;
|
|
private AchievementService achievementService;
|
|
public AchievementController(DBContext ctx, AchievementService achievementService) {
|
|
this.ctx = ctx;
|
|
this.achievementService = achievementService;
|
|
}
|
|
|
|
[HttpPost]
|
|
[Produces("application/xml")]
|
|
[Route("AchievementWebService.asmx/GetPetAchievementsByUserID")]
|
|
[VikingSession(UseLock=false)]
|
|
public IActionResult GetPetAchievementsByUserID(Viking viking, [FromForm] string userId) {
|
|
List<UserAchievementInfo> dragonsAchievement = new List<UserAchievementInfo>();
|
|
foreach (Dragon dragon in viking.Dragons) {
|
|
dragonsAchievement.Add(
|
|
achievementService.CreateUserAchievementInfo(dragon.EntityId, dragon.PetXP, AchievementPointTypes.DragonXP)
|
|
);
|
|
}
|
|
|
|
ArrayOfUserAchievementInfo arrAchievements = new ArrayOfUserAchievementInfo {
|
|
UserAchievementInfo = dragonsAchievement.ToArray()
|
|
};
|
|
|
|
return Ok(arrAchievements);
|
|
}
|
|
|
|
[HttpPost]
|
|
//[Produces("application/xml")]
|
|
[Route("AchievementWebService.asmx/GetAllRanks")]
|
|
public IActionResult GetAllRanks() {
|
|
// TODO, this is a placeholder
|
|
return Ok(XmlUtil.ReadResourceXmlString("allranks"));
|
|
}
|
|
|
|
[HttpPost]
|
|
//[Produces("application/xml")]
|
|
[Route("AchievementWebService.asmx/GetAchievementTaskInfo")]
|
|
public IActionResult GetAchievementTaskInfo() {
|
|
// TODO
|
|
return Ok(XmlUtil.ReadResourceXmlString("achievementtaskinfo"));
|
|
}
|
|
|
|
[HttpPost]
|
|
//[Produces("application/xml")]
|
|
[Route("AchievementWebService.asmx/GetAllRewardTypeMultiplier")]
|
|
public IActionResult GetAllRewardTypeMultiplier() {
|
|
// TODO
|
|
return Ok(XmlUtil.ReadResourceXmlString("rewardmultiplier"));
|
|
}
|
|
|
|
[HttpPost]
|
|
[Route("AchievementWebService.asmx/SetDragonXP")] // used by dragonrescue-import
|
|
[VikingSession]
|
|
public IActionResult SetDragonXP(Viking viking, [FromForm] string dragonId, [FromForm] int value) {
|
|
Dragon? dragon = viking.Dragons.FirstOrDefault(e => e.EntityId == dragonId);
|
|
if (dragon is null) {
|
|
return Conflict("Dragon not found");
|
|
}
|
|
|
|
dragon.PetXP = value;
|
|
ctx.SaveChanges();
|
|
|
|
return Ok("OK");
|
|
}
|
|
|
|
[HttpPost]
|
|
[Route("AchievementWebService.asmx/SetPlayerXP")] // used by dragonrescue-import
|
|
[VikingSession]
|
|
public IActionResult SetDragonXP(Viking viking, [FromForm] int type, [FromForm] int value) {
|
|
if (!Enum.IsDefined(typeof(AchievementPointTypes), type)) {
|
|
return Conflict("Invalid XP type");
|
|
}
|
|
|
|
AchievementPointTypes xpType = (AchievementPointTypes)type;
|
|
// TODO: we allow set currencies here, do we want this?
|
|
achievementService.SetAchievementPoints(viking, xpType, value);
|
|
ctx.SaveChanges();
|
|
return Ok("OK");
|
|
}
|
|
|
|
[HttpPost]
|
|
[Produces("application/xml")]
|
|
[Route("AchievementWebService.asmx/GetAchievementsByUserID")]
|
|
public IActionResult GetAchievementsByUserID([FromForm] string userId) {
|
|
// TODO: check session
|
|
|
|
Viking? viking = ctx.Vikings.FirstOrDefault(e => e.Id == userId);
|
|
if (viking != null) {
|
|
return Ok(new ArrayOfUserAchievementInfo {
|
|
UserAchievementInfo = new UserAchievementInfo[]{
|
|
achievementService.CreateUserAchievementInfo(viking, AchievementPointTypes.PlayerXP),
|
|
achievementService.CreateUserAchievementInfo(viking, AchievementPointTypes.PlayerFarmingXP),
|
|
achievementService.CreateUserAchievementInfo(viking, AchievementPointTypes.PlayerFishingXP),
|
|
achievementService.CreateUserAchievementInfo(viking, AchievementPointTypes.UDTPoints),
|
|
}
|
|
});
|
|
}
|
|
|
|
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 null;
|
|
}
|
|
|
|
[HttpPost]
|
|
[Produces("application/xml")]
|
|
[Route("AchievementWebService.asmx/SetAchievementAndGetReward")]
|
|
[Route("AchievementWebService.asmx/SetUserAchievementAndGetReward")]
|
|
[VikingSession(UseLock=true)]
|
|
public IActionResult SetAchievementAndGetReward(Viking viking, [FromForm] int achievementID) {
|
|
var rewards = achievementService.ApplyAchievementRewardsByID(viking, achievementID);
|
|
|
|
ctx.SaveChanges();
|
|
|
|
return Ok(rewards);
|
|
}
|
|
|
|
[HttpPost]
|
|
[Produces("application/xml")]
|
|
[Route("V2/AchievementWebService.asmx/SetUserAchievementTask")]
|
|
[DecryptRequest("achievementTaskSetRequest")]
|
|
[VikingSession(UseLock=true)]
|
|
public IActionResult SetUserAchievementTask(Viking viking) {
|
|
AchievementTaskSetRequest request = XmlUtil.DeserializeXml<AchievementTaskSetRequest>(Request.Form["achievementTaskSetRequest"]);
|
|
|
|
var response = new List<AchievementTaskSetResponse>();
|
|
foreach (var task in request.AchievementTaskSet) {
|
|
response.Add(
|
|
new AchievementTaskSetResponse {
|
|
Success = true,
|
|
UserMessage = true, // TODO: placeholder
|
|
AchievementName = "Placeholder Achievement", // TODO: placeholder
|
|
Level = 1, // TODO: placeholder
|
|
AchievementTaskGroupID = 1279, // TODO: placeholder
|
|
LastLevelCompleted = true, // TODO: placeholder
|
|
AchievementInfoID = 1279, // TODO: placeholder
|
|
AchievementRewards = achievementService.ApplyAchievementRewardsByTask(viking, task)
|
|
}
|
|
);
|
|
}
|
|
ctx.SaveChanges();
|
|
|
|
return Ok(new ArrayOfAchievementTaskSetResponse { AchievementTaskSetResponse = response.ToArray() });
|
|
}
|
|
|
|
[HttpPost]
|
|
[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
|
|
}
|
|
});
|
|
}
|
|
}
|