Skip to content

Commit

Permalink
feat: Add support for pawn normal/core skills
Browse files Browse the repository at this point in the history
Added support for pawns to learn normal/core skills.
  • Loading branch information
pacampbell committed Apr 17, 2024
1 parent a33b922 commit 26ce314
Show file tree
Hide file tree
Showing 8 changed files with 54 additions and 45 deletions.
32 changes: 24 additions & 8 deletions Arrowgene.Ddon.GameServer/Characters/JobManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -365,11 +365,13 @@ public void UnlockLearnedNormalSkill(AssetRepository AssetRepo, IDatabase Databa
List<CDataNormalSkillParam> Matches = Character.LearnedNormalSkills.Where(skill => skill != null && skill.Job == Job && skill.SkillNo == SkillNo).ToList();
if (Matches.Count() == 0)
{

CDataNormalSkillParam NewSkill = new CDataNormalSkillParam()
{
Job = Job,
Index = SkillIndex, // 1, 2, 3 based offset from packet
SkillNo = SkillNo, // Related to offsets in gNormalSkillMap
SkillNo = SkillNo, // Skill ID
PreSkillNo = 0
};

Character.LearnedNormalSkills.Add(NewSkill);
Expand All @@ -381,15 +383,29 @@ public void UnlockLearnedNormalSkill(AssetRepository AssetRepo, IDatabase Databa
CharacterJobData.JobPoint -= Skill.JpCost;
Database.UpdateCharacterJobData(Character.CommonId, CharacterJobData);

var Result = new S2CSkillLearnNormalSkillRes()
if (Character is Character)
{
var Result = new S2CSkillLearnNormalSkillRes()
{
Job = Job,
SkillIndex = SkillIndex,
NewJobPoint = CharacterJobData.JobPoint,
};

Client.Send(Result);
}
else
{
Job = Job,
SkillIndex = SkillIndex,
NewJobPoint = CharacterJobData.JobPoint,
};
var Result = new S2CSkillLearnPawnNormalSkillRes()
{
PawnId = ((Pawn)Character).PawnId,
Job = Job,
SkillIndex = SkillIndex,
NewJobPoint = CharacterJobData.JobPoint,
};

// Send response back to client
Client.Send(Result);
Client.Send(Result);
}

// TODO: Send data to rest of party
// TODO: S2C_NORMAL_SKILL_LEARN_NTC currently not defined
Expand Down
2 changes: 1 addition & 1 deletion Arrowgene.Ddon.GameServer/GameStructure.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Linq;
using System.Linq;
using System.Collections.Generic;
using Arrowgene.Ddon.GameServer.Party;
using Arrowgene.Ddon.Shared.Entity.Structure;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Linq;
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Server.Network;
Expand All @@ -20,10 +21,11 @@ public SkillGetPawnLearnedNormalSkillListHandler(DdonGameServer server) : base(s
public override void Handle(GameClient client, StructurePacket<C2SSkillGetPawnLearnedNormalSkillListReq> packet)
{
Pawn pawn = client.Character.Pawns.Where(pawn => pawn.PawnId == packet.Structure.PawnId).Single();

client.Send(new S2CSkillGetPawnLearnedNormalSkillListRes() {
PawnId = pawn.PawnId,
NormalSkillParamList = pawn.LearnedNormalSkills
});
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ public override void Handle(GameClient client, StructurePacket<C2SSkillGetPawnSe
client.Send(res);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Linq;
using Arrowgene.Ddon.GameServer.Characters;
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Server.Network;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
Expand All @@ -12,30 +13,20 @@ namespace Arrowgene.Ddon.GameServer.Handler
public class SkillLearnPawnNormalSkillHandler : GameStructurePacketHandler<C2SSkillLearnPawnNormalSkillReq>
{
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(SkillLearnPawnNormalSkillHandler));


private readonly JobManager _jobManager;

public SkillLearnPawnNormalSkillHandler(DdonGameServer server) : base(server)
{
this._jobManager = server.JobManager;
}

public override void Handle(GameClient client, StructurePacket<C2SSkillLearnPawnNormalSkillReq> packet)
{
Pawn pawn = client.Character.Pawns.Where(pawn => pawn.PawnId == packet.Structure.PawnId).Single();
CDataCharacterJobData characterJobData = pawn.CharacterJobDataList.Where(cjd => cjd.Job == packet.Structure.Job).Single();
Pawn Pawn = client.Character.Pawns.Where(pawn => pawn.PawnId == packet.Structure.PawnId).Single();

pawn.LearnedNormalSkills.Add(new CDataNormalSkillParam()
{
Job = packet.Structure.Job,
SkillNo = packet.Structure.SkillId,
Index = 1
});
// TODO: DB and substract JP
client.Send(new S2CSkillLearnPawnNormalSkillRes()
{
PawnId = pawn.PawnId,
Job = packet.Structure.Job,
SkillId = packet.Structure.SkillId,
NewJobPoint = characterJobData.JobPoint
});
_jobManager.UnlockLearnedNormalSkill(Server.AssetRepository, Server.Database, client, Pawn,
packet.Structure.Job, packet.Structure.SkillId);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public class S2CSkillLearnPawnNormalSkillRes : ServerResponse

public uint PawnId { get; set; }
public JobId Job { get; set; }
public uint SkillId { get; set; }
public uint SkillIndex { get; set; }
public uint NewJobPoint { get; set; }

public class Serializer : PacketEntitySerializer<S2CSkillLearnPawnNormalSkillRes>
Expand All @@ -19,8 +19,8 @@ public override void Write(IBuffer buffer, S2CSkillLearnPawnNormalSkillRes obj)
{
WriteServerResponse(buffer, obj);
WriteUInt32(buffer, obj.PawnId);
WriteByte(buffer, (byte) obj.Job);
WriteUInt32(buffer, obj.SkillId);
WriteByte(buffer, (byte)obj.Job);
WriteUInt32(buffer, obj.SkillIndex);
WriteUInt32(buffer, obj.NewJobPoint);
}

Expand All @@ -29,11 +29,11 @@ public override S2CSkillLearnPawnNormalSkillRes Read(IBuffer buffer)
S2CSkillLearnPawnNormalSkillRes obj = new S2CSkillLearnPawnNormalSkillRes();
ReadServerResponse(buffer, obj);
obj.PawnId = ReadUInt32(buffer);
obj.Job = (JobId) ReadByte(buffer);
obj.SkillId = ReadUInt32(buffer);
obj.Job = (JobId)ReadByte(buffer);
obj.SkillIndex = ReadUInt32(buffer);
obj.NewJobPoint = ReadUInt32(buffer);
return obj;
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,29 @@ public class CDataContextNormalSkillData

public CDataContextNormalSkillData(CDataNormalSkillParam normalSkillParam)
{
SkillNo = (byte) normalSkillParam.SkillNo;
SkillIndex = (byte) normalSkillParam.Index;
}

public CDataContextNormalSkillData()
{
SkillNo=0;
SkillIndex=0;
}

public byte SkillNo;
public byte SkillIndex;

public class Serializer : EntitySerializer<CDataContextNormalSkillData>
{
public override void Write(IBuffer buffer, CDataContextNormalSkillData obj)
{
WriteByte(buffer, obj.SkillNo);
WriteByte(buffer, obj.SkillIndex);
}

public override CDataContextNormalSkillData Read(IBuffer buffer)
{
CDataContextNormalSkillData obj = new CDataContextNormalSkillData();
obj.SkillNo = ReadByte(buffer);
obj.SkillIndex = ReadByte(buffer);
return obj;
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,27 @@ public class CDataLearnNormalSkillParam
{
public CDataLearnNormalSkillParam(CDataNormalSkillParam skill)
{
SkillNo = skill.Index;
SkillIndex = skill.Index;
}

public CDataLearnNormalSkillParam()
{
SkillNo=0;
SkillIndex=0;
}

public uint SkillNo { get; set; }
public uint SkillIndex { get; set; }

public class Serializer : EntitySerializer<CDataLearnNormalSkillParam>
{
public override void Write(IBuffer buffer, CDataLearnNormalSkillParam obj)
{
WriteUInt32(buffer, obj.SkillNo);
WriteUInt32(buffer, obj.SkillIndex);
}

public override CDataLearnNormalSkillParam Read(IBuffer buffer)
{
CDataLearnNormalSkillParam obj = new CDataLearnNormalSkillParam();
obj.SkillNo = ReadUInt32(buffer);
obj.SkillIndex = ReadUInt32(buffer);
return obj;
}
}
Expand Down

0 comments on commit 26ce314

Please sign in to comment.