Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 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);
                 }
             }
         }
     }
 }
Beispiel #5
0
 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();
                 }
             }
         }
     }
 }
Beispiel #6
0
        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);
        }
Beispiel #7
0
 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);
     }
 }
Beispiel #8
0
 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);
     }
 }