/** 通过角色使用数据创建单位数据 */ 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 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> 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; } }