private void RefreshModelWeaponParts(WeaponPartsRefreshStruct refreshData) { if (refreshData.armInPackage) { var avatarId = refreshData.weaponInfo.AvatarId; if (avatarId < 1) { avatarId = SingletonManager.Get <WeaponResourceConfigManager>().GetConfigById(refreshData.weaponInfo.ConfigId).AvatorId; } if (WeaponUtil.IsC4p(refreshData.weaponInfo.ConfigId)) { OverrideBagTactic = refreshData.weaponInfo.ConfigId; weaponInteract.UnmountC4(); } else { RelatedAppearence.MountWeaponInPackage(refreshData.slot.ToWeaponInPackage(), avatarId); } } weaponInteract.ModelRefreshWeaponParts(refreshData.weaponInfo.ConfigId, refreshData.slot, refreshData.oldParts, refreshData.newParts); if (refreshData.lastWeaponKey.IsValid()) { if (refreshData.slot == HeldSlotType) { RefreshHeldWeapon(); } ////var handler = slotsAux.FindHandler(refreshData.slot); //if (refreshData.lastWeaponId != refreshData.weaponInfo.ConfigId) // handler.RecordLastWeaponId(refreshData.lastWeaponId); } }
/// <summary> /// API:parts /// </summary> /// <param name="slot"></param> /// <param name="id"></param> /// <returns></returns> public bool SetWeaponPart(EWeaponSlotType slot, int id) { var agent = GetWeaponAgent(slot); if (!agent.IsValid()) { return(false); } WeaponPartsStruct lastParts = agent.BaseComponent.CreateParts(); int realAttachId = WeaponUtil.GetRealAttachmentId(id, agent.ResConfig.Id); bool match = SingletonManager.Get <WeaponPartsConfigManager>().IsPartMatchWeapon(realAttachId, agent.ResConfig.Id); if (!match) { return(false); } var attachments = WeaponPartUtil.ModifyPartItem( agent.BaseComponent.CreateParts(), SingletonManager.Get <WeaponPartsConfigManager>().GetPartType(realAttachId), realAttachId); agent.BaseComponent.ApplyParts(attachments); if (slot == HeldSlotType) { RefreshHeldWeaponAttachment(); } WeaponPartsRefreshStruct refreshData = new WeaponPartsRefreshStruct(); refreshData.weaponInfo = agent.ComponentScan; refreshData.slot = slot; refreshData.oldParts = lastParts; refreshData.newParts = agent.BaseComponent.CreateParts(); RefreshModelWeaponParts(refreshData); return(true); }
private void RefreshWeaponAppearance(EWeaponSlotType slot = EWeaponSlotType.Pointer) { if (slot == EWeaponSlotType.Pointer) { slot = HeldSlotType; } var weaponAgent = GetWeaponAgent(slot); if (weaponAgent.IsValid()) { WeaponPartsRefreshStruct refreshParams = new WeaponPartsRefreshStruct(); refreshParams.slot = slot; refreshParams.weaponInfo = weaponAgent.ComponentScan; // refreshParams.oldParts = new WeaponPartsStruct(); refreshParams.newParts = weaponAgent.PartsScan; refreshParams.armInPackage = true; RefreshWeaponModelAndParts(refreshParams); } else { //不移除C4 RelatedAppearence.RemoveC4(); WeaponInPackage pos = slot.ToWeaponInPackage(); RelatedAppearence.UnmountWeaponInPackage(pos); InteractController.InterruptCharactor(); } }
public void TryHoldGrenade(bool autoStuff = true, bool tryArm = true) { var weaponAgent = this[EWeaponSlotType.ThrowingWeapon]; if (autoStuff && weaponAgent.IsValid()) { return; } int nextId = _grenadeHandler.FindUsable(autoStuff); if (nextId < 0 || weaponAgent.ConfigId == nextId) { return; } WeaponPartsRefreshStruct refreshParams = new WeaponPartsRefreshStruct(); WeaponEntity newEntity = weaponAgent.ReplaceWeapon(Owner, WeaponUtil.CreateScan(nextId), ref refreshParams); SyncBagWeapon(EWeaponSlotType.ThrowingWeapon, newEntity.entityKey.Value); RefreshModelWeaponParts(refreshParams); if (tryArm) { TryArmWeaponImmediately(EWeaponSlotType.ThrowingWeapon); } }
/// <summary> /// API:parts /// </summary> /// <param name ="slot"></param> /// <param name ="partType"></param> public void DeleteWeaponPart(EWeaponSlotType slot, EWeaponPartType partType) { var agent = GetWeaponAgent(slot); if (!agent.IsValid()) { return; } WeaponPartsStruct lastParts = agent.PartsScan; var newParts = WeaponPartUtil.ModifyPartItem(lastParts, partType, 0); agent.BaseComponent.ApplyParts(newParts); if (slot == HeldSlotType) { RefreshHeldWeaponAttachment(); } WeaponPartsRefreshStruct refreshData = new WeaponPartsRefreshStruct(); refreshData.weaponInfo = agent.ComponentScan; refreshData.slot = slot; refreshData.oldParts = lastParts; refreshData.newParts = newParts; RefreshModelWeaponParts(refreshData); DebugUtil.MyLog("Delete Weapon part:" + refreshData, DebugUtil.DebugColor.Green); }
private bool ReplaceCommonWeapon(EWeaponSlotType slotType, WeaponScanStruct orient, int bagIndex) { // if (vertify) if (!processHelper.FilterVailed(orient, slotType)) { return(false); } bool refreshAppearance = true; logger.InfoFormat("replace weapon:{0}: ", orient); //特殊全局性武器只取武器背包第0个索引值 var weaponAgent = GetWeaponAgent(slotType); WeaponPartsRefreshStruct refreshParams = new WeaponPartsRefreshStruct(); WeaponEntity newEntity = weaponAgent.ReplaceWeapon(Owner, orient, ref refreshParams); if (newEntity == null) { return(false); } SyncBagWeapon(slotType, newEntity.entityKey.Value); if (refreshAppearance) { RefreshModelWeaponParts(refreshParams); } return(true); }
public bool SetWeaponPartByPartId(EWeaponSlotType slot, int matchedPartId) { var agent = GetWeaponAgent(slot); if (!agent.CanApplyPart) { return(false); } WeaponPartsStruct lastParts = agent.PartsScan; bool match = SingletonManager.Get <WeaponConfigManagement>().FindConfigById(agent.ConfigId).IsPartMatchWeapon(matchedPartId); if (!match) { return(false); } var attachments = WeaponPartUtil.ModifyPartItem(lastParts, SingletonManager.Get <WeaponPartsConfigManager>().GetPartType(matchedPartId), matchedPartId); agent.BaseComponent.ApplyParts(attachments); if (slot == HeldSlotType && processHelper.FilterRefreshWeapon()) { ApperanceRefreshABreath(HeldWeaponAgent.BreathFactor); } WeaponPartsRefreshStruct refreshData = new WeaponPartsRefreshStruct(); refreshData.weaponInfo = agent.ComponentScan; refreshData.slot = slot; refreshData.oldParts = lastParts; refreshData.newParts = agent.PartsScan; RefreshWeaponModelAndParts(refreshData); DebugUtil.MyLog("Set Weapon part:" + refreshData, DebugUtil.DebugColor.Green); return(true); }
/// <summary> /// API:parts /// </summary> /// <param name ="slot"></param> /// <param name ="partType"></param> public void DeleteWeaponPart(EWeaponSlotType slot, EWeaponPartType partType) { var agent = GetWeaponAgent(slot); if (!agent.IsValid()) { return; } WeaponPartsStruct lastParts = agent.BaseComponent.CreateParts(); var parts = WeaponPartUtil.ModifyPartItem( agent.BaseComponent.CreateParts(), partType, UniversalConsts.InvalidIntId); agent.BaseComponent.ApplyParts(parts); if (slot == HeldSlotType) { RefreshHeldWeaponAttachment(); } var newParts = WeaponPartUtil.ModifyPartItem(lastParts, partType, UniversalConsts.InvalidIntId); WeaponPartUtil.CombineDefaultParts(ref newParts, agent.BaseComponent.ConfigId); WeaponPartsRefreshStruct refreshData = new WeaponPartsRefreshStruct(); refreshData.weaponInfo = agent.ComponentScan; refreshData.slot = slot; refreshData.oldParts = lastParts; refreshData.newParts = newParts; RefreshModelWeaponParts(refreshData); }
public bool SetWeaponPartByPartId(EWeaponSlotType slot, int matchedPartId) { var agent = GetWeaponAgent(slot); if (!agent.IsValid()) { return(false); } WeaponPartsStruct lastParts = agent.PartsScan; bool match = SingletonManager.Get <WeaponPartsConfigManager>().IsPartMatchWeapon(matchedPartId, agent.ResConfig.Id); if (!match) { return(false); } var attachments = WeaponPartUtil.ModifyPartItem(lastParts, SingletonManager.Get <WeaponPartsConfigManager>().GetPartType(matchedPartId), matchedPartId); agent.BaseComponent.ApplyParts(attachments); if (slot == HeldSlotType) { RefreshHeldWeaponAttachment(); } WeaponPartsRefreshStruct refreshData = new WeaponPartsRefreshStruct(); refreshData.weaponInfo = agent.ComponentScan; refreshData.slot = slot; refreshData.oldParts = lastParts; refreshData.newParts = agent.PartsScan; RefreshModelWeaponParts(refreshData); DebugUtil.MyLog("Set Weapon part:" + refreshData, DebugUtil.DebugColor.Green); return(true); }
/// <summary> /// API:parts /// </summary> /// <param name="slot"></param> /// <param name="part"></param> public void DeleteSlotWeaponPart(EWeaponSlotType slot, EWeaponPartType part) { if (slot == EWeaponSlotType.None) { return; } WeaponEntity entity = GetWeaponAgent(slot).Entity; if (entity == null) { throw new ExWeaponNotFoundException("{0} slot weapon not found", slot); return; } WeaponPartsStruct lastParts = entity.weaponBasicData.GetParts(); var parts = WeaponPartsUtil.ModifyParts( entity.weaponBasicData.GetParts(), part, UniversalConsts.InvalidIntId); entity.weaponBasicData.ApplyParts(parts); if (slot == HeldSlotType) { RefreshHeldWeaponAttachment(); } var newParts = WeaponPartsUtil.ModifyParts(lastParts, part, UniversalConsts.InvalidIntId); newParts = newParts.ApplyDefaultParts(entity.weaponBasicData.ConfigId); WeaponPartsRefreshStruct refreshData = new WeaponPartsRefreshStruct(); refreshData.weaponInfo = entity.ToWeaponScan(); refreshData.slot = slot; refreshData.oldParts = lastParts; refreshData.newParts = newParts; RefreshModelWeaponParts(refreshData); }
/// <summary> /// 手雷武器替换操作:当前ConfigId必须已存在于库存,将手雷ENity替换 为当前configId /// </summary> /// <param name="Owner"></param> /// <param name="orient"></param> /// <param name="refreshParams"></param> /// <returns></returns> public override WeaponEntity ReplaceWeapon(EntityKey Owner, WeaponScanStruct orient, ref WeaponPartsRefreshStruct refreshParams) { if (_bagCacheHandler.ShowCount(orient.ConfigId) == 0) { return(null); } refreshParams.lastWeaponKey = WeaponKey; ReleaseWeapon(); _bagCacheHandler.SetCurr(orient.ConfigId); WeaponPartsStruct parts = WeaponPartUtil.CreateParts(orient); refreshParams.weaponInfo = orient; refreshParams.slot = handledSlot; refreshParams.oldParts = new WeaponPartsStruct(); refreshParams.newParts = parts; refreshParams.armInPackage = true; return(_bagCacheHandler.GrenadeEntity); }
/// <summary> /// API:parts /// </summary> /// <param name="slot"></param> /// <param name="id"></param> /// <returns></returns> public bool SetSlotWeaponPart(EWeaponSlotType slot, int id) { WeaponEntity entity = GetWeaponAgent(slot).Entity; if (entity == null) { throw new ExWeaponNotFoundException("{0} slot weapon not found", slot); return(false); } NewWeaponConfigItem wpConfig = SingletonManager.Get <WeaponConfigManager>().GetConfigById(entity.weaponBasicData.ConfigId); WeaponPartsStruct lastParts = entity.weaponBasicData.GetParts(); int realAttachId = BagUtility.GetRealAttachmentId(id, wpConfig.Id); bool match = SingletonManager.Get <WeaponPartsConfigManager>().IsPartMatchWeapon(realAttachId, wpConfig.Id); if (!match) { return(false); } var attachments = WeaponPartsUtil.ModifyParts( entity.weaponBasicData.GetParts(), SingletonManager.Get <WeaponPartsConfigManager>().GetPartType(realAttachId), realAttachId); entity.weaponBasicData.ApplyParts(attachments); if (slot == HeldSlotType) { RefreshHeldWeaponAttachment(); } WeaponPartsRefreshStruct refreshData = new WeaponPartsRefreshStruct(); refreshData.weaponInfo = entity.ToWeaponScan(); refreshData.slot = slot; refreshData.oldParts = lastParts; refreshData.newParts = entity.weaponBasicData.GetParts(); RefreshModelWeaponParts(refreshData); return(true); }
/// <summary> /// 更新到槽位但不是拿在手上 /// 老的武器entity会被重置或销毁掉 /// </summary> /// <param name="slotType"></param> /// <param name="orient"></param> /// <param name="bagIndex"></param> /// <param name="useBagGlobal"></param> /// <returns></returns> private bool ReplaceCommonWeapon(EWeaponSlotType slotType, WeaponScanStruct orient, int bagIndex) { // if (vertify) if (!weaponProcessor.FilterVailed(orient, slotType)) { return(false); } bool refreshAppearance = (bagIndex == HeldBagPointer || bagIndex < 0); //特殊全局性武器只取武器背包第0个索引值 var weaponAgent = GetWeaponAgent(slotType, bagIndex); WeaponPartsRefreshStruct refreshParams = new WeaponPartsRefreshStruct(); WeaponEntity newEntity = weaponAgent.ReplaceWeapon(Owner, orient, ref refreshParams); if (newEntity == null) { return(false); } playerWeaponAgent.AddBagWeapon(slotType, newEntity.entityKey.Value, bagIndex); if (refreshAppearance) { RefreshModelWeaponParts(refreshParams); } return(true); }
public override WeaponEntity ReplaceWeapon(EntityKey Owner, WeaponScanStruct orient, ref WeaponPartsRefreshStruct refreshParams) { throw new NotImplementedException(); }
public abstract WeaponEntity ReplaceWeapon(EntityKey Owner, WeaponScanStruct orient, ref WeaponPartsRefreshStruct refreshParams);
/// <summary> /// API:parts /// </summary> /// <param name ="slot"></param> /// <param name ="partType"></param> public void DeleteWeaponPart(EWeaponSlotType slot, EWeaponPartType partType) { var agent = GetWeaponAgent(slot); if (!agent.IsValid()) { return; } WeaponPartsStruct lastParts = agent.PartsScan; var defaultParts = agent.WeaponConfigAssy.DefaultParts; int newPart = 0; //移除配件后装备默认配件 switch (partType) { case EWeaponPartType.LowerRail: newPart = defaultParts.LowerRail; break; case EWeaponPartType.UpperRail: newPart = defaultParts.UpperRail; break; case EWeaponPartType.Muzzle: newPart = defaultParts.Muzzle; break; case EWeaponPartType.Magazine: newPart = defaultParts.Magazine; break; case EWeaponPartType.Stock: newPart = defaultParts.Stock; break; case EWeaponPartType.SideRail: newPart = defaultParts.SideRail; break; case EWeaponPartType.Bore: newPart = defaultParts.Bore; break; case EWeaponPartType.Interlock: newPart = defaultParts.Interlock; break; case EWeaponPartType.Feed: newPart = defaultParts.Feed; break; case EWeaponPartType.Brake: newPart = defaultParts.Brake; break; case EWeaponPartType.Trigger: newPart = defaultParts.Trigger; break; default: break; } if (newPart <= 0) { newPart = 0; } var newParts = WeaponPartUtil.ModifyPartItem(lastParts, partType, newPart); agent.BaseComponent.ApplyParts(newParts); if (slot == HeldSlotType) { if (processHelper.FilterRefreshWeapon()) { ApperanceRefreshABreath(HeldWeaponAgent.BreathFactor); } } WeaponPartsRefreshStruct refreshData = new WeaponPartsRefreshStruct(); refreshData.weaponInfo = agent.ComponentScan; refreshData.slot = slot; refreshData.oldParts = lastParts; refreshData.newParts = newParts; RefreshWeaponModelAndParts(refreshData); DebugUtil.MyLog("Delete Weapon part:" + refreshData, DebugUtil.DebugColor.Green); }
/// <summary> /// release old weapon and create new one /// </summary> /// <param name="weaponSlotAgent"></param> /// <param name="Owner"></param> /// <param name="orient"></param> /// <param name="refreshParams"></param> /// <returns></returns> public override WeaponEntity ReplaceWeapon(EntityKey Owner, WeaponScanStruct orient, ref WeaponPartsRefreshStruct refreshParams) { refreshParams.lastWeaponKey = WeaponKey; ReleaseWeapon(); var newEnity = WeaponEntityFactory.CreateEntity(orient); newEnity.SetRetain(Owner); // DebugUtil.LogInUnity("add new weapon :{0}", DebugUtil.DebugColor.Blue, newEnity.entityKey.Value); if (orient.AvatarId < 1) { orient.AvatarId = SingletonManager.Get <WeaponResourceConfigManager>().GetConfigById(orient.ConfigId).AvatorId; } WeaponPartsStruct parts = WeaponPartUtil.CreateParts(orient); refreshParams.weaponInfo = orient; refreshParams.slot = handledSlot; refreshParams.oldParts = new WeaponPartsStruct(); refreshParams.newParts = parts; refreshParams.armInPackage = true; return(newEnity); }