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); } }
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); } }
/// <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); } }
public override void dispose() { base.dispose(); _equipNumDic.clear(); _mLogic = null; }
/// <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); }
protected override void preExecute() { if ((mLogic = me.character.getMUnitUseLogic(mIndex)) == null) { Ctrl.warnLog("收到MUnit类消息时,主单位使用逻辑不存在"); return; } execute(); }
/** 通过角色使用数据创建单位数据 */ 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); }
/** 创建机器人角色数据(不包括自己) */ public UnitData createCharacterDataForRobot(long playerID) { MUnitUseLogic logic = _logicDic.get(playerID); if (logic == null) { Ctrl.throwError("未找到角色逻辑", playerID); } UnitData data = createMUnitDataByLogic(logic); makeEnterUnitData(data); return(data); }
/// <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); } }
/** 添加单位 */ 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); }
/// <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); } }
/// <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; } }
public void setMUnitLogic(MUnitUseLogic logic) { _mLogic = logic; }
/** 设置使用逻辑 */ public void setUseLogic(MUnitUseLogic logic) { _useLogic = logic; }