protected override void OnRequest(request_skill_op request, object userdata) { if (userdata is SkillEquipActionParam) { SkillEquipActionParam param = userdata as SkillEquipActionParam; request.op_type = (int)SKILL_OP_TYPE.SKILL_OP_EQUIP; skill_equip_info info = new skill_equip_info(); for (int i = 0; i < param.EquipIdx.Length; ++i) { info.equip_id.Add(param.EquipIdx[i]); } request.equip_info = info; } if (userdata is SkillLevelActionParam) { SkillLevelActionParam param = userdata as SkillLevelActionParam; request.op_type = (int)SKILL_OP_TYPE.SKILL_OP_LEVEL; for (int i = 0; i < param.SkillIdxs.Count; ++i) { request.skill_idx.Add(param.SkillIdxs[i]); } for (int i = 0; i < param.DefaultEquips.Count; ++i) { request.default_equip_idx.Add(param.DefaultEquips[i]); } } if (userdata is SkillWeaponSkillParam) { request.op_type = (int)SKILL_OP_TYPE.SKILL_OP_UNLOCK_WEAPON_SKILL; } }
/// <summary> /// 装备/切换技能; /// idx : 技能槽索引[1,4]; /// skillId : 技能Id; /// </summary> public void EquipSkill(int idx, int skillId) { PlayerData pd = PlayerDataPool.Instance.MainData; if (pd == null) { Debug.LogError("MainData is Null"); return; } if (idx < 1 || idx > SkillMaxCountDefine.MAX_EQUIP_SKILL_NUM) { Debug.LogError("技能槽索引值无效"); return; } if (IsSlotLocked(idx)) { Debug.LogError("技能槽还没有解锁,装备技能失败"); return; } PlayerSkillData skillData = pd.skillData; idx -= 1; //要装备的技能在技能槽中存在且在技能槽中的位置不变,不做操作; if (skillData.skills[idx] == skillId) { return; } int[] skillIds = new int[4]; skillIds = skillData.skills; int slotIdx = -1; if (!GetSlotIdxBySkillID(skillId, ref slotIdx)) { skillIds[idx] = skillId; } //如果要装备的技能在技能槽中存在,在技能槽的位置改变,那么互换该技能原来位置和现在的技能槽的位置; else { int temp = skillData.skills[idx]; skillIds[idx] = skillId; skillIds[slotIdx] = temp; } SkillEquipActionParam param = new SkillEquipActionParam(); param.EquipIdx = skillIds; Net.Instance.DoAction((int)MESSAGE_ID.ID_MSG_SKILL, param); #region //int slotIdx = -1; ////记录哪个位置的技能槽发生改变; //ArrayList changeIdx = new ArrayList(); ////记录哪个位置的技能发生改变; //ArrayList changeSkillIdx = new ArrayList(); ////要装备的技能在技能槽中不存在,直接替换为该技能; //if(!GetSlotIdxBySkillID(skillId , ref slotIdx)) //{ // changeSkillIdx.Clear(); // changeSkillIdx.Add(skillId); // changeSkillIdx.Add(skillData.skills[idx]); // skillData.skills[idx] = skillId; // changeIdx.Clear(); // changeIdx.Add(idx); //} ////如果要装备的技能在技能槽中存在,在技能槽的位置改变,那么互换该技能原来位置和现在的技能槽的位置; //else //{ // int temp = skillData.skills[idx]; // skillData.skills[idx] = skillId; // skillData.skills[slotIdx] = temp; // changeIdx.Clear(); // changeIdx.Add(idx); // changeIdx.Add(slotIdx); // changeSkillIdx.Clear(); // changeSkillIdx.Add(temp); // changeSkillIdx.Add(skillId); //} //SkillUIEvent se = new SkillUIEvent(SkillUIEvent.SKILL_SLOT_CHANGE); //se.msg = changeIdx;//记录的slotIdx有效范围[0...3] //EventSystem.Instance.PushEvent(se); //SkillUIEvent se1 = new SkillUIEvent(SkillUIEvent.SKILL_LIST_CHANGE); //se1.msg = changeSkillIdx; //EventSystem.Instance.PushEvent(se1); #endregion }