public static void ProcessAllBiaoCheItems(SocketListener sl, TCPOutPacketPool pool) { List <BiaoCheItem> biaoCheItemList = new List <BiaoCheItem>(); lock (BiaoCheManager._ID2BiaoCheDict) { foreach (BiaoCheItem val in BiaoCheManager._ID2BiaoCheDict.Values) { biaoCheItemList.Add(val); } } long nowTicks = TimeUtil.NOW(); for (int i = 0; i < biaoCheItemList.Count; i++) { BiaoCheItem biaoCheItem = biaoCheItemList[i]; if (!BiaoCheManager.ProcessBiaoCheOverTime(sl, pool, nowTicks, biaoCheItem)) { if (!BiaoCheManager.ProcessBiaoCheDead(sl, pool, nowTicks, biaoCheItem)) { BiaoCheManager.ProcessBiaoCheAddLife(sl, pool, nowTicks, biaoCheItem); } } } }
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 = BiaoCheManager.FindBiaoCheByID(enemy); if (null != obj) { if ((obj as BiaoCheItem).CurrentLifeV > 0) { injure = (obj as BiaoCheItem).CutLifeV; injure = (int)((double)injure * baseRate + (double)addVlue); (obj as BiaoCheItem).CurrentLifeV -= injure; (obj as BiaoCheItem).CurrentLifeV = Global.GMax((obj as BiaoCheItem).CurrentLifeV, 0); double enemyLife = (double)(obj as BiaoCheItem).CurrentLifeV; (obj as BiaoCheItem).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 BiaoCheItem).CurrentLifeV <= 0) { GameManager.SystemServerEvents.AddEvent(string.Format("镖车死亡, roleID={0}", (obj as BiaoCheItem).BiaoCheID), EventLevels.Debug); BiaoCheManager.ProcessBiaoCheDead(sl, pool, client, obj as BiaoCheItem); } if ((obj as BiaoCheItem).AttackedRoleID >= 0 && (obj as BiaoCheItem).AttackedRoleID != client.ClientData.RoleID) { GameClient findClient = GameManager.ClientMgr.FindClient((obj as BiaoCheItem).AttackedRoleID); if (null != findClient) { GameManager.ClientMgr.NotifySpriteInjured(sl, pool, findClient, findClient.ClientData.MapCode, findClient.ClientData.RoleID, (obj as BiaoCheItem).BiaoCheID, 0, 0, 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 BiaoCheItem).BiaoCheID, 0, 0, enemyLife, 0L, 0, EMerlinSecretAttrType.EMSAT_None, 0); } } GameManager.ClientMgr.NotifySpriteInjured(sl, pool, client, client.ClientData.MapCode, client.ClientData.RoleID, (obj as BiaoCheItem).BiaoCheID, burst, injure, 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 BiaoCheItem).BiaoCheID, burst, injure, enemyLife, 0L, 0, EMerlinSecretAttrType.EMSAT_None, 0); if (!client.ClientData.DisableChangeRolePurpleName) { GameManager.ClientMgr.ForceChangeRolePurpleName2(sl, pool, client); } } } }