Exemple #1
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);
    }
Exemple #2
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);
    }
Exemple #3
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;
        }
    }