GetTypeId() public méthode

public GetTypeId ( ) : uint
Résultat uint
Exemple #1
0
        //刷新可视对象列表
        public virtual void RefreshVisibleObject()
        {
            //在地图被销毁的怪物啊-- 掉落物品啊..刷新的时候找不到了就删除掉!
            uint        id       = 0;
            List <uint> templist = null;

            foreach (RefreshObject refobj in mVisibleList.Values)
            {
                BaseObject obj = refobj.obj;
                if (obj.type == OBJECTTYPE.MONSTER ||
                    obj.type == OBJECTTYPE.GUARDKNIGHT)
                {
                    id = obj.GetTypeId();
                }
                else
                {
                    id = obj.GetGameID();
                }
                if (GetGameMap().GetObject(id) == null)
                {
                    if (templist == null)
                    {
                        templist = new List <uint>();
                    }
                    templist.Add(id);
                }
            }
            if (templist != null)
            {
                for (int i = 0; i < templist.Count; i++)
                {
                    mVisibleList.Remove(templist[i]);
                }
            }
        }
Exemple #2
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);
            }
        }
Exemple #3
0
        public override bool Run()
        {
            base.Run();
            if (System.Environment.TickCount - mnTick > mnTime)
            {
                this.ClearThis();
                return(false);
            }

            //会攻击的特效-- 降灵咒雨
            if (mnEffID == Define.JIANGLINGZHOUYU)
            {
                if (System.Environment.TickCount - mnAttackTick > 1000)
                {
                    mnAttackTick = System.Environment.TickCount;

                    NetMsg.MsgMonsterMagicInjuredInfo magicattack = new NetMsg.MsgMonsterMagicInjuredInfo();
                    magicattack.roleid  = (uint)mnEffID;
                    magicattack.role_x  = this.GetCurrentX();
                    magicattack.role_y  = this.GetCurrentY();
                    magicattack.tag     = 21;
                    magicattack.magicid = (ushort)Define.JIANGLINGZHOUYU_MAGICID;
                    magicattack.magiclv = 0;

                    this.BrocatBuffer(magicattack.GetBuffer());

                    NetMsg.MsgGroupMagicAttackInfo magicattackex = new NetMsg.MsgGroupMagicAttackInfo();
                    magicattackex.nID      = mPlay.GetTypeId();
                    magicattackex.nX       = this.GetCurrentX();
                    magicattackex.nY       = this.GetCurrentY();
                    magicattackex.nMagicID = (ushort)Define.JIANGLINGZHOUYU_MAGICID;
                    magicattackex.nMagicLv = 0;
                    magicattackex.bDir     = this.GetDir();
                    NetMsg.MsgAttackInfo info = new NetMsg.MsgAttackInfo();
                    info.tag = 21;
                    //---攻击 暂时只攻击怪物
                    foreach (RefreshObject refobj in this.GetVisibleList().Values)
                    {
                        BaseObject obj = refobj.obj;
                        if (obj.type == OBJECTTYPE.MONSTER)
                        {
                            if (this.GetPoint().CheckVisualDistance(obj.GetCurrentX(), obj.GetCurrentY(), Define.JIANGLINGZHOUYU_DIS))
                            {
                                uint nValue = BattleSystem.AdjustDamage(mPlay, obj, true);
                                magicattackex.AddObject(obj.GetTypeId(), (int)nValue);

                                obj.Injured(mPlay, nValue, info);
                            }
                        }
                    }
                    this.BrocatBuffer(magicattackex.GetBuffer());
                }
            }
            return(true);
        }
 public override bool CanPK(BaseObject obj, bool bGoCrime = true)
 {
     bool ret = base.CanPK(obj);
     if (ret)
     {
         //不攻击主人
         if (obj.type == OBJECTTYPE.PLAYER)
         {
             if (obj.GetTypeId() == mPlay.GetTypeId())
             {
                 return false;
             }
         }
     }
     return ret;
     // return base.CheckIsAttack(obj);
 }
Exemple #5
0
        public override bool CanPK(BaseObject obj, bool bGoCrime = true)
        {
            bool ret = base.CanPK(obj);

            if (ret)
            {
                //不攻击主人
                if (obj.type == OBJECTTYPE.PLAYER)
                {
                    if (obj.GetTypeId() == mPlay.GetTypeId())
                    {
                        return(false);
                    }
                }
            }
            return(ret);
            // return base.CheckIsAttack(obj);
        }
