-
Notifications
You must be signed in to change notification settings - Fork 52
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #262 from pacampbell/gp_course_support
feat: Add support for GP course effects
- Loading branch information
Showing
21 changed files
with
1,432 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
39 changes: 39 additions & 0 deletions
39
Arrowgene.Ddon.GameServer/Handler/GpGpCourseGetAvailableListHandler.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
using Arrowgene.Buffers; | ||
using Arrowgene.Ddon.GameServer.Dump; | ||
using Arrowgene.Ddon.Server; | ||
using Arrowgene.Ddon.Server.Network; | ||
using Arrowgene.Ddon.Shared; | ||
using Arrowgene.Ddon.Shared.Entity.PacketStructure; | ||
using Arrowgene.Ddon.Shared.Network; | ||
using Arrowgene.Logging; | ||
|
||
namespace Arrowgene.Ddon.GameServer.Handler | ||
{ | ||
public class GpGpCourseGetAvailableListHandler : PacketHandler<GameClient> | ||
{ | ||
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(GpGpCourseGetAvailableListHandler)); | ||
|
||
private AssetRepository _AssetRepo; | ||
|
||
public GpGpCourseGetAvailableListHandler(DdonGameServer server) : base(server) | ||
{ | ||
_AssetRepo = server.AssetRepository; | ||
} | ||
|
||
public override PacketId Id => PacketId.C2S_GP_GP_COURSE_GET_AVAILABLE_LIST_REQ; | ||
|
||
public override void Handle(GameClient client, IPacket packet) | ||
{ | ||
S2CGpGpCourseGetAvailableListRes Response = new S2CGpGpCourseGetAvailableListRes(); | ||
|
||
// foreach (var Course in _AssetRepo.GPCourseInfoAsset.ValidCourses) | ||
// { | ||
// | ||
// } | ||
|
||
// TODO: Send back real data based on JSON contents? | ||
// TODO: PCAP doesn't have sample packet contents to see what is in it. | ||
client.Send(Response); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 41 additions & 2 deletions
43
Arrowgene.Ddon.LoginServer/Handler/GpCourseGetInfoHandler.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,25 +1,64 @@ | ||
using Arrowgene.Ddon.LoginServer.Dump; | ||
using Arrowgene.Ddon.LoginServer.Dump; | ||
using Arrowgene.Ddon.Server; | ||
using Arrowgene.Ddon.Server.Network; | ||
using Arrowgene.Ddon.Shared; | ||
using Arrowgene.Ddon.Shared.Entity.PacketStructure; | ||
using Arrowgene.Ddon.Shared.Entity.Structure; | ||
using Arrowgene.Ddon.Shared.Network; | ||
using Arrowgene.Logging; | ||
using System; | ||
using System.Linq; | ||
|
||
namespace Arrowgene.Ddon.LoginServer.Handler | ||
{ | ||
public class GpCourseGetInfoHandler : PacketHandler<LoginClient> | ||
{ | ||
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(GpCourseGetInfoHandler)); | ||
|
||
private AssetRepository _AssetRepo; | ||
|
||
public GpCourseGetInfoHandler(DdonLoginServer server) : base(server) | ||
{ | ||
_AssetRepo = server.AssetRepository; | ||
} | ||
|
||
public override PacketId Id => PacketId.C2L_GP_COURSE_GET_INFO_REQ; | ||
|
||
public override void Handle(LoginClient client, IPacket packet) | ||
{ | ||
client.Send(LoginDump.Dump_22); | ||
L2CGpCourseGetInfoRes Response = new L2CGpCourseGetInfoRes(); | ||
|
||
foreach (var Course in _AssetRepo.GPCourseInfoAsset.Courses) | ||
{ | ||
CDataGPCourseInfo cDataGPCourseInfo = new CDataGPCourseInfo() | ||
{ | ||
CourseId = Course.Value.Id, | ||
CourseName = Course.Value.Name, | ||
DoubleCourseTarget = Course.Value.Target, | ||
PrioGroup = (byte)Course.Value.PriorityGroup, | ||
PrioSameTime = (byte)Course.Value.PrioritySameTime, | ||
AnnounceType = (byte)Course.Value.AnnounceType, | ||
EffectUIDs = Course.Value.Effects | ||
}; | ||
|
||
Response.CourseInfo.Add(cDataGPCourseInfo); | ||
} | ||
|
||
foreach (var Effect in _AssetRepo.GPCourseInfoAsset.Effects) | ||
{ | ||
CDataGPCourseEffectParam cDataGPCourseEffectParam = new CDataGPCourseEffectParam() | ||
{ | ||
EffectUID = Effect.Value.Uid, | ||
EffectID = Effect.Value.Id, | ||
Param0 = Effect.Value.Param0, | ||
Param1 = Effect.Value.Param1 | ||
}; | ||
|
||
Response.Effects.Add(cDataGPCourseEffectParam); | ||
} | ||
|
||
// client.Send(LoginDump.Dump_22); | ||
client.Send(Response); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
using System.Collections.Generic; | ||
using Arrowgene.Ddon.Shared.Model; | ||
|
||
namespace Arrowgene.Ddon.Shared.Asset | ||
{ | ||
public class GPCourseInfoAsset | ||
{ | ||
public GPCourseInfoAsset() | ||
{ | ||
Courses = new Dictionary<uint, GPCourse>(); | ||
Effects = new Dictionary<uint, GpCourseEffect>(); | ||
ValidCourses = new Dictionary<uint, GPValidCourse>(); | ||
} | ||
public Dictionary<uint, GPCourse> Courses { get; set; } | ||
public Dictionary<uint, GpCourseEffect> Effects { get; set; } | ||
public Dictionary<uint, GPValidCourse> ValidCourses { get; set; } | ||
} | ||
} |
76 changes: 76 additions & 0 deletions
76
Arrowgene.Ddon.Shared/AssetReader/GPCourseInfoDeserializer.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
using System.Collections.Generic; | ||
using System.IO; | ||
using System.Linq; | ||
using System.Text.Json; | ||
using Arrowgene.Ddon.Shared.Model; | ||
using Arrowgene.Logging; | ||
using Arrowgene.Ddon.Shared.Asset; | ||
|
||
namespace Arrowgene.Ddon.Shared.Csv | ||
{ | ||
public class GPCourseInfoDeserializer : IAssetDeserializer<GPCourseInfoAsset> | ||
{ | ||
private static readonly ILogger Logger = LogProvider.Logger(typeof(GPCourseInfoDeserializer)); | ||
|
||
public GPCourseInfoAsset ReadPath(string path) | ||
{ | ||
Logger.Info($"Reading {path}"); | ||
|
||
GPCourseInfoAsset asset = new GPCourseInfoAsset(); | ||
|
||
string json = File.ReadAllText(path); | ||
JsonDocument document = JsonDocument.Parse(json); | ||
|
||
var ValidCourses = document.RootElement.GetProperty("valid_courses").EnumerateArray().ToList(); | ||
foreach (var ValidCourse in ValidCourses) | ||
{ | ||
GPValidCourse obj = new GPValidCourse(); | ||
obj.Id = ValidCourse.GetProperty("course_id").GetUInt32(); | ||
obj.StartTime = ValidCourse.GetProperty("start_time").GetUInt64(); | ||
obj.EndTime = ValidCourse.GetProperty("end_time").GetUInt64(); | ||
obj.Comment = ValidCourse.GetProperty("comment").GetString(); | ||
|
||
asset.ValidCourses.Add(obj.Id, obj); | ||
} | ||
|
||
var Courses = document.RootElement.GetProperty("courses").EnumerateArray().ToList(); | ||
foreach (var Course in Courses) | ||
{ | ||
GPCourse obj = new GPCourse(); | ||
obj.Id = Course.GetProperty("id").GetUInt32(); | ||
obj.Name = Course.GetProperty("name").GetString(); | ||
obj.Target = Course.GetProperty("target").GetUInt32() == 1; | ||
obj.PriorityGroup = Course.GetProperty("priority_grp").GetUInt32(); | ||
obj.PrioritySameTime = Course.GetProperty("priority_same_time").GetUInt32(); | ||
obj.AnnounceType = Course.GetProperty("announce_type").GetUInt32(); | ||
obj.Comment = Course.GetProperty("comment").GetString(); | ||
obj.Url = Course.GetProperty("url").GetString(); | ||
obj.IconPath = Course.GetProperty("icon_path").GetString(); | ||
obj.Description = Course.GetProperty("description").GetString(); | ||
|
||
var EffectUIDs = Course.GetProperty("effects").EnumerateArray().ToList(); | ||
foreach (var EffectUID in EffectUIDs) | ||
{ | ||
obj.Effects.Add(EffectUID.GetUInt32()); | ||
} | ||
|
||
asset.Courses.Add(obj.Id, obj); | ||
} | ||
|
||
var Effects = document.RootElement.GetProperty("effects").EnumerateArray().ToList(); | ||
foreach (var Effect in Effects) | ||
{ | ||
GpCourseEffect obj = new GpCourseEffect(); | ||
obj.Uid = Effect.GetProperty("uid").GetUInt32(); | ||
obj.Id = Effect.GetProperty("id").GetUInt32(); | ||
obj.Param0 = Effect.GetProperty("param0").GetUInt32(); | ||
obj.Param1 = Effect.GetProperty("param1").GetUInt32(); | ||
obj.Comment = Effect.GetProperty("comment").GetString(); | ||
|
||
asset.Effects.Add(obj.Uid, obj); | ||
} | ||
|
||
return asset; | ||
} | ||
} | ||
} |
Oops, something went wrong.