forked from SoDOff-Project/sodoff
mockup for the tutorial mission
This commit is contained in:
parent
8259abb447
commit
2c195832f5
@ -4,7 +4,7 @@ import mitmproxy.http
|
|||||||
|
|
||||||
def routable(path):
|
def routable(path):
|
||||||
methods = ['GetRules', 'LoginParent', 'RegisterParent', 'GetSubscriptionInfo', 'GetUserInfoByApiToken', 'IsValidApiToken_V2', 'ValidateName', 'GetDefaultNameSuggestion', 'RegisterChild', 'GetProfileByUserId', 'LoginChild', 'GetUserProfileByUserID', 'GetKeyValuePair', 'SetKeyValuePair', 'GetKeyValuePairByUserID', 'SetKeyValuePairByUserID', 'GetUserProfile', 'GetQuestions', 'GetCommonInventory',
|
methods = ['GetRules', 'LoginParent', 'RegisterParent', 'GetSubscriptionInfo', 'GetUserInfoByApiToken', 'IsValidApiToken_V2', 'ValidateName', 'GetDefaultNameSuggestion', 'RegisterChild', 'GetProfileByUserId', 'LoginChild', 'GetUserProfileByUserID', 'GetKeyValuePair', 'SetKeyValuePair', 'GetKeyValuePairByUserID', 'SetKeyValuePairByUserID', 'GetUserProfile', 'GetQuestions', 'GetCommonInventory',
|
||||||
'GetAuthoritativeTime', 'SetAvatar', 'GetAllActivePetsByuserId', 'GetPetAchievementsByUserID', 'GetDetailedChildList', 'GetStore', 'GetAllRanks']
|
'GetAuthoritativeTime', 'SetAvatar', 'GetAllActivePetsByuserId', 'GetPetAchievementsByUserID', 'GetDetailedChildList', 'GetStore', 'GetAllRanks', 'GetUserUpcomingMissionState', 'GetUserActiveMissionState', 'GetUserCompletedMissionState', 'SetTaskState']
|
||||||
for method in methods:
|
for method in methods:
|
||||||
if method in path:
|
if method in path:
|
||||||
return True
|
return True
|
||||||
|
@ -8,7 +8,7 @@ using System.Text;
|
|||||||
namespace sodoff.Attributes;
|
namespace sodoff.Attributes;
|
||||||
public class SignResponse : Attribute, IAsyncResultFilter {
|
public class SignResponse : Attribute, IAsyncResultFilter {
|
||||||
const string key = "11A0CC5A-C4DF-4A0E-931C-09A44C9966AE";
|
const string key = "11A0CC5A-C4DF-4A0E-931C-09A44C9966AE";
|
||||||
public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) {
|
public async System.Threading.Tasks.Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) {
|
||||||
var originalBodyStream = context.HttpContext.Response.Body;
|
var originalBodyStream = context.HttpContext.Response.Body;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using sodoff.Model;
|
using sodoff.Model;
|
||||||
|
using sodoff.Util;
|
||||||
|
|
||||||
namespace sodoff.Controllers.Common;
|
namespace sodoff.Controllers.Common;
|
||||||
public class AchievementController : Controller {
|
public class AchievementController : Controller {
|
||||||
@ -24,13 +25,6 @@ public class AchievementController : Controller {
|
|||||||
[Route("AchievementWebService.asmx/GetAllRanks")]
|
[Route("AchievementWebService.asmx/GetAllRanks")]
|
||||||
public IActionResult GetAllRanks() {
|
public IActionResult GetAllRanks() {
|
||||||
// TODO, this is a placeholder
|
// TODO, this is a placeholder
|
||||||
var assembly = Assembly.GetExecutingAssembly();
|
return Ok(XmlUtil.ReadResourceXmlString("allranks"));
|
||||||
string resourceName = assembly.GetManifestResourceNames().Single(str => str.EndsWith("allranks.xml"));
|
|
||||||
|
|
||||||
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
|
|
||||||
using (StreamReader reader = new StreamReader(stream)) {
|
|
||||||
string result = reader.ReadToEnd();
|
|
||||||
return Ok(result);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -202,4 +202,55 @@ public class ContentController : Controller {
|
|||||||
// TODO, this is a placeholder
|
// TODO, this is a placeholder
|
||||||
return Ok("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ArrayOfRaisedPetData xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\" />");
|
return Ok("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ArrayOfRaisedPetData xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\" />");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Produces("application/xml")]
|
||||||
|
[Route("V2/ContentWebService.asmx/GetUserUpcomingMissionState")]
|
||||||
|
public IActionResult GetUserUpcomingMissionState([FromForm] string apiToken, [FromForm] string userId) {
|
||||||
|
Session? session = ctx.Sessions.FirstOrDefault(s => s.ApiToken == apiToken);
|
||||||
|
UserMissionStateResult result = new UserMissionStateResult();
|
||||||
|
|
||||||
|
if (session is null)
|
||||||
|
return Ok(result);
|
||||||
|
|
||||||
|
result.UserID = Guid.Parse(session.VikingId);
|
||||||
|
return Ok(result); // TODO: placeholder, returns no upcoming missions
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Produces("application/xml")]
|
||||||
|
[Route("V2/ContentWebService.asmx/GetUserActiveMissionState")]
|
||||||
|
public IActionResult GetUserActiveMissionState([FromForm] string apiToken, [FromForm] string userId) {
|
||||||
|
Session? session = ctx.Sessions.FirstOrDefault(s => s.ApiToken == apiToken);
|
||||||
|
UserMissionStateResult result = new UserMissionStateResult { Missions = new List<Mission>() };
|
||||||
|
result.Missions.Add(XmlUtil.DeserializeXml<Mission>(XmlUtil.ReadResourceXmlString("tutorialmission")));
|
||||||
|
|
||||||
|
if (session is null)
|
||||||
|
return Ok("error");
|
||||||
|
|
||||||
|
result.UserID = Guid.Parse(session.VikingId);
|
||||||
|
return Ok(result); // TODO: placeholder, returns the tutorial
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Produces("application/xml")]
|
||||||
|
[Route("V2/ContentWebService.asmx/GetUserCompletedMissionState")]
|
||||||
|
public IActionResult GetUserCompletedMissionState([FromForm] string apiToken, [FromForm] string userId) {
|
||||||
|
Session? session = ctx.Sessions.FirstOrDefault(s => s.ApiToken == apiToken);
|
||||||
|
UserMissionStateResult result = new UserMissionStateResult();
|
||||||
|
|
||||||
|
if (session is null)
|
||||||
|
return Ok(result);
|
||||||
|
|
||||||
|
result.UserID = Guid.Parse(session.VikingId);
|
||||||
|
return Ok(result); // TODO: placeholder, returns no completed missions
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Produces("application/xml")]
|
||||||
|
[Route("V2/ContentWebService.asmx/SetTaskState")]
|
||||||
|
public IActionResult SetTaskState([FromForm] string apiToken, [FromForm] int missionId, [FromForm] int taskId, [FromForm] bool completed) {
|
||||||
|
// TODO
|
||||||
|
return Ok(new SetTaskStateResult { Success = true, Status = SetTaskStateStatus.TaskCanBeDone });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
479
src/Resources/tutorialmission.xml
Normal file
479
src/Resources/tutorialmission.xml
Normal file
@ -0,0 +1,479 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Mission xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<RPT>false</RPT>
|
||||||
|
<I>999</I>
|
||||||
|
<N>Quest 1</N>
|
||||||
|
<PID>51</PID>
|
||||||
|
<G>3</G>
|
||||||
|
<P xsi:nil="true" />
|
||||||
|
<S><Data><Setup><Scene>HubFTUEDO</Scene><Asset>RS_DATA/PfGrpQMMO_Off.unity3d/PfGrpQMMO_Off</Asset><Recursive>false</Recursive><Persistent>false</Persistent></Setup><Setup><Scene>HubSchoolDO</Scene><Asset>RS_DATA/PfGrpFTUE2020T15.unity3d/PfGrpFTUE2020T15</Asset><Recursive>false</Recursive><Persistent>true</Persistent></Setup><Repeat>0</Repeat><Hidden>0</Hidden><Reward><Asset>PfUiMissionRewardDBDO</Asset></Reward><Random>0</Random><Title><Text>New Student</Text><ID>922059</ID></Title></Data></S>
|
||||||
|
<A>false</A>
|
||||||
|
<C>0</C>
|
||||||
|
<MR>
|
||||||
|
<Prerequisites>
|
||||||
|
<Type>2</Type>
|
||||||
|
<Value>False</Value>
|
||||||
|
<ClientRule>false</ClientRule>
|
||||||
|
</Prerequisites>
|
||||||
|
<Prerequisites>
|
||||||
|
<Type>1</Type>
|
||||||
|
<Value>False</Value>
|
||||||
|
<ClientRule>false</ClientRule>
|
||||||
|
</Prerequisites>
|
||||||
|
<Criteria>
|
||||||
|
<Type>all</Type>
|
||||||
|
<Ordered>true</Ordered>
|
||||||
|
<Min>4</Min>
|
||||||
|
<Repeat>1</Repeat>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>5930</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>5931</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>5932</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>2</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>2880</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>2</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>2881</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>5935</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>5936</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>5937</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>5938</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>2</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>2882</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>5940</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>5941</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>5942</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>2</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>2883</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>5944</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>999</MissionID>
|
||||||
|
<ID>6619</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
</Criteria>
|
||||||
|
</MR>
|
||||||
|
<V>8</V>
|
||||||
|
<AID>201320</AID>
|
||||||
|
<AAID>0</AAID>
|
||||||
|
<M>
|
||||||
|
<RPT>false</RPT>
|
||||||
|
<I>2880</I>
|
||||||
|
<N>FTUE2020-04</N>
|
||||||
|
<PID>51</PID>
|
||||||
|
<G>3</G>
|
||||||
|
<P>999</P>
|
||||||
|
<S><Data><Repeat>0</Repeat><Hidden>0</Hidden><Reward><Asset /></Reward><Random>0</Random><Title><Text>{{Input}} on cage</Text><ID>939800</ID></Title></Data></S>
|
||||||
|
<A>false</A>
|
||||||
|
<C>0</C>
|
||||||
|
<MR>
|
||||||
|
<Prerequisites>
|
||||||
|
<Type>2</Type>
|
||||||
|
<Value>False</Value>
|
||||||
|
<ClientRule>false</ClientRule>
|
||||||
|
</Prerequisites>
|
||||||
|
<Prerequisites>
|
||||||
|
<Type>1</Type>
|
||||||
|
<Value>False</Value>
|
||||||
|
<ClientRule>false</ClientRule>
|
||||||
|
</Prerequisites>
|
||||||
|
<Criteria>
|
||||||
|
<Type>all</Type>
|
||||||
|
<Ordered>true</Ordered>
|
||||||
|
<Min>4</Min>
|
||||||
|
<Repeat>1</Repeat>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>2880</MissionID>
|
||||||
|
<ID>5933</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
</Criteria>
|
||||||
|
</MR>
|
||||||
|
<V>8</V>
|
||||||
|
<AID>0</AID>
|
||||||
|
<AAID>0</AAID>
|
||||||
|
<Task>
|
||||||
|
<I>5933</I>
|
||||||
|
<N>FTUE2020-04: Click cage</N>
|
||||||
|
<S><Data><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>Be careful. Even baby dragons can be dangerous when frightened. Step forward and {{input}} on the cage door to open it. After that, just trust your instincts!@@Hey, don't worry, you got this.</Text><ID>939805</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><End><Type>CutScene</Type><Asset>RS_DATA/PfGrpFTUE2020T04CS.unity3d/PfGrpFTUE2020T04CS</Asset><ItemID>0</ItemID><Priority>0</Priority></End><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>Type</Key><Value>DragonSelect</Value></Pair><Pair><Key>NPC</Key><Value>PfDWFTUECage</Value></Pair><Pair><Key>Asset</Key><Value>RS_DATA/PfUiFTUEDragonSelection.unity3d/PfUiFTUEDragonSelection</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Meet</Type><Title><Text>{{Input}} on the Dragon Cage</Text><ID>939804</ID></Title><Desc><Text>{{Input}} on the Dragon Cage</Text><ID>939804</ID></Desc><AutoComplete><Pair><Key>RaisedPetStage</Key><Value>BABY</Value></Pair></AutoComplete></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
</M>
|
||||||
|
<M>
|
||||||
|
<RPT>false</RPT>
|
||||||
|
<I>2881</I>
|
||||||
|
<N>FTUE2020-05</N>
|
||||||
|
<PID>51</PID>
|
||||||
|
<G>3</G>
|
||||||
|
<P>999</P>
|
||||||
|
<S><Data><Repeat>0</Repeat><Hidden>0</Hidden><Reward><Asset>PfUiMissionRewardDBDO</Asset></Reward><Random>0</Random><Title><Text>Look for a way out of the cave</Text><ID>939801</ID></Title></Data></S>
|
||||||
|
<A>false</A>
|
||||||
|
<C>0</C>
|
||||||
|
<MR>
|
||||||
|
<Prerequisites>
|
||||||
|
<Type>2</Type>
|
||||||
|
<Value>False</Value>
|
||||||
|
<ClientRule>false</ClientRule>
|
||||||
|
</Prerequisites>
|
||||||
|
<Prerequisites>
|
||||||
|
<Type>1</Type>
|
||||||
|
<Value>False</Value>
|
||||||
|
<ClientRule>false</ClientRule>
|
||||||
|
</Prerequisites>
|
||||||
|
<Criteria>
|
||||||
|
<Type>all</Type>
|
||||||
|
<Ordered>true</Ordered>
|
||||||
|
<Min>4</Min>
|
||||||
|
<Repeat>1</Repeat>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>2881</MissionID>
|
||||||
|
<ID>5934</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
</Criteria>
|
||||||
|
</MR>
|
||||||
|
<V>8</V>
|
||||||
|
<AID>206555</AID>
|
||||||
|
<AAID>0</AAID>
|
||||||
|
<Task>
|
||||||
|
<I>5934</I>
|
||||||
|
<N>FTUE2020-05: Look for a way out</N>
|
||||||
|
<S><Data><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>Whoa, that was unexpected. Who would have thought you two would bond so quickly?@@You’re a natural at this! Well, mission accomplished!@@Now, what do you say we find a way out of here?</Text><ID>939807</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><End><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>This must be the heaviest part of the cave-in. With all these boulders piled up, this might be a dead end for us.@@{{dragon name}} is only a Tiny Tooth, so their dragon fire isn't quite enough to shatter that rock. But they are very close, and we can help them to grow.</Text><ID>939808</ID><ItemID>0</ItemID><Priority>0</Priority></End><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>Name</Key><Value>PfMarker_CaveIn</Value></Pair><Pair><Key>Range</Key><Value>8</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Visit</Type><Title><Text>Look for a way out of the Cave</Text><ID>939801</ID></Title><Desc><Text>Look for a way out of the Cave</Text><ID>939801</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<AR>
|
||||||
|
<a>1</a>
|
||||||
|
<p>6</p>
|
||||||
|
<i xsi:nil="true" />
|
||||||
|
<t>1</t>
|
||||||
|
<r>8399</r>
|
||||||
|
<ii>10996</ii>
|
||||||
|
<ai>206555</ai>
|
||||||
|
<amulti>true</amulti>
|
||||||
|
<mina>1</mina>
|
||||||
|
<maxa>1</maxa>
|
||||||
|
<d xsi:nil="true" />
|
||||||
|
<cid>0</cid>
|
||||||
|
<ui xsi:nil="true" />
|
||||||
|
<atinfoid>0</atinfoid>
|
||||||
|
<atid>0</atid>
|
||||||
|
</AR>
|
||||||
|
</M>
|
||||||
|
<M>
|
||||||
|
<RPT>false</RPT>
|
||||||
|
<I>2882</I>
|
||||||
|
<N>FTUE2020-10</N>
|
||||||
|
<PID>51</PID>
|
||||||
|
<G>3</G>
|
||||||
|
<P>999</P>
|
||||||
|
<S><Data><Repeat>0</Repeat><Hidden>0</Hidden><Reward><Asset /></Reward><Random>0</Random><Title><Text>Light fire</Text><ID>939802</ID></Title></Data></S>
|
||||||
|
<A>false</A>
|
||||||
|
<C>0</C>
|
||||||
|
<MR>
|
||||||
|
<Prerequisites>
|
||||||
|
<Type>2</Type>
|
||||||
|
<Value>False</Value>
|
||||||
|
<ClientRule>false</ClientRule>
|
||||||
|
</Prerequisites>
|
||||||
|
<Prerequisites>
|
||||||
|
<Type>1</Type>
|
||||||
|
<Value>False</Value>
|
||||||
|
<ClientRule>false</ClientRule>
|
||||||
|
</Prerequisites>
|
||||||
|
<Criteria>
|
||||||
|
<Type>all</Type>
|
||||||
|
<Ordered>true</Ordered>
|
||||||
|
<Min>4</Min>
|
||||||
|
<Repeat>1</Repeat>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>2882</MissionID>
|
||||||
|
<ID>5939</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
</Criteria>
|
||||||
|
</MR>
|
||||||
|
<V>8</V>
|
||||||
|
<AID>206242</AID>
|
||||||
|
<AAID>0</AAID>
|
||||||
|
<Task>
|
||||||
|
<I>5939</I>
|
||||||
|
<N>FTUE2020-10: Light fire</N>
|
||||||
|
<S><Data><Setup><Scene>HubFTUEDO</Scene><Asset>PfDWHiccup</Asset><Location>PfMarker_HiccupFire</Location><Recursive>false</Recursive><Persistent>false</Persistent></Setup><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>There’s a good spot for a signal fire. Would you ask {{dragon name}} to shoot it?</Text><ID>939810</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><End><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>That’s not going to be enough; the fire is just too small...</Text><ID>939811</ID><ItemID>0</ItemID><Priority>0</Priority></End><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>Location</Key><Value>PfMarker_FireSpot</Value></Pair><Pair><Key>Name</Key><Value>LightFire</Value></Pair><Pair><Key>ItemName</Key><Value>PfDragonLitFirePit</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Action</Type><Title><Text>{{Input}} on the Fire Pit to Light a Signal Fire</Text><ID>942392</ID></Title><Desc><Text>{{Input}} on the Fire Pit to Light a Signal Fire</Text><ID>942392</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
</M>
|
||||||
|
<M>
|
||||||
|
<RPT>false</RPT>
|
||||||
|
<I>2883</I>
|
||||||
|
<N>FTUE2020-14</N>
|
||||||
|
<PID>51</PID>
|
||||||
|
<G>3</G>
|
||||||
|
<P>999</P>
|
||||||
|
<S><Data><Repeat>0</Repeat><Hidden>0</Hidden><Reward><Asset>PfUiMissionRewardDBDO</Asset></Reward><Random>0</Random><Title><Text>Follow Hiccup</Text><ID>939803</ID></Title></Data></S>
|
||||||
|
<A>false</A>
|
||||||
|
<C>0</C>
|
||||||
|
<MR>
|
||||||
|
<Prerequisites>
|
||||||
|
<Type>2</Type>
|
||||||
|
<Value>False</Value>
|
||||||
|
<ClientRule>false</ClientRule>
|
||||||
|
</Prerequisites>
|
||||||
|
<Prerequisites>
|
||||||
|
<Type>1</Type>
|
||||||
|
<Value>False</Value>
|
||||||
|
<ClientRule>false</ClientRule>
|
||||||
|
</Prerequisites>
|
||||||
|
<Criteria>
|
||||||
|
<Type>all</Type>
|
||||||
|
<Ordered>true</Ordered>
|
||||||
|
<Min>4</Min>
|
||||||
|
<Repeat>1</Repeat>
|
||||||
|
<RuleItems>
|
||||||
|
<Type>1</Type>
|
||||||
|
<MissionID>2883</MissionID>
|
||||||
|
<ID>5943</ID>
|
||||||
|
<Complete>0</Complete>
|
||||||
|
</RuleItems>
|
||||||
|
</Criteria>
|
||||||
|
</MR>
|
||||||
|
<V>8</V>
|
||||||
|
<AID>207960</AID>
|
||||||
|
<AAID>0</AAID>
|
||||||
|
<Task>
|
||||||
|
<I>5943</I>
|
||||||
|
<N>FTUE2020-14: Follow Hiccup</N>
|
||||||
|
<S><Data><Setup><Scene>HubFTUEDO</Scene><Asset>PfDWToothlessAlphaHiccupRiderPortal</Asset><Location>PfMarker_HiccupAndToothless</Location><Recursive>false</Recursive><Persistent>false</Persistent></Setup><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>Now that you've got the hang of this, follow me and Toothless! Come on, I want to show you something cool!</Text><ID>939813</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><Objective><Pair><Key>Scene</Key><Value>HubSchoolDO</Value></Pair><Pair><Key>Location</Key><Value>PfMarker_LoadSchool</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Visit</Type><Title><Text>Follow Hiccup and Toothless</Text><ID>942393</ID></Title><Desc><Text>Follow Hiccup and Toothless</Text><ID>942393</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<AR>
|
||||||
|
<a>1</a>
|
||||||
|
<p>6</p>
|
||||||
|
<i xsi:nil="true" />
|
||||||
|
<t>1</t>
|
||||||
|
<r>10897</r>
|
||||||
|
<ii>20882</ii>
|
||||||
|
<ai>207960</ai>
|
||||||
|
<amulti>true</amulti>
|
||||||
|
<mina>1</mina>
|
||||||
|
<maxa>1</maxa>
|
||||||
|
<d xsi:nil="true" />
|
||||||
|
<cid>0</cid>
|
||||||
|
<ui xsi:nil="true" />
|
||||||
|
<atinfoid>0</atinfoid>
|
||||||
|
<atid>0</atid>
|
||||||
|
</AR>
|
||||||
|
</M>
|
||||||
|
<Task>
|
||||||
|
<I>5930</I>
|
||||||
|
<N>FTUE2020-01: Talk to Hiccup</N>
|
||||||
|
<S><Data><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>Hey, are you all right, {{Name}}? That cave collapse was no joke. Give me a hand, will you? Use the movement controls to walk here and {{input}} on me.</Text><ID>939815</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><End><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>I'm glad you're okay. I guess our investigation about potential Dragon Hunters lurking in these caves paid off, it seems they had a camp right under our feet this entire time.</Text><ID>939816</ID><ItemID>0</ItemID><Priority>0</Priority></End><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>NPC</Key><Value>PfDWHiccup</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Meet</Type><Title><Text>Walk forward and {{input}} on Hiccup</Text><ID>929442</ID></Title></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<Task>
|
||||||
|
<I>5931</I>
|
||||||
|
<N>FTUE2020-02: Find axe</N>
|
||||||
|
<S><Data><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>I’d like to meet up with Toothless again, but there are a few cages here that might have dragons in them.@@We can’t just leave them. I’ll start opening this other one, do you think you could handle the one on your right?@@That lock looks rusted, though... Maybe there’s an axe somewhere around here...</Text><ID>939818</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>Name</Key><Value>PfCollectDWAxe</Value></Pair><Pair><Key>Quantity</Key><Value>1</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Collect</Type><Title><Text>Find the Axe in the Cave</Text><ID>939817</ID></Title><Desc><Text>Find the Axe in the Cave</Text><ID>939817</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<Task>
|
||||||
|
<I>5932</I>
|
||||||
|
<N>FTUE2020-03: Chop padlock</N>
|
||||||
|
<S><Data><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>Perfect! That axe looks strong enough. I'm sure it can chop the padlock off the dragon cage without a problem!</Text><ID>939820</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><End><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>All right, that did the trick!</Text><ID>939821</ID><ItemID>0</ItemID><Priority>0</Priority></End><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>Location</Key><Value>ChoppableCage</Value></Pair><Pair><Key>Name</Key><Value>Chop</Value></Pair><Pair><Key>ItemName</Key><Value>PfDragonCageChop</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Action</Type><Title><Text>Chop the Padlock on the Dragon Cage</Text><ID>939819</ID></Title><Desc><Text>Chop the Padlock on the Dragon Cage</Text><ID>939819</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<Task>
|
||||||
|
<I>5935</I>
|
||||||
|
<N>FTUE2020-06: Age Up</N>
|
||||||
|
<S><Data><Setup><Scene>HubFTUEDO</Scene><Asset>PfDWHiccup</Asset><Location>PfMarker_HiccupCaveIn</Location><Recursive>false</Recursive><Persistent>false</Persistent></Setup><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>This will allow us to take a dragon straight to Broad Wing Stage! I'll show you how.</Text><ID>939823</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>Name</Key><Value>AgeUp</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Action</Type><Title><Text>Age Up {{dragon name}}</Text><ID>942394</ID></Title><Desc><Text>Age Up {{dragon name}}</Text><ID>942394</ID></Desc><AutoComplete><Pair><Key>RaisedPetStage</Key><Value>ADULT</Value></Pair></AutoComplete></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<Task>
|
||||||
|
<I>5936</I>
|
||||||
|
<N>FTUE2020-07: Shoot</N>
|
||||||
|
<S><Data><Setup><Scene>HubFTUEDO</Scene><Asset>PfDWHiccup</Asset><Location>PfMarker_HiccupCaveIn</Location><Recursive>false</Recursive><Persistent>false</Persistent></Setup><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>All right, let's try this now! Look for a weak spot in the rocks, then have {{dragon name}} shoot some fireballs!@@{{Input}} on the cave-in and select the [c][3eebff]Fire[/c][ffffff] button.</Text><ID>939825</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>Location</Key><Value>PfCaveInTarget</Value></Pair><Pair><Key>Name</Key><Value>LightFire</Value></Pair><Pair><Key>ItemName</Key><Value>PfCaveInTarget</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Action</Type><Title><Text>{{Input}} on the Cave-In</Text><ID>942395</ID></Title><Desc><Text>{{Input}} on the Cave-In</Text><ID>942395</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<Task>
|
||||||
|
<I>5937</I>
|
||||||
|
<N>FTUE2020-08: Collect Box</N>
|
||||||
|
<S><Data><Setup><Scene>HubFTUEDO</Scene><Asset>PfDWHiccup</Asset><Location>PfMarker_HiccupCaveIn</Location><Recursive>false</Recursive><Persistent>false</Persistent></Setup><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>That was perfect!</Text><ID>939828</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>Wait... What's that? Is that a chest?</Text><ID>939829</ID><ItemID>0</ItemID><Priority>1</Priority></Offer><End><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>A box of dragon eggs...@@Those Dragon Hunters are getting bolder than we expected.</Text><ID>941113</ID><ItemID>0</ItemID><Priority>0</Priority></End><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>Location</Key><Value>PfCollectDWOpenArcticChest</Value></Pair><Pair><Key>Name</Key><Value>PfCollectDWOpenArcticChest</Value></Pair><Pair><Key>Quantity</Key><Value>1</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Collect</Type><Title><Text>Pick up the Chest</Text><ID>939827</ID></Title><Desc><Text>Pick up the Chest</Text><ID>939827</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<Task>
|
||||||
|
<I>5938</I>
|
||||||
|
<N>FTUE2020-09: Exit cave</N>
|
||||||
|
<S><Data><Setup><Scene>HubFTUEDO</Scene><Asset>PfDWHiccup</Asset><Location>PfMarker_HiccupChest</Location><Recursive>false</Recursive><Persistent>false</Persistent></Setup><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>Well, one problem at a time. {{Name}}, can you follow the path of the cave and figure out a way to set up a signal? @@My friends should be nearby, they'll be able to help us out!</Text><ID>939831</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>Name</Key><Value>PfMarker_CaveExit</Value></Pair><Pair><Key>Range</Key><Value>3</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Visit</Type><Title><Text>Leave the Cave</Text><ID>939830</ID></Title><Desc><Text>Leave the Cave</Text><ID>939830</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<Task>
|
||||||
|
<I>5940</I>
|
||||||
|
<N>FTUE2020-11: Collect Leaves</N>
|
||||||
|
<S><Data><Setup><Scene>HubFTUEDO</Scene><Asset>PfDWHiccup</Asset><Location>PfMarker_HiccupFire</Location><Recursive>false</Recursive><Persistent>false</Persistent></Setup><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>I’ll get some more wood stacked; can you grab some green leaves to help make this fire more smokey?</Text><ID>939833</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><End><Type>CutScene</Type><Asset>RS_DATA/PfGrpFTUE2020T11CS.unity3d/PfGrpFTUE2020T11CS</Asset><ItemID>0</ItemID><Priority>0</Priority></End><End><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWAstrid</NPC><Text>There you are! Glad to see you're safe. @@Oh? I don’t think we’ve met, have we?@@{{Name}}? It's great to meet you, I’m Astrid. Seems that Hiccup's gotten himself in over his head again, huh? @@He's lucky he has good people like you around to help him out. And that’s one incredible dragon you’ve found, wow!</Text><ID>941114</ID><ItemID>0</ItemID><Priority>1</Priority></End><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>Name</Key><Value>PfCollectFTUELeaf</Value></Pair><Pair><Key>Quantity</Key><Value>5</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Collect</Type><Title><Text>Collect Green Leaves</Text><ID>942396</ID></Title><Desc><Text>Collect Green Leaves</Text><ID>942396</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<Task>
|
||||||
|
<I>5941</I>
|
||||||
|
<N>FTUE2020-12: Mount</N>
|
||||||
|
<S><Data><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>{{Name}} bonded with {{dragon name}} right away, you should’ve seen it, Astrid. I bet they’ll be flying together in no time. Speaking of which...@@{{Name}} let’s do a quick flying lesson. I’ll show you the ropes!@@First, {{input}} on the [c][3eebff]Mount[/c][ffffff] button to climb aboard your dragon.</Text><ID>939835</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><Objective><Pair><Key>Name</Key><Value>MountDragon</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Action</Type><Title><Text>Mount {{dragon name}}</Text><ID>939834</ID></Title><Desc><Text>Mount {{dragon name}}</Text><ID>939834</ID></Desc><AutoComplete><Pair><Key>Mounted</Key><Value>true</Value></Pair></AutoComplete></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<Task>
|
||||||
|
<I>5942</I>
|
||||||
|
<N>FTUE2020-13: Fly through rings</N>
|
||||||
|
<S><Data><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>Alright! {{dragon name}} is ready to go. Now, you just have to learn how to fly! Why don't you get used to the controls and soar through these rings?@@{{Input}} on the [c][3eebff]Jump[/c][ffffff] button [c][3eebff]twice[/c][ffffff] to get up into the air and we can go from there.</Text><ID>939837</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><End><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>You're a natural!</Text><ID>905008</ID><ItemID>0</ItemID><Priority>0</Priority></End><Objective><Pair><Key>Scene</Key><Value>HubFTUEDO</Value></Pair><Pair><Key>Location</Key><Value>PfDWToothlessAlphaGuide</Value></Pair><Pair><Key>Name</Key><Value>PfCollectRing</Value></Pair><Pair><Key>Quantity</Key><Value>5</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Collect</Type><Title><Text>Fly through the Rings</Text><ID>938870</ID></Title><Desc><Text>Fly through the Rings</Text><ID>938870</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<Task>
|
||||||
|
<I>5944</I>
|
||||||
|
<N>FTUE2020-15: Deliver Headmaster</N>
|
||||||
|
<S><Data><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHiccup</NPC><Text>Welcome to the School of Dragons! I have a feeling you'll fit right in.@@Can you give the box of dragon eggs that you found to the Headmaster of the School? You can't miss him – he's the stout one with all the hair!</Text><ID>939840</ID><ItemID>0</ItemID><Priority>1</Priority></Offer><Offer><Type>CutScene</Type><Asset>RS_DATA/PfGrpFTUE2020T14CS.unity3d/PfGrpFTUE2020T14CS</Asset><ItemID>0</ItemID><Priority>0</Priority></Offer><End><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHeadmaster</NPC><Text>You come highly recommended from the Chieftain of Berk himself. Welcome, {{Name}}. So, are you ready to learn how to become the Ultimate Dragon Trainer?</Text><ID>939841</ID><ItemID>0</ItemID><Priority>0</Priority></End><Objective><Pair><Key>Scene</Key><Value>HubSchoolDO</Value></Pair><Pair><Key>NPC</Key><Value>PfDWHeadmaster</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Meet</Type><Title><Text>Deliver the Dragon Eggs to the Headmaster</Text><ID>942397</ID></Title><Desc><Text>Deliver the Dragon Eggs to the Headmaster</Text><ID>942397</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<Task>
|
||||||
|
<I>6619</I>
|
||||||
|
<N>FTUE2020-16: Explain Branch Quest</N>
|
||||||
|
<S><Data><Offer><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHeadmaster</NPC><Text>Now {{Name}}, you can learn about the many things we have to offer here at the School through our [c][3eebff]Branch Quests[/c][ffffff]</Text><ID>941799</ID><ItemID>0</ItemID><Priority>0</Priority></Offer><End><Type>Popup</Type><Asset>PfUiMissionActionDBDO</Asset><NPC>PfDWHeadmaster</NPC><Text>Feel free to also explore the campus, you might even encounter other students. @@We are happy to have you here with us!</Text><ID>941800</ID><ItemID>0</ItemID><Priority>0</Priority></End><Objective><Pair><Key>Scene</Key><Value>HubSchoolDO</Value></Pair><Pair><Key>Name</Key><Value>CompleteTutorial</Value></Pair><Pair><Key>ItemName</Key><Value>BranchUiTutorial</Value></Pair><Pair><Key>Time</Key><Value>0</Value></Pair><Pair><Key>HideArrow</Key><Value>False</Value></Pair></Objective><Type>Action</Type><Title><Text>Check out the Branch Quests</Text><ID>941798</ID></Title><Desc><Text>Check out the Branch Quests</Text><ID>941798</ID></Desc></Data></S>
|
||||||
|
<C>0</C>
|
||||||
|
</Task>
|
||||||
|
<AR>
|
||||||
|
<a>5</a>
|
||||||
|
<p>1</p>
|
||||||
|
<i xsi:nil="true" />
|
||||||
|
<t>1</t>
|
||||||
|
<r>3</r>
|
||||||
|
<ii>0</ii>
|
||||||
|
<ai>201320</ai>
|
||||||
|
<amulti>true</amulti>
|
||||||
|
<mina>5</mina>
|
||||||
|
<maxa>5</maxa>
|
||||||
|
<d xsi:nil="true" />
|
||||||
|
<cid>0</cid>
|
||||||
|
<ui xsi:nil="true" />
|
||||||
|
<atinfoid>0</atinfoid>
|
||||||
|
<atid>0</atid>
|
||||||
|
</AR>
|
||||||
|
<AR>
|
||||||
|
<a>100</a>
|
||||||
|
<p>2</p>
|
||||||
|
<i xsi:nil="true" />
|
||||||
|
<t>1</t>
|
||||||
|
<r>23</r>
|
||||||
|
<ii>0</ii>
|
||||||
|
<ai>201320</ai>
|
||||||
|
<amulti>true</amulti>
|
||||||
|
<mina>100</mina>
|
||||||
|
<maxa>100</maxa>
|
||||||
|
<d xsi:nil="true" />
|
||||||
|
<cid>0</cid>
|
||||||
|
<ui xsi:nil="true" />
|
||||||
|
<atinfoid>0</atinfoid>
|
||||||
|
<atid>0</atid>
|
||||||
|
</AR>
|
||||||
|
<AR>
|
||||||
|
<a>50</a>
|
||||||
|
<p>8</p>
|
||||||
|
<i xsi:nil="true" />
|
||||||
|
<t>1</t>
|
||||||
|
<r>609</r>
|
||||||
|
<ii>0</ii>
|
||||||
|
<ai>201320</ai>
|
||||||
|
<amulti>true</amulti>
|
||||||
|
<mina>50</mina>
|
||||||
|
<maxa>50</maxa>
|
||||||
|
<d xsi:nil="true" />
|
||||||
|
<cid>0</cid>
|
||||||
|
<ui xsi:nil="true" />
|
||||||
|
<atinfoid>0</atinfoid>
|
||||||
|
<atid>0</atid>
|
||||||
|
</AR>
|
||||||
|
<AR>
|
||||||
|
<a>50</a>
|
||||||
|
<p>12</p>
|
||||||
|
<i xsi:nil="true" />
|
||||||
|
<t>1</t>
|
||||||
|
<r>913</r>
|
||||||
|
<ii>0</ii>
|
||||||
|
<ai>201320</ai>
|
||||||
|
<amulti>true</amulti>
|
||||||
|
<mina>50</mina>
|
||||||
|
<maxa>50</maxa>
|
||||||
|
<d xsi:nil="true" />
|
||||||
|
<cid>0</cid>
|
||||||
|
<ui xsi:nil="true" />
|
||||||
|
<atinfoid>0</atinfoid>
|
||||||
|
<atid>0</atid>
|
||||||
|
</AR>
|
||||||
|
</Mission>
|
57
src/Schema/Mission.cs
Normal file
57
src/Schema/Mission.cs
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "Mission", Namespace = "")]
|
||||||
|
public class Mission {
|
||||||
|
[XmlElement(ElementName = "I")]
|
||||||
|
public int MissionID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "N")]
|
||||||
|
public string Name;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "G")]
|
||||||
|
public int GroupID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "P", IsNullable = true)]
|
||||||
|
public int? ParentID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "S")]
|
||||||
|
public string Static;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "A")]
|
||||||
|
public bool Accepted;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "C")]
|
||||||
|
public int Completed;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "R")]
|
||||||
|
public string Rule;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "MR")]
|
||||||
|
public MissionRule MissionRule;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "V")]
|
||||||
|
public int VersionID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "AID")]
|
||||||
|
public int AchievementID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "AAID")]
|
||||||
|
public int AcceptanceAchievementID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "M")]
|
||||||
|
public List<Mission> Missions;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "Task")]
|
||||||
|
public List<Task> Tasks;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "AR")]
|
||||||
|
public List<AchievementReward> Rewards;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "AAR")]
|
||||||
|
public List<AchievementReward> AcceptanceRewards;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "RPT")]
|
||||||
|
public bool Repeatable;
|
||||||
|
}
|
13
src/Schema/MissionCompletedResult.cs
Normal file
13
src/Schema/MissionCompletedResult.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "MissionCompletedResult", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class MissionCompletedResult {
|
||||||
|
[XmlElement(ElementName = "M")]
|
||||||
|
public int MissionID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "A")]
|
||||||
|
public AchievementReward[] Rewards;
|
||||||
|
}
|
22
src/Schema/MissionCriteria.cs
Normal file
22
src/Schema/MissionCriteria.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "MissionCriteria", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class MissionCriteria {
|
||||||
|
[XmlElement(ElementName = "Type")]
|
||||||
|
public string Type;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "Ordered")]
|
||||||
|
public bool Ordered;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "Min")]
|
||||||
|
public int Min;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "Repeat")]
|
||||||
|
public int Repeat;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "RuleItems")]
|
||||||
|
public List<RuleItem> RuleItems;
|
||||||
|
}
|
25
src/Schema/MissionGroup.cs
Normal file
25
src/Schema/MissionGroup.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "MGF", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class MissionGroup {
|
||||||
|
[XmlElement(ElementName = "P")]
|
||||||
|
public int ProductID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "MG")]
|
||||||
|
public int MissionGroupID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "DMC")]
|
||||||
|
public int DailyMissionCount;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "CC")]
|
||||||
|
public int CompletionCount;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "D")]
|
||||||
|
public int Day;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "RC")]
|
||||||
|
public int RewardCycle;
|
||||||
|
}
|
13
src/Schema/MissionRule.cs
Normal file
13
src/Schema/MissionRule.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "MissionRule", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class MissionRule {
|
||||||
|
[XmlElement(ElementName = "Prerequisites")]
|
||||||
|
public List<PrerequisiteItem> Prerequisites;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "Criteria")]
|
||||||
|
public MissionCriteria Criteria;
|
||||||
|
}
|
19
src/Schema/PrerequisiteItem.cs
Normal file
19
src/Schema/PrerequisiteItem.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "PrerequisiteItem", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class PrerequisiteItem {
|
||||||
|
[XmlElement(ElementName = "Type")]
|
||||||
|
public PrerequisiteRequiredType Type;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "Value")]
|
||||||
|
public string Value;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "Quantity")]
|
||||||
|
public short Quantity;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "ClientRule")]
|
||||||
|
public bool ClientRule;
|
||||||
|
}
|
20
src/Schema/PrerequisiteRequiredType.cs
Normal file
20
src/Schema/PrerequisiteRequiredType.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
public enum PrerequisiteRequiredType {
|
||||||
|
[XmlEnum("1")]
|
||||||
|
Member = 1,
|
||||||
|
[XmlEnum("2")]
|
||||||
|
Accept,
|
||||||
|
[XmlEnum("3")]
|
||||||
|
Mission,
|
||||||
|
[XmlEnum("4")]
|
||||||
|
Rank,
|
||||||
|
[XmlEnum("5")]
|
||||||
|
DateRange,
|
||||||
|
[XmlEnum("7")]
|
||||||
|
Item = 7,
|
||||||
|
[XmlEnum("8")]
|
||||||
|
Event
|
||||||
|
}
|
19
src/Schema/RuleItem.cs
Normal file
19
src/Schema/RuleItem.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "RuleItem", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class RuleItem {
|
||||||
|
[XmlElement(ElementName = "Type")]
|
||||||
|
public RuleItemType Type;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "MissionID")]
|
||||||
|
public int MissionID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "ID")]
|
||||||
|
public int ID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "Complete")]
|
||||||
|
public int Complete;
|
||||||
|
}
|
10
src/Schema/RuleItemType.cs
Normal file
10
src/Schema/RuleItemType.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
public enum RuleItemType {
|
||||||
|
[XmlEnum("1")]
|
||||||
|
Task = 1,
|
||||||
|
[XmlEnum("2")]
|
||||||
|
Mission
|
||||||
|
}
|
23
src/Schema/SetTaskStateResult.cs
Normal file
23
src/Schema/SetTaskStateResult.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "SetTaskStateResult", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class SetTaskStateResult {
|
||||||
|
[XmlElement(ElementName = "S")]
|
||||||
|
public bool Success;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "T")]
|
||||||
|
public SetTaskStateStatus Status;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "A")]
|
||||||
|
public string AdditionalStatusParams;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "R")]
|
||||||
|
public MissionCompletedResult[] MissionsCompleted;
|
||||||
|
|
||||||
|
// TODO: Not needed now (requires many additional schemas)
|
||||||
|
// [XmlElement(ElementName = "C")]
|
||||||
|
// public CommonInventoryResponse CommonInvRes;
|
||||||
|
}
|
38
src/Schema/SetTaskStateStatus.cs
Normal file
38
src/Schema/SetTaskStateStatus.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
public enum SetTaskStateStatus {
|
||||||
|
[XmlEnum("1")]
|
||||||
|
RequiresMembership = 1,
|
||||||
|
[XmlEnum("2")]
|
||||||
|
RequiresAcceptance,
|
||||||
|
[XmlEnum("3")]
|
||||||
|
NotWithinDateRange,
|
||||||
|
[XmlEnum("4")]
|
||||||
|
PreRequisiteMissionIncomplete,
|
||||||
|
[XmlEnum("5")]
|
||||||
|
UserRankLessThanMinRank,
|
||||||
|
[XmlEnum("6")]
|
||||||
|
UserRankGreaterThanMaxRank,
|
||||||
|
[XmlEnum("7")]
|
||||||
|
UserHasNoRankData,
|
||||||
|
[XmlEnum("8")]
|
||||||
|
MissionStateNotFound,
|
||||||
|
[XmlEnum("9")]
|
||||||
|
RequiredPriorTaskIncomplete,
|
||||||
|
[XmlEnum("10")]
|
||||||
|
ParentsTaskIncomplete,
|
||||||
|
[XmlEnum("11")]
|
||||||
|
ParentsSubMissionIncomplete,
|
||||||
|
[XmlEnum("12")]
|
||||||
|
TaskCanBeDone,
|
||||||
|
[XmlEnum("13")]
|
||||||
|
OneOrMoreMissionsHaveNoRewardsAttached,
|
||||||
|
[XmlEnum("14")]
|
||||||
|
PayLoadUpdated,
|
||||||
|
[XmlEnum("15")]
|
||||||
|
NonRepeatableMission,
|
||||||
|
[XmlEnum("255")]
|
||||||
|
Unknown = 255
|
||||||
|
}
|
28
src/Schema/Task.cs
Normal file
28
src/Schema/Task.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "Task", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class Task {
|
||||||
|
[XmlElement(ElementName = "I")]
|
||||||
|
public int TaskID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "N")]
|
||||||
|
public string Name;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "S")]
|
||||||
|
public string Static;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "C")]
|
||||||
|
public int Completed;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "F")]
|
||||||
|
public bool Failed;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "P")]
|
||||||
|
public string Payload;
|
||||||
|
}
|
23
src/Schema/UserMissionStateResult.cs
Normal file
23
src/Schema/UserMissionStateResult.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "UserMissionStateResult", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class UserMissionStateResult {
|
||||||
|
[XmlElement(ElementName = "UID")]
|
||||||
|
public Guid UserID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "Mission")]
|
||||||
|
public List<Mission> Missions;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "UTA")]
|
||||||
|
public List<UserTimedAchievement> UserTimedAchievement;
|
||||||
|
|
||||||
|
// NOTE: It appears that the server doesn't send this
|
||||||
|
// [XmlElement(ElementName = "D")]
|
||||||
|
// public int Day;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "MG")]
|
||||||
|
public List<MissionGroup> MissionGroup;
|
||||||
|
}
|
40
src/Schema/UserTimedAchievement.cs
Normal file
40
src/Schema/UserTimedAchievement.cs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace sodoff.Schema;
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "UTA", Namespace = "")]
|
||||||
|
[Serializable]
|
||||||
|
public class UserTimedAchievement {
|
||||||
|
[XmlElement(ElementName = "uid")]
|
||||||
|
public Guid? UserID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "uta")]
|
||||||
|
public int UserTimedAchievementMapID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "a")]
|
||||||
|
public int AchievementID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "s")]
|
||||||
|
public int Sequence;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "st")]
|
||||||
|
public int StatusID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "c")]
|
||||||
|
public DateTime CreatedDate;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "u", IsNullable = true)]
|
||||||
|
public DateTime? UpdatedDate;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "isdel")]
|
||||||
|
public bool IsDeleted;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "gid")]
|
||||||
|
public int GroupID;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "ar")]
|
||||||
|
public List<AchievementReward> AchievementReward;
|
||||||
|
|
||||||
|
[XmlElement(ElementName = "sid")]
|
||||||
|
public int SetID;
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
using System.Xml.Serialization;
|
using System.Reflection;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
namespace sodoff.Util;
|
namespace sodoff.Util;
|
||||||
public class XmlUtil {
|
public class XmlUtil {
|
||||||
@ -15,4 +16,15 @@ public class XmlUtil {
|
|||||||
return writer.ToString();
|
return writer.ToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string ReadResourceXmlString(string name) {
|
||||||
|
string result = "";
|
||||||
|
var assembly = Assembly.GetExecutingAssembly();
|
||||||
|
string resourceName = assembly.GetManifestResourceNames().Single(str => str.EndsWith($"{name}.xml"));
|
||||||
|
|
||||||
|
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
|
||||||
|
using (StreamReader reader = new StreamReader(stream))
|
||||||
|
result = reader.ReadToEnd();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="Resources\store.xml" />
|
<None Remove="Resources\store.xml" />
|
||||||
<None Remove="Resources\allranks.xml" />
|
<None Remove="Resources\allranks.xml" />
|
||||||
|
<None Remove="Resources\tutorialmission.xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Update="Resources\childlist.xml">
|
<None Update="Resources\childlist.xml">
|
||||||
@ -22,6 +23,9 @@
|
|||||||
<None Update="Resources\store.xml">
|
<None Update="Resources\store.xml">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
<None Update="Resources\tutorialmission.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="Resources\store.xml">
|
<EmbeddedResource Include="Resources\store.xml">
|
||||||
@ -30,5 +34,8 @@
|
|||||||
<EmbeddedResource Include="Resources\allranks.xml">
|
<EmbeddedResource Include="Resources\allranks.xml">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Resources\tutorialmission.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user