forked from SoDOff-Project/sodoff
add support for missions
still requires achievements to work corrently
This commit is contained in:
parent
ba9df2fb10
commit
9cef74dd26
@ -52,7 +52,9 @@ methods = [
|
|||||||
'GetMMOServerInfoWithZone',
|
'GetMMOServerInfoWithZone',
|
||||||
'GetActiveChallenges',
|
'GetActiveChallenges',
|
||||||
'GetAchievementsByUserID',
|
'GetAchievementsByUserID',
|
||||||
'PurchaseItems'
|
'PurchaseItems',
|
||||||
|
'AcceptMission',
|
||||||
|
'GetUserMissionState'
|
||||||
]
|
]
|
||||||
|
|
||||||
def routable(path):
|
def routable(path):
|
||||||
|
@ -458,44 +458,83 @@ public class ContentController : Controller {
|
|||||||
[Produces("application/xml")]
|
[Produces("application/xml")]
|
||||||
[Route("V2/ContentWebService.asmx/GetUserUpcomingMissionState")]
|
[Route("V2/ContentWebService.asmx/GetUserUpcomingMissionState")]
|
||||||
public IActionResult GetUserUpcomingMissionState([FromForm] string apiToken, [FromForm] string userId) {
|
public IActionResult GetUserUpcomingMissionState([FromForm] string apiToken, [FromForm] string userId) {
|
||||||
Session? session = ctx.Sessions.FirstOrDefault(s => s.ApiToken == apiToken);
|
Viking? viking = ctx.Vikings.FirstOrDefault(x => x.Id == userId);
|
||||||
UserMissionStateResult result = new UserMissionStateResult();
|
if (viking is null)
|
||||||
|
return Ok("error");
|
||||||
|
|
||||||
if (session is null)
|
UserMissionStateResult result = new UserMissionStateResult { Missions = new List<Mission>() };
|
||||||
return Ok(result);
|
foreach (var mission in viking.MissionStates.Where(x => x.MissionStatus == MissionStatus.Upcoming))
|
||||||
|
result.Missions.Add(missionService.GetMissionWithProgress(mission.MissionId, viking.Id));
|
||||||
|
|
||||||
result.UserID = Guid.Parse(session.VikingId);
|
result.UserID = Guid.Parse(viking.Id);
|
||||||
return Ok(result); // TODO: placeholder, returns no upcoming missions
|
return Ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[Produces("application/xml")]
|
[Produces("application/xml")]
|
||||||
[Route("V2/ContentWebService.asmx/GetUserActiveMissionState")]
|
[Route("V2/ContentWebService.asmx/GetUserActiveMissionState")]
|
||||||
public IActionResult GetUserActiveMissionState([FromForm] string apiToken, [FromForm] string userId) {
|
public IActionResult GetUserActiveMissionState([FromForm] string apiToken, [FromForm] string userId) {
|
||||||
Session? session = ctx.Sessions.FirstOrDefault(s => s.ApiToken == apiToken);
|
Viking? viking = ctx.Vikings.FirstOrDefault(x => x.Id == userId);
|
||||||
if (session is null)
|
if (viking is null)
|
||||||
return Ok("error");
|
return Ok("error");
|
||||||
|
|
||||||
UserMissionStateResult result = new UserMissionStateResult { Missions = new List<Mission>() };
|
UserMissionStateResult result = new UserMissionStateResult { Missions = new List<Mission>() };
|
||||||
Mission tutorial = missionService.GetMissionWithProgress(999, userId);
|
foreach (var mission in viking.MissionStates.Where(x => x.MissionStatus == MissionStatus.Active))
|
||||||
|
result.Missions.Add(missionService.GetMissionWithProgress(mission.MissionId, viking.Id));
|
||||||
|
|
||||||
result.Missions.Add(tutorial);
|
result.UserID = Guid.Parse(viking.Id);
|
||||||
|
return Ok(result);
|
||||||
result.UserID = Guid.Parse(session.VikingId);
|
|
||||||
return Ok(result); // TODO: placeholder, returns the tutorial
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[Produces("application/xml")]
|
[Produces("application/xml")]
|
||||||
[Route("V2/ContentWebService.asmx/GetUserCompletedMissionState")]
|
[Route("V2/ContentWebService.asmx/GetUserCompletedMissionState")]
|
||||||
public IActionResult GetUserCompletedMissionState([FromForm] string apiToken, [FromForm] string userId) {
|
public IActionResult GetUserCompletedMissionState([FromForm] string apiToken, [FromForm] string userId) {
|
||||||
Session? session = ctx.Sessions.FirstOrDefault(s => s.ApiToken == apiToken);
|
Viking? viking = ctx.Vikings.FirstOrDefault(x => x.Id == userId);
|
||||||
UserMissionStateResult result = new UserMissionStateResult();
|
if (viking is null)
|
||||||
|
return Ok("error");
|
||||||
|
|
||||||
if (session is null)
|
UserMissionStateResult result = new UserMissionStateResult { Missions = new List<Mission>() };
|
||||||
return Ok(result);
|
foreach (var mission in viking.MissionStates.Where(x => x.MissionStatus == MissionStatus.Completed))
|
||||||
|
result.Missions.Add(missionService.GetMissionWithProgress(mission.MissionId, viking.Id));
|
||||||
|
|
||||||
result.UserID = Guid.Parse(session.VikingId);
|
result.UserID = Guid.Parse(viking.Id);
|
||||||
return Ok(result); // TODO: placeholder, returns no completed missions
|
return Ok(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Produces("application/xml")]
|
||||||
|
[Route("ContentWebService.asmx/AcceptMission")]
|
||||||
|
public IActionResult AcceptMission([FromForm] string userId, [FromForm] int missionId) {
|
||||||
|
Viking? viking = ctx.Vikings.FirstOrDefault(x => x.Id == userId);
|
||||||
|
if (viking is null)
|
||||||
|
return Ok(false);
|
||||||
|
|
||||||
|
MissionState? missionState = viking.MissionStates.FirstOrDefault(x => x.MissionId == missionId);
|
||||||
|
if (missionState is null || missionState.MissionStatus != MissionStatus.Upcoming)
|
||||||
|
return Ok(false);
|
||||||
|
|
||||||
|
missionState.MissionStatus = MissionStatus.Active;
|
||||||
|
ctx.SaveChanges();
|
||||||
|
return Ok(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Produces("application/xml")]
|
||||||
|
[Route("V2/ContentWebService.asmx/GetUserMissionState")]
|
||||||
|
public IActionResult GetUserMissionState([FromForm] string userId, [FromForm] string filter) {
|
||||||
|
MissionRequestFilterV2 filterV2 = XmlUtil.DeserializeXml<MissionRequestFilterV2>(filter);
|
||||||
|
Viking? viking = ctx.Vikings.FirstOrDefault(x => x.Id == userId);
|
||||||
|
if (viking is null)
|
||||||
|
return Ok("error");
|
||||||
|
|
||||||
|
UserMissionStateResult result = new UserMissionStateResult { Missions = new List<Mission>() };
|
||||||
|
foreach (var m in filterV2.MissionPair)
|
||||||
|
if (m.MissionID != null)
|
||||||
|
result.Missions.Add(missionService.GetMissionWithProgress((int)m.MissionID, viking.Id));
|
||||||
|
|
||||||
|
result.UserID = Guid.Parse(viking.Id);
|
||||||
|
return Ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
|
@ -12,10 +12,12 @@ public class RegistrationController : Controller {
|
|||||||
|
|
||||||
private readonly DBContext ctx;
|
private readonly DBContext ctx;
|
||||||
private ItemService itemService;
|
private ItemService itemService;
|
||||||
|
private MissionService missionService;
|
||||||
|
|
||||||
public RegistrationController(DBContext ctx, ItemService itemService) {
|
public RegistrationController(DBContext ctx, ItemService itemService, MissionService missionService) {
|
||||||
this.ctx = ctx;
|
this.ctx = ctx;
|
||||||
this.itemService = itemService;
|
this.itemService = itemService;
|
||||||
|
this.missionService = missionService;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
@ -90,6 +92,9 @@ public class RegistrationController : Controller {
|
|||||||
User = user,
|
User = user,
|
||||||
Inventory = inv
|
Inventory = inv
|
||||||
};
|
};
|
||||||
|
|
||||||
|
missionService.SetUpMissions(v);
|
||||||
|
|
||||||
ctx.Vikings.Add(v);
|
ctx.Vikings.Add(v);
|
||||||
ctx.SaveChanges();
|
ctx.SaveChanges();
|
||||||
|
|
||||||
|
@ -37,6 +37,9 @@ public class DBContext : DbContext {
|
|||||||
builder.Entity<Viking>().HasMany(u => u.Sessions)
|
builder.Entity<Viking>().HasMany(u => u.Sessions)
|
||||||
.WithOne(e => e.Viking);
|
.WithOne(e => e.Viking);
|
||||||
|
|
||||||
|
builder.Entity<Viking>().HasMany(v => v.MissionStates)
|
||||||
|
.WithOne(e => e.Viking);
|
||||||
|
|
||||||
builder.Entity<Viking>().HasOne(s => s.User)
|
builder.Entity<Viking>().HasOne(s => s.User)
|
||||||
.WithMany(e => e.Vikings)
|
.WithMany(e => e.Vikings)
|
||||||
.HasForeignKey(e => e.UserId);
|
.HasForeignKey(e => e.UserId);
|
||||||
@ -107,5 +110,9 @@ public class DBContext : DbContext {
|
|||||||
.WithMany(e => e.InventoryItems)
|
.WithMany(e => e.InventoryItems)
|
||||||
.HasForeignKey(e => e.InventoryId);
|
.HasForeignKey(e => e.InventoryId);
|
||||||
|
|
||||||
|
builder.Entity<MissionState>().HasOne(m => m.Viking)
|
||||||
|
.WithMany(e => e.MissionStates)
|
||||||
|
.HasForeignKey(e => e.VikingId);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
20
src/Model/MissionState.cs
Normal file
20
src/Model/MissionState.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace sodoff.Model;
|
||||||
|
|
||||||
|
public class MissionState {
|
||||||
|
[Key]
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public int MissionId { get; set; }
|
||||||
|
|
||||||
|
public string VikingId { get; set; } = null!;
|
||||||
|
|
||||||
|
public virtual Viking? Viking { get; set; }
|
||||||
|
|
||||||
|
public MissionStatus MissionStatus { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum MissionStatus {
|
||||||
|
Upcoming,Active,Completed
|
||||||
|
}
|
@ -19,6 +19,7 @@ public class Viking {
|
|||||||
public virtual User User { get; set; } = null!;
|
public virtual User User { get; set; } = null!;
|
||||||
public virtual ICollection<Dragon> Dragons { get; set; } = null!;
|
public virtual ICollection<Dragon> Dragons { get; set; } = null!;
|
||||||
public virtual ICollection<Image> Images { get; set; } = null!;
|
public virtual ICollection<Image> Images { get; set; } = null!;
|
||||||
|
public virtual ICollection<MissionState> MissionStates { get; set; } = null!;
|
||||||
public virtual Dragon? SelectedDragon { get; set; }
|
public virtual Dragon? SelectedDragon { get; set; }
|
||||||
|
|
||||||
public int InventoryId { get; set; }
|
public int InventoryId { get; set; }
|
||||||
|
761
src/Resources/defaultmissionlist.xml
Normal file
761
src/Resources/defaultmissionlist.xml
Normal file
@ -0,0 +1,761 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<DefaultMissions>
|
||||||
|
<Active>
|
||||||
|
<id>999</id>
|
||||||
|
<id>1035</id>
|
||||||
|
<id>1036</id>
|
||||||
|
<id>1037</id>
|
||||||
|
<id>1046</id>
|
||||||
|
<id>1047</id>
|
||||||
|
<id>1048</id>
|
||||||
|
<id>1185</id>
|
||||||
|
<id>1186</id>
|
||||||
|
<id>1187</id>
|
||||||
|
<id>1188</id>
|
||||||
|
<id>1189</id>
|
||||||
|
<id>1191</id>
|
||||||
|
<id>1192</id>
|
||||||
|
<id>1193</id>
|
||||||
|
<id>1194</id>
|
||||||
|
<id>1195</id>
|
||||||
|
<id>1196</id>
|
||||||
|
<id>1197</id>
|
||||||
|
<id>1198</id>
|
||||||
|
<id>1199</id>
|
||||||
|
<id>1200</id>
|
||||||
|
<id>1201</id>
|
||||||
|
<id>1202</id>
|
||||||
|
<id>1203</id>
|
||||||
|
<id>1204</id>
|
||||||
|
<id>1205</id>
|
||||||
|
<id>1206</id>
|
||||||
|
<id>1207</id>
|
||||||
|
<id>1208</id>
|
||||||
|
<id>1209</id>
|
||||||
|
<id>1210</id>
|
||||||
|
<id>1211</id>
|
||||||
|
<id>1212</id>
|
||||||
|
<id>1213</id>
|
||||||
|
<id>1214</id>
|
||||||
|
<id>1215</id>
|
||||||
|
<id>1216</id>
|
||||||
|
<id>1217</id>
|
||||||
|
<id>1218</id>
|
||||||
|
<id>1219</id>
|
||||||
|
<id>1220</id>
|
||||||
|
<id>1221</id>
|
||||||
|
<id>1222</id>
|
||||||
|
<id>1223</id>
|
||||||
|
<id>1224</id>
|
||||||
|
<id>1225</id>
|
||||||
|
<id>1226</id>
|
||||||
|
<id>1227</id>
|
||||||
|
<id>1228</id>
|
||||||
|
<id>1229</id>
|
||||||
|
<id>1230</id>
|
||||||
|
<id>1231</id>
|
||||||
|
<id>1232</id>
|
||||||
|
<id>1233</id>
|
||||||
|
<id>1234</id>
|
||||||
|
<id>1235</id>
|
||||||
|
<id>1236</id>
|
||||||
|
<id>1237</id>
|
||||||
|
<id>1238</id>
|
||||||
|
<id>1239</id>
|
||||||
|
<id>1240</id>
|
||||||
|
<id>1241</id>
|
||||||
|
<id>1242</id>
|
||||||
|
<id>1243</id>
|
||||||
|
<id>1244</id>
|
||||||
|
<id>1245</id>
|
||||||
|
<id>1250</id>
|
||||||
|
<id>1251</id>
|
||||||
|
<id>1252</id>
|
||||||
|
<id>1253</id>
|
||||||
|
<id>1254</id>
|
||||||
|
<id>1255</id>
|
||||||
|
<id>1256</id>
|
||||||
|
<id>1257</id>
|
||||||
|
<id>1258</id>
|
||||||
|
<id>1259</id>
|
||||||
|
<id>1260</id>
|
||||||
|
<id>1261</id>
|
||||||
|
<id>1262</id>
|
||||||
|
<id>1263</id>
|
||||||
|
<id>1264</id>
|
||||||
|
<id>1265</id>
|
||||||
|
<id>1266</id>
|
||||||
|
<id>1267</id>
|
||||||
|
<id>1268</id>
|
||||||
|
<id>1269</id>
|
||||||
|
<id>1270</id>
|
||||||
|
<id>1271</id>
|
||||||
|
<id>1272</id>
|
||||||
|
<id>1273</id>
|
||||||
|
<id>1274</id>
|
||||||
|
<id>1275</id>
|
||||||
|
<id>1276</id>
|
||||||
|
<id>1277</id>
|
||||||
|
<id>1278</id>
|
||||||
|
<id>1279</id>
|
||||||
|
<id>1280</id>
|
||||||
|
<id>1281</id>
|
||||||
|
<id>1282</id>
|
||||||
|
<id>1283</id>
|
||||||
|
<id>1284</id>
|
||||||
|
<id>1285</id>
|
||||||
|
<id>1286</id>
|
||||||
|
<id>1287</id>
|
||||||
|
<id>1288</id>
|
||||||
|
<id>1289</id>
|
||||||
|
<id>1290</id>
|
||||||
|
<id>1291</id>
|
||||||
|
<id>1292</id>
|
||||||
|
<id>1293</id>
|
||||||
|
<id>1294</id>
|
||||||
|
<id>1295</id>
|
||||||
|
<id>1307</id>
|
||||||
|
<id>1308</id>
|
||||||
|
<id>1309</id>
|
||||||
|
<id>1310</id>
|
||||||
|
<id>1311</id>
|
||||||
|
<id>1312</id>
|
||||||
|
<id>1313</id>
|
||||||
|
<id>1314</id>
|
||||||
|
<id>1315</id>
|
||||||
|
<id>1316</id>
|
||||||
|
<id>1321</id>
|
||||||
|
<id>1322</id>
|
||||||
|
<id>1323</id>
|
||||||
|
<id>1324</id>
|
||||||
|
<id>1325</id>
|
||||||
|
<id>1326</id>
|
||||||
|
<id>1327</id>
|
||||||
|
<id>1328</id>
|
||||||
|
<id>1329</id>
|
||||||
|
<id>1330</id>
|
||||||
|
<id>1345</id>
|
||||||
|
<id>1346</id>
|
||||||
|
<id>1347</id>
|
||||||
|
<id>1348</id>
|
||||||
|
<id>1349</id>
|
||||||
|
<id>1350</id>
|
||||||
|
<id>1351</id>
|
||||||
|
<id>1352</id>
|
||||||
|
<id>1353</id>
|
||||||
|
<id>1354</id>
|
||||||
|
<id>1689</id>
|
||||||
|
<id>1690</id>
|
||||||
|
<id>1691</id>
|
||||||
|
<id>1692</id>
|
||||||
|
<id>1693</id>
|
||||||
|
<id>1694</id>
|
||||||
|
<id>1695</id>
|
||||||
|
<id>1696</id>
|
||||||
|
<id>1697</id>
|
||||||
|
<id>1698</id>
|
||||||
|
<id>1699</id>
|
||||||
|
<id>1700</id>
|
||||||
|
<id>1701</id>
|
||||||
|
<id>1702</id>
|
||||||
|
<id>1703</id>
|
||||||
|
<id>1704</id>
|
||||||
|
<id>1705</id>
|
||||||
|
<id>1706</id>
|
||||||
|
<id>1707</id>
|
||||||
|
<id>1708</id>
|
||||||
|
<id>1709</id>
|
||||||
|
<id>1710</id>
|
||||||
|
<id>1711</id>
|
||||||
|
<id>1712</id>
|
||||||
|
<id>1713</id>
|
||||||
|
<id>1714</id>
|
||||||
|
<id>1715</id>
|
||||||
|
<id>1716</id>
|
||||||
|
<id>1717</id>
|
||||||
|
<id>1718</id>
|
||||||
|
<id>1719</id>
|
||||||
|
<id>1720</id>
|
||||||
|
<id>1721</id>
|
||||||
|
<id>1722</id>
|
||||||
|
<id>1723</id>
|
||||||
|
<id>1724</id>
|
||||||
|
<id>1725</id>
|
||||||
|
<id>1726</id>
|
||||||
|
<id>1727</id>
|
||||||
|
<id>1728</id>
|
||||||
|
<id>1729</id>
|
||||||
|
<id>1730</id>
|
||||||
|
<id>2176</id>
|
||||||
|
<id>2287</id>
|
||||||
|
<id>2303</id>
|
||||||
|
<id>2304</id>
|
||||||
|
<id>2309</id>
|
||||||
|
<id>2392</id>
|
||||||
|
<id>2393</id>
|
||||||
|
<id>2394</id>
|
||||||
|
<id>2395</id>
|
||||||
|
<id>2396</id>
|
||||||
|
<id>2397</id>
|
||||||
|
<id>2398</id>
|
||||||
|
<id>2399</id>
|
||||||
|
<id>2400</id>
|
||||||
|
<id>2401</id>
|
||||||
|
<id>2402</id>
|
||||||
|
<id>2403</id>
|
||||||
|
<id>2404</id>
|
||||||
|
<id>2405</id>
|
||||||
|
<id>2406</id>
|
||||||
|
<id>2407</id>
|
||||||
|
<id>2421</id>
|
||||||
|
<id>2422</id>
|
||||||
|
<id>2424</id>
|
||||||
|
<id>2425</id>
|
||||||
|
<id>2426</id>
|
||||||
|
<id>2427</id>
|
||||||
|
<id>2428</id>
|
||||||
|
<id>2429</id>
|
||||||
|
<id>2430</id>
|
||||||
|
<id>2431</id>
|
||||||
|
<id>2432</id>
|
||||||
|
<id>2433</id>
|
||||||
|
<id>2434</id>
|
||||||
|
<id>2435</id>
|
||||||
|
<id>2436</id>
|
||||||
|
<id>2437</id>
|
||||||
|
<id>2438</id>
|
||||||
|
<id>2439</id>
|
||||||
|
<id>2457</id>
|
||||||
|
<id>2458</id>
|
||||||
|
<id>2510</id>
|
||||||
|
<id>2511</id>
|
||||||
|
<id>2512</id>
|
||||||
|
<id>2513</id>
|
||||||
|
<id>2514</id>
|
||||||
|
<id>2515</id>
|
||||||
|
<id>2516</id>
|
||||||
|
<id>2517</id>
|
||||||
|
<id>2518</id>
|
||||||
|
<id>2519</id>
|
||||||
|
<id>2520</id>
|
||||||
|
<id>2521</id>
|
||||||
|
<id>2562</id>
|
||||||
|
<id>2563</id>
|
||||||
|
<id>2564</id>
|
||||||
|
<id>2565</id>
|
||||||
|
<id>2566</id>
|
||||||
|
<id>2567</id>
|
||||||
|
<id>2568</id>
|
||||||
|
<id>2569</id>
|
||||||
|
<id>2570</id>
|
||||||
|
<id>2571</id>
|
||||||
|
<id>2572</id>
|
||||||
|
<id>2573</id>
|
||||||
|
<id>2578</id>
|
||||||
|
<id>2579</id>
|
||||||
|
<id>2580</id>
|
||||||
|
<id>2581</id>
|
||||||
|
<id>2582</id>
|
||||||
|
<id>2583</id>
|
||||||
|
<id>2584</id>
|
||||||
|
<id>2585</id>
|
||||||
|
<id>2586</id>
|
||||||
|
<id>2587</id>
|
||||||
|
<id>2588</id>
|
||||||
|
<id>2606</id>
|
||||||
|
<id>2607</id>
|
||||||
|
<id>2631</id>
|
||||||
|
<id>2632</id>
|
||||||
|
<id>2633</id>
|
||||||
|
<id>2634</id>
|
||||||
|
<id>2635</id>
|
||||||
|
<id>2636</id>
|
||||||
|
<id>2637</id>
|
||||||
|
<id>2638</id>
|
||||||
|
<id>2639</id>
|
||||||
|
<id>2640</id>
|
||||||
|
<id>2645</id>
|
||||||
|
<id>2646</id>
|
||||||
|
<id>2649</id>
|
||||||
|
<id>2650</id>
|
||||||
|
<id>2652</id>
|
||||||
|
<id>2653</id>
|
||||||
|
<id>2655</id>
|
||||||
|
<id>2656</id>
|
||||||
|
<id>2661</id>
|
||||||
|
<id>2662</id>
|
||||||
|
<id>2663</id>
|
||||||
|
<id>2664</id>
|
||||||
|
<id>2665</id>
|
||||||
|
<id>2666</id>
|
||||||
|
<id>2667</id>
|
||||||
|
<id>2668</id>
|
||||||
|
<id>2669</id>
|
||||||
|
<id>2670</id>
|
||||||
|
<id>2673</id>
|
||||||
|
<id>2674</id>
|
||||||
|
<id>2675</id>
|
||||||
|
<id>2676</id>
|
||||||
|
<id>2677</id>
|
||||||
|
<id>2678</id>
|
||||||
|
<id>2679</id>
|
||||||
|
<id>2680</id>
|
||||||
|
<id>2681</id>
|
||||||
|
<id>2682</id>
|
||||||
|
<id>2683</id>
|
||||||
|
<id>2684</id>
|
||||||
|
<id>2685</id>
|
||||||
|
<id>2686</id>
|
||||||
|
<id>2687</id>
|
||||||
|
<id>2786</id>
|
||||||
|
<id>2787</id>
|
||||||
|
<id>2790</id>
|
||||||
|
<id>2806</id>
|
||||||
|
<id>2807</id>
|
||||||
|
<id>2808</id>
|
||||||
|
<id>2809</id>
|
||||||
|
<id>2810</id>
|
||||||
|
<id>2811</id>
|
||||||
|
<id>2812</id>
|
||||||
|
<id>2813</id>
|
||||||
|
<id>2814</id>
|
||||||
|
<id>2815</id>
|
||||||
|
<id>2816</id>
|
||||||
|
<id>2817</id>
|
||||||
|
<id>2818</id>
|
||||||
|
<id>2819</id>
|
||||||
|
<id>2843</id>
|
||||||
|
<id>2844</id>
|
||||||
|
<id>2845</id>
|
||||||
|
<id>2878</id>
|
||||||
|
<id>2879</id>
|
||||||
|
<id>2894</id>
|
||||||
|
<id>2895</id>
|
||||||
|
<id>2931</id>
|
||||||
|
<id>2932</id>
|
||||||
|
<id>2946</id>
|
||||||
|
<id>2947</id>
|
||||||
|
<id>2972</id>
|
||||||
|
<id>2973</id>
|
||||||
|
<id>3022</id>
|
||||||
|
<id>3023</id>
|
||||||
|
<id>3036</id>
|
||||||
|
<id>3037</id>
|
||||||
|
<id>3038</id>
|
||||||
|
<id>3052</id>
|
||||||
|
<id>3053</id>
|
||||||
|
<id>3069</id>
|
||||||
|
<id>3071</id>
|
||||||
|
<id>3072</id>
|
||||||
|
<id>3073</id>
|
||||||
|
<id>3074</id>
|
||||||
|
<id>3075</id>
|
||||||
|
<id>3076</id>
|
||||||
|
<id>3077</id>
|
||||||
|
<id>3078</id>
|
||||||
|
<id>3079</id>
|
||||||
|
<id>3080</id>
|
||||||
|
<id>3099</id>
|
||||||
|
<id>3100</id>
|
||||||
|
<id>3113</id>
|
||||||
|
<id>3114</id>
|
||||||
|
<id>3115</id>
|
||||||
|
<id>3116</id>
|
||||||
|
<id>3117</id>
|
||||||
|
<id>3118</id>
|
||||||
|
<id>3119</id>
|
||||||
|
<id>3120</id>
|
||||||
|
<id>3121</id>
|
||||||
|
<id>3122</id>
|
||||||
|
<id>3123</id>
|
||||||
|
<id>3124</id>
|
||||||
|
<id>3127</id>
|
||||||
|
<id>3128</id>
|
||||||
|
<id>3129</id>
|
||||||
|
<id>3130</id>
|
||||||
|
<id>3131</id>
|
||||||
|
<id>3132</id>
|
||||||
|
<id>3133</id>
|
||||||
|
<id>3134</id>
|
||||||
|
<id>3135</id>
|
||||||
|
<id>3136</id>
|
||||||
|
<id>3148</id>
|
||||||
|
<id>3149</id>
|
||||||
|
</Active>
|
||||||
|
<Upcoming>
|
||||||
|
<id>1003</id>
|
||||||
|
<id>1014</id>
|
||||||
|
<id>1015</id>
|
||||||
|
<id>1016</id>
|
||||||
|
<id>1017</id>
|
||||||
|
<id>1027</id>
|
||||||
|
<id>1028</id>
|
||||||
|
<id>1029</id>
|
||||||
|
<id>1031</id>
|
||||||
|
<id>1033</id>
|
||||||
|
<id>1038</id>
|
||||||
|
<id>1044</id>
|
||||||
|
<id>1053</id>
|
||||||
|
<id>1054</id>
|
||||||
|
<id>1055</id>
|
||||||
|
<id>1057</id>
|
||||||
|
<id>1058</id>
|
||||||
|
<id>1062</id>
|
||||||
|
<id>1067</id>
|
||||||
|
<id>1074</id>
|
||||||
|
<id>1085</id>
|
||||||
|
<id>1089</id>
|
||||||
|
<id>1090</id>
|
||||||
|
<id>1091</id>
|
||||||
|
<id>1093</id>
|
||||||
|
<id>1095</id>
|
||||||
|
<id>1096</id>
|
||||||
|
<id>1097</id>
|
||||||
|
<id>1099</id>
|
||||||
|
<id>1101</id>
|
||||||
|
<id>1102</id>
|
||||||
|
<id>1106</id>
|
||||||
|
<id>1108</id>
|
||||||
|
<id>1110</id>
|
||||||
|
<id>1111</id>
|
||||||
|
<id>1114</id>
|
||||||
|
<id>1120</id>
|
||||||
|
<id>1121</id>
|
||||||
|
<id>1128</id>
|
||||||
|
<id>1134</id>
|
||||||
|
<id>1140</id>
|
||||||
|
<id>1143</id>
|
||||||
|
<id>1144</id>
|
||||||
|
<id>1150</id>
|
||||||
|
<id>1153</id>
|
||||||
|
<id>1155</id>
|
||||||
|
<id>1159</id>
|
||||||
|
<id>1163</id>
|
||||||
|
<id>1164</id>
|
||||||
|
<id>1166</id>
|
||||||
|
<id>1167</id>
|
||||||
|
<id>1168</id>
|
||||||
|
<id>1169</id>
|
||||||
|
<id>1171</id>
|
||||||
|
<id>1173</id>
|
||||||
|
<id>1179</id>
|
||||||
|
<id>1247</id>
|
||||||
|
<id>1296</id>
|
||||||
|
<id>1304</id>
|
||||||
|
<id>1305</id>
|
||||||
|
<id>1317</id>
|
||||||
|
<id>1318</id>
|
||||||
|
<id>1331</id>
|
||||||
|
<id>1333</id>
|
||||||
|
<id>1335</id>
|
||||||
|
<id>1338</id>
|
||||||
|
<id>1343</id>
|
||||||
|
<id>1344</id>
|
||||||
|
<id>1357</id>
|
||||||
|
<id>1361</id>
|
||||||
|
<id>1362</id>
|
||||||
|
<id>1390</id>
|
||||||
|
<id>1508</id>
|
||||||
|
<id>1529</id>
|
||||||
|
<id>1530</id>
|
||||||
|
<id>1575</id>
|
||||||
|
<id>1579</id>
|
||||||
|
<id>1605</id>
|
||||||
|
<id>1606</id>
|
||||||
|
<id>1607</id>
|
||||||
|
<id>1608</id>
|
||||||
|
<id>1611</id>
|
||||||
|
<id>1612</id>
|
||||||
|
<id>1613</id>
|
||||||
|
<id>1614</id>
|
||||||
|
<id>1615</id>
|
||||||
|
<id>1617</id>
|
||||||
|
<id>1618</id>
|
||||||
|
<id>1619</id>
|
||||||
|
<id>1620</id>
|
||||||
|
<id>1622</id>
|
||||||
|
<id>1623</id>
|
||||||
|
<id>1624</id>
|
||||||
|
<id>1625</id>
|
||||||
|
<id>1626</id>
|
||||||
|
<id>1627</id>
|
||||||
|
<id>1628</id>
|
||||||
|
<id>1629</id>
|
||||||
|
<id>1630</id>
|
||||||
|
<id>1632</id>
|
||||||
|
<id>1633</id>
|
||||||
|
<id>1634</id>
|
||||||
|
<id>1636</id>
|
||||||
|
<id>1638</id>
|
||||||
|
<id>1640</id>
|
||||||
|
<id>1641</id>
|
||||||
|
<id>1642</id>
|
||||||
|
<id>1646</id>
|
||||||
|
<id>1648</id>
|
||||||
|
<id>1652</id>
|
||||||
|
<id>1655</id>
|
||||||
|
<id>1656</id>
|
||||||
|
<id>1657</id>
|
||||||
|
<id>1658</id>
|
||||||
|
<id>1660</id>
|
||||||
|
<id>1661</id>
|
||||||
|
<id>1663</id>
|
||||||
|
<id>1666</id>
|
||||||
|
<id>1667</id>
|
||||||
|
<id>1669</id>
|
||||||
|
<id>1671</id>
|
||||||
|
<id>1672</id>
|
||||||
|
<id>1673</id>
|
||||||
|
<id>1674</id>
|
||||||
|
<id>1675</id>
|
||||||
|
<id>1676</id>
|
||||||
|
<id>1678</id>
|
||||||
|
<id>1681</id>
|
||||||
|
<id>1683</id>
|
||||||
|
<id>1736</id>
|
||||||
|
<id>1749</id>
|
||||||
|
<id>1769</id>
|
||||||
|
<id>1771</id>
|
||||||
|
<id>1777</id>
|
||||||
|
<id>1781</id>
|
||||||
|
<id>1787</id>
|
||||||
|
<id>1788</id>
|
||||||
|
<id>1813</id>
|
||||||
|
<id>1815</id>
|
||||||
|
<id>1818</id>
|
||||||
|
<id>1822</id>
|
||||||
|
<id>1828</id>
|
||||||
|
<id>1961</id>
|
||||||
|
<id>1967</id>
|
||||||
|
<id>1969</id>
|
||||||
|
<id>1970</id>
|
||||||
|
<id>1971</id>
|
||||||
|
<id>1972</id>
|
||||||
|
<id>1973</id>
|
||||||
|
<id>1974</id>
|
||||||
|
<id>1978</id>
|
||||||
|
<id>2175</id>
|
||||||
|
<id>2178</id>
|
||||||
|
<id>2180</id>
|
||||||
|
<id>2182</id>
|
||||||
|
<id>2195</id>
|
||||||
|
<id>2196</id>
|
||||||
|
<id>2199</id>
|
||||||
|
<id>2206</id>
|
||||||
|
<id>2207</id>
|
||||||
|
<id>2208</id>
|
||||||
|
<id>2212</id>
|
||||||
|
<id>2213</id>
|
||||||
|
<id>2215</id>
|
||||||
|
<id>2217</id>
|
||||||
|
<id>2218</id>
|
||||||
|
<id>2219</id>
|
||||||
|
<id>2223</id>
|
||||||
|
<id>2225</id>
|
||||||
|
<id>2226</id>
|
||||||
|
<id>2228</id>
|
||||||
|
<id>2229</id>
|
||||||
|
<id>2232</id>
|
||||||
|
<id>2233</id>
|
||||||
|
<id>2235</id>
|
||||||
|
<id>2284</id>
|
||||||
|
<id>2288</id>
|
||||||
|
<id>2300</id>
|
||||||
|
<id>2302</id>
|
||||||
|
<id>2307</id>
|
||||||
|
<id>2308</id>
|
||||||
|
<id>2311</id>
|
||||||
|
<id>2314</id>
|
||||||
|
<id>2315</id>
|
||||||
|
<id>2318</id>
|
||||||
|
<id>2319</id>
|
||||||
|
<id>2320</id>
|
||||||
|
<id>2324</id>
|
||||||
|
<id>2328</id>
|
||||||
|
<id>2329</id>
|
||||||
|
<id>2330</id>
|
||||||
|
<id>2331</id>
|
||||||
|
<id>2332</id>
|
||||||
|
<id>2333</id>
|
||||||
|
<id>2335</id>
|
||||||
|
<id>2337</id>
|
||||||
|
<id>2338</id>
|
||||||
|
<id>2339</id>
|
||||||
|
<id>2344</id>
|
||||||
|
<id>2346</id>
|
||||||
|
<id>2347</id>
|
||||||
|
<id>2353</id>
|
||||||
|
<id>2354</id>
|
||||||
|
<id>2357</id>
|
||||||
|
<id>2363</id>
|
||||||
|
<id>2372</id>
|
||||||
|
<id>2389</id>
|
||||||
|
<id>2408</id>
|
||||||
|
<id>2415</id>
|
||||||
|
<id>2416</id>
|
||||||
|
<id>2423</id>
|
||||||
|
<id>2444</id>
|
||||||
|
<id>2459</id>
|
||||||
|
<id>2472</id>
|
||||||
|
<id>2474</id>
|
||||||
|
<id>2475</id>
|
||||||
|
<id>2476</id>
|
||||||
|
<id>2477</id>
|
||||||
|
<id>2478</id>
|
||||||
|
<id>2479</id>
|
||||||
|
<id>2481</id>
|
||||||
|
<id>2482</id>
|
||||||
|
<id>2483</id>
|
||||||
|
<id>2485</id>
|
||||||
|
<id>2486</id>
|
||||||
|
<id>2493</id>
|
||||||
|
<id>2494</id>
|
||||||
|
<id>2496</id>
|
||||||
|
<id>2498</id>
|
||||||
|
<id>2499</id>
|
||||||
|
<id>2500</id>
|
||||||
|
<id>2503</id>
|
||||||
|
<id>2506</id>
|
||||||
|
<id>2522</id>
|
||||||
|
<id>2526</id>
|
||||||
|
<id>2528</id>
|
||||||
|
<id>2529</id>
|
||||||
|
<id>2532</id>
|
||||||
|
<id>2533</id>
|
||||||
|
<id>2536</id>
|
||||||
|
<id>2538</id>
|
||||||
|
<id>2542</id>
|
||||||
|
<id>2548</id>
|
||||||
|
<id>2551</id>
|
||||||
|
<id>2554</id>
|
||||||
|
<id>2556</id>
|
||||||
|
<id>2557</id>
|
||||||
|
<id>2574</id>
|
||||||
|
<id>2589</id>
|
||||||
|
<id>2590</id>
|
||||||
|
<id>2591</id>
|
||||||
|
<id>2592</id>
|
||||||
|
<id>2593</id>
|
||||||
|
<id>2594</id>
|
||||||
|
<id>2596</id>
|
||||||
|
<id>2597</id>
|
||||||
|
<id>2598</id>
|
||||||
|
<id>2603</id>
|
||||||
|
<id>2604</id>
|
||||||
|
<id>2605</id>
|
||||||
|
<id>2608</id>
|
||||||
|
<id>2613</id>
|
||||||
|
<id>2614</id>
|
||||||
|
<id>2622</id>
|
||||||
|
<id>2626</id>
|
||||||
|
<id>2641</id>
|
||||||
|
<id>2643</id>
|
||||||
|
<id>2659</id>
|
||||||
|
<id>2671</id>
|
||||||
|
<id>2688</id>
|
||||||
|
<id>2689</id>
|
||||||
|
<id>2690</id>
|
||||||
|
<id>2691</id>
|
||||||
|
<id>2692</id>
|
||||||
|
<id>2693</id>
|
||||||
|
<id>2694</id>
|
||||||
|
<id>2695</id>
|
||||||
|
<id>2697</id>
|
||||||
|
<id>2699</id>
|
||||||
|
<id>2700</id>
|
||||||
|
<id>2705</id>
|
||||||
|
<id>2707</id>
|
||||||
|
<id>2708</id>
|
||||||
|
<id>2711</id>
|
||||||
|
<id>2714</id>
|
||||||
|
<id>2717</id>
|
||||||
|
<id>2718</id>
|
||||||
|
<id>2719</id>
|
||||||
|
<id>2723</id>
|
||||||
|
<id>2730</id>
|
||||||
|
<id>2731</id>
|
||||||
|
<id>2776</id>
|
||||||
|
<id>2781</id>
|
||||||
|
<id>2782</id>
|
||||||
|
<id>2783</id>
|
||||||
|
<id>2836</id>
|
||||||
|
<id>2837</id>
|
||||||
|
<id>2838</id>
|
||||||
|
<id>2839</id>
|
||||||
|
<id>2874</id>
|
||||||
|
<id>2875</id>
|
||||||
|
<id>2876</id>
|
||||||
|
<id>2884</id>
|
||||||
|
<id>2887</id>
|
||||||
|
<id>2889</id>
|
||||||
|
<id>2892</id>
|
||||||
|
<id>2893</id>
|
||||||
|
<id>2897</id>
|
||||||
|
<id>2898</id>
|
||||||
|
<id>2899</id>
|
||||||
|
<id>2937</id>
|
||||||
|
<id>2956</id>
|
||||||
|
<id>2957</id>
|
||||||
|
<id>2958</id>
|
||||||
|
<id>2959</id>
|
||||||
|
<id>2961</id>
|
||||||
|
<id>2962</id>
|
||||||
|
<id>2963</id>
|
||||||
|
<id>2966</id>
|
||||||
|
<id>2968</id>
|
||||||
|
<id>2969</id>
|
||||||
|
<id>2974</id>
|
||||||
|
<id>2983</id>
|
||||||
|
<id>2984</id>
|
||||||
|
<id>2985</id>
|
||||||
|
<id>2986</id>
|
||||||
|
<id>2988</id>
|
||||||
|
<id>2989</id>
|
||||||
|
<id>2990</id>
|
||||||
|
<id>2992</id>
|
||||||
|
<id>2993</id>
|
||||||
|
<id>2996</id>
|
||||||
|
<id>3013</id>
|
||||||
|
<id>3015</id>
|
||||||
|
<id>3018</id>
|
||||||
|
<id>3024</id>
|
||||||
|
<id>3025</id>
|
||||||
|
<id>3031</id>
|
||||||
|
<id>3032</id>
|
||||||
|
<id>3034</id>
|
||||||
|
<id>3035</id>
|
||||||
|
<id>3039</id>
|
||||||
|
<id>3041</id>
|
||||||
|
<id>3043</id>
|
||||||
|
<id>3054</id>
|
||||||
|
<id>3055</id>
|
||||||
|
<id>3056</id>
|
||||||
|
<id>3057</id>
|
||||||
|
<id>3067</id>
|
||||||
|
<id>3068</id>
|
||||||
|
<id>3081</id>
|
||||||
|
<id>3091</id>
|
||||||
|
<id>3093</id>
|
||||||
|
<id>3095</id>
|
||||||
|
<id>3101</id>
|
||||||
|
<id>3102</id>
|
||||||
|
<id>3103</id>
|
||||||
|
<id>3104</id>
|
||||||
|
<id>3108</id>
|
||||||
|
<id>3111</id>
|
||||||
|
<id>3112</id>
|
||||||
|
<id>3125</id>
|
||||||
|
<id>3126</id>
|
||||||
|
<id>3137</id>
|
||||||
|
<id>3141</id>
|
||||||
|
<id>3145</id>
|
||||||
|
<id>3150</id>
|
||||||
|
<id>3158</id>
|
||||||
|
<id>3167</id>
|
||||||
|
<id>3171</id>
|
||||||
|
<id>3172</id>
|
||||||
|
<id>3173</id>
|
||||||
|
<id>3174</id>
|
||||||
|
<id>3175</id>
|
||||||
|
</Upcoming>
|
||||||
|
</DefaultMissions>
|
133787
src/Resources/missions.xml
133787
src/Resources/missions.xml
File diff suppressed because it is too large
Load Diff
18
src/Schema/DefaultMissions.cs
Normal file
18
src/Schema/DefaultMissions.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
// NOTE: This schema is NOT used by the client
|
||||||
|
// This is a schema specific to the sodoff server
|
||||||
|
[XmlRoot(ElementName = "DefaultMissions", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class DefaultMissions
|
||||||
|
{
|
||||||
|
[XmlArray(ElementName = "Active")]
|
||||||
|
[XmlArrayItem("id")]
|
||||||
|
public int[] Active { get; set; }
|
||||||
|
|
||||||
|
[XmlArray(ElementName = "Upcoming")]
|
||||||
|
[XmlArrayItem("id")]
|
||||||
|
public int[] Upcoming { get; set; }
|
||||||
|
}
|
14
src/Schema/MissionPair.cs
Normal file
14
src/Schema/MissionPair.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "MP", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class MissionPair
|
||||||
|
{
|
||||||
|
[XmlElement(ElementName = "MID")]
|
||||||
|
public int? MissionID { get; set; }
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "VID")]
|
||||||
|
public int? VersionID { get; set; }
|
||||||
|
}
|
29
src/Schema/MissionRequestFilterV2.cs
Normal file
29
src/Schema/MissionRequestFilterV2.cs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "RequestFilter", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class MissionRequestFilterV2
|
||||||
|
{
|
||||||
|
[XmlElement(ElementName = "MGID")]
|
||||||
|
public int[] MissionGroupIDs { get; set; }
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "MP")]
|
||||||
|
public List<MissionPair> MissionPair { get; set; }
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "TID")]
|
||||||
|
public int[] TaskIDList { get; set; }
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "PID")]
|
||||||
|
public int? ProductID { get; set; }
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "S")]
|
||||||
|
public int? SearchDepth { get; set; }
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "GCM")]
|
||||||
|
public bool? GetCompletedMission { get; set; }
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "PGID")]
|
||||||
|
public int ProductGroupID;
|
||||||
|
}
|
@ -35,7 +35,8 @@ public class KeyValueService {
|
|||||||
};
|
};
|
||||||
exists = false;
|
exists = false;
|
||||||
}
|
}
|
||||||
|
if (schemaData is null || schemaData.Pairs is null)
|
||||||
|
return true;
|
||||||
// Update or create the key-value pairs
|
// Update or create the key-value pairs
|
||||||
foreach (var p in schemaData.Pairs) {
|
foreach (var p in schemaData.Pairs) {
|
||||||
if (string.IsNullOrEmpty(p.PairValue))
|
if (string.IsNullOrEmpty(p.PairValue))
|
||||||
|
@ -36,10 +36,16 @@ public class MissionService {
|
|||||||
if (completed) {
|
if (completed) {
|
||||||
Mission mission = GetMissionWithProgress(missionId, userId);
|
Mission mission = GetMissionWithProgress(missionId, userId);
|
||||||
if (AllMissionsCompleted(mission) && AllTasksCompleted(mission)) {
|
if (AllMissionsCompleted(mission) && AllTasksCompleted(mission)) {
|
||||||
|
// Get mission rewards
|
||||||
result.Add(new MissionCompletedResult {
|
result.Add(new MissionCompletedResult {
|
||||||
MissionID = missionId,
|
MissionID = missionId,
|
||||||
Rewards = mission.Rewards.ToArray()
|
Rewards = mission.Rewards.ToArray()
|
||||||
});
|
});
|
||||||
|
// Update mission from active to completed
|
||||||
|
MissionState? missionState = ctx.Vikings.FirstOrDefault(x => x.Id == userId)!.MissionStates.FirstOrDefault(x => x.MissionId == missionId);
|
||||||
|
if (missionState != null && missionState.MissionStatus == MissionStatus.Active)
|
||||||
|
missionState.MissionStatus = MissionStatus.Completed;
|
||||||
|
ctx.SaveChanges();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -75,6 +81,23 @@ public class MissionService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetUpMissions(Viking viking) {
|
||||||
|
viking.MissionStates = new List<MissionState>();
|
||||||
|
foreach (int m in missionStore.GetActiveMissions()) {
|
||||||
|
viking.MissionStates.Add(new MissionState {
|
||||||
|
MissionId = m,
|
||||||
|
MissionStatus = MissionStatus.Active
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (int m in missionStore.GetUpcomingMissions()) {
|
||||||
|
viking.MissionStates.Add(new MissionState {
|
||||||
|
MissionId = m,
|
||||||
|
MissionStatus = MissionStatus.Upcoming
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void SetTaskProgressDB(int missionId, int taskId, string userId, bool completed, string xmlPayload) {
|
private void SetTaskProgressDB(int missionId, int taskId, string userId, bool completed, string xmlPayload) {
|
||||||
Model.TaskStatus? status = ctx.TaskStatuses.FirstOrDefault(task => task.Id == taskId && task.MissionId == missionId && task.VikingId == userId);
|
Model.TaskStatus? status = ctx.TaskStatuses.FirstOrDefault(task => task.Id == taskId && task.MissionId == missionId && task.VikingId == userId);
|
||||||
|
|
||||||
|
@ -6,18 +6,31 @@ namespace sodoff.Services;
|
|||||||
public class MissionStoreSingleton {
|
public class MissionStoreSingleton {
|
||||||
|
|
||||||
private Dictionary<int, Mission> missions = new();
|
private Dictionary<int, Mission> missions = new();
|
||||||
|
private int[] activeMissions;
|
||||||
|
private int[] upcomingMissions;
|
||||||
|
|
||||||
public MissionStoreSingleton() {
|
public MissionStoreSingleton() {
|
||||||
ServerMissionArray missionArray = XmlUtil.DeserializeXml<ServerMissionArray>(XmlUtil.ReadResourceXmlString("missions"));
|
ServerMissionArray missionArray = XmlUtil.DeserializeXml<ServerMissionArray>(XmlUtil.ReadResourceXmlString("missions"));
|
||||||
|
DefaultMissions defaultMissions = XmlUtil.DeserializeXml<DefaultMissions>(XmlUtil.ReadResourceXmlString("defaultmissionlist"));
|
||||||
foreach (var mission in missionArray.MissionDataArray) {
|
foreach (var mission in missionArray.MissionDataArray) {
|
||||||
SetUpRecursive(mission);
|
SetUpRecursive(mission);
|
||||||
}
|
}
|
||||||
|
activeMissions = defaultMissions.Active;
|
||||||
|
upcomingMissions = defaultMissions.Upcoming;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Mission GetMission(int missionID) {
|
public Mission GetMission(int missionID) {
|
||||||
return DeepCopy(missions[missionID]);
|
return DeepCopy(missions[missionID]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int[] GetActiveMissions() {
|
||||||
|
return activeMissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] GetUpcomingMissions() {
|
||||||
|
return upcomingMissions;
|
||||||
|
}
|
||||||
|
|
||||||
private void SetUpRecursive(Mission mission) {
|
private void SetUpRecursive(Mission mission) {
|
||||||
missions.Add(mission.MissionID, mission);
|
missions.Add(mission.MissionID, mission);
|
||||||
foreach (var innerMission in mission.Missions) {
|
foreach (var innerMission in mission.Missions) {
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<None Remove="Resources\rewardmultiplier.xml" />
|
<None Remove="Resources\rewardmultiplier.xml" />
|
||||||
<None Remove="Resources\store.xml" />
|
<None Remove="Resources\store.xml" />
|
||||||
<None Remove="Resources\allranks.xml" />
|
<None Remove="Resources\allranks.xml" />
|
||||||
|
<None Remove="Resources\defaultmissionlist.xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Update="Resources\childlist.xml">
|
<None Update="Resources\childlist.xml">
|
||||||
@ -57,5 +58,8 @@
|
|||||||
<EmbeddedResource Include="Resources\missions.xml">
|
<EmbeddedResource Include="Resources\missions.xml">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Resources\defaultmissionlist.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user