Exemple #6
0
        //删除地图对象
        public void RemoveObj(BaseObject obj)
        {
            uint id;

            if (obj.type == OBJECTTYPE.MONSTER)
            {
                id = obj.GetTypeId();
            }
            else
            {
                id = obj.GetGameID();
            }
            if (mDicObject.ContainsKey(id))
            {
                if (obj.type == OBJECTTYPE.PLAYER)
                {
                    PlayerObject play = obj as PlayerObject;
                    play.ClearThis(); //广播删除自己
                }
                if (obj.type == OBJECTTYPE.EUDEMON)
                {
                    EudemonObject eudemon = obj as EudemonObject;
                    eudemon.ReCall();
                }
                if (obj.type == OBJECTTYPE.PTICH)
                {
                    PtichObject ptich = obj as PtichObject;
                    ptich.ClearThis();
                }
                //加到临时删除列表- 下次process时处理删除
                mListDeleteObj.Add(obj);
                //  mDicObject.Remove(id);
            }
            if (this.GetObjectCount(OBJECTTYPE.PLAYER) == 0)
            {
                last_null_tick = System.Environment.TickCount;
            }
        }
Exemple #7
0
        public void DropItem(BaseObject attack)
        {
            //计算爆的值
            uint ownerid = attack.GetTypeId();

            if (attack.type == OBJECTTYPE.EUDEMON)
            {
                if ((attack as EudemonObject).GetOwnerPlay() != null)
                {
                    ownerid = (attack as EudemonObject).GetOwnerPlay().GetTypeId();
                }
            }
            byte droptype = BattleSystem.AdjustDrop(attack, this);

            if (droptype == BattleSystem.EXPLODE_ITEM_CHANCE1)
            {
                return;
            }
            GameStruct.DropItemInfo info = ConfigManager.Instance().GetDropItemInfo(mInfo.drop_group);
            if (info == null)
            {
                return;
            }
            int num = 0;

            switch (droptype)
            {
            case BattleSystem.EXPLODE_ITEM_CHANCE2:
            {
                num = IRandom.Random(2, 5);
                break;
            }

            case BattleSystem.EXPLODE_ITEM_CHANCE3:
            {
                num = IRandom.Random(6, 9);
                break;
            }

            case BattleSystem.EXPLODE_ITEM_CHANCE4:
            {
                num = IRandom.Random(10, 15);
                break;
            }
            }
            //如果不是百分之百的爆率..爆不出那么多的啦
            int   nCurnum = 0;
            short x       = 0;
            short y       = 0;

            //要爆的数量
            for (int i = 0; i < num; i++)
            {
                int nNum = IRandom.Random(0, info.listamount.Count);
                for (int j = 0; j < nNum; j++)
                {
                    int index = IRandom.Random(0, info.listamount.Count);
                    if (IRandom.Random(1, 100) < info.listrate[index])
                    {
                        this.GetDropItemPoint(ref x, ref y);
                        DropItemClass dropclass = info.listitem[index];
                        if (dropclass.list_itemid.Count == 1)
                        {
                            this.GetGameMap().AddDropItemObj(dropclass.list_itemid[0], x, y, ownerid);
                        }
                        else
                        {
                            continue; //掉落的道具组多个道具在下面的函数掉落。
                        }
                        //else
                        //{
                        //    this.GetGameMap().AddDropItemObj(dropclass.list_itemid[IRandom.Random(0,dropclass.list_itemid.Count - 1)], x, y, attack.GetTypeId());
                        //}

                        nCurnum++;
                        if (nCurnum == num)
                        {
                            break;
                        }
                    }
                }
            }
            //必掉的道具
            for (int i = 0; i < info.listitem.Count; i++)
            {
                DropItemClass dropclass = info.listitem[i];
                if (dropclass.list_itemid.Count > 1)
                {
                    for (int j = 0; j < info.listamount[i]; j++)
                    {
                        if (IRandom.Random(1, 100) < info.listrate[i])
                        {
                            this.GetDropItemPoint(ref x, ref y);
                            this.GetGameMap().AddDropItemObj(dropclass.list_itemid[IRandom.Random(0, dropclass.list_itemid.Count - 1)], x, y, ownerid);
                        }
                    }
                }
            }
        }
