private void ProcessAward(GameClient client) { if (this.BattlingState >= BattleStates.StartFight) { if (this.BattlingState == BattleStates.StartFight) { long ticks = TimeUtil.NOW(); if (ticks < this.StateStartTicks + 1000L) { return; } } lock (this.mutex) { int nFlag; if (!this.TheKingOfPKGetawardFlag.TryGetValue(client.ClientData.RoleID, out nFlag)) { return; } if (nFlag > 0) { return; } this.TheKingOfPKGetawardFlag[client.ClientData.RoleID] = 1; } if (client.ClientData.KingOfPkCurrentPoint > this.TheKingOfPKTopPoint) { this.SetTotalPointInfo(client.ClientData.RoleName, client.ClientData.KingOfPkCurrentPoint); } string strPkAward = GameManager.systemParamsList.GetParamValueByName("PkAward"); string[] strChengJiu = null; string[] strExp = null; if (!string.IsNullOrEmpty(strPkAward)) { string[] strFild = strPkAward.Split(new char[] { '|' }); string strInfo = strFild[0]; strChengJiu = strInfo.Split(new char[] { ',' }); strInfo = strFild[1]; strExp = strInfo.Split(new char[] { ',' }); } HeFuAwardTimesActivity activity = HuodongCachingMgr.GetHeFuAwardTimesActivity(); JieRiMultAwardActivity jieriact = HuodongCachingMgr.GetJieRiMultAwardActivity(); SpecPriorityActivity spAct = HuodongCachingMgr.GetSpecPriorityActivity(); double actTimes = 0.0; if (activity != null && activity.InActivityTime() && (double)activity.activityTimes > 0.0) { actTimes += (double)activity.activityTimes; } if (null != jieriact) { JieRiMultConfig config = jieriact.GetConfig(3); if (null != config) { actTimes += config.GetMult(); } } if (null != spAct) { actTimes += spAct.GetMult(SpecPActivityBuffType.SPABT_PKKing); } actTimes = Math.Max(1.0, actTimes); int nChengjiuPoint = Global.SafeConvertToInt32(strChengJiu[0]) + Global.GMin(Global.SafeConvertToInt32(strChengJiu[1]), client.ClientData.KingOfPkCurrentPoint) * Global.SafeConvertToInt32(strChengJiu[2]); nChengjiuPoint *= (int)actTimes; if (nChengjiuPoint > 0) { ChengJiuManager.AddChengJiuPoints(client, "角斗赛", nChengjiuPoint, true, true); } double nRate = Data.ChangeLifeEverydayExpRate[client.ClientData.ChangeLifeCount]; long nExp = (long)((int)((double)Global.SafeConvertToInt32(strExp[0]) * nRate + (double)(Global.GMin(Global.SafeConvertToInt32(strExp[1]), client.ClientData.KingOfPkCurrentPoint) * Global.SafeConvertToInt32(strExp[2])) * nRate)); double dblExperience = 1.0; dblExperience += actTimes; nExp = (long)((int)((double)nExp * dblExperience)); if (nExp > 0L) { GameManager.ClientMgr.ProcessRoleExperience(client, nExp, true, true, false, "none"); } string strCmd = string.Format("{0}:{1}:{2}", client.ClientData.KingOfPkCurrentPoint, nChengjiuPoint, nExp); client.ClientData.KingOfPkCurrentPoint = 0; GameManager.ClientMgr.SendToClient(client, strCmd, 569); ProcessTask.ProcessAddTaskVal(client, TaskTypes.PKKing, -1, 1, new object[0]); } }
/// <summary> /// 给奖励 /// </summary> public void GiveAwards(HuanYingSiYuanScene huanYingSiYuanScene) { try { List <GameClient> objsList = huanYingSiYuanScene.CopyMap.GetClientsList(); if (objsList != null && objsList.Count > 0) { int nowDayId = Global.GetOffsetDayNow(); for (int n = 0; n < objsList.Count; ++n) { GameClient client = objsList[n]; if (client != null && client == GameManager.ClientMgr.FindClient(client.ClientData.RoleID)) //确认角色仍然在线 { bool success = false; double nMultiple = 0.5; int awardsRate = 1; int count = 0; HuanYingSiYuanLianShaContextData clientLianShaContextData = client.SceneContextData2 as HuanYingSiYuanLianShaContextData; if (null != clientLianShaContextData && clientLianShaContextData.TotalScore >= RuntimeData.TempleMirageMinJiFen) { if (client.ClientData.BattleWhichSide == huanYingSiYuanScene.SuccessSide) { success = true; nMultiple = 1; //每日前3次享受10倍奖励 int dayid = Global.GetRoleParamsInt32FromDB(client, RoleParamName.HysySuccessDayId); if (dayid == nowDayId) { count = Global.GetRoleParamsInt32FromDB(client, RoleParamName.HysySuccessCount); if (count < RuntimeData.TempleMirageWinExtraNum) { awardsRate = RuntimeData.TempleMirageWinExtraRate; } } else { awardsRate = RuntimeData.TempleMirageWinExtraRate; } } } else { //达不到最低分数,无奖励,不计次 nMultiple = 0; awardsRate = 0; } // 公式 long nExp = (long)(RuntimeData.TempleMirageEXPAward * nMultiple * client.ClientData.ChangeLifeCount); int chengJiuaward = (int)(RuntimeData.TempleMirageAwardChengJiu * nMultiple); int shengWangaward = (int)(RuntimeData.TempleMirageAwardShengWang * nMultiple); if (nExp > 0) { GameManager.ClientMgr.ProcessRoleExperience(client, nExp * awardsRate, false); //GameManager.ClientMgr.NotifyAddExpMsg(client, nExp); //客户端自己提示,有显示"X10"的需求 } if (chengJiuaward > 0) { ChengJiuManager.AddChengJiuPoints(client, "幻影寺院获得成就", chengJiuaward * awardsRate, true, true); } if (shengWangaward > 0) { GameManager.ClientMgr.ModifyShengWangValue(client, shengWangaward * awardsRate, "幻影寺院获得声望"); } HuanYingSiYuanAwardsData awardsData = new HuanYingSiYuanAwardsData() { SuccessSide = huanYingSiYuanScene.SuccessSide, Exp = nExp, ShengWang = shengWangaward, ChengJiuAward = chengJiuaward, AwardsRate = awardsRate, }; if (success) { if (nMultiple > 0) { Global.SaveRoleParamsInt32ValueToDB(client, RoleParamName.HysySuccessDayId, nowDayId, true); Global.SaveRoleParamsInt32ValueToDB(client, RoleParamName.HysySuccessCount, count + 1, true); GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 1, 0, (int)GameTypes.HuanYingSiYuan); if (huanYingSiYuanScene.ScoreInfoData.Score1 >= 1000 || huanYingSiYuanScene.ScoreInfoData.Score2 >= 1000) { //FaildCount记录为获得够1000分而获胜的人次 GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 0, 1, (int)GameTypes.HuanYingSiYuan); } } } else { //FaildCount记录为失败人次 //GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 0, 1); } client.sendCmd((int)TCPGameServerCmds.CMD_SPR_HYSY_AWARD, awardsData); } } } } catch (System.Exception ex) { DataHelper.WriteExceptionLogEx(ex, "幻影寺院清场调度异常"); } }
/// <summary> /// 给奖励 /// </summary> private void ProcessAward(GameClient client) { int nFlag; if (BattlingState < BattleStates.StartFight) { //开始战斗前离开不给奖励 return; } else if (BattlingState == BattleStates.StartFight) { long ticks = DateTime.Now.Ticks / 10000; if (ticks < StateStartTicks + 1000) //进场1秒后退出才给奖励,防止卡时间点刷奖励 { return; } } lock (mutex) { if (!TheKingOfPKGetawardFlag.TryGetValue(client.ClientData.RoleID, out nFlag)) { return; } if (nFlag > 0) { return; } TheKingOfPKGetawardFlag[client.ClientData.RoleID] = 1; } if (client.ClientData.KingOfPkCurrentPoint > TheKingOfPKTopPoint) { SetTotalPointInfo(client.ClientData.RoleName, client.ClientData.KingOfPkCurrentPoint); } // 1.成就=系数1+Min(系数2,积分)*系数3 2.经验=Min(400,转生级别*400+人物等级)*系数1+Min(系数2,积分)*系数3 2014.4.21改成 人物级别*转生级别对应比例*系数1 +Min(系数2,积分)*系数3 // 经验=系数1*SystemParams.xml定义的ZhuanShengExpXiShu参数值+Min(系数2,积分)*系数3*SystemParams.xml定义的ZhuanShengExpXiShu参数值 string strPkAward = GameManager.systemParamsList.GetParamValueByName("PkAward"); string[] strChengJiu = null; string[] strExp = null; int nChengjiuPoint = 0; long nExp = 0; if (!string.IsNullOrEmpty(strPkAward)) { string[] strFild = strPkAward.Split('|'); string strInfo = strFild[0]; strChengJiu = strInfo.Split(','); strInfo = strFild[1]; strExp = strInfo.Split(','); } nChengjiuPoint = Global.SafeConvertToInt32(strChengJiu[0]) + Global.GMin(Global.SafeConvertToInt32(strChengJiu[1]), client.ClientData.KingOfPkCurrentPoint) * Global.SafeConvertToInt32(strChengJiu[2]); if (nChengjiuPoint > 0) { ChengJiuManager.AddChengJiuPoints(client, "角斗赛", nChengjiuPoint, true, true); } //nExp = Global.GMin(400, client.ClientData.ChangeLifeCount * 400 + client.ClientData.Level) * Global.SafeConvertToInt32(strExp[0]) + // Global.GMin(Global.SafeConvertToInt32(strExp[1]), client.ClientData.KingOfPkCurrentPoint) * Global.SafeConvertToInt32(strExp[2]); double nRate = 0.0; /*if (client.ClientData.ChangeLifeCount == 0) * nRate = 1; * else * nRate = Data.ChangeLifeInfoList[client.ClientData.ChangeLifeCount].ExpProportion;*/ nRate = Data.ChangeLifeEverydayExpRate[client.ClientData.ChangeLifeCount]; //(int)(client.ClientData.Level * nRate * Global.SafeConvertToInt32(strExp[0]) + Global.GMin(Global.SafeConvertToInt32(strExp[1]), client.ClientData.KingOfPkCurrentPoint) * Global.SafeConvertToInt32(strExp[2])); nExp = (int)(Global.SafeConvertToInt32(strExp[0]) * nRate + Global.GMin(Global.SafeConvertToInt32(strExp[1]), client.ClientData.KingOfPkCurrentPoint) * Global.SafeConvertToInt32(strExp[2]) * nRate); double dblExperience = 1.0; // 合服期间奖励翻倍 // 活动时间内 HeFuAwardTimesActivity activity = HuodongCachingMgr.GetHeFuAwardTimesActivity(); if (null != activity && activity.InActivityTime() && activity.activityTimes > 0.0) { dblExperience += activity.activityTimes - 1; } // 节日多倍奖励 JieRiMultAwardActivity jieriact = HuodongCachingMgr.GetJieRiMultAwardActivity(); if (null != jieriact) { JieRiMultConfig config = jieriact.GetConfig((int)MultActivityType.TheKingOfPK); if (null != config) { dblExperience += config.GetMult(); } } nExp = (int)(nExp * dblExperience); if (nExp > 0) { GameManager.ClientMgr.ProcessRoleExperience(client, nExp); } string strCmd = ""; // 1.自己的积分 2.获得成就积分 3.获得经验 strCmd = string.Format("{0}:{1}:{2}", client.ClientData.KingOfPkCurrentPoint, nChengjiuPoint, nExp); client.ClientData.KingOfPkCurrentPoint = 0; GameManager.ClientMgr.SendToClient(client, strCmd, (int)TCPGameServerCmds.CMD_SPR_NOTIFYTHEKINGOFPKAWARDINFO); }