예제 #1
0
 public static void HeartBeatDelayAction()
 {
     for (int i = 0; i < DelayActionManager.m_Actions.Count; i++)
     {
         long        ticks   = TimeUtil.NOW();
         DelayAction tmpInfo = DelayActionManager.m_Actions[i];
         long        lStart  = tmpInfo.m_StartTime;
         long        lDelay  = tmpInfo.m_DelayTime;
         if (ticks - lStart > lDelay)
         {
             DelayActionManager.StartAction(tmpInfo);
         }
     }
 }
예제 #2
0
        public static void StartAction(DelayAction action)
        {
            DelayActionType nActionID       = action.m_DelayActionType;
            DelayActionType delayActionType = nActionID;

            if (delayActionType == DelayActionType.DA_BLINK)
            {
                int          nParams         = action.m_Params[0];
                GameClient   client          = action.m_Client;
                int          nRadius         = nParams * 100;
                GameMap      gameMap         = GameManager.MapMgr.DictMaps[client.ClientData.MapCode];
                int          nDirection      = client.ClientData.RoleDirection;
                Point        pClientGrid     = client.CurrentGrid;
                int          nGridNum        = nRadius / gameMap.MapGridWidth;
                int          nTmp            = nGridNum;
                List <Point> lMovePointsList = Global.GetGridPointByDirection(nDirection, (int)pClientGrid.X, (int)pClientGrid.Y, nGridNum);
                byte         holdBitSet      = 0;
                holdBitSet |= 1;
                holdBitSet |= 2;
                for (int i = 0; i < lMovePointsList.Count; i++)
                {
                    if (Global.InObsByGridXY(client.ObjectType, client.ClientData.MapCode, (int)lMovePointsList[i].X, (int)lMovePointsList[i].Y, 0, holdBitSet))
                    {
                        break;
                    }
                    nGridNum--;
                }
                if (nGridNum < nTmp)
                {
                    pClientGrid = lMovePointsList[nTmp - nGridNum - 1];
                }
                Point canMovePoint = pClientGrid;
                if (!Global.CanQueueMoveObject(client, nDirection, (int)pClientGrid.X, (int)pClientGrid.Y, nGridNum, nGridNum, holdBitSet, out canMovePoint, false))
                {
                    Point clientMoveTo = new Point(canMovePoint.X * (double)gameMap.MapGridWidth + (double)(gameMap.MapGridWidth / 2), canMovePoint.Y * (double)gameMap.MapGridHeight + (double)(gameMap.MapGridHeight / 2));
                    GameManager.ClientMgr.ChangePosition(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, (int)clientMoveTo.X, (int)clientMoveTo.Y, client.ClientData.RoleDirection, 159, 3);
                }
                else
                {
                    Point clientMoveTo = new Point(lMovePointsList[lMovePointsList.Count - 1].X * (double)gameMap.MapGridWidth + (double)(gameMap.MapGridWidth / 2), lMovePointsList[lMovePointsList.Count - 1].Y * (double)gameMap.MapGridHeight + (double)(gameMap.MapGridHeight / 2));
                    GameManager.ClientMgr.ChangePosition(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, (int)clientMoveTo.X, (int)clientMoveTo.Y, client.ClientData.RoleDirection, 159, 3);
                }
                List <object> objsList = Global.GetAll9Clients(client);
                string        strcmd   = string.Format("{0}", client.ClientData.RoleID);
                GameManager.ClientMgr.SendToClients(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, null, objsList, strcmd, 511);
                DelayActionManager.RemoveDelayAction(action);
            }
        }