Esempio n. 1
0
        protected override void ProcessAction_Die(GameStruct.Action act)
        {
            PlayerObject play    = act.GetObject(0) as PlayerObject;
            BaseObject   baseobj = act.GetObject(0) as BaseObject;

            if (play == null && baseobj.type == OBJECTTYPE.EUDEMON)
            {
                play = (baseobj as EudemonObject).GetOwnerPlay();
            }
            //根据打出的伤害获得经验值
            uint injured = (uint)act.GetObject(1);

            NetMsg.MsgMonsterDieInfo info = new NetMsg.MsgMonsterDieInfo();
            info.roleid       = baseobj.GetTypeId();
            info.role_x       = baseobj.GetCurrentX();
            info.role_y       = baseobj.GetCurrentY();
            info.injuredvalue = 0;
            info.monsterid    = this.GetTypeId();
            byte[] msg = info.GetBuffer();


            //掉落道具
            this.DropItem(baseobj);

            //RefreshVisibleObject();
            //if (mRefreshList.Count > 0)
            //{


            //    this.GetGameMap().BroadcastBuffer(this,msg);
            //    //掉落道具
            //    this.DropItem(play);

            //}
            this.BrocatBuffer(msg);
            LastDieTime = System.Environment.TickCount;
            if (play == null && baseobj.type != OBJECTTYPE.EUDEMON)
            {
                return;
            }
            //计算经验
            play.AddExp((int)injured, play.GetLevel(), this.GetLevel());
            //死亡的幻兽加灵气值复活
            play.GetEudemonSystem().Eudemon_Alive(this);

            this.GetAi().Die();

            this.GetAi().SetAttackTarget(null);

            mAliveTime.Update();
            //执行死亡脚本- 最后一击的击杀者执行该脚本
            if (mInfo.die_scripte_id > 0 && play != null)
            {
                ScripteManager.Instance().ExecuteAction(mInfo.die_scripte_id, play);
            }
        }
Esempio n. 2
0
        public void Run()
        {
            //每半分钟一个轮循
            if (System.Environment.TickCount - mRunTick > 1000 * 30)
            {
                mRunTick = System.Environment.TickCount;
                for (int i = 0; i < mListInfo.Count; i++)
                {
                    if (DateTime.Now.Year != 0 && DateTime.Now.Year != mListInfo[i].year)
                    {
                        continue;
                    }
                    if (DateTime.Now.Month != 0 && DateTime.Now.Month != mListInfo[i].month)
                    {
                        continue;
                    }
                    if (DateTime.Now.Day != 0 && DateTime.Now.Day != mListInfo[i].day)
                    {
                        continue;
                    }
                    if (DateTime.Now.Hour != mListInfo[i].hour)
                    {
                        continue;
                    }
                    if (DateTime.Now.Minute != mListInfo[i].minute)
                    {
                        continue;
                    }
                    ScripteManager.Instance().ExecuteAction(mListInfo[i].script_id, null);
                    mListInfo[i].bTag = true;
                }
            }


            //三十分钟-
            //恢复已运行的事件标记
            if (System.Environment.TickCount - mClearTagTick > 1000 * 60 * 30)
            {
                mClearTagTick = System.Environment.TickCount;
                for (int i = 0; i < mListInfo.Count; i++)
                {
                    if (DateTime.Now.Hour != mListInfo[i].hour &&
                        mListInfo[i].bTag)
                    {
                        mListInfo[i].bTag = false;
                    }
                }
            }
            //每一秒一个轮询
            if (mPlayTimeOut.ToNextTime() &&
                mListPlayTimeOut.Count > 0)
            {
                int amount = mListPlayTimeOut.Count;
                while (amount > 0)
                {
                    amount--;
                    if (mListPlayTimeOut[amount].TimeOut.IsToNextTime() &&
                        mListPlayTimeOut[amount].IsOnline &&
                        mListPlayTimeOut[amount].callback_scripte_id > 0)
                    {
                        PlayerObject play = UserEngine.Instance().FindPlayerObjectToPlayerId(mListPlayTimeOut[amount].id);
                        if (play == null)
                        {
                            continue;
                        }
                        ScripteManager.Instance().ExecuteAction(mListPlayTimeOut[amount].callback_scripte_id, play);
                        mListPlayTimeOut.RemoveAt(amount);
                    }
                }
            }
        }