Пример #1
0
        public static int NotifyInjured(SocketListener sl, TCPOutPacketPool pool, GameClient client, FakeRoleItem enemy, int burst, int injure, double injurePercent, int attackType, bool forceBurst, int addInjure, double attackPercent, int addAttackMin, int addAttackMax, double baseRate = 1.0, int addVlue = 0, int nHitFlyDistance = 0)
        {
            int ret = 0;

            if ((enemy as FakeRoleItem).CurrentLifeV > 0)
            {
                injure = 1000;
                injure = (int)((double)injure * injurePercent);
                ret    = injure;
                (enemy as FakeRoleItem).CurrentLifeV -= injure;
                (enemy as FakeRoleItem).CurrentLifeV  = Global.GMax((enemy as FakeRoleItem).CurrentLifeV, 0);
                int enemyLife = (enemy as FakeRoleItem).CurrentLifeV;
                (enemy as FakeRoleItem).AttackedRoleID = client.ClientData.RoleID;
                GameManager.ClientMgr.SpriteInjure2Blood(sl, pool, client, injure);
                (enemy as FakeRoleItem).AddAttacker(client.ClientData.RoleID, Global.GMax(0, injure));
                GameManager.SystemServerEvents.AddEvent(string.Format("假人减血, Injure={0}, Life={1}", injure, enemyLife), EventLevels.Debug);
                if ((enemy as FakeRoleItem).CurrentLifeV <= 0)
                {
                    GameManager.SystemServerEvents.AddEvent(string.Format("假人死亡, roleID={0}", (enemy as FakeRoleItem).FakeRoleID), EventLevels.Debug);
                    FakeRoleManager.ProcessFakeRoleDead(sl, pool, client, enemy as FakeRoleItem);
                }
                Point hitToGrid = new Point(-1.0, -1.0);
                if (nHitFlyDistance > 0)
                {
                    MapGrid mapGrid  = GameManager.MapGridMgr.DictGrids[client.ClientData.MapCode];
                    int     nGridNum = nHitFlyDistance * 100 / mapGrid.MapGridWidth;
                    if (nGridNum > 0)
                    {
                        hitToGrid = ChuanQiUtils.HitFly(client, enemy, nGridNum);
                    }
                }
                if ((enemy as FakeRoleItem).AttackedRoleID >= 0 && (enemy as FakeRoleItem).AttackedRoleID != client.ClientData.RoleID)
                {
                    GameClient findClient = GameManager.ClientMgr.FindClient((enemy as FakeRoleItem).AttackedRoleID);
                    if (null != findClient)
                    {
                        GameManager.ClientMgr.NotifySpriteInjured(sl, pool, findClient, findClient.ClientData.MapCode, findClient.ClientData.RoleID, (enemy as FakeRoleItem).FakeRoleID, 0, 0, (double)enemyLife, findClient.ClientData.Level, hitToGrid, 0, EMerlinSecretAttrType.EMSAT_None, 0);
                        ClientManager.NotifySelfEnemyInjured(sl, pool, findClient, findClient.ClientData.RoleID, enemy.FakeRoleID, 0, 0, (double)enemyLife, 0L, 0, EMerlinSecretAttrType.EMSAT_None, 0);
                    }
                }
                GameManager.ClientMgr.NotifySpriteInjured(sl, pool, client, client.ClientData.MapCode, client.ClientData.RoleID, (enemy as FakeRoleItem).FakeRoleID, burst, injure, (double)enemyLife, client.ClientData.Level, hitToGrid, 0, EMerlinSecretAttrType.EMSAT_None, 0);
                ClientManager.NotifySelfEnemyInjured(sl, pool, client, client.ClientData.RoleID, enemy.FakeRoleID, burst, injure, (double)enemyLife, 0L, 0, EMerlinSecretAttrType.EMSAT_None, 0);
                if (!client.ClientData.DisableChangeRolePurpleName)
                {
                    GameManager.ClientMgr.ForceChangeRolePurpleName2(sl, pool, client);
                }
            }
            return(ret);
        }
