Ejemplo n.º 1
0
 private void doEquipActions(MUnitUseLogic logic, PlayerEquipContainerTool tool, int slot, int[][] actions, bool isOn)
 {
     for (int i = 0; i < actions.Length; ++i)
     {
         doOneEquipAction(logic, tool, slot, i, actions[i], isOn);
     }
 }
Ejemplo n.º 2
0
        public override void initUseLogicByUseData(MUnitUseLogic logic, MUnitUseData useData, bool needFuncTool, bool needBindPlayer, bool isClientDrive)
        {
            if (!_g22)
            {
                _m22 = instance.Type.GetMethod("initUseLogicByUseData", 5);
                _g22 = true;
            }

            if (_m22 != null && !_b22)
            {
                _b22   = true;
                _p5[0] = logic;
                _p5[1] = useData;
                _p5[2] = needFuncTool;
                _p5[3] = needBindPlayer;
                _p5[4] = isClientDrive;
                appdomain.Invoke(_m22, instance, _p5);
                _p5[0] = null;
                _p5[1] = null;
                _p5[2] = null;
                _p5[3] = null;
                _p5[4] = null;
                _b22   = false;
            }
            else
            {
                base.initUseLogicByUseData(logic, useData, needFuncTool, needBindPlayer, isClientDrive);
            }
        }
Ejemplo n.º 3
0
    /// <summary>
    /// 通过保存数据初始化
    /// </summary>
    public virtual void initUseLogicByUseData(MUnitUseLogic logic, MUnitUseData useData, bool needFuncTool, bool needBindPlayer, bool isClientDrive)
    {
        //基础部分
        logic.init(useData, isClientDrive);

        if (needBindPlayer)
        {
            logic.setPlayer(me);
        }

        if (isClientDrive)
        {
            //补满血蓝
            logic.getAttributeLogic().fillHpMp();
            //刷属性
            logic.getAttributeLogic().refreshAttributes();
        }

        if (needFuncTool)
        {
            int funcID = logic.getMUnitFuncID(FunctionType.Equip);
            PlayerEquipContainerTool funcTool = toCreatePlayerEquipContainerTool(funcID);
            //互相绑定
            funcTool.setMUnitLogic(logic);
            logic.setEquipTool(funcTool);

            me.func.addFuncTool(funcTool, useData.equips);
        }
    }
Ejemplo n.º 4
0
    public override void dispose()
    {
        base.dispose();

        _equipNumDic.clear();
        _mLogic = null;
    }
Ejemplo n.º 5
0
    /// <summary>
    /// 移除装备影响(单个装备)
    /// </summary>
    public void removeEquipInfluence(MUnitUseLogic logic, PlayerEquipContainerTool tool, int slot, ItemData data)
    {
        if (CommonSetting.isClientDriveLogic)
        {
            logic.getAttributeLogic().subAttributes(data.config.baseAttributes);
        }

        doEquipActions(logic, tool, slot, data.config.equipActions, false);
    }
Ejemplo n.º 6
0
    protected override void preExecute()
    {
        if ((mLogic = me.character.getMUnitUseLogic(mIndex)) == null)
        {
            Ctrl.warnLog("收到MUnit类消息时,主单位使用逻辑不存在");
            return;
        }

        execute();
    }
Ejemplo n.º 7
0
    /** 通过角色使用数据创建单位数据 */
    protected UnitData createMUnitDataByLogic(MUnitUseLogic logic)
    {
        //构造符合主角的数据
        UnitData data = GameC.factory.createUnitData();

        data.identity = logic.createIdentityData();

        bool isSelf = logic.getPlayerID() == GameC.player.role.playerID;

        //完整场景
        if (!_scene.isSimple())
        {
            //战斗数据
            //位置数据出去赋值
            _scene.unitFactory.initBaseUnitData(data);

            (data.move = new UnitMoveData()).initDefault();
            //战斗附加数据
            data.fightEx = new UnitFightExData();
            //AI数据
            data.ai = new UnitAIData();

            //不是限定场景,或者不是自己
            if (!_scene.isFinite() || !isSelf)
            {
                //取角色的数据和数据逻辑
                data.fight          = logic.getData().fight;
                data.avatar         = logic.getData().avatar;
                data.fightDataLogic = logic.getFightLogic();
                //				//绑定场景
                //				data.fightDataLogic.setScene(_scene);
                data.fightDataLogic.setIsDriveAll(true);
            }
            else
            {
                //拷贝数据
                data.fight  = (UnitFightData)logic.getData().fight.clone();
                data.avatar = (UnitAvatarData)logic.getData().avatar.clone();

                data.fightDataLogic = GameC.pool.createUnitFightDataLogic();
                //				//绑定场景
                //				data.fightDataLogic.setScene(_scene);
                data.fightDataLogic.setIsDriveAll(true);
                //绑定数据
                data.fightDataLogic.setData(data.fight, data.avatar);
            }
        }

        return(data);
    }
Ejemplo n.º 8
0
    /** 创建机器人角色数据(不包括自己) */
    public UnitData createCharacterDataForRobot(long playerID)
    {
        MUnitUseLogic logic = _logicDic.get(playerID);

        if (logic == null)
        {
            Ctrl.throwError("未找到角色逻辑", playerID);
        }

        UnitData data = createMUnitDataByLogic(logic);

        makeEnterUnitData(data);
        return(data);
    }
Ejemplo n.º 9
0
    /// <summary>
    /// 移除角色战斗数据逻辑
    /// </summary>
    public void removeMUnitUseLogic(MUnitUseLogic logic)
    {
        if (logic.index == -1)
        {
            Ctrl.throwError("未就绪的MUnitUseLogic");
        }

        _mUnitUseLogics.remove(logic.index);

        if (logic.isWorking())
        {
            _mUnitUseLogicOnWorking.remove(logic.index);
        }
    }
Ejemplo n.º 10
0
    /** 添加单位 */
    public Unit addUnit(UnitData data)
    {
        //预处理
        //服务器驱动场景启用
        if (_config.instanceType != SceneInstanceType.ClientDriveSinglePlayerBattle)
        {
            //是自己的M单位
            if (data.identity is MUnitIdentityData && data.identity.playerID == GameC.player.role.playerID)
            {
                MUnitUseLogic useLogic = GameC.player.character.getMUnitUseLogic(data.getMUnitIdentity().mIndex);

                if (useLogic == null)
                {
                    Ctrl.throwError("不能找不到主单位的使用逻辑", data.getMUnitIdentity().mIndex);
                }

                //取主角的数据逻辑
                UnitFightDataLogic dataLogic = useLogic.getFightLogic();

                //先清空
                dataLogic.clear();
                //再重设数据
                dataLogic.setData(data.fight, data.avatar);

                data.fightDataLogic = dataLogic;
            }
        }


        //

        Unit unit = toAddUnit(data);

        if (unit != null)
        {
            toActiveUnit(unit);

            UnitSimpleData sData = _bindVisionUnits.get(data.instanceID);

            if (sData != null)
            {
                unit.makeSimpleUnitData(sData);
            }
        }

        return(unit);
    }
Ejemplo n.º 11
0
    /// <summary>
    /// 添加角色战斗数据逻辑
    /// </summary>
    public void addMUnitUseLogic(MUnitUseLogic logic)
    {
        if (logic.index == -1)
        {
            me.throwError("未就绪的MUnitUseLogic");
        }

        if (_mUnitUseLogics.contains(logic.index))
        {
            me.throwError("重复的MUnitUseLogic" + logic.index);
        }

        _mUnitUseLogics.put(logic.index, logic);

        if (logic.isWorking())
        {
            _mUnitUseLogicOnWorking.put(logic.index, logic);
        }
    }
Ejemplo n.º 12
0
    /// <summary>
    /// 执行单个装备方法
    /// </summary>
    protected void doOneEquipAction(MUnitUseLogic logic, PlayerEquipContainerTool tool, int slot, int index, int[] args, bool isOn)
    {
        switch (args[0])
        {
        case ItemEquipActionType.AddBuff:
        {
            if (!CommonSetting.isClientDriveLogic)
            {
                return;
            }

            if (isOn)
            {
                if (ShineSetting.openCheck)
                {
                    BuffConfig buffConfig = BuffConfig.get(args[0]);

                    if (buffConfig.keepType != BuffKeepType.Online)
                    {
                        Ctrl.throwError("装备用buff的保存类型必须为Online");
                    }
                }

                BuffData buffData = logic.getBuffLogic().addBuff(args[0], args[1]);
                //记录buffID
                tool.getBuffInstanceIDDic().put(slot << CommonSetting.buffActionIndexOff | index, buffData.instanceID);
            }
            else
            {
                int instanceID = tool.getBuffInstanceIDDic().remove(slot << CommonSetting.buffActionIndexOff | index);

                if (instanceID <= 0)
                {
                    Ctrl.errorLog("不该找不到buff instanceID");
                }
                else
                {
                    logic.getBuffLogic().removeBuffByInstanceID(instanceID);
                }
            }
        }
        break;

        case ItemEquipActionType.AddSkill:
        {
            if (!CommonSetting.isClientDriveLogic)
            {
                return;
            }

            if (isOn)
            {
                logic.getFightLogic().addSkill(args[0], args[1]);
            }
            else
            {
                logic.getFightLogic().removeSkill(args[0]);
            }
        }
        break;
        }
    }
Ejemplo n.º 13
0
 public void setMUnitLogic(MUnitUseLogic logic)
 {
     _mLogic = logic;
 }
Ejemplo n.º 14
0
 /** 设置使用逻辑 */
 public void setUseLogic(MUnitUseLogic logic)
 {
     _useLogic = logic;
 }