Exemple #8
0
        public void Process()
        {
            if (mDicObject.Count == 0 &&
                mListDeleteObj.Count == 0 &&
                mListAddObj.Count == 0)
            {
                return;                         //地图没人..就不处理了
            }
            //删除离开地图的玩家
            if (mListDeleteObj.Count > 0)
            {
                uint id;
                for (int i = 0; i < mListDeleteObj.Count; i++)
                {
                    BaseObject obj = mListDeleteObj[i] as BaseObject;
                    if (obj.type == OBJECTTYPE.MONSTER ||
                        obj.type == OBJECTTYPE.GUARDKNIGHT)
                    {
                        id = obj.GetTypeId();
                    }
                    else
                    {
                        id = obj.GetGameID();
                    }
                    //obj.Dispose();
                    //if (obj.type == OBJECTTYPE.PLAYER)
                    //{
                    //    UserEngine.Instance().RemovePlayObject(obj as PlayerObject);
                    //}
                    if (mDicObject.ContainsKey(id))
                    {
                        mDicObject.Remove(id);
                    }
                }
                mListDeleteObj.Clear();
            }

            //要添加的对象
            if (mListAddObj.Count > 0)
            {
                for (int i = 0; i < mListAddObj.Count; i++)
                {
                    BaseObject obj = mListAddObj[i];
                    if (obj.type == OBJECTTYPE.MONSTER) //怪物是以typeid为主键
                    {
                        mDicObject[obj.GetTypeId()] = obj;
                    }
                    else
                    {
                        mDicObject[obj.GetGameID()] = obj;
                    }
                }
                mListAddObj.Clear();
            }
            //地图所有对象run
            //需要拷贝一份词典,因为在循环里面会改变该词典的集合--
            //需要优化 这里效率太低了
            // Dictionary<uint, BaseObject> tempdic = new Dictionary<uint, BaseObject>(mDicObject);
            //2015.11.12 已解决,声明了一个删除的列表- mListDeleteObj 在removeobj后加入到列表 process再进行删除-内存不涨了 好开心o(∩_∩)o 哈哈
            foreach (BaseObject obj in mDicObject.Values)
            {
                if (!obj.Run())
                {
                    mListDeleteObj.Add(obj);
                }
            }
        }
Exemple #9
0
 //删除地图对象
 public void RemoveObj(BaseObject obj)
 {
     uint id ;
     if(obj.type == OBJECTTYPE.MONSTER) id = obj.GetTypeId();
     else id =obj.GetGameID();
     if ( mDicObject.ContainsKey(id))
     {
         if (obj.type == OBJECTTYPE.PLAYER)
         {
             PlayerObject play = obj as PlayerObject;
             play.ClearThis(); //广播删除自己
         }
         if (obj.type == OBJECTTYPE.EUDEMON)
         {
             EudemonObject eudemon = obj as EudemonObject;
             eudemon.ReCall();
         }
         if (obj.type == OBJECTTYPE.PTICH)
         {
             PtichObject ptich = obj as PtichObject;
             ptich.ClearThis();
         }
         //加到临时删除列表- 下次process时处理删除
         mListDeleteObj.Add(obj);
       //  mDicObject.Remove(id);
     }
     if (this.GetObjectCount(OBJECTTYPE.PLAYER) == 0)
     {
         last_null_tick = System.Environment.TickCount;
     }
 }
