protected override void InitWindow() { base.InitWindow(); skillMgr = GameUI.Instance.mMainPlayer.GetCmpt <SkillTreeUnitMgr>(); skEntiyt = GameUI.Instance.mMainPlayer.GetCmpt <SkAliveEntity>(); Refresh(TableState.tb_Work); SkillTreeInfo.SetUICallBack(RefreshTypeData); Invoke("ResetScrollValue", 0.2f); mSkillTypeCtrl.onSetBtnActive += OnSkillTypeBtnActive; mSkillTypeCtrl.SetActiveBtn(0); }
private void ProcDigVoxels(SkEntity caster) { SkInst inst = SkRuntimeInfo.Current as SkInst; IDigTerrain digTerrain = caster as IDigTerrain; IntVector4 digPos = null; if (null == digTerrain || (digPos = digTerrain.digPosType) == IntVector4.Zero || (inst != null && !(inst._target is VFVoxelTerrain))) { return; } float damage = caster.GetAttribute((int)AttribType.Atk) * (1f + caster.GetAttribute((int)AttribType.ResDamage)); float radius = caster.GetAttribute((int)AttribType.ResRange); float resourceBonus = caster.GetAttribute((int)AttribType.ResBouns); float height = caster.GetAttribute((int)AttribType.ResDamage); bool returnResource = digPos.w == 1; IntVector3 intPos = digPos.XYZ; if (!GameConfig.IsMultiMode) { //VFVoxel getVoxel = VFVoxelTerrain.self.Voxels.SafeRead(intPos.x, intPos.y, intPos.z); List <VFVoxel> removeList = new List <VFVoxel>(); DigTerrainManager.DigTerrain(intPos, damage * (returnResource ? 5f : 1f), radius, height, ref removeList, returnResource); if (returnResource) { bool bGetSpItems = false; if (caster is SkAliveEntity) { SkAliveEntity alive = (SkAliveEntity)caster; SkillTreeUnitMgr mgr = alive.Entity.GetCmpt <SkillTreeUnitMgr>(); bGetSpItems = mgr.CheckMinerGetRare(); } Dictionary <int, int> itemGet = DigTerrainManager.GetResouce(removeList, resourceBonus, bGetSpItems); if (itemGet.Count > 0) { List <int> itemsArray = new List <int>(itemGet.Count * 2); foreach (int intemID in itemGet.Keys) { itemsArray.Add(intemID); itemsArray.Add(itemGet[intemID]); } caster.Pack += itemsArray.ToArray(); } } } else { if (caster != null && caster._net != null) { //VFVoxel getVoxel = VFVoxelTerrain.self.Voxels.SafeRead(intPos.x,intPos.y, intPos.z); bool bGetSpItems = false; if (returnResource) { if (caster is SkAliveEntity) { SkAliveEntity alive = (SkAliveEntity)caster; SkillTreeUnitMgr mgr = alive.Entity.GetCmpt <SkillTreeUnitMgr>(); bGetSpItems = mgr.CheckMinerGetRare(); } } DigTerrainManager.DigTerrainNetwork((SkNetworkInterface)(caster._net), intPos, damage * (returnResource ? 5f : 1f), radius, resourceBonus, returnResource, bGetSpItems, 0.3f); } } }
public static Dictionary <int, List <SkillTreeUnit> > GetUIShowList(int mainType, SkillTreeUnitMgr mgr) { //[grade][unit] List <SkillTreeUnit> minLevelSkills = SkillTreeInfo.GetMinLevelByMainType(mainType); List <SkillTreeUnit> learntSkills = mgr.GetSkillsByMainType(mainType); //[grade][unit] Dictionary <int, List <SkillTreeUnit> > outSkills = new Dictionary <int, List <SkillTreeUnit> >(); for (int j = 0; j < minLevelSkills.Count; j++) { for (int i = 0; i < learntSkills.Count; i++) { if (learntSkills[i]._skillType == minLevelSkills[j]._skillType) { minLevelSkills[j] = learntSkills[i]; break; } } mgr.ChangeSkillState(minLevelSkills[j]); if (!outSkills.ContainsKey(minLevelSkills[j]._skillGrade)) { outSkills[minLevelSkills[j]._skillGrade] = new List <SkillTreeUnit>(); } outSkills[minLevelSkills[j]._skillGrade].Add(minLevelSkills[j]); } foreach (var iter in outSkills) { if (iter.Value != null && iter.Value.Count > 1) { iter.Value.Sort((left, right) => { if (left._descIndex > right._descIndex) { return(1); } else if (left._descIndex == right._descIndex) { return(0); } else { return(-1); } }); } } return(outSkills); }
public bool PutOnEquipment(ItemObject itemObj, bool addToReceiver = true, Receiver receiver = null, bool netRequest = false) { if (!netRequest && null != mViewCmpt && mViewCmpt.IsRagdoll) { return(false); } Receiver currentReceiver = (null == receiver)?mItemReciver:receiver; if (null == itemObj) { return(false); } ItemAsset.Equip equip = itemObj.GetCmpt <ItemAsset.Equip>(); if (null == equip) { return(false); } if (!Pathea.PeGender.IsMatch(equip.sex, Entity.ExtGetSex())) { return(false); } if (mItemList.Contains(itemObj)) { return(false); } SkillTreeUnitMgr learntSkills = Entity.GetCmpt <SkillTreeUnitMgr>(); if (!netRequest && learntSkills != null && RandomMapConfig.useSkillTree) { if (!learntSkills.CheckEquipEnable(equip.protoData.itemClassId, equip.itemObj.level)) { return(false); } } m_TakeOffEquip.Clear(); for (int i = 0; i < mItemList.Count; ++i) { ItemObject item = mItemList[i]; ItemAsset.Equip existEquip = item.GetCmpt <ItemAsset.Equip>(); if (null != existEquip) { if (System.Convert.ToBoolean(equip.equipPos & existEquip.equipPos)) { m_TakeOffEquip.Add(item); } } } for (int i = 0; i < mEquipments.Count; ++i) { if (m_TakeOffEquip.Contains(mEquipments[i].m_ItemObj) && !netRequest && !mEquipments[i].CanTakeOff()) { return(false); } } if (!netRequest && addToReceiver && null != currentReceiver) { if (!currentReceiver.CanAddItemList(m_TakeOffEquip)) { //lz-2016.08.15 如果是NPC的背包满了要单独提示 if (currentReceiver is NpcPackageCmpt) { PeTipMsg.Register(PELocalization.GetString(82209013), PeTipMsg.EMsgLevel.Warning); } else { PeTipMsg.Register(PELocalization.GetString(82209001), PeTipMsg.EMsgLevel.Warning); } return(false); } } for (int i = mItemList.Count - 1; i >= 0; i--) { if (m_TakeOffEquip.Contains(mItemList[i] as ItemObject)) { mItemList.RemoveAt(i); } } mItemList.Add(itemObj); if (addToReceiver && null != currentReceiver) { currentReceiver.AddItemList(m_TakeOffEquip); } //Do change for (int i = 0; i < m_TakeOffEquip.Count; ++i) { ItemObject item = m_TakeOffEquip[i]; RemoveItemEff(item); RemoveModel(item); mEquipType &= ~item.protoData.equipType; EventArg removeEvtArg = new EventArg(); removeEvtArg.isAdd = false; removeEvtArg.itemObj = item; changeEventor.Dispatch(removeEvtArg, this); } ApplyItemEff(itemObj); AddModel(itemObj); mEquipType |= itemObj.protoData.equipType; EventArg evtArg = new EventArg(); evtArg.isAdd = true; evtArg.itemObj = itemObj; changeEventor.Dispatch(evtArg, this); if (0 != (itemObj.protoData.equipPos & (1 << 4))) { mainHandEquipment = itemObj; } if (OnEquipmentChange != null) { OnEquipmentChange(); } //lz-2016.08.22 引导检测玩家穿装备 if (Entity.IsMainPlayer) { InGameAidData.CheckPutOnEquip(itemObj.protoId); } m_EquipmentDirty = true; return(true); }
public bool NetTryPutOnEquipment(ItemObject itemObj, bool addToReceiver = true, Receiver receiver = null) { if (null != mViewCmpt && mViewCmpt.IsRagdoll) { return(false); } Receiver currentReceiver = (null == receiver)?mItemReciver:receiver; if (null == itemObj) { return(false); } if (mItemList.Contains(itemObj)) { return(false); } ItemAsset.Equip equip = itemObj.GetCmpt <ItemAsset.Equip>(); if (null == equip) { return(false); } if (!Pathea.PeGender.IsMatch(equip.sex, Entity.ExtGetSex())) { return(false); } SkillTreeUnitMgr learntSkills = Entity.GetCmpt <SkillTreeUnitMgr>(); if (learntSkills != null && RandomMapConfig.useSkillTree) { if (!learntSkills.CheckEquipEnable(equip.protoData.itemClassId, equip.itemObj.level)) { return(false); } } m_TakeOffEquip.Clear(); for (int i = 0; i < mItemList.Count; ++i) { ItemObject item = mItemList[i]; if (item == itemObj) { return(false); } ItemAsset.Equip existEquip = item.GetCmpt <ItemAsset.Equip>(); if (null != existEquip) { if (System.Convert.ToBoolean(equip.equipPos & existEquip.equipPos)) { m_TakeOffEquip.Add(item); } } } for (int i = 0; i < mEquipments.Count; ++i) { if (m_TakeOffEquip.Contains(mEquipments[i].m_ItemObj) && !mEquipments[i].CanTakeOff()) { return(false); } } if (null != currentReceiver) { if (!currentReceiver.CanAddItemList(m_TakeOffEquip)) { return(false); } } return(true); }
private void onAlterAttribs(int idx, float oldValue, float newValue) { // if(_targetTree == null) return; // Debug.Log("Cutting a tree........"); /* when the tree's hp has been cut to zero * if (null != LSubTerrainMgr.Instance) * { * LSubTerrainMgr.DeleteTree(mGroundItem); * LSubTerrainMgr.RefreshAllLayerTerrains(); * } * else if (null != RSubTerrainMgr.Instance) * { * RSubTerrainMgr.DeleteTree(mGroundItem._treeInfo); * RSubTerrainMgr.RefreshAllLayerTerrains(); * } */ if (idx != 2) { return; } float damage = _attribs.sums[0]; float resourceBonus = _attribs.sums[1]; bool returnResource = _attribs.sums[2] > 0.0f; SkEntity caster = GetCasterToModAttrib(idx); if (null != caster) { ISkSubTerrain subTerrain = caster as ISkSubTerrain; if (null != subTerrain && null != subTerrain.treeInfo) { treeHPInfos[subTerrain.treeInfo.WorldPos] = DigTerrainManager.Fell(subTerrain.treeInfo, damage, GetTreeHP(subTerrain.treeInfo.WorldPos)); if (GameConfig.IsMultiMode) { caster.SendFellTree(subTerrain.treeInfo._treeInfo.m_protoTypeIdx, subTerrain.treeInfo.WorldPos, subTerrain.treeInfo._treeInfo.m_heightScale, subTerrain.treeInfo._treeInfo.m_widthScale); } else { if (treeHPInfos[subTerrain.treeInfo.WorldPos] <= 0) { OnTreeCutDown(caster, subTerrain.treeInfo); DigTerrainManager.RemoveTree(subTerrain.treeInfo); if (returnResource) { bool bGetSpItems = false; if (caster is SkAliveEntity) { SkAliveEntity alive = (SkAliveEntity)caster; if (alive.Entity.proto == EEntityProto.Player) { SkillTreeUnitMgr mgr = alive.Entity.GetCmpt <SkillTreeUnitMgr>(); bGetSpItems = mgr.CheckMinerGetRare(); } } Dictionary <int, int> itemGet = DigTerrainManager.GetTreeResouce(subTerrain.treeInfo, resourceBonus, bGetSpItems); if (itemGet.Count > 0) { List <int> itemsArray = new List <int>(itemGet.Count * 2); foreach (int intemID in itemGet.Keys) { itemsArray.Add(intemID); itemsArray.Add(itemGet[intemID]); } GetSpecialItem.PlantItemAdd(ref itemsArray); //植物特殊道具添加 caster._attribs.pack += itemsArray.ToArray(); } } } } } } }