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.
577 lines
26 KiB
577 lines
26 KiB
using Org.BouncyCastle.Bcpg;
|
|
using ProtoCSStruct;
|
|
using Sog;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Net.Sockets;
|
|
|
|
namespace Game
|
|
{
|
|
|
|
public class CBattleSvc
|
|
{
|
|
|
|
|
|
public static void OnBurn(PlayerOnGame player)
|
|
{
|
|
long now = GameServerUtils.GetTimeMs();
|
|
player.RoleData.Cbdata.LastFreshTickTime = now;
|
|
player.RoleData.Cbdata.LastLayer = 0;
|
|
player.RoleData.Cbdata.MaxLayer = 0;
|
|
UnifyOp op = new UnifyOp(player, BillChangeItemReason.CBC);
|
|
op.AddItem(CommParamDescMgr.Instance.ContBttlCost.str_list[0], CommParamDescMgr.Instance.ContBttlRecover.int_val);
|
|
op.DoOp();
|
|
}
|
|
|
|
public static void OnNewDay(PlayerOnGame player, bool notify)
|
|
{
|
|
long now = GameServerUtils.GetTimeMs();
|
|
if (!AppTime.IsSameDay(now/1000, player.RoleData.Cbdata.LastFreshTickTime/1000))
|
|
{
|
|
UnifyOp op = new UnifyOp(player, BillChangeItemReason.CBC);
|
|
int c = (int)op.GetItemCount(CommParamDescMgr.Instance.ContBttlCost.str_list[0]);
|
|
if (c < CommParamDescMgr.Instance.ContBttlReLimit.int_val)
|
|
{
|
|
int add = Math.Min(CommParamDescMgr.Instance.ContBttlReLimit.int_val - c, CommParamDescMgr.Instance.ContBttlRecover.int_val);
|
|
op.AddItem(CommParamDescMgr.Instance.ContBttlCost.str_list[0], add);
|
|
op.DoOp(true, notify);
|
|
}
|
|
player.RoleData.Cbdata.LastFreshTickTime = now;
|
|
}
|
|
if (!AppTime.IsSameWeek127(now/1000, player.RoleData.Cbdata.LastWeekScoreRst / 1000))
|
|
{
|
|
player.RoleData.Cbdata.WeekScore = 0;
|
|
player.RoleData.Cbdata.LastWeekScoreRst = now;
|
|
}
|
|
}
|
|
|
|
private static ContinueBattleDesc GetContinueBattleDescByMaxLayer(int maxLayer)
|
|
{
|
|
if(maxLayer < 1) maxLayer = 1;
|
|
foreach (var item in ContinueBattleDescMgr.Instance.ItemTable)
|
|
{
|
|
if (maxLayer == item.Value.historyStage)
|
|
{
|
|
return item.Value;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
public static void OnBattleStart(PlayerOnGame player, StructPacket packet)
|
|
{
|
|
player.msgCache.clear();
|
|
UnifyOp op = new UnifyOp(player, BillChangeItemReason.CBC);
|
|
var c = op.GetItemCount(CommParamDescMgr.Instance.ContBttlCost.str_list[0]);
|
|
if (c < int.Parse(CommParamDescMgr.Instance.ContBttlCost.str_list[1]))
|
|
{
|
|
CSCBStartRes res = new CSCBStartRes();
|
|
res.Ret = CSErrCode.NotEnoughItem;
|
|
player.SendToClient((int)CSGameMsgID.CbStartRes, ref res);
|
|
return;
|
|
}
|
|
ref var req = ref packet.GetMessage<CSCBStartReq>();
|
|
|
|
var battleId = CommParamDescMgr.Instance.ContBttlId.int_val;
|
|
|
|
var battleDesc = ChapterBattleDescMgr.Instance.GetConfig(battleId);
|
|
if (battleDesc == null)
|
|
{
|
|
return;
|
|
}
|
|
if (player.RoleData.IsInBattle)
|
|
{
|
|
player.RoleData.BattleRecord.Clear();
|
|
player.RoleData.IsInBattle = false;
|
|
}
|
|
|
|
player.RoleData.Cbdata.NowStartTime = GameServerUtils.GetTimeMs();
|
|
player.RoleData.Cbdata.NowScore = 0;
|
|
player.RoleData.Cbdata.NowReward.Clear();
|
|
player.RoleData.Cbdata.RednamestageId = 0;
|
|
player.RoleData.Cbdata.NowBoosC = 0;
|
|
player.RoleData.Cbdata.NowRedC = 0;
|
|
player.RoleData.Cbdata.NowRedCTotal = 0;
|
|
|
|
int stageId = battleDesc.firstChapterBattleStageId;
|
|
int initLayer = 1;
|
|
if (player.RoleData.Cbdata.MaxLayer > 1)
|
|
{
|
|
var d = GetContinueBattleDescByMaxLayer(player.RoleData.Cbdata.MaxLayer);
|
|
if (d != null)
|
|
{
|
|
stageId = stageId + d.firstStage - 1;
|
|
initLayer = d.firstStage;
|
|
//给与1-initlayer的奖励
|
|
for (int i = 1; i < initLayer; i++)
|
|
{
|
|
player.RoleData.Cbdata.NowScore += 100;
|
|
player.RoleData.Cbdata.NowBoosC++;
|
|
var desc = ChapterBattleStageDescMgr.Instance.GetConfig(battleDesc.firstChapterBattleStageId + i - 1);
|
|
if (desc != null)
|
|
{
|
|
var msn = desc.monster[0].List[0];
|
|
var mdesc = MonsterPropDescMgr.Instance.GetConfig(msn);
|
|
if (mdesc != null)
|
|
{
|
|
var list = ChapterHelper.ConvRewardInternal(player, mdesc.dropConfig, false, false);
|
|
foreach (var reward in list)
|
|
{
|
|
if (reward.Type == (int)GoodsType.ContBattle)
|
|
{//红名场景
|
|
continue;
|
|
}
|
|
bool exist = false;
|
|
for (int j = 0; j < player.RoleData.Cbdata.NowReward.Count; j++)
|
|
{
|
|
ref var rw = ref player.RoleData.Cbdata.NowReward[j];
|
|
if (rw.Type == reward.Type && rw.Id == reward.Id)
|
|
{
|
|
rw.Value += reward.Value;
|
|
exist = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!exist)
|
|
{
|
|
player.RoleData.Cbdata.NowReward.Add(reward);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
player.RoleData.Cbdata.BeginLayer = initLayer;
|
|
player.RoleData.Cbdata.NowLayer = initLayer;
|
|
player.RoleData.Cbdata.NowStageId = stageId;
|
|
ref var record = ref player.RoleData.BattleRecord;
|
|
record.Clear();
|
|
var now = GameServerUtils.GetTimeSecond();
|
|
record.BattleBeginTime = now;
|
|
record.BeginTime = now;
|
|
record.BattleData.BattleId = battleId;
|
|
record.BattleData.BattleStatus = BattleStatus.NONE;
|
|
ChapterSvc.InitBuildMonsterInfo(player, battleId, stageId);
|
|
player.RoleData.IsInBattle = true;
|
|
player.MakeDirty();
|
|
|
|
|
|
var cbres = new CSCBStartRes();
|
|
cbres.BattleData.CopyFrom(ref record.BattleData);
|
|
cbres.Ret = (int)CSErrCode.None;
|
|
cbres.InitBattleId = stageId;
|
|
cbres.InitLayer = initLayer;
|
|
cbres.Data.CopyFrom(ref player.RoleData.Cbdata);
|
|
player.SendToClient((int)CSGameMsgID.CbStartRes, ref cbres);
|
|
}
|
|
public static void OnFinishLayer(PlayerOnGame player, StructPacket packet)
|
|
{
|
|
if(player.msgCache.CheckRepeateMsg(player, packet)) return;
|
|
ref var req = ref packet.GetMessage<CSCBFinishLayerReq>();
|
|
if (req.HpReamin > 100) return;
|
|
CSCBFinishLayerRes cbres = new CSCBFinishLayerRes();
|
|
cbres.HpReamin = req.HpReamin;
|
|
cbres.Layer = req.Layer;
|
|
cbres.MsgSeq = req.MsgSeq;
|
|
var battleDesc = ChapterBattleDescMgr.Instance.GetConfig(CommParamDescMgr.Instance.ContBttlId.int_val);
|
|
var now = GameServerUtils.GetTimeSecond();
|
|
var df = now - player.RoleData.BattleRecord.BattleBeginTime;
|
|
if (player.RoleData.Cbdata.NowStartTime == 0)
|
|
{
|
|
cbres.Ret = CSErrCode.Fail;
|
|
player.SendToClient((int)CSGameMsgID.CbFinishRes, ref cbres);
|
|
TraceLog.Error("cbattle finishlayer not start uid={0}", player.UserID);
|
|
return;
|
|
}
|
|
bool enterNext = false;
|
|
if (req.HpReamin == 0)
|
|
{
|
|
if (player.RoleData.Cbdata.NowLayer != req.Layer)
|
|
{
|
|
cbres.Ret = CSErrCode.Fail;
|
|
player.SendToClient((int)CSGameMsgID.CbFinishRes, ref cbres);
|
|
return;
|
|
}
|
|
player.RoleData.Cbdata.NowLayer++;
|
|
player.RoleData.Cbdata.NowScore += 100;
|
|
enterNext = true;
|
|
if (player.RoleData.Cbdata.RednamestageId > 0)
|
|
{
|
|
player.RoleData.Cbdata.NowRedC++;
|
|
}
|
|
else
|
|
{
|
|
player.RoleData.Cbdata.NowBoosC++;
|
|
}
|
|
player.RoleData.Cbdata.RednamestageId = 0;
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
player.RoleData.Cbdata.NowScore += (100 - req.HpReamin );
|
|
if (player.RoleData.Cbdata.RednamestageId > 0 && req.ForceLeave == 0)
|
|
{
|
|
player.RoleData.Cbdata.RednamestageId = 0;
|
|
//按照百分比折扣指定掉落,其余的清空
|
|
RepeatedTypeIDValue32_128 rev = new RepeatedTypeIDValue32_128();
|
|
for (int i = 0; i < player.RoleData.Cbdata.NowReward.Count; i++)
|
|
{
|
|
ref var reward = ref player.RoleData.Cbdata.NowReward[i];
|
|
for(int j = 0; j < CommParamDescMgr.Instance.KeepRewardType.int_list.Length; j++)
|
|
{
|
|
if (reward.Type == CommParamDescMgr.Instance.KeepRewardType.int_list[j]
|
|
&& reward.Id == GetConfInterId((GoodsType)CommParamDescMgr.Instance.KeepRewardType.int_list[j],
|
|
CommParamDescMgr.Instance.KeepRewardId.str_list[j]))
|
|
{
|
|
int v = (int)( reward.Value * CommParamDescMgr.Instance.KeepRewardRatio.int_list[j] * 1.0 / 1_0000 );
|
|
rev.Add(new TypeIDValue32() { Type = reward.Type, Id = reward.Id, Value = v });
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
player.RoleData.Cbdata.NowReward.Clear();
|
|
player.RoleData.Cbdata.NowReward.CopyFrom(ref rev);
|
|
player.RoleData.Cbdata.NowLayer++;
|
|
player.RoleData.Cbdata.NowBoosC = 0;
|
|
player.RoleData.Cbdata.NowRedC = 0;
|
|
enterNext = true;
|
|
}
|
|
}
|
|
if (enterNext)
|
|
{
|
|
int nextStage = 0;
|
|
for (int i = 0; i < player.RoleData.BattleRecord.DropReward.Count; i++)
|
|
{
|
|
ref var reward = ref player.RoleData.BattleRecord.DropReward[i];
|
|
if (reward.Type == (int)GoodsType.ContBattle)
|
|
{//红名场景,直接进入下一关
|
|
nextStage = reward.Id;
|
|
continue;
|
|
}
|
|
bool exist = false;
|
|
for (int j = 0; j < player.RoleData.Cbdata.NowReward.Count; j++)
|
|
{
|
|
ref var rw = ref player.RoleData.Cbdata.NowReward[j];
|
|
if (rw.Type == reward.Type && rw.Id == reward.Id)
|
|
{
|
|
rw.Value += reward.Value;
|
|
exist = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!exist)
|
|
{
|
|
player.RoleData.Cbdata.NowReward.Add(ref reward);
|
|
}
|
|
cbres.ThisReward.Add(ref reward);
|
|
}
|
|
var nextConf = ContinueBattleDescMgr.Instance.GetConfig(player.RoleData.Cbdata.NowLayer );
|
|
if(nextConf == null)
|
|
{
|
|
//直接结算
|
|
cbres.Ret = (int)CSErrCode.None;
|
|
cbres.Score = player.RoleData.Cbdata.NowScore;
|
|
cbres.Data.CopyFrom(ref player.RoleData.Cbdata);
|
|
player.SendToClient((int)CSGameMsgID.CbFinishRes, ref cbres);
|
|
//var leveReq = new CSCBLeaveReq();
|
|
//leveReq.Layer = player.RoleData.Cbdata.NowLayer;
|
|
//OnLeave(player, ref leveReq);
|
|
return;
|
|
}
|
|
|
|
int initBattleId = battleDesc.firstChapterBattleStageId;
|
|
var nextStageId = initBattleId + player.RoleData.Cbdata.NowLayer - 1;
|
|
if (nextStage > 0)
|
|
{
|
|
nextStageId = nextStage;
|
|
cbres.RednamestageId = nextStage;
|
|
player.RoleData.Cbdata.RednamestageId = nextStage;
|
|
player.RoleData.Cbdata.NowStageId = nextStageId;
|
|
player.RoleData.Cbdata.NowRedCTotal++;
|
|
//随机玩家id
|
|
var d = GetContinueBattleDescByMaxLayer(player.RoleData.Cbdata.MaxLayer);
|
|
var rankreq = new CSRankPlayerByLevelReq();
|
|
rankreq.Uid = player.UserID;
|
|
rankreq.RealmId = player.RealmID;
|
|
rankreq.LvMin = player.RoleBase.Level + d.invasionLevel[0];
|
|
rankreq.LvMax = player.RoleBase.Level + d.invasionLevel[1];
|
|
GameServerUtils.GetPacketSender().SendToRankServer<CSRankPlayerByLevelReq>((int)CSGameMsgID.RankPlayerBylevelReq, ref rankreq, player.UserID);
|
|
}
|
|
else
|
|
{
|
|
|
|
player.RoleData.Cbdata.NowStageId = nextStageId;
|
|
player.RoleData.Cbdata.RednamestageId = 0;
|
|
}
|
|
ref var record = ref player.RoleData.BattleRecord;
|
|
var otime = record.BattleTimeDuration;
|
|
record.Clear();
|
|
record.BattleTimeDuration = otime;
|
|
record.BattleBeginTime = now;
|
|
record.BattleData.BattleId = CommParamDescMgr.Instance.ContBttlId.int_val;
|
|
record.BattleData.BattleStatus = BattleStatus.NONE;
|
|
ChapterSvc.InitBuildMonsterInfo(player, CommParamDescMgr.Instance.ContBttlId.int_val, nextStageId);
|
|
player.RoleData.IsInBattle = true;
|
|
player.MakeDirty();
|
|
cbres.BattleData.CopyFrom(ref record.BattleData);
|
|
|
|
TraceLog.Trace("cbattle uid={0}, layer={1}, timeused={2}, score={3}", player.UserID, req.Layer, df, player.RoleData.Cbdata.NowScore);
|
|
}
|
|
cbres.Ret = (int)CSErrCode.None;
|
|
cbres.Score = player.RoleData.Cbdata.NowScore;
|
|
cbres.Data.CopyFrom(ref player.RoleData.Cbdata);
|
|
player.SendToClient((int)CSGameMsgID.CbFinishRes, ref cbres);
|
|
|
|
MsgCache cache = new MsgCache();
|
|
//cache.Parser = CSCBFinishLayerRes.Parser;
|
|
//cache.GetMessage<CSCBFinishLayerRes>().CopyFrom(ref cbres);
|
|
cache.SetData(ref cbres);
|
|
player.msgCache.AddSendMsg(player, packet, cache);
|
|
|
|
}
|
|
|
|
public static int GetConfInterId(GoodsType type, string code)
|
|
{
|
|
int internalId = 0;
|
|
switch (type)
|
|
{
|
|
case GoodsType.Equipment:
|
|
{
|
|
var desc = EquipDescMgr.Instance.GetConfig(code);
|
|
internalId = desc?.InternalId ?? 0;
|
|
}
|
|
break;
|
|
case GoodsType.Items:
|
|
{
|
|
var desc = ItemDescMgr.Instance.GetConfig(code);
|
|
internalId = desc?.InternalId ?? 0;
|
|
}
|
|
break;
|
|
case GoodsType.EquipSkin:
|
|
{
|
|
var desc = RoleModelDescMgr.Instance.GetConfig(int.Parse(code));
|
|
internalId = desc?.InternalId ?? 0;
|
|
}
|
|
break;
|
|
case GoodsType.ContBattle:
|
|
break;
|
|
}
|
|
return internalId;
|
|
}
|
|
public static void OnLeave(PlayerOnGame player, StructPacket packet)
|
|
{
|
|
if (player.msgCache.CheckRepeateMsg(player, packet)) return;
|
|
ref var req = ref packet.GetMessage<CSCBLeaveReq>();
|
|
OnLeave(player, ref req, packet);
|
|
}
|
|
public static void OnLeave(PlayerOnGame player, ref CSCBLeaveReq req, StructPacket packetReq = null)
|
|
{
|
|
var res = new CSCBLeaveRes();
|
|
res.MsgSeq = req.MsgSeq;
|
|
//if(req.Layer != player.RoleData.Cbdata.NowLayer)
|
|
//{
|
|
// res.Ret = CSErrCode.Fail;
|
|
// player.SendToClient((int)CSGameMsgID.CbLeaveRes, ref res);
|
|
// return;
|
|
//}
|
|
req.Layer = player.RoleData.Cbdata.NowLayer;
|
|
var df0 = player.RoleData.BattleRecord.BattleTimeDuration;
|
|
if(player.RoleData.Cbdata.NowStartTime == 0)
|
|
{
|
|
res.Ret = CSErrCode.Fail;
|
|
player.SendToClient((int)CSGameMsgID.CbLeaveRes, ref res);
|
|
TraceLog.Error("cbattle not start uid={0}", player.UserID);
|
|
return;
|
|
}
|
|
var df = GameServerUtils.GetTimeMs() - player.RoleData.Cbdata.NowStartTime;
|
|
var battleDesc = ChapterBattleDescMgr.Instance.GetConfig(CommParamDescMgr.Instance.ContBttlId.int_val);
|
|
if(df0 > battleDesc.chapterBattleLimitedTime + 10)
|
|
{
|
|
res.Ret = CSErrCode.Fail;
|
|
player.SendToClient((int)CSGameMsgID.CbLeaveRes, ref res);
|
|
return;
|
|
}
|
|
res.Ret = (int)CSErrCode.None;
|
|
UnifyOp op = new UnifyOp(player, BillChangeItemReason.CBC);
|
|
var r = op.CostItem(CommParamDescMgr.Instance.ContBttlCost.str_list[0], int.Parse(CommParamDescMgr.Instance.ContBttlCost.str_list[1]));
|
|
if (r != CSErrCode.None) {
|
|
res.Ret = r;
|
|
player.SendToClient((int)CSGameMsgID.CbLeaveRes, ref res);
|
|
return;
|
|
}
|
|
for (int i = 0; i < player.RoleData.Cbdata.NowReward.Count; i++)
|
|
{
|
|
ref var reward = ref player.RoleData.Cbdata.NowReward[i];
|
|
op.AddGoods(reward.Type, reward.Id, reward.Value);
|
|
}
|
|
if (req.Layer - 1 >= player.RoleData.Cbdata.MaxLayer)
|
|
{
|
|
player.RoleData.Cbdata.MaxLayer = req.Layer - 1;
|
|
}
|
|
player.RoleData.Cbdata.LastLayer = req.Layer - 1;
|
|
player.RoleData.Cbdata.WeekScore += player.RoleData.Cbdata.NowScore;
|
|
|
|
List<CSItemChgInfo> list = new List<CSItemChgInfo>();
|
|
op.DoOp(true, true, false, list);
|
|
for (int i = 0; i < list.Count; i++)
|
|
{
|
|
res.Items.Add(list[i]);
|
|
}
|
|
res.Data.CopyFrom(ref player.RoleData.Cbdata);
|
|
player.SendToClient((int)CSGameMsgID.CbLeaveRes, ref res);
|
|
|
|
GameTALogUtils.LogContinueBattle(player, player.RoleData.Cbdata.BeginLayer,
|
|
player.RoleData.Cbdata.NowLayer, 1, (int)df/1000, player.RoleData.Cbdata.NowScore, player.RoleData.Cbdata.NowRedCTotal,
|
|
player.RoleData.Cbdata.NowRedC, ref player.RoleData.Cbdata.NowReward, ref player.RoleData.BattleRecord.PropVal);
|
|
|
|
player.RoleData.Cbdata.NowLayer = 0;
|
|
player.RoleData.Cbdata.NowStartTime = 0;
|
|
player.RoleData.Cbdata.NowReward.Clear();
|
|
player.RoleData.Cbdata.NowScore = 0;
|
|
|
|
player.RoleData.BattleRecord.Clear();
|
|
player.RoleData.IsInBattle = false;
|
|
//今日排行
|
|
RankSvc.UpdateRankScore(player, 2, req.Layer - 1);
|
|
//周积分
|
|
RankSvc.UpdateRankScore(player, 3, player.RoleData.Cbdata.WeekScore);
|
|
TraceLog.Trace("{0} leave cbattle layer={1} score={2} usedtime = {3}", player.UserID, req.Layer, player.RoleData.Cbdata.NowScore, df);
|
|
TaskEXEvent.TriggerContBttlTimesN(player);
|
|
if(req.MsgSeq >= 0 && packetReq != null)
|
|
{
|
|
MsgCache cache = new MsgCache();
|
|
//cache.Parser = CSCBLeaveRes.Parser;
|
|
//cache.GetMessage<CSCBLeaveRes>().CopyFrom(ref res);
|
|
cache.SetData(ref res);
|
|
player.msgCache.AddSendMsg(player, packetReq, cache);
|
|
}
|
|
}
|
|
public static void OnGetLayerAward(PlayerOnGame player, StructPacket packet)
|
|
{
|
|
ref var req = ref packet.GetMessage<CSCBGetLayerRewardReq>();
|
|
CSCBGetLayerRewardRes res = new CSCBGetLayerRewardRes();
|
|
res.Layer = req.Layer;
|
|
//if (req.Layer > player.RoleData.Cbdata.MaxLayer)
|
|
//{
|
|
// res.Ret = CSErrCode.Fail;
|
|
// player.SendToClient((int)CSGameMsgID.CbGetlayerrewardRes, ref res);
|
|
// return;
|
|
//}
|
|
//var desc = GetContinueBattleDescByMaxLayer(req.Layer);
|
|
var desc = ContinueBattleDescMgr.Instance.GetConfig(req.Layer);
|
|
if (desc == null)
|
|
{
|
|
res.Ret = CSErrCode.Fail;
|
|
player.SendToClient((int)CSGameMsgID.CbGetlayerrewardRes, ref res);
|
|
return;
|
|
}
|
|
if(desc.historyStage > player.RoleData.Cbdata.MaxLayer)
|
|
{
|
|
res.Ret = CSErrCode.Fail;
|
|
player.SendToClient((int)CSGameMsgID.CbGetlayerrewardRes, ref res);
|
|
return;
|
|
}
|
|
if(desc.levelReward == null || desc.levelReward == "")
|
|
{
|
|
res.Ret = CSErrCode.Fail;
|
|
player.SendToClient((int)CSGameMsgID.CbGetlayerrewardRes, ref res);
|
|
return;
|
|
}
|
|
for (int i = 0; i < player.RoleData.Cbdata.GetLayerReward.Count; i++)
|
|
{
|
|
if (player.RoleData.Cbdata.GetLayerReward[i] == desc.id)
|
|
{
|
|
res.Ret = CSErrCode.Fail;
|
|
player.SendToClient((int)CSGameMsgID.CbGetlayerrewardRes, ref res);
|
|
return;
|
|
}
|
|
}
|
|
player.RoleData.Cbdata.GetLayerReward.Add(desc.id);
|
|
var list = RewardSvc.Reward(player, desc.levelReward, false, false);
|
|
RewardSvc.ApplyGiveReward(player, list, true, BillChangeItemReason.CBC);
|
|
res.Ret = CSErrCode.None;
|
|
res.Data.CopyFrom(ref player.RoleData.Cbdata);
|
|
player.SendToClient((int)CSGameMsgID.CbGetlayerrewardRes, ref res);
|
|
}
|
|
|
|
public static void RankPlayerBylevelRes( StructPacket packet)
|
|
{
|
|
ref var res = ref packet.GetMessage<CSRankPlayerByLevelRes>();
|
|
long uid = res.Uid;
|
|
if (res.Uids.Count == 0)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
uid = res.Uids[0];
|
|
}
|
|
|
|
PlayerOnGame target = GameServerUtils.GetPlayerTableOp().GetPlayerByUid(uid);
|
|
if (target == null)
|
|
{
|
|
var req = new CSPlayerQueryOtherRoleInfoReq();
|
|
req.TargetUid = uid;
|
|
req.QueryRoleType = QueryRoleType.CBC;
|
|
GameServerUtils.GetPacketSender().SendToWorldServer<CSPlayerQueryOtherRoleInfoReq>((int)CSGameMsgID.PlayerQueryOtherRoleInfoReq, ref req, res.Uid);
|
|
}
|
|
else
|
|
{
|
|
CSCBCPlayerQuerySync queryRes = new CSCBCPlayerQuerySync();
|
|
HeroPropUtils.FillHeroInfo(ref queryRes.Info.HeroInfo, ref target.RoleData);
|
|
PlayerUtils.GetRoleBaseInfo(target, ref queryRes.Info.RoleBaseInfo);
|
|
queryRes.Info.RoleBaseInfo.Nick.SetString(GetRobotLastNameByIdx());
|
|
PlayerOnGame p = GameServerUtils.GetPlayerTableOp().GetPlayerByUid(res.Uid);
|
|
if (p != null)
|
|
{
|
|
p.SendToClient((int)CSGameMsgID.CbcPlayerSync, ref queryRes);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void CbcPlayerRes(ref CSPlayerQueryOtherRoleInfoRes res)
|
|
{
|
|
CSCBCPlayerQuerySync queryRes = new CSCBCPlayerQuerySync();
|
|
queryRes.Info.CopyFrom(ref res.ShowInfo);
|
|
PlayerOnGame p = GameServerUtils.GetPlayerTableOp().GetPlayerByUid(res.FromUid);
|
|
if (p != null)
|
|
{
|
|
queryRes.Info.RoleBaseInfo.Nick.SetString(GetRobotLastNameByIdx());
|
|
p.SendToClient((int)CSGameMsgID.CbcPlayerSync, ref queryRes);
|
|
}
|
|
}
|
|
private static string GetRobotLastNameByIdx( )
|
|
{
|
|
int c = RandNameDescMgr.Instance.ItemTable.Count;
|
|
int idx = GameServerUtils.GetGameServerData().m_app.Rand.Next(0, c);
|
|
string name = "";
|
|
var desc = RandNameDescMgr.Instance.GetConfig(idx);
|
|
if (desc != null)
|
|
{
|
|
int randNameRow = 0;
|
|
string strRandNameRow =
|
|
GameServerUtils.GetApp().GetCluster().GetAppParamByKey("randNameRow"); //读第几列,从0开始
|
|
if (!string.IsNullOrEmpty(strRandNameRow))
|
|
{
|
|
int.TryParse(strRandNameRow, out randNameRow);
|
|
}
|
|
|
|
if (randNameRow + 1 <= desc.name.Length)
|
|
{
|
|
if (!string.IsNullOrEmpty(desc.name[randNameRow].LastName))
|
|
{
|
|
name = desc.name[randNameRow].LastName;
|
|
}
|
|
}
|
|
}
|
|
|
|
return name;
|
|
}
|
|
|
|
}
|
|
}
|
|
|