Exemple #10
0
        //连击技能
        private void ComboMagic(NetMsg.MsgAttackInfo info, BaseObject target)
        {
            byte[] msg = null;
            ushort magiclv = play.GetMagicSystem().GetMagicLevel(info.skillid);
            GameStruct.MagicTypeInfo baseinfo = ConfigManager.Instance().GetMagicTypeInfo(info.usType);

            //施法动作
            NetMsg.MsgMonsterMagicInjuredInfo magicinfo = new NetMsg.MsgMonsterMagicInjuredInfo();
            magicinfo.roleid = play.GetTypeId();
            magicinfo.role_x = play.GetCurrentX();
            magicinfo.role_y = play.GetCurrentY();
            magicinfo.injuredvalue = 0;
            magicinfo.monsterid = play.GetTypeId();
            magicinfo.tag = 21;
            magicinfo.magicid = (ushort)info.usType;
            magicinfo.magiclv = magiclv;
            msg = magicinfo.GetBuffer();
            play.BroadcastBuffer(msg);
            //play.GetGameMap().BroadcastBuffer(play, msg);
            int _locktime = ConfigManager.Instance().GetTrackTime(baseinfo.track_id);
            int _target_locktime = ConfigManager.Instance().GetTrackTime(baseinfo.track_id2);

            int trackcount = ConfigManager.Instance().GetTrackNumber(baseinfo.track_id);
            //锁定自己与目标
            play.Lock(_locktime);
            target.Lock(_target_locktime, target.type == OBJECTTYPE.PLAYER);
            //计算伤害值
             NetMsg.MsgMagicAttackInfo magicattack ;
            for (int i = 0; i < trackcount; i++)
            {
                ////如果是影轮回,就有几率穿透伤害
                //magicattack = new NetMsg.MsgMagicAttackInfo();
                //magicattack.id = play.GetTypeId();

                //magicattack.value = 0;
                //magicattack.magicid = (ushort)GameStruct.MagicTypeInfo.ZHENSHIDAJI;
                //magicattack.level = magiclv;
                //magicattack.targetid = target.GetTypeId();
                //msg = magicattack.GetBuffer();
                //play.BroadcastBuffer(msg, true);
               // target.Injured(play, injured, info);

                //优先攻击合体的幻兽
                uint target_id = target.GetTypeId();
                if (target.type == OBJECTTYPE.PLAYER)
                {
                    EudemonObject eudemon_obj = (target as PlayerObject).GetEudemonSystem().GetInjuredEudemon();
                    if (eudemon_obj != null)
                    {
                        target_id = eudemon_obj.GetTypeId();
                    }
                }

                magicattack = new NetMsg.MsgMagicAttackInfo();
                magicattack.id = play.GetTypeId();
                uint injured = BattleSystem.AdjustDamage(play, target);
                magicattack.value = injured;
                magicattack.magicid = (ushort)info.usType;
                magicattack.level = magiclv;
                magicattack.targetid = target_id;
                msg = magicattack.GetBuffer();
                play.BroadcastBuffer(msg, true);
                target.Injured(play, injured, info);
            }

            if (baseinfo.track_id > 0)
            {
                //取得攻击方向
                byte attackdir = GameStruct.DIR.GetDirByPos(play.GetCurrentX(), play.GetCurrentY(), target.GetCurrentX(), target.GetCurrentY());
                play.SetDir(attackdir);
                target.SetDir(attackdir);

                NetMsg.MsgCombo combo = new NetMsg.MsgCombo();
                combo.CalcTag(info.usType, play, target);
                short x = 0;
                short y = 0;
                GameStruct.TrackInfo trackinfo = ConfigManager.Instance().GetTrackInfo(baseinfo.track_id);
                GameStruct.TrackInfo track2 = ConfigManager.Instance().GetTrackInfo(baseinfo.track_id2);
                for (int i = 0; i < trackcount; i++)
                {
                    //怪物
                    if (track2.step > 0)
                    {
                        if (GameStruct.DIR.GetNexPoint(target, ref x, ref y)) { target.SetPoint(x, y); }
                    }
                    //角色
                    if (trackinfo.step > 0)
                    {
                        for (int j = 0; j < trackinfo.step;j++ )
                        {
                            if (GameStruct.DIR.GetNexPoint(play, ref x, ref y)) { play.SetPoint(x, y); }
                        }

                    }

                    combo.AddComboInfo(info.usType, play, target, trackinfo.action, track2.action);

                    trackinfo = ConfigManager.Instance().GetTrackInfo(trackinfo.id_next);
                    if (track2.id_next != 0)
                    {
                        track2 = ConfigManager.Instance().GetTrackInfo(track2.id_next);
                    }
                }
                msg = combo.GetBuffer();
                play.BroadcastBuffer(msg, true);

            }
        }
Exemple #11
0
        public override bool Run()
        {
            bool ret = base.Run();

            //距离超出-
            if (!this.GetPoint().CheckVisualDistance(mPlay.GetCurrentX(), mPlay.GetCurrentY(), DIS))
            {
                mPlay.GetTimerSystem().DeleteStatus(GameStruct.RoleStatus.STATUS_MINGGUOSHENGNV);
                return(false);
            }
            //刷新周围对象以便寻找目标
            if (this.GetAi().GetTargetObject() == null)
            {
                if (System.Environment.TickCount - mnRefreshTick > REFRESHTIME)
                {
                    this.RefreshVisibleObject();
                    mnRefreshTick = System.Environment.TickCount;
                }
            }
            if (mMagicAttackTime.ToNextTime())
            {
                this.RefreshVisibleObject();

                NetMsg.MsgMonsterMagicInjuredInfo magicattack = new NetMsg.MsgMonsterMagicInjuredInfo();
                magicattack.roleid  = this.GetTypeId();
                magicattack.role_x  = this.GetCurrentX();
                magicattack.role_y  = this.GetCurrentY();
                magicattack.tag     = 21;
                magicattack.magicid = 6051;
                magicattack.magiclv = 0;
                this.BrocatBuffer(magicattack.GetBuffer());



                NetMsg.MsgGroupMagicAttackInfo magicattackex = new NetMsg.MsgGroupMagicAttackInfo();
                magicattackex.nID      = this.GetTypeId();
                magicattackex.nX       = this.GetCurrentX();
                magicattackex.nY       = this.GetCurrentY();
                magicattackex.nMagicID = 6051;
                magicattackex.nMagicLv = 0;
                magicattackex.bDir     = this.GetDir();
                foreach (RefreshObject refobj in this.GetVisibleList().Values)
                {
                    //只攻击怪物
                    if (refobj.obj.type == OBJECTTYPE.MONSTER)
                    {
                        BaseObject obj = refobj.obj;
                        if (this.GetPoint().CheckVisualDistance(obj.GetCurrentX(), obj.GetCurrentY(), 10))
                        {
                            uint injured = BattleSystem.AdjustDamage(mPlay, obj, true);
                            NetMsg.MsgAttackInfo info = new NetMsg.MsgAttackInfo();
                            info.tag = 21;
                            obj.Injured(this, injured, info);
                            magicattackex.AddObject(obj.GetTypeId(), (int)injured);
                        }
                    }
                }
                this.BrocatBuffer(magicattackex.GetBuffer());
            }
            return(ret);
        }
        public void DropItem(BaseObject attack)
        {
            //计算爆的值
            uint ownerid = attack.GetTypeId();
            if (attack.type == OBJECTTYPE.EUDEMON)
            {
                if((attack as EudemonObject).GetOwnerPlay() != null)
                {
                    ownerid = (attack as EudemonObject).GetOwnerPlay().GetTypeId();
                }

            }
            byte droptype = BattleSystem.AdjustDrop(attack, this);
            if(droptype == BattleSystem.EXPLODE_ITEM_CHANCE1)return;
            GameStruct.DropItemInfo info = ConfigManager.Instance().GetDropItemInfo(mInfo.drop_group);
            if (info == null) return;
            int num = 0;
            switch(droptype)
            {
                case BattleSystem.EXPLODE_ITEM_CHANCE2:
                    {
                        num = IRandom.Random(2,5);
                        break;
                    }
                case BattleSystem.EXPLODE_ITEM_CHANCE3:
                    {
                        num = IRandom.Random(6,9);
                        break;
                    }
                case BattleSystem.EXPLODE_ITEM_CHANCE4:
                    {
                        num = IRandom.Random(10,15);
                        break;
                    }
            }
            //如果不是百分之百的爆率..爆不出那么多的啦
            int nCurnum = 0;
            short x = 0;
            short y = 0;
            //要爆的数量
            for (int i = 0; i < num; i++)
            {
               int nNum = IRandom.Random(0, info.listamount.Count);
               for (int j = 0; j < nNum; j++)
               {
                     int index = IRandom.Random(0, info.listamount.Count);
                     if (IRandom.Random(1, 100) < info.listrate[index])
                   {
                       this.GetDropItemPoint(ref x, ref y);
                       DropItemClass dropclass = info.listitem[index];
                       if (dropclass.list_itemid.Count == 1)
                       {
                           this.GetGameMap().AddDropItemObj(dropclass.list_itemid[0], x, y, ownerid);
                       }
                       else continue; //掉落的道具组多个道具在下面的函数掉落。
                       //else
                       //{
                       //    this.GetGameMap().AddDropItemObj(dropclass.list_itemid[IRandom.Random(0,dropclass.list_itemid.Count - 1)], x, y, attack.GetTypeId());
                       //}

                       nCurnum++;
                       if (nCurnum == num) break;
                    }
                }
            }
            //必掉的道具
            for (int i = 0; i < info.listitem.Count; i++)
            {
                DropItemClass dropclass = info.listitem[i];
                if (dropclass.list_itemid.Count > 1)
                {
                    for (int j = 0; j < info.listamount[i]; j++)
                    {
                        if (IRandom.Random(1, 100) < info.listrate[i])
                        {
                            this.GetDropItemPoint(ref x, ref y);
                            this.GetGameMap().AddDropItemObj(dropclass.list_itemid[IRandom.Random(0, dropclass.list_itemid.Count - 1)], x, y, ownerid);
                        }
                    }

                }
            }
        }