class NetPackageSyncWeaponLabelText : NetPackage { public NetPackageSyncWeaponLabelText Setup(int entityId, int slot, string data) { this.entityId = entityId; this.slot = slot; this.data = data; return this; } public override int GetLength() { return 6 + data.Length; } public override void ProcessPackage(World _world, GameManager _callbacks) { if (_world == null) return; NetSyncSetWeaponLabelText(_world.GetEntity(entityId) as EntityAlive, slot, data, true); } public override void read(PooledBinaryReader _reader) { entityId = _reader.ReadInt32(); slot = (int)_reader.ReadChar(); data = _reader.ReadString(); } public override void write(PooledBinaryWriter _writer) { base.write(_writer); _writer.Write(entityId); _writer.Write((char)slot); _writer.Write(data); } public static void NetSyncSetWeaponLabelText(EntityAlive holdingEntity, int slot, string data, bool fromNet = false) { if (!holdingEntity || (holdingEntity.isEntityRemote && !fromNet)) { if (holdingEntity) Log.Out("netsync failed! isEntityRemote: " + holdingEntity.isEntityRemote + " fromNet: " + fromNet); else Log.Out("Entity not found!"); return; } if (SetWeaponLabelText(holdingEntity, slot, data)) { //Log.Out("trying to set weapon label on " + (SingletonMonoBehaviour.Instance.IsServer ? "server" : "client") + " slot: " + slot + " text: " + data + " entity: " + holdingEntity.entityId + " from net: " + fromNet); if (SingletonMonoBehaviour.Instance.IsServer && SingletonMonoBehaviour.Instance.ClientCount() > 0) { int allButAttachedToEntityId = holdingEntity.entityId; if (holdingEntity.AttachedMainEntity) allButAttachedToEntityId = holdingEntity.AttachedMainEntity.entityId; SingletonMonoBehaviour.Instance.SendPackage(NetPackageManager.GetPackage().Setup(holdingEntity.entityId, slot, data), false, -1, allButAttachedToEntityId, allButAttachedToEntityId, null, 15); } else if (SingletonMonoBehaviour.Instance.IsClient && !fromNet) SingletonMonoBehaviour.Instance.SendToServer(NetPackageManager.GetPackage().Setup(holdingEntity.entityId, slot, data)); } } public static bool SetWeaponLabelText(EntityAlive holdingEntity, int slot, string data) { if (GameManager.IsDedicatedServer) return true; WeaponLabelControllerBase controller = holdingEntity.inventory.GetHoldingItemTransform()?.GetComponent(); //if (holdingEntity.emodel.avatarController is AvatarMultiBodyController multiBody && multiBody.HeldItemTransform != null) // controller = multiBody.HeldItemTransform.GetComponent(); //else if (holdingEntity.emodel.avatarController is LegacyAvatarController legacy && legacy.HeldItemTransform) // controller = legacy.HeldItemTransform.GetComponent(); return controller && controller.setLabelText(slot, data); } private int entityId; private int slot; private string data; }