public static void OnCreateTeamCopyRoleLog(GameClient client) { try { if (ZhuanShengShiLian.IsZhuanShengShiLianCopyScene(client.ClientData.MapCode)) { ZSSLScene mapInfo; if (ZhuanShengShiLian.SceneDict.TryGetValue(client.ClientData.FuBenSeqID, out mapInfo)) { lock (ZhuanShengShiLian.ZhuanShengRunTimeData.Mutex) { BossAttackLog bossAttackLog = mapInfo.AttackLog; if (null != bossAttackLog) { long tID_Role = ZhuanShengShiLian.GetGUID(0, client.ClientData.RoleID); long tID_Team = ZhuanShengShiLian.GetGUID(client.ClientData.TeamID, client.ClientData.RoleID); BHAttackLog tAttackLog_Role = null; if (bossAttackLog.BHInjure.TryGetValue(tID_Role, out tAttackLog_Role)) { bossAttackLog.BHInjure.Remove(tID_Role); } if (null != tAttackLog_Role) { bossAttackLog.BHInjure[tID_Team] = tAttackLog_Role; } } } } } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, string.Format("ZhuanShengShiLian :: 处理拷贝角色伤害记录异常。", new object[0]), ex, true); } }
public static int KillerRid(Monster monster) { int roleID = 0; long maxInjure = 0L; lock (MoYuLongXue.MoYuRunTimeData.Mutex) { BossAttackLog bossAttackLog; if (!MoYuLongXue.MoYuRunTimeData.BossAttackLogDict.TryGetValue(monster.RoleID, out bossAttackLog)) { return(0); } if (bossAttackLog.BHAttackRank == null || bossAttackLog.BHAttackRank.Count < 1) { return(0); } BHAttackLog bhAttackLog = bossAttackLog.BHAttackRank[0]; if (null == bhAttackLog.RoleInjure) { return(0); } foreach (KeyValuePair <int, long> item in bhAttackLog.RoleInjure) { if (item.Value > maxInjure) { roleID = item.Key; maxInjure = item.Value; } } } return(roleID); }
private static bool TrySortAttackRank(BossAttackLog bossAttackLog, BHAttackLog myAttackLog) { bool result; if (bossAttackLog == null || null == myAttackLog) { result = false; } else { BHAttackLog rankMin = null; bool justReSort = false; bool rebuildRank = false; if (bossAttackLog.BHAttackRank.Count >= 20) { int countLimit = Global.GMin(bossAttackLog.BHAttackRank.Count, 20); rankMin = bossAttackLog.BHAttackRank[countLimit - 1]; if (myAttackLog.BHInjure > rankMin.BHInjure) { rebuildRank = true; } } else if (bossAttackLog.BHAttackRank.Count < 20) { rebuildRank = true; } if (bossAttackLog.BHAttackRank.Exists((BHAttackLog x) => object.ReferenceEquals(x, myAttackLog))) { if (rankMin != null && myAttackLog.BHInjure > rankMin.BHInjure) { justReSort = true; } else { rebuildRank = true; } } int myRank = bossAttackLog.BHAttackRank.FindIndex((BHAttackLog x) => object.ReferenceEquals(x, myAttackLog)); bool top5Chg = myRank >= 0 && myRank < 5; if (justReSort) { bossAttackLog.BHAttackRank.Sort((BHAttackLog x, BHAttackLog y) => (int)(y.BHInjure - x.BHInjure)); } if (rebuildRank) { bossAttackLog.BHAttackRank = bossAttackLog.BHInjure.Values.ToList <BHAttackLog>(); bossAttackLog.BHAttackRank.Sort((BHAttackLog x, BHAttackLog y) => (int)(y.BHInjure - x.BHInjure)); int countLimit = Global.GMin(bossAttackLog.BHAttackRank.Count, 20); bossAttackLog.BHAttackRank = bossAttackLog.BHAttackRank.GetRange(0, countLimit); } myRank = bossAttackLog.BHAttackRank.FindIndex((BHAttackLog x) => object.ReferenceEquals(x, myAttackLog)); top5Chg |= (myRank >= 0 && myRank < 5); result = top5Chg; } return(result); }
public static void OnClientLeaveBangHui(int faction, int rid) { lock (MoYuLongXue.MoYuRunTimeData.Mutex) { foreach (BossAttackLog attackLog in MoYuLongXue.MoYuRunTimeData.BossAttackLogDict.Values) { if (null != attackLog.BHInjure) { BHAttackLog bhLog = null; if (attackLog.BHInjure.TryGetValue((long)faction, out bhLog)) { bhLog.RoleInjure.Remove(rid); } } } } }
public static void OnBangHuiDestroy(int faction) { lock (MoYuLongXue.MoYuRunTimeData.Mutex) { foreach (BossAttackLog attackLog in MoYuLongXue.MoYuRunTimeData.BossAttackLogDict.Values) { if (null != attackLog.BHInjure) { BHAttackLog bhLog = null; if (attackLog.BHInjure.TryGetValue((long)faction, out bhLog)) { bhLog.RoleInjure.Clear(); } } } } }
public static int KillerRid(GameClient client, Monster monster) { ZSSLScene mapInfo; int result; if (!ZhuanShengShiLian.SceneDict.TryGetValue(client.ClientData.FuBenSeqID, out mapInfo)) { result = 0; } else { int roleID = 0; long maxInjure = 0L; lock (ZhuanShengShiLian.ZhuanShengRunTimeData.Mutex) { if (mapInfo.AttackLog.BHAttackRank == null || mapInfo.AttackLog.BHAttackRank.Count < 1) { return(0); } BHAttackLog bhAttackLog = mapInfo.AttackLog.BHAttackRank[0]; if (null == bhAttackLog.RoleInjure) { return(0); } foreach (KeyValuePair <int, long> item in bhAttackLog.RoleInjure) { if (item.Value > maxInjure) { roleID = item.Key; maxInjure = item.Value; } } } result = roleID; } return(result); }
public static void ProcessAttack(GameClient client, Monster monster, int injure) { try { lock (MoYuLongXue.MoYuRunTimeData.Mutex) { if (!MoYuLongXue.MoYuRunTimeData.MonsterXmlDict.ContainsKey(monster.MonsterInfo.ExtensionID)) { return; } BossAttackLog bossAttackLog; if (!MoYuLongXue.MoYuRunTimeData.BossAttackLogDict.TryGetValue(monster.RoleID, out bossAttackLog)) { bossAttackLog = new BossAttackLog { InjureSum = 0L, BHInjure = new Dictionary <long, BHAttackLog>(), BHAttackRank = new List <BHAttackLog>() }; MoYuLongXue.MoYuRunTimeData.BossAttackLogDict[monster.RoleID] = bossAttackLog; } if (client.ClientData.Faction > 0) { BHAttackLog bhAttackLog; if (!bossAttackLog.BHInjure.TryGetValue((long)client.ClientData.Faction, out bhAttackLog)) { bhAttackLog = new BHAttackLog { BHID = client.ClientData.Faction, BHName = client.ClientData.BHName, BHInjure = 0L, RoleInjure = new Dictionary <int, long>() }; bossAttackLog.BHInjure[(long)client.ClientData.Faction] = bhAttackLog; bossAttackLog.BHAttackRank.Add(bhAttackLog); } if (!bhAttackLog.RoleInjure.ContainsKey(client.ClientData.RoleID)) { bhAttackLog.RoleInjure[client.ClientData.RoleID] = 0L; } Dictionary <int, long> roleInjure; int roleID; (roleInjure = bhAttackLog.RoleInjure)[roleID = client.ClientData.RoleID] = roleInjure[roleID] + (long)injure; bhAttackLog.BHInjure += (long)injure; bossAttackLog.BHAttackRank.Sort(delegate(BHAttackLog x, BHAttackLog y) { int result; if (x.BHInjure > y.BHInjure) { result = -1; } else if (x.BHInjure < y.BHInjure) { result = 1; } else { result = 0; } return(result); }); } bossAttackLog.InjureSum += (long)injure; } MoYuLongXue.NotifyBossLogBy9Grid(monster); } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, string.Format("MoYuLongXue :: 处理攻击boss异常。", new object[0]), ex, true); } }
public static void ProcessAttack(GameClient client, Monster monster, int injure) { try { if (injure > 0) { long tID = ZhuanShengShiLian.GetGUID(client.ClientData.TeamID, client.ClientData.RoleID); string tName = client.ClientData.RoleName; TeamData td = GameManager.TeamMgr.FindData(client.ClientData.TeamID); if (null != td) { lock (td) { TeamMemberData member = td.GetLeader(); if (null != member) { tName = member.RoleName; } } } ZSSLScene mapInfo; if (ZhuanShengShiLian.SceneDict.TryGetValue(client.ClientData.FuBenSeqID, out mapInfo)) { bool top5Chg = false; lock (ZhuanShengShiLian.ZhuanShengRunTimeData.Mutex) { BossAttackLog bossAttackLog = mapInfo.AttackLog; if (null == bossAttackLog) { bossAttackLog = new BossAttackLog { InjureSum = 0L, BHInjure = new Dictionary <long, BHAttackLog>(), BHAttackRank = new List <BHAttackLog>() }; } BHAttackLog bhAttackLog; if (!bossAttackLog.BHInjure.TryGetValue(tID, out bhAttackLog)) { bhAttackLog = new BHAttackLog { BHName = tName, BHInjure = 0L, RoleInjure = new Dictionary <int, long>() }; bossAttackLog.BHInjure[tID] = bhAttackLog; } if (!bhAttackLog.RoleInjure.ContainsKey(client.ClientData.RoleID)) { bhAttackLog.RoleInjure[client.ClientData.RoleID] = 0L; } Dictionary <int, long> roleInjure; int roleID; (roleInjure = bhAttackLog.RoleInjure)[roleID = client.ClientData.RoleID] = roleInjure[roleID] + (long)injure; bhAttackLog.BHInjure += (long)injure; top5Chg = ZhuanShengShiLian.TrySortAttackRank(bossAttackLog, bhAttackLog); bossAttackLog.InjureSum += (long)injure; } ZhuanShengShiLian.BroadBossLife(mapInfo, client, top5Chg); } } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, string.Format("ZhuanShengShiLian :: 处理攻击boss异常。", new object[0]), ex, true); } }