Beispiel #1
0
    public override bool Init(ObjectInitParam param)
    {
        if (!base.Init(param))
        {
            return(false);
        }

        TrapInitParam trapInit = (TrapInitParam)param;

        if (!DataManager.TrapTable.ContainsKey(trapInit.trapResID))
        {
            return(false);
        }

        mTrapResource = DataManager.TrapTable[trapInit.trapResID] as TrapTableItem;
        mModelResID   = (int)mTrapResource.modelID;
        mSummonerAttr = trapInit.summonerAttr;

        // 没有召唤者.
        if (mSummonerAttr.AttackerID == uint.MaxValue)
        {
            mSummonerAttr = new AttackerAttr(this, mSummonerAttr.SkillCommonID, mSummonerAttr.StructMadeByRandEvent);
        }

        mTaskManager = new SkillUtilities.TaskManager(null);

        // 生命时间结束后, 进入倒计时死亡.
        mTaskManager.AddTask(new SkillUtilities.Task(trapInit.lifeTime, explodeCountBackwards, null));

        // 倒计时死亡之后, 再经过爆炸延迟, 开始爆炸.
        uint explodeTime = uint.MaxValue;

        // 避免累加时溢出.
        if (trapInit.lifeTime != uint.MaxValue && mTrapResource.explodeDelay != uint.MaxValue)
        {
            explodeTime = trapInit.lifeTime + mTrapResource.explodeDelay;
        }

        mTaskManager.AddTask(new SkillUtilities.Task(explodeTime, explode, null));
        mTaskManager.Start();

        return(true);
    }
Beispiel #2
0
    private bool checkTrap()
    {
        DataType myName           = DataType.DATA_TRAP;
        IDictionaryEnumerator itr = DataManager.TrapTable.GetEnumerator();

        while (itr.MoveNext())
        {
            TrapTableItem item = itr.Value as TrapTableItem;
            if (!checkParam(item.modelID != uint.MaxValue, myName, item.resID, "模型ID"))
            {
                return(false);
            }

            if (!checkLink(myName, item.resID, DataType.DATA_MODEL, item.modelID))
            {
                return(false);
            }

            if (item.buffID != uint.MaxValue &&
                !checkLink(myName, item.resID, DataType.DATA_SKILL_BUFF, item.buffID))
            {
                return(false);
            }

            if (!checkParam(item.explodeDelay != uint.MaxValue, myName, item.resID, "爆炸延迟"))
            {
                return(false);
            }

            if (item.buffID != uint.MaxValue &&
                !checkParam(
                    !SkillUtilities.IsHarmfulEffect(SkillEffectType.Buff, item.buffID),
                    DataType.DATA_TRAP, item.resID, "出生buff", "不能为trap添加有害的出生buff."))
            {
                return(false);
            }

            if (item.delayEffect != uint.MaxValue && !checkLink(myName, item.resID, DataType.DATA_EFFECT, item.delayEffect))
            {
                return(false);
            }

            if (!checkParam(item.collideRadius != uint.MaxValue, myName, item.resID, "碰撞检测半径", "无效的碰撞检测半径需要填入0"))
            {
                return(false);
            }

            if (item.targetSelectionOnExplode != uint.MaxValue &&
                !checkLink(myName, item.resID, DataType.DATA_SKILL_TARGET_SELECTION, item.targetSelectionOnExplode))
            {
                return(false);
            }

            if (item.skillEffectOnExplode != uint.MaxValue &&
                !checkLink(myName, item.resID, DataType.DATA_SKILL_EFFECT, item.skillEffectOnExplode))
            {
                return(false);
            }

            if (item._3DEffectOnExplode != uint.MaxValue &&
                !checkLink(myName, item.resID, DataType.DATA_EFFECT, item._3DEffectOnExplode))
            {
                return(false);
            }
        }
//      foreach (int key in DataManager.TrapTable.Keys)
//      {
//          TrapTableItem item = DataManager.TrapTable[key] as TrapTableItem;
//          if(!checkParam(item.modelID != uint.MaxValue, myName, key, "模型ID"))
//              return false;
//
//          if (!checkLink(myName, key, DataType.DATA_MODEL, item.modelID))
//              return false;
//
//          if (item.buffID != uint.MaxValue
//              && !checkLink(myName, key, DataType.DATA_SKILL_BUFF, item.buffID))
//              return false;
//
//          if (!checkParam(item.explodeDelay != uint.MaxValue, myName, key, "爆炸延迟"))
//              return false;
//
//          if (item.buffID != uint.MaxValue
//              && !checkParam(
//                  !SkillUtilities.IsHarmfulEffect(SkillEffectType.Buff, item.buffID),
//                  DataType.DATA_TRAP, key, "出生buff", "不能为trap添加有害的出生buff."))
//              return false;
//
//          if (item.delayEffect != uint.MaxValue && !checkLink(myName, key, DataType.DATA_EFFECT, item.delayEffect))
//              return false;
//
//          if (!checkParam(item.collideRadius != uint.MaxValue, myName, key, "碰撞检测半径", "无效的碰撞检测半径需要填入0"))
//              return false;
//
//          if (item.targetSelectionOnExplode != uint.MaxValue
//              && !checkLink(myName, key, DataType.DATA_SKILL_TARGET_SELECTION, item.targetSelectionOnExplode))
//              return false;
//
//          if (item.skillEffectOnExplode != uint.MaxValue
//              && !checkLink(myName, key, DataType.DATA_SKILL_EFFECT, item.skillEffectOnExplode))
//              return false;
//
//          if (item._3DEffectOnExplode != uint.MaxValue
//              && !checkLink(myName, key, DataType.DATA_EFFECT, item._3DEffectOnExplode))
//              return false;
//      }

        return(true);
    }