/// <summary> /// 在武器变化的时候, 更新当前实装的武器的准星信息 /// </summary> private void UpdateBattleWeapons(IComponentEvent entityEvent) { ItemOperateEvent itemEvent = entityEvent as ItemOperateEvent; Dictionary <ulong, BattleWeaponBase> newBattleWeapons = new Dictionary <ulong, BattleWeaponBase>(); for (int iWeapon = 0; iWeapon < BATTLE_WEAPON_COUNT; iWeapon++) { IWeapon weapon = m_SkillProxy.GetWeaponByIndex(iWeapon); if (weapon == null) { continue; } // 获取iWeapon对应武器的UID ulong uid = weapon.GetUID(); // 查看当前是否有这把武器的准星信息 if (m_Property.HaveBattleWeapon(uid)) { newBattleWeapons.Add(uid, m_Property.GetBattleWeapon(uid)); } else { BattleWeaponBase.BattleWeaponType weaponType = BattleWeaponBase.GetBattleWeaponTypeByReticle(weapon.GetConfig().Reticle); newBattleWeapons.Add(uid, CreateNewBattleWeapon(weaponType, weapon)); } } m_Property.ResetBattleWeapons(newBattleWeapons); }
/// <summary> /// 道具各种操作 /// </summary> /// <param name="buf"></param> private void OnItemChange(KProtoBuf buf) { S2C_ITEM_OPERATE_LIST msg = buf as S2C_ITEM_OPERATE_LIST; if (msg.errcode == 0) { ItemOperateInfoTemp.OperateType weaponOperate = 0; Category category = 0; int pos = 0; ulong uid = 0; List <ulong> ships = new List <ulong>(); for (int i = 0; i < msg.op_list.Count; i++) { ItemOperate itemMsg = msg.op_list[i]; switch ((ItemProcessType)itemMsg.type) { case ItemProcessType.IPTAddItem: //操作顺序不可修改 Category mainType = GetPackageProxy().AddItem(false, itemMsg.uid, itemMsg.tid, itemMsg.parent, itemMsg.pos, itemMsg.count, itemMsg.cur_capacity, itemMsg.reference, itemMsg.create_time); GetPackageProxy().ChangeItemAttr(itemMsg.uid, itemMsg.lv, itemMsg.exp); category = GetPackageProxy().CheckMarkItemAdd(msg.mark, itemMsg.uid); if (category == Category.Weapon) { if (weaponOperate == ItemOperateInfoTemp.OperateType.Remove) { weaponOperate = ItemOperateInfoTemp.OperateType.Replace; pos = itemMsg.pos; uid = itemMsg.uid; } else { weaponOperate = ItemOperateInfoTemp.OperateType.Add; pos = itemMsg.pos; uid = itemMsg.uid; } } if (mainType == Category.Warship) { ships.Add(itemMsg.uid); } // break; case ItemProcessType.IPTDeleteItem: //操作顺序不可修改 category = GetPackageProxy().CheckMarkItemRemove(msg.mark, itemMsg.uid); GetPackageProxy().RemoveItem(itemMsg.uid); if (category == Category.Weapon) { weaponOperate = ItemOperateInfoTemp.OperateType.Remove; pos = itemMsg.pos; uid = itemMsg.uid; } // break; case ItemProcessType.IPTStackChange: GetPackageProxy().ChangeStackCount(itemMsg.uid, itemMsg.count); break; case ItemProcessType.IPTPositionChange: GetPackageProxy().ChangePosition(itemMsg.uid, itemMsg.parent, itemMsg.pos); break; case ItemProcessType.IPTCapacityChange: GetPackageProxy().ChangeContainerSize(itemMsg.uid, itemMsg.cur_capacity); break; } } switch ((ItemOperateType)msg.op_type) { case ItemOperateType.IOTAddItem: GameFacade.Instance.SendNotification(NotificationName.MSG_PACKAGE_ITEM_ADD); break; case ItemOperateType.IOTDestoryItem: GameFacade.Instance.SendNotification(NotificationName.MSG_PACKAGE_ITEM_DESTORY); break; case ItemOperateType.IOTConsumeItem: GameFacade.Instance.SendNotification(NotificationName.MSG_PACKAGE_ITEM_CONSUME); break; case ItemOperateType.IOTMoveItem: GameFacade.Instance.SendNotification(NotificationName.MSG_PACKAGE_ITEM_MOVE); break; case ItemOperateType.IOTSkillChanged: { PlayerSkillProxy skillProxy = GameFacade.Instance.RetrieveProxy(ProxyName.PlayerSkillProxy) as PlayerSkillProxy; skillProxy.RefreshShipSkills(); } break; } if (weaponOperate != 0) { ItemOperateInfoTemp info = new ItemOperateInfoTemp(); info.Category = Category.Weapon; info.Type = weaponOperate; info.Pos = pos; info.UID = uid; GameFacade.Instance.SendNotification(NotificationName.MSG_PACKAGE_ITEM_OPERATE, info); ItemOperateEvent itemEvent = new ItemOperateEvent(); info.Category = Category.Weapon; info.Type = weaponOperate; info.Pos = pos; info.UID = uid; GameplayProxy gameplayProxy = GameFacade.Instance.RetrieveProxy(ProxyName.GameplayProxy) as GameplayProxy; SpacecraftEntity entity = gameplayProxy.GetMainPlayer(); entity?.SendEvent(ComponentEventName.ItemInPackageChanged, itemEvent); } if (ships.Count > 0) { ShipProxy shipProxy = GameFacade.Instance.RetrieveProxy(ProxyName.ShipProxy) as ShipProxy; foreach (ulong id in ships) { shipProxy.ChangeShipPackage(id); } } } }