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); } }
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); } } } }