Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Arrowgene.Ddon.GameServer/Characters/GpCourseManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ public void EvaluateCourses()
_CourseIsActive[id] = true;
ApplyCourseEffects(id);

var ntc = new S2CGPCourseStartNtc()
var ntc = new S2CGpCourseStartNtc()
{
CourseID = id,
ExpiryTimestamp = course.EndTime,
Expand Down
5 changes: 3 additions & 2 deletions Arrowgene.Ddon.GameServer/Characters/WalletManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ public WalletManager(DdonGameServer server)
Server = server;
WalletLimits = server.GameSettings.GameServerSettings.WalletLimits;
}
public bool AddToWalletNtc(Client Client, Character Character, WalletType Type, uint Amount, uint BonusAmount = 0, ItemNoticeType updateType = ItemNoticeType.Default, DbConnection? connectionIn = null)

public uint AddToWalletNtc(Client Client, Character Character, WalletType Type, uint Amount, uint BonusAmount = 0, ItemNoticeType updateType = ItemNoticeType.Default, DbConnection? connectionIn = null)
{
CDataUpdateWalletPoint UpdateWalletPoint = AddToWallet(Character, Type, Amount, BonusAmount, connectionIn);

Expand All @@ -34,7 +35,7 @@ public bool AddToWalletNtc(Client Client, Character Character, WalletType Type,

Client.Send(UpdateCharacterItemNtc);

return true;
return UpdateWalletPoint.Value;
}

public CDataUpdateWalletPoint AddToWallet(Character Character, WalletType Type, uint Amount, uint BonusAmount = 0, DbConnection? connectionIn = null)
Expand Down
31 changes: 26 additions & 5 deletions Arrowgene.Ddon.GameServer/DdonGameServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -262,10 +262,10 @@ private void LoadPacketHandler()
AddHandler(new CharacterPawnGoldenReviveHandler(this));
AddHandler(new CharacterPawnPointReviveHandler(this));
AddHandler(new CharacterSetOnlineStatusHandler(this));
AddHandler(new CharacterEditGetShopPriceHandler(this));
AddHandler(new CharacterEditUpdateCharacterEditParamHandler(this));
AddHandler(new CharacterEditGetShopPriceHandler(this));
AddHandler(new CharacterEditUpdateCharacterEditParamHandler(this));
AddHandler(new CharacterEditUpdateCharacterEditParamExHandler(this));
AddHandler(new CharacterEditUpdatePawnEditParamHandler(this));
AddHandler(new CharacterEditUpdatePawnEditParamHandler(this));
AddHandler(new CharacterEditUpdatePawnEditParamExHandler(this));
AddHandler(new CharacterCharacterDeadHandler(this));
AddHandler(new CharacterCharacterDownCancelHandler(this));
Expand Down Expand Up @@ -330,6 +330,24 @@ private void LoadPacketHandler()
AddHandler(new CraftRecipeGetCraftRecipeHandler(this));
AddHandler(new CraftStartCraftHandler(this));
AddHandler(new CraftSkillUpHandler(this));

AddHandler(new GpShopDisplayTypeHandler(this));
AddHandler(new GpCogGetIdHandler(this));
AddHandler(new GpGetCapToGpChangeListHandler(this));
AddHandler(new GpChangeCapToGpHandler(this));
AddHandler(new GpCourseGetValidListHandler(this));
AddHandler(new GpShopGetBuyHistoryHandler(this));
AddHandler(new GpCourseUseFromAvailableHandler(this));
AddHandler(new GpGetCapHandler(this));

AddHandler(new GachaListHandler(this));
AddHandler(new BoxGachaListHandler(this));
AddHandler(new BoxGachaBuyHandler(this));
AddHandler(new GachaBuyHandler(this));
AddHandler(new BoxGachaDrawInfoHandler(this));

AddHandler(new EventCodeInputHandler(this));

AddHandler(new CraftGetCraftProductInfoHandler(this));
AddHandler(new CraftCancelCraftHandler(this));
AddHandler(new CraftTimeSaveHandler(this));
Expand Down Expand Up @@ -426,6 +444,7 @@ private void LoadPacketHandler()
AddHandler(new ItemGetSpecifiedHavingItemListHandler(this));
AddHandler(new ItemEmbodyItemsHandler(this));
AddHandler(new ItemChangeAttrDiscardHandler(this));
AddHandler(new ItemGetItemStorageInfoHandler(this));

AddHandler(new JobChangeJobHandler(this));
AddHandler(new JobChangePawnJobHandler(this));
Expand Down Expand Up @@ -495,6 +514,7 @@ private void LoadPacketHandler()
AddHandler(new PartySendBinaryMsgAllHandler(this));
AddHandler(new PartySendBinaryMsgHandler(this));

AddHandler(new PawnGetFreeRentalPawnListHandler(this));
AddHandler(new PawnGetLostPawnListHandler(this));
AddHandler(new PawnGetMypawnDataHandler(this));
AddHandler(new PawnGetMyPawnListHandler(this));
Expand Down Expand Up @@ -560,6 +580,7 @@ private void LoadPacketHandler()
AddHandler(new QuestLeaderQuestProgressRequestHandler(this));
AddHandler(new QuestGetEndContentsGroupHandler(this));
AddHandler(new QuestGetCycleContentsNewsListHandler(this));

AddHandler(new QuestQuestOrderHandler(this));
AddHandler(new QuestQuestProgressHandler(this));
AddHandler(new QuestSendLeaderQuestOrderConditionInfoHandler(this));
Expand Down Expand Up @@ -683,8 +704,8 @@ private void LoadPacketHandler()
AddHandler(new StageGetSpAreaChangeInfoHandler(this));

AddHandler(new StampBonusCheckHandler(this));
AddHandler(new StampBonusGetListHandler(this));
AddHandler(new StampBonusReceiveDailyHandler(this));
AddHandler(new StampBonusGetListHandler(this));
AddHandler(new StampBonusReceiveDailyHandler(this));
AddHandler(new StampBonusReceiveTotalHandler(this));

AddHandler(new WarpAreaWarpHandler(this));
Expand Down
50 changes: 50 additions & 0 deletions Arrowgene.Ddon.GameServer/Handler/BoxGachaBuyHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Ddon.Shared.Entity.Structure;
using Arrowgene.Ddon.Shared.Model;
using Arrowgene.Logging;
using System.Collections.Generic;

namespace Arrowgene.Ddon.GameServer.Handler
{
public class BoxGachaBuyHandler : GameRequestPacketHandler<C2SBoxGachaBuyReq, S2CBoxGachaBuyRes>
{
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(BoxGachaBuyHandler));

public BoxGachaBuyHandler(DdonGameServer server) : base(server)
{
}

public override S2CBoxGachaBuyRes Handle(GameClient client, C2SBoxGachaBuyReq request)
{
throw new ResponseErrorException(ErrorCode.ERROR_CODE_NOT_IMPLEMENTED);

S2CBoxGachaBuyRes res = new S2CBoxGachaBuyRes();

// TODO: based on gacha ID & draw ID figure out which items were bought
res.BoxGachaId = request.BoxGachaId;
res.BoxGachaItemList.Add(new CDataBoxGachaItemInfo
{
ItemId = 13800,
ItemNum = 5,
ItemStock = 13,
Rank = 2,
Effect = 0,
Probability = 0,
DrawNum = 0
});

List<CDataItemUpdateResult> itemUpdateResult = new List<CDataItemUpdateResult>();
foreach (CDataBoxGachaItemInfo gachaItemInfo in res.BoxGachaItemList)
{
// TODO: support adding to item post
itemUpdateResult.AddRange(Server.ItemManager.AddItem(Server, client.Character, true, gachaItemInfo.ItemId, gachaItemInfo.ItemNum));
}

// TODO: based on Settlement ID figure out which currency was used
Server.WalletManager.RemoveFromWalletNtc(client, client.Character, WalletType.GoldenGemstones, request.Price);

return res;
}
}
}
40 changes: 40 additions & 0 deletions Arrowgene.Ddon.GameServer/Handler/BoxGachaDrawInfoHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Ddon.Shared.Entity.Structure;
using Arrowgene.Ddon.Shared.Model;
using Arrowgene.Logging;

namespace Arrowgene.Ddon.GameServer.Handler
{
public class BoxGachaDrawInfoHandler : GameRequestPacketHandler<C2SBoxGachaDrawInfoReq, S2CBoxGachaDrawInfoRes>
{
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(BoxGachaDrawInfoHandler));

public BoxGachaDrawInfoHandler(DdonGameServer server) : base(server)
{
}

public override S2CBoxGachaDrawInfoRes Handle(GameClient client, C2SBoxGachaDrawInfoReq request)
{
throw new ResponseErrorException(ErrorCode.ERROR_CODE_NOT_IMPLEMENTED);

S2CBoxGachaDrawInfoRes res = new S2CBoxGachaDrawInfoRes();

// Reflects received results to user in the appropriate tab
// TODO: unsure if request's DrawId should be directly sent back or box gacha ID should be figured out based on DrawId
res.BoxGachaId = 93;
res.BoxGachaItemList.Add(new CDataBoxGachaItemInfo
{
ItemId = 13800,
ItemNum = 5,
ItemStock = 13,
Rank = 2,
Effect = 0,
Probability = 0,
DrawNum = 0
});

return res;
}
}
}
76 changes: 76 additions & 0 deletions Arrowgene.Ddon.GameServer/Handler/BoxGachaListHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Ddon.Shared.Entity.Structure;
using Arrowgene.Ddon.Shared.Model;
using Arrowgene.Logging;

namespace Arrowgene.Ddon.GameServer.Handler
{
public class BoxGachaListHandler : GameRequestPacketHandler<C2SBoxGachaListReq, S2CBoxGachaListRes>
{
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(BoxGachaListHandler));

public BoxGachaListHandler(DdonGameServer server) : base(server)
{
}

public override S2CBoxGachaListRes Handle(GameClient client, C2SBoxGachaListReq request)
{
throw new ResponseErrorException(ErrorCode.ERROR_CODE_NOT_IMPLEMENTED);

S2CBoxGachaListRes res = new S2CBoxGachaListRes();

string urlBase = Server.GameSettings.GameServerSettings.UrlDomain;

res.BoxGachaList.Add(new CDataBoxGachaInfo
{
Id = 93,
Begin = DateTimeOffset.UtcNow.ToUnixTimeSeconds() - 1000,
End = DateTimeOffset.UtcNow.AddMonths(12).ToUnixTimeSeconds(),
Unk1 = true,
Name = "Consumables box lot",
Description = "Rare supplies are available!",
Detail =
"The \"Consumables Box Lot\" is a lottery that can be drawn by spending Silver Tickets.\r\n\r\nYou can get consumables such as \"White Dragon Seal Elixir, Top\" and \"Talisman of the Twin Gods\". \r\n\r\nYou can reset the contents of the box to its initial state with the <COL ffff00>About Box Treasure Slot</COL> reset button, so please use it when you have obtained all the items you are looking for.",
WeightDispType = 1,
FreeSpaceText = "",
ListAddr = $"{urlBase}/sp_ingame/campaign/bnr/lotto/lot_icon_170316_03.jpg",
ImageAddr = $"{urlBase}/sp_ingame/campaign/bnr/lotto/lot_icon_170316_03.jpg",
SettlementList = new List<CDataBoxGachaSettlementInfo>
{
new()
{
DrawId = 199,
Id = 2,
Price = 10,
BasePrice = 10,
DrawNum = 1,
BonusNum = 0,
PurchaseNum = 0,
PurchaseMaxNum = 0,
SpecialPriceNum = 0,
SpecialPriceMaxNum = 0,
Unk1 = 0
}
},
BoxGachaSets = new List<CDataBoxGachaItemInfo>
{
new()
{
ItemId = 13800,
ItemNum = 5,
ItemStock = 13,
Rank = 2,
Effect = 0,
Probability = 0,
DrawNum = 0
}
}
});

return res;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public override PacketQueue Handle(GameClient client, C2SCharacterDecideCharacte
{
if (now >= course.StartTime && now <= course.EndTime)
{
client.Enqueue(new S2CGPCourseStartNtc()
client.Enqueue(new S2CGpCourseStartNtc()
{
CourseID = course.Id,
ExpiryTimestamp = course.EndTime
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public override S2CConnectionMoveInServerRes Handle(GameClient client, C2SConnec
{
if (now >= course.StartTime && now <= course.EndTime)
{
S2CGPCourseExtendNtc courseExtendNtc = new S2CGPCourseExtendNtc()
S2CGpCourseExtendNtc courseExtendNtc = new S2CGpCourseExtendNtc()
{
CourseID = course.Id,
ExpiryTimestamp = course.EndTime
Expand Down
37 changes: 37 additions & 0 deletions Arrowgene.Ddon.GameServer/Handler/EventCodeInputHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Ddon.Shared.Model;
using Arrowgene.Logging;

namespace Arrowgene.Ddon.GameServer.Handler
{
public class EventCodeInputHandler : GameRequestPacketHandler<C2SEventCodeInputReq, S2CEventCodeInputRes>
{
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(EventCodeInputHandler));

public EventCodeInputHandler(DdonGameServer server) : base(server)
{
}

public override S2CEventCodeInputRes Handle(GameClient client, C2SEventCodeInputReq request)
{
S2CEventCodeInputRes res = new S2CEventCodeInputRes();

// TODO: based on event code figure out which items should be sent
// https://h1g.jp/dd-on/?%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89
// https://dengekionline.com/elem/000/001/138/1138291/
if (request.Code == "UPCT-YUAW-3K16-8255")
{
res.Name = "Silver Tickets and Trial Support Boat Course";
}
else
{
throw new ResponseErrorException(ErrorCode.ERROR_CODE_EVENT_CODE_INPUT_LOCK);
}

// TODO: send mail with items

return res;
}
}
}
Loading