You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
5.6 KiB
186 lines
5.6 KiB
using Sog;
|
|
using ProtoCSStruct;
|
|
|
|
namespace Game
|
|
{
|
|
public class MarketShopHandler : BasePacketHandler
|
|
{
|
|
public override int GetServiceType()
|
|
{
|
|
return GameServiceType.MarketShopHandler;
|
|
}
|
|
|
|
//销毁的时候置空
|
|
public override void Dispose()
|
|
{
|
|
}
|
|
|
|
public MarketShopHandler()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
public override void HandlerClientPacket(PlayerSession playerSession, StructPacket packet)
|
|
{
|
|
PlayerOnGame player = playerSession.Player;
|
|
if (player == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch (packet.MsgID)
|
|
{
|
|
case (int)CSGameMsgID.MarketShopBuyGoodsReq:
|
|
OnMarketShopBuyGoodsReq(player, packet);
|
|
break;
|
|
case (int)CSGameMsgID.MarketShopRefreshReq:
|
|
OnMarketShopRefreshReq(player, packet);
|
|
break;
|
|
default:
|
|
TraceLog.Error("MarketShopHandler.HandlerClientPacket uid {0} msgId {1} not handle", player.UserID, packet.MsgID);
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override void HandlerServerPacket(uint serverID, StructPacket packet)
|
|
{
|
|
}
|
|
|
|
|
|
private void OnMarketShopBuyGoodsReq(PlayerOnGame player, StructPacket packet)
|
|
{
|
|
ref var req = ref packet.GetMessage<CSMarketShopBuyGoodsReq>();
|
|
var res = new CSMarketShopBuyGoodsRes { ShopId = req.ShopId, BuyTimes = req.BuyTimes };
|
|
if (req.BuyTimes <= 0)
|
|
{
|
|
res.Ret = CSErrCode.SysFailure;
|
|
player.SendToClient((int) CSGameMsgID.MarketShopBuyGoodsRes, ref res);
|
|
return;
|
|
}
|
|
|
|
int index = MarketShopSvc.GetShopDataIndex(player, req.ShopId);
|
|
if (index == -1)
|
|
{
|
|
TraceLog.Error("MarketShopHandler.OnMarketShopBuyGoodsReq uid {0} shopId {1} not exist", player.UserID, req.ShopId);
|
|
|
|
res.Ret = CSErrCode.MarketShopNotExist;
|
|
player.SendToClient((int) CSGameMsgID.MarketShopBuyGoodsRes, ref res);
|
|
return;
|
|
}
|
|
|
|
ref OneShopData shopData = ref MarketShopSvc.GetShopDataByIndex(player, index);
|
|
OnBuyGoods(player, ref shopData, ref req, ref res);
|
|
}
|
|
|
|
public static void OnAdvBuyGoods(PlayerOnGame player,int shopId,int goodsCfgId)
|
|
{
|
|
var desc = MarketShopGoodsDescMgr.Instance.GetConfig(shopId, goodsCfgId);
|
|
if (desc == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var goodsId = desc.InternalId;
|
|
var index = MarketShopSvc.GetShopDataIndex(player, shopId);
|
|
if (index == -1)
|
|
{
|
|
return;
|
|
}
|
|
var res = new CSMarketShopBuyGoodsRes { ShopId = shopId, BuyTimes = 1 };
|
|
ref var shopData = ref MarketShopSvc.GetShopDataByIndex(player, index);
|
|
index = MarketShopSvc.GetOneGridGoodsPosByGoodsIndex(ref shopData, goodsId);
|
|
if (index < 0)
|
|
{
|
|
return;
|
|
}
|
|
ref var gridGoods = ref shopData.GridGoods[index];
|
|
var req = new CSMarketShopBuyGoodsReq
|
|
{
|
|
ShopId = shopId,
|
|
GoodsId = goodsId,
|
|
BuyTimes = 1
|
|
};
|
|
res.Ret = MarketShopSvc.MarketShopBuyGoods(player, ref req, ref shopData, ref gridGoods, ref res);
|
|
if (res.Ret == CSErrCode.None)
|
|
{
|
|
gridGoods.CurBuyTimes += 1;
|
|
res.GridGoods = gridGoods;
|
|
var statChgOp = new RoleStatChgOp(player);
|
|
statChgOp.NotifyClient();
|
|
}
|
|
player.SendToClient((int)CSGameMsgID.MarketShopBuyGoodsRes, ref res);
|
|
}
|
|
|
|
public void OnBuyGoods(PlayerOnGame player, ref OneShopData shopData,
|
|
ref CSMarketShopBuyGoodsReq req, ref CSMarketShopBuyGoodsRes res)
|
|
{
|
|
int index = MarketShopSvc.GetOneGridGoodsPosByGoodsIndex(ref shopData, req.GoodsId);
|
|
if (index < 0)
|
|
{
|
|
TraceLog.Error("MarketShopHandler.OnBuyGoods uid {0} shopId {1} goodsIndex {2} not exist"
|
|
, player.UserID, req.ShopId, req.GoodsId);
|
|
|
|
res.Ret = CSErrCode.DescNotFound;
|
|
player.SendToClient((int)CSGameMsgID.MarketShopBuyGoodsRes, ref res);
|
|
return;
|
|
}
|
|
|
|
ref OneGridGoods gridGoods = ref shopData.GridGoods[index];
|
|
res.Ret = MarketShopSvc.MarketShopBuyGoods(player, ref req, ref shopData, ref gridGoods,ref res);
|
|
if (res.Ret == CSErrCode.None)
|
|
{
|
|
gridGoods.CurBuyTimes += req.BuyTimes;
|
|
res.GridGoods = gridGoods;
|
|
|
|
RoleStatChgOp statChgOp = new RoleStatChgOp(player);
|
|
statChgOp.NotifyClient();
|
|
}
|
|
|
|
player.SendToClient((int)CSGameMsgID.MarketShopBuyGoodsRes, ref res);
|
|
|
|
}
|
|
|
|
|
|
|
|
public int OnMarketShopRefreshReq(PlayerOnGame player, StructPacket packet)
|
|
{
|
|
ref var req = ref packet.GetMessage<CSMarketShopRefreshReq>();
|
|
var res = new CSMarketShopRefreshRes {Ret = CSErrCode.None};
|
|
|
|
MarketShopDesc desc = MarketShopDescMgr.Instance.GetConfig(req.ShopId);
|
|
if (desc == null)
|
|
{
|
|
TraceLog.Error("MarketShopSvc.OnMarketShopRefreshReq shopId {0} not in table", req.ShopId);
|
|
return -1;
|
|
}
|
|
|
|
|
|
int index = MarketShopSvc.GetShopDataIndex(player, req.ShopId);
|
|
if (index == -1)
|
|
{
|
|
TraceLog.Error("MarketShopHandler.OnMarketShopRefreshReq uid {0} shopId {1} not exist"
|
|
, player.UserID, req.ShopId);
|
|
|
|
res.Ret = CSErrCode.MarketShopNotExist;
|
|
player.SendToClient((int)CSGameMsgID.MarketShopRefreshRes, ref res);
|
|
return -1;
|
|
}
|
|
|
|
ref OneShopData shopData = ref MarketShopSvc.GetShopDataByIndex(player, index);
|
|
|
|
// 手动刷新
|
|
if (req.IsNeedRefresh)
|
|
{
|
|
res.Ret = MarketShopSvc.HandRefreshShop(player, desc, ref shopData);
|
|
}
|
|
|
|
player.MakeDirty();
|
|
res.ShopData = shopData;
|
|
player.SendToClient((int)CSGameMsgID.MarketShopRefreshRes, ref res);
|
|
return 0;
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|