Пример #2
0
        public static void ProcessAllFakeRoleItems(SocketListener sl, TCPOutPacketPool pool)
        {
            List <FakeRoleItem> FakeRoleItemList = new List <FakeRoleItem>();

            lock (FakeRoleManager._ID2FakeRoleDict)
            {
                foreach (FakeRoleItem val in FakeRoleManager._ID2FakeRoleDict.Values)
                {
                    FakeRoleItemList.Add(val);
                }
            }
            long nowTicks = TimeUtil.NOW();

            for (int i = 0; i < FakeRoleItemList.Count; i++)
            {
                FakeRoleItem FakeRoleItem = FakeRoleItemList[i];
                if (FakeRoleManager.ProcessFakeRoleDead(sl, pool, nowTicks, FakeRoleItem))
                {
                }
            }
        }
Пример #3
0
        public static void NotifyInjured(SocketListener sl, TCPOutPacketPool pool, GameClient client, int roleID, int enemy, int enemyX, int enemyY, int burst, int injure, double attackPercent, int addAttack, double baseRate = 1.0, int addVlue = 0, int nHitFlyDistance = 0)
        {
            object obj = FakeRoleManager.FindFakeRoleByID(enemy);

            if (null != obj)
            {
                if ((obj as FakeRoleItem).CurrentLifeV > 0)
                {
                    injure = 10000;
                    (obj as FakeRoleItem).CurrentLifeV -= injure;
                    (obj as FakeRoleItem).CurrentLifeV  = Global.GMax((obj as FakeRoleItem).CurrentLifeV, 0);
                    int enemyLife = (obj as FakeRoleItem).CurrentLifeV;
                    (obj as FakeRoleItem).AttackedRoleID = client.ClientData.RoleID;
                    GameManager.ClientMgr.SpriteInjure2Blood(sl, pool, client, injure);
                    GameManager.SystemServerEvents.AddEvent(string.Format("假人减血, Injure={0}, Life={1}", injure, enemyLife), EventLevels.Debug);
                    if ((obj as FakeRoleItem).CurrentLifeV <= 0)
                    {
                        GameManager.SystemServerEvents.AddEvent(string.Format("假人死亡, roleID={0}", (obj as FakeRoleItem).FakeRoleID), EventLevels.Debug);
                        FakeRoleManager.ProcessFakeRoleDead(sl, pool, client, obj as FakeRoleItem);
                    }
                    int ownerRoleID = (obj as FakeRoleItem).GetAttackerFromList();
                    if (ownerRoleID >= 0 && ownerRoleID != client.ClientData.RoleID)
                    {
                        GameClient findClient = GameManager.ClientMgr.FindClient(ownerRoleID);
                        if (null != findClient)
                        {
                            GameManager.ClientMgr.NotifySpriteInjured(sl, pool, findClient, findClient.ClientData.MapCode, findClient.ClientData.RoleID, (obj as FakeRoleItem).FakeRoleID, 0, 0, (double)enemyLife, findClient.ClientData.Level, new Point(-1.0, -1.0), 0, EMerlinSecretAttrType.EMSAT_None, 0);
                            ClientManager.NotifySelfEnemyInjured(sl, pool, findClient, findClient.ClientData.RoleID, (obj as FakeRoleItem).FakeRoleID, 0, 0, (double)enemyLife, 0L, 0, EMerlinSecretAttrType.EMSAT_None, 0);
                        }
                    }
                    GameManager.ClientMgr.NotifySpriteInjured(sl, pool, client, client.ClientData.MapCode, client.ClientData.RoleID, (obj as FakeRoleItem).FakeRoleID, burst, injure, (double)enemyLife, client.ClientData.Level, new Point(-1.0, -1.0), 0, EMerlinSecretAttrType.EMSAT_None, 0);
                    ClientManager.NotifySelfEnemyInjured(sl, pool, client, client.ClientData.RoleID, (obj as FakeRoleItem).FakeRoleID, burst, injure, (double)enemyLife, 0L, 0, EMerlinSecretAttrType.EMSAT_None, 0);
                    if (!client.ClientData.DisableChangeRolePurpleName)
                    {
                        GameManager.ClientMgr.ForceChangeRolePurpleName2(sl, pool, client);
                    }
                }
            }
        }