mirror of
https://github.com/SoDOff-Project/sodoff.git
synced 2025-10-11 08:18:49 -07:00
separate Achievement ID for different games
needed for MaM Fish Trap
This commit is contained in:
parent
693a73a71e
commit
80a1c24dd7
@ -168,8 +168,8 @@ public class AchievementController : Controller {
|
||||
[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);
|
||||
public IActionResult SetAchievementAndGetReward(Viking viking, [FromForm] int achievementID, [FromForm] string apiKey) {
|
||||
var rewards = achievementService.ApplyAchievementRewardsByID(viking, achievementID, ClientVersion.GetGameID(apiKey));
|
||||
ctx.SaveChanges();
|
||||
|
||||
return Ok(rewards);
|
||||
@ -247,10 +247,10 @@ public class AchievementController : Controller {
|
||||
[Produces("application/xml")]
|
||||
[Route("AchievementWebService.asmx/SetAchievementByEntityIDs")]
|
||||
[VikingSession(UseLock=true)]
|
||||
public IActionResult SetAchievementByEntityIDs(Viking viking, [FromForm] int achievementID, [FromForm] string petIDs) {
|
||||
public IActionResult SetAchievementByEntityIDs(Viking viking, [FromForm] int achievementID, [FromForm] string petIDs, [FromForm] string apiKey) {
|
||||
Guid[] petGuids = XmlUtil.DeserializeXml<Guid[]>(petIDs);
|
||||
|
||||
var rewards = achievementService.ApplyAchievementRewardsByID(viking, achievementID, petGuids);
|
||||
var rewards = achievementService.ApplyAchievementRewardsByID(viking, achievementID, ClientVersion.GetGameID(apiKey), petGuids);
|
||||
ctx.SaveChanges();
|
||||
|
||||
return Ok(rewards);
|
||||
|
@ -1594,7 +1594,7 @@ public class ContentController : Controller {
|
||||
[Produces("application/xml")]
|
||||
[Route("ContentWebService.asmx/SetNextItemState")]
|
||||
[VikingSession]
|
||||
public IActionResult SetNextItemState(Viking viking, [FromForm] string setNextItemStateRequest) {
|
||||
public IActionResult SetNextItemState(Viking viking, [FromForm] string setNextItemStateRequest, [FromForm] string apiKey) {
|
||||
SetNextItemStateRequest request = XmlUtil.DeserializeXml<SetNextItemStateRequest>(setNextItemStateRequest);
|
||||
RoomItem? item = ctx.RoomItems.FirstOrDefault(x => x.Id == request.UserItemPositionID);
|
||||
if (item is null)
|
||||
@ -1604,7 +1604,7 @@ public class ContentController : Controller {
|
||||
return Unauthorized("Can't set state not owned item");
|
||||
|
||||
// NOTE: The game sets OverrideStateCriteria only if a speedup is used
|
||||
return Ok(roomService.NextItemState(item, request.OverrideStateCriteria));
|
||||
return Ok(roomService.NextItemState(item, request.OverrideStateCriteria, ClientVersion.GetGameID(apiKey)));
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
|
160
src/Resources/achievements/achievementid_mam.xml
Normal file
160
src/Resources/achievements/achievementid_mam.xml
Normal file
@ -0,0 +1,160 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ArrayOfAchievementsIdInfo>
|
||||
<!-- fish trap rewards (probability of each 10%), do not correspond to the original ones, max 3 reward's item per achievements due to client limitation -->
|
||||
<AchievementsIdInfo>
|
||||
<AID>201388</AID>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>3</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11766</ii><!-- Perch -->
|
||||
</AR>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>2</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11162</ii><!-- Brown Trout -->
|
||||
</AR>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>1</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11767</ii><!-- Salmon -->
|
||||
</AR>
|
||||
</AchievementsIdInfo>
|
||||
<AchievementsIdInfo>
|
||||
<AID>201389</AID>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>4</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11766</ii><!-- Perch -->
|
||||
</AR>
|
||||
</AchievementsIdInfo>
|
||||
<AchievementsIdInfo>
|
||||
<AID>201390</AID>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>2</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11766</ii><!-- Perch -->
|
||||
</AR>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>1</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11162</ii><!-- Brown Trout -->
|
||||
</AR>
|
||||
</AchievementsIdInfo>
|
||||
<AchievementsIdInfo>
|
||||
<AID>201391</AID>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>3</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11768</ii><!-- Eel -->
|
||||
</AR>
|
||||
</AchievementsIdInfo>
|
||||
<AchievementsIdInfo>
|
||||
<AID>201392</AID>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>1</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11768</ii><!-- Eel -->
|
||||
</AR>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>3</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11767</ii><!-- Salmon -->
|
||||
</AR>
|
||||
</AchievementsIdInfo>
|
||||
<AchievementsIdInfo>
|
||||
<AID>201393</AID>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>5</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11766</ii><!-- Perch -->
|
||||
</AR>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>1</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11768</ii><!-- Eel -->
|
||||
</AR>
|
||||
</AchievementsIdInfo>
|
||||
<AchievementsIdInfo>
|
||||
<AID>201394</AID>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>1</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11766</ii><!-- Perch -->
|
||||
</AR>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>2</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11162</ii><!-- Brown Trout -->
|
||||
</AR>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>2</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11767</ii><!-- Salmon -->
|
||||
</AR>
|
||||
</AchievementsIdInfo>
|
||||
<AchievementsIdInfo>
|
||||
<AID>201395</AID>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>5</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11162</ii><!-- Brown Trout -->
|
||||
</AR>
|
||||
</AchievementsIdInfo>
|
||||
<AchievementsIdInfo>
|
||||
<AID>201396</AID>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>5</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11767</ii><!-- Salmon -->
|
||||
</AR>
|
||||
</AchievementsIdInfo>
|
||||
<AchievementsIdInfo>
|
||||
<AID>201397</AID>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>3</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11162</ii><!-- Brown Trout -->
|
||||
</AR>
|
||||
<AR>
|
||||
<p>6</p>
|
||||
<a>2</a>
|
||||
<t>1</t>
|
||||
<r>8</r>
|
||||
<ii>11767</ii><!-- Salmon -->
|
||||
</AR>
|
||||
</AchievementsIdInfo>
|
||||
</ArrayOfAchievementsIdInfo>
|
@ -145,8 +145,8 @@ namespace sodoff.Services {
|
||||
return grantedRewards.ToArray();
|
||||
}
|
||||
|
||||
public AchievementReward[] ApplyAchievementRewardsByID(Viking viking, int achievementID, Guid[]? dragonsIDs = null) {
|
||||
var rewards = achievementStore.GetAchievementRewardsById(achievementID);
|
||||
public AchievementReward[] ApplyAchievementRewardsByID(Viking viking, int achievementID, uint gameVersion, Guid[]? dragonsIDs = null) {
|
||||
var rewards = achievementStore.GetAchievementRewardsById(achievementID, gameVersion);
|
||||
if (rewards != null) {
|
||||
return ApplyAchievementRewards(viking, rewards, dragonsIDs);
|
||||
} else {
|
||||
|
@ -29,7 +29,7 @@ namespace sodoff.Services {
|
||||
}
|
||||
|
||||
Dictionary<AchievementPointTypes, UserRank[]> ranks = new();
|
||||
Dictionary<int, AchievementReward[]> achievementsRewardByID = new();
|
||||
Dictionary<uint, Dictionary<int, AchievementReward[]>> achievementsRewardByID = new();
|
||||
Dictionary<int, List<AchievementTaskInfo>> achievementsRewardByTask = new();
|
||||
Dictionary<uint, AchievementTasks> achievementsTasks = new();
|
||||
|
||||
@ -42,9 +42,16 @@ namespace sodoff.Services {
|
||||
ranks[pointType] = allranks.UserRank.Where(r => r.PointTypeID == pointType).ToArray();
|
||||
}
|
||||
|
||||
achievementsRewardByID[ClientVersion.Min_SoD] = new();
|
||||
AchievementsIdInfo[] allAchievementsIdInfo = XmlUtil.DeserializeXml<AchievementsIdInfo[]>(XmlUtil.ReadResourceXmlString("achievements.achievementid_sod"));
|
||||
foreach (var achievementsIdInfo in allAchievementsIdInfo) {
|
||||
achievementsRewardByID[achievementsIdInfo.AchievementID] = achievementsIdInfo.AchievementReward;
|
||||
achievementsRewardByID[ClientVersion.Min_SoD][achievementsIdInfo.AchievementID] = achievementsIdInfo.AchievementReward;
|
||||
}
|
||||
|
||||
achievementsRewardByID[ClientVersion.MaM] = new();
|
||||
allAchievementsIdInfo = XmlUtil.DeserializeXml<AchievementsIdInfo[]>(XmlUtil.ReadResourceXmlString("achievements.achievementid_mam"));
|
||||
foreach (var achievementsIdInfo in allAchievementsIdInfo) {
|
||||
achievementsRewardByID[ClientVersion.MaM][achievementsIdInfo.AchievementID] = achievementsIdInfo.AchievementReward;
|
||||
}
|
||||
|
||||
achievementsTasks[ClientVersion.Min_SoD] = new AchievementTasks("achievements.achievementtaskinfo_sod");
|
||||
@ -64,10 +71,10 @@ namespace sodoff.Services {
|
||||
return ranks[type].Count(r => r.Value <= xpPoints);
|
||||
}
|
||||
|
||||
public AchievementReward[]? GetAchievementRewardsById(int achievementID) {
|
||||
if (achievementsRewardByID.ContainsKey(achievementID)) {
|
||||
return achievementsRewardByID[achievementID];
|
||||
} else {
|
||||
public AchievementReward[]? GetAchievementRewardsById(int achievementID, uint gameVersion) {
|
||||
try {
|
||||
return achievementsRewardByID[gameVersion][achievementID];
|
||||
} catch(System.Collections.Generic.KeyNotFoundException) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -127,7 +127,7 @@ public class RoomService {
|
||||
return new UserItemPositionList { UserItemPosition = itemPosition.ToArray() };
|
||||
}
|
||||
|
||||
public SetNextItemStateResult NextItemState(RoomItem item, bool speedup) {
|
||||
public SetNextItemStateResult NextItemState(RoomItem item, bool speedup, uint gameVersion) {
|
||||
SetNextItemStateResult response = new SetNextItemStateResult {
|
||||
Success = true,
|
||||
ErrorCode = ItemStateChangeError.Success
|
||||
@ -153,7 +153,7 @@ public class RoomService {
|
||||
response.Rewards = achievementService.ApplyAchievementRewards(item.Room.Viking, rewards);
|
||||
}
|
||||
if (achievementID != null) {
|
||||
var newrewards = achievementService.ApplyAchievementRewardsByID(item.Room.Viking, (int)achievementID);
|
||||
var newrewards = achievementService.ApplyAchievementRewardsByID(item.Room.Viking, (int)achievementID, gameVersion);
|
||||
if (response.Rewards is null)
|
||||
response.Rewards = newrewards;
|
||||
else
|
||||
|
@ -68,6 +68,9 @@
|
||||
<EmbeddedResource Include="Resources\achievements\achievementid_sod.xml">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Resources\achievements\achievementid_mam.xml">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Resources\achievements\achievementtaskinfo_sod.xml">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
|
Loading…
x
Reference in New Issue
Block a user