Иконка ресурса

FREE PublicRadio : 0.0.2 0.0.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;



namespace Oxide.Plugins
{
    [Info("Public Radio", "obsol", "0.0.2")]
    [Description("Allows audio transmission over RF channels")]
    internal class PublicRadio : RustPlugin
    {
		void inflateBroadcaster(RFBroadcaster tx){
			if(tx.outputs.Length < 32){
				IOEntity.IOSlot[] slotBucket = tx.outputs;
				tx.outputs = new IOEntity.IOSlot[32];
				for(int i = 0; i < tx.outputs.Length;i++){
					if(i<slotBucket.Length){
						tx.outputs[i]=slotBucket[i];
					}else{
						tx.outputs[i]=new IOEntity.IOSlot();
						tx.outputs[i].Clear();
					}
				}
			}
			
		}
		bool disconnectReceiver(RFReceiver rx, RFBroadcaster tx = null, bool invert = false){
			bool flag = (tx==null||rx.inputs[0].connectedTo.ioEnt==tx) ^ invert;
			if(!rx.inputs[0].IsConnected()){
				return true;
			}
			if(rx.inputs[0].connectedTo.ioEnt is RFBroadcaster && flag){
				rx.Disconnect(0,true);
				return true;
			}
			return false;
		}
		/*
		Interface.CallHook("OnRfBroadcasterAdded", obj, frequency);
		Interface.CallHook("OnRfBroadcasterRemoved", obj, frequency);
		Interface.CallHook("OnRfListenerAdded", obj, frequency);
		Interface.CallHook("OnRfListenerRemoved", obj, frequency);
		*/
		void playSpeakers(IOEntity rx, int depth){
			ConnectedSpeaker speaker =  findSpeaker(rx, depth);
			//Puts("click?");
			if(speaker==null){return;}
			BaseEntity.Flags flag = speaker.flags;
			BaseEntity.Flags flagplus = flag | BaseEntity.Flags.Reserved8;
			BaseEntity.Flags flagminus = (BaseEntity.Flags) ((uint)flag & (0xffffffff ^ (uint)BaseEntity.Flags.Reserved8));
			speaker.OnFlagsChanged(flagminus,flagplus);
			//Puts("Turning on speaker");
			//Puts("click");
		}
		ConnectedSpeaker findSpeaker(IOEntity rx, int depth){
				
			if (depth <= 0)
			{
				return null;
			}
			global::IOEntity.IOSlot[] inputs = rx.outputs;
			for (int i = 0; i < inputs.Length; i++)
			{
				global::IOEntity ioentity = inputs[i].connectedTo.Get(rx.isServer);
				if (ioentity == rx)
				{
					//Puts("self");
					return null;
				}
				if (ioentity != null)
				{
					//Puts("found");
					global::ConnectedSpeaker audioConnectionSource = ioentity as global::ConnectedSpeaker;
					if (audioConnectionSource != null)
					{
						return audioConnectionSource;
					}
				}
				if (ioentity != null)
				{
					//Puts("godeeper");
					global::ConnectedSpeaker connectionSource = findSpeaker(ioentity, depth - 1);
					if (connectionSource != null)
					{
						return connectionSource;
					}
				}
			}
			return null;
		}
		void OnRfBroadcasterAdded(global::IRFObject obj,int frequency){
			if(!(obj is RFBroadcaster)){return;}
			RFBroadcaster tx = obj as RFBroadcaster;
			tx.ensureOutputsUpdated=true;
			inflateBroadcaster(tx);
			int j = 1;
			
			//Puts("OnRfBroadcasterAdded?");
			foreach(RFReceiver rx in RFManager.GetListenerSet(frequency).ToArray()){
				disconnectReceiver(rx);
				tx.ConnectTo(rx,j,0);
				tx.ensureOutputsUpdated =true;
				tx.UpdateOutputs();
				playSpeakers(rx,8);
				j++;
				if(j>=tx.outputs.Length){break;}
			}
		}
		void OnRfBroadcasterRemoved(global::IRFObject obj,int frequency){
			//Puts("OnRfBroadcasterRemoved?");
			if(!(obj is RFBroadcaster)){return;}
			RFBroadcaster tx = obj as RFBroadcaster;
			inflateBroadcaster(tx);
			foreach(RFReceiver rx in RFManager.GetBroadcasterSet(frequency).ToArray()){
				disconnectReceiver(rx,tx);
			}
		}
		void OnRfListenerAdded(global::IRFObject obj,int frequency){
			//Puts("OnRfListenerAdded?");
			if(!(obj is RFReceiver)){return;}
			RFReceiver rx = obj as RFReceiver;
			rx.ensureOutputsUpdated=true;
			foreach(RFBroadcaster tx in RFManager.GetBroadcasterSet(frequency).ToArray()){
				inflateBroadcaster(tx);
				int j = 0;
				while(j < tx.outputs.Length &&tx.outputs[j].IsConnected() ){
					j++;
				}
				Puts(j.ToString());
				if(j < tx.outputs.Length){
					disconnectReceiver(rx,tx, true)
					tx.ConnectTo(rx,j,0);
					tx.ensureOutputsUpdated =true;
					tx.UpdateOutputs();
					playSpeakers(rx,8);
					//Puts("Connected");
					break;
				}else{
					//Puts("Outofbounds");
					
				}
			}
		}
		void OnRfListenerRemoved(global::IRFObject obj,int frequency){
			//Puts("OnRfListenerRemoved?");
			if(!(obj is RFReceiver)){return;}
			RFReceiver rx = obj as RFReceiver;
			disconnectReceiver(rx);
		}
	}
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху