Jump to content

dustyhansen

Member
  • Posts

    1,330
  • Joined

  • Last visited

Everything posted by dustyhansen

  1. dustyhansen

    Crashing in Safe Zone

    When a player crashes their heli in the safe zone, the loot bags drop but are not lootable by the player or by admin. We used to be able to loot them using the Vanish plugin from uMod, but that no longer works. I assume this has something to do with ownership of the bags, but is this something you can fix so that they are lootable by the player?
  2. dustyhansen

    IQChat

    Oh i totally missed that unless it was added recently, sorry!
  3. dustyhansen

    IQChat

    It would be nice if an @mention feature were added as well. Another thing that was preventing me from switching over.
  4. The plugin has Carbon Compatible on the description page, so you many want to change that then. It still happens regularly. I get complaints often about it.
  5. I'm sorry, but I don't understand what you mean. Can you explain? I only have your plugin for voting and only use rustervers.gg for voting.
  6. Yea, cause that tag works so well. Creators choose "no" because they don't like Carbon or don't want to support issues on Carbon servers, but the plugin actually works fine on Carbon. This is basically how it has always been on every site and it sucks because, contrary to what is said above, it happens more often than you think, but people just don't complain when the refund policy is "no". I am currently tracking around 60 open bugs and getting barely any traction because of creators not responding. It has been very frustrating as a buyer and not every creator is as responsive as you. I welcome the 6 month guarantee on new purchases, but the refund policy hasn't been updated and I don't see any customer policy that states how this is actually exercised, so I am skeptical. What steps have to be taken in order to exercise this guarantee? How is abandonment defined? How much of my time am I going to have to spend before I qualify? For example, if I have to open support tickets for each issue with the plugin and then follow-up on them for 3 months with no reply and then get in a 3-way DM argument with the creator and a moderator in order for it to be considered abandoned, then this isn't really that appealing to me. Since all 3 parties' definition of abandonment is likely very different, it should probably be spelled out more clearly.
  7. No, I didn't. So you are saying that it will only write to the file when the server restarts?
  8. Good to know, thanks. I guess we have a difference in opinion here, surprise! How is it obsolete and pointless to archive if the plugin still works and is being used today by many customers? Usually the description of the plugin contains important information, such as what the commands and permissions are, how the plugin functions, what the dependencies are, info about config and settings, etc. This information is not readily available anywhere else. I think there is valuable content in discussions and support tickets that shouldn't just get deleted and that could still be useful to those of us running the plugin today, even if it is no longer supported or available to download. Plus, I think it would be good to know that the plugin is no longer supported/available as opposed to searching multiple sites trying to figure out where I got it from only to come up empty. Again, this seems like another decision that is not at all customer-friendly and is entirely in the creator's best interest and based on how you replied, that you are not actually open to getting feedback on.
  9. It looks like Not Loaded is not working anymore with the last update. I should have 8 plugins listed here.
  10. dustyhansen

    console

    This is fixed now, but the Not Loaded is not working now.
  11. dustyhansen

    console

    Do you have Cargo Train Event? It looks like there is a messed up entry in my config file for this plugin: { "Name": "ColorCode{publicstringhexValue;publicUnityEngine.ColorrustValue;publicstringrustString;publicColorCode(stringhex){hexValue=hex.ToUpper();if(hex.StartsWith(\"#\")){hex=hex.Substring(1);}if(!hexValue.StartsWith(\"#\")){hexValue=\"#\"+hexValue;}//extracttheR,G,Bfloatr=255F,g=0,b=0;try{r=(float)short.Parse(hex.Substring(0,2),System.Globalization.NumberStyles.HexNumber)/255;g=(float)short.Parse(hex.Substring(2,2),System.Globalization.NumberStyles.HexNumber)/255;b=(float)short.Parse(hex.Substring(4,2),System.Globalization.NumberStyles.HexNumber)/255;}catch{Instance.PrintError($\"ERROR", "Author": "Nikedemos\", VERSION)] [Description(\"Just like Cargo Ships - but with trains\")] public class CargoTrainEvent : RustPlugin { private static CargoTrainEvent Instance; private static Timer EventTimer; [PluginReference] private Plugin Kits, FuelManager, TruePVE, DeathNotes, GUIAnnouncements; #region CONST & STATIC public const string VERSION = \"1.0.18\"; public const ulong INTERNAL_SKIN = 2847372289; public const string PREFAB_DRIVER = \"assets/rust.ai/agents/npcplayer/humannpc/scientist/scientistnpc_cargo_turret_any.prefab\"; public const string PREFAB_SCIENTIST = \"assets/rust.ai/agents/npcplayer/humannpc/scientist/scientistnpc_cargo_turret_any.prefab\"; public const string PREFAB_WORKCART = \"assets/content/vehicles/workcart/workcart.entity.prefab\"; public const string PREFAB_LOCOMOTIVE = \"assets/content/vehicles/trains/locomotive/locomotive.entity.prefab\"; public const string PREFAB_SEDAN_TRAIN = \"assets/content/vehicles/sedan_a/sedanrail.entity.prefab\"; public const string PREFAB_ABOVEGROUND_TRAIN = \"assets/content/vehicles/workcart/workcart_aboveground.entity.prefab\"; public const string PREFAB_ABOVEGROUND_TRAIN_2 = \"assets/content/vehicles/workcart/workcart_aboveground2.entity.prefab\"; public const string PREFAB_CRATE_LOCKED = \"assets/prefabs/deployable/chinooklockedcrate/codelockedhackablecrate.prefab\"; public const string PREFAB_CRATE_ELITE = \"assets/bundled/prefabs/radtown/crate_elite.prefab\"; public const string PREFAB_CRATE_BRADLEY = \"assets/prefabs/npc/m2bradley/bradley_crate.prefab\"; public const string PREFAB_CRATE_HELI = \"assets/prefabs/npc/patrol helicopter/heli_crate.prefab\"; public const string PREFAB_CRATE_MARKER = \"assets/prefabs/tools/map/cratemarker.prefab\"; public const string PREFAB_GENERIC_MARKER = \"assets/prefabs/tools/map/genericradiusmarker.prefab\"; public const string PREFAB_RUG = \"assets/prefabs/deployable/rug/rug.deployed.prefab\"; public const string PREFAB_SIRENLIGHT = \"assets/prefabs/deployable/playerioents/lights/sirenlight/electric.sirenlight.deployed.prefab\"; public const string PREFAB_COUNTER = \"assets/prefabs/deployable/playerioents/counter/counter.prefab\"; public const string PREFAB_ALARM = \"assets/prefabs/deployable/playerioents/alarms/audioalarm.prefab\"; public const string PREFAB_CCTV = \"assets/prefabs/deployable/cctvcamera/cctv_deployed.prefab\"; public const string FX_C4_EXPLOSION = \"assets/prefabs/tools/c4/effects/c4_explosion.prefab\"; public const string FX_EXPLOSION_01 = \"assets/bundled/prefabs/fx/explosions/explosion_01.prefab\"; public const string FX_EXPLOSION_02 = \"assets/bundled/prefabs/fx/explosions/explosion_02.prefab\"; public const string FX_EXPLOSION_03 = \"assets/bundled/prefabs/fx/explosions/explosion_03.prefab\"; public const ulong SKIN_SPLAT1 = 2451067899; public const int ITEM_SNOWBALL = -363689972; public const int ITEM_SUIT_HEAVY = -1772746857; public const int ITEM_LOWGRADE = -946369541; #endregion #region HOOKS private void Init() { Instance = null; } private void OnServerInitialized() { Instance = this; lang.RegisterMessages(LangMessages, this); permission.RegisterPermission(PERM_ADMIN, this); LoadConfigData(); ProcessConfigData(); ConfigValues = new Dictionary<string, InteractiveConfigValue>(); GenerateAllInteractiveConfigValues(); SpecialTrain.TrainDriverNetIDToSpecialTrain = new Dictionary<ulong, SpecialTrain>(); SpecialTrain.TrainNetIDToSpecialTrain = new Dictionary<ulong, SpecialTrain>(); SpecialTrain.TrainNetIDToTrainEngine = new Dictionary<ulong, TrainEngine>(); SpecialTrain.WorkcartEntityNetIDToSpecialTrain = new Dictionary<ulong, SpecialTrain>(); SpecialTrain.PlatformTriggerToTrain = new Dictionary<TriggerBase, SpecialTrain>(); SpecialTrain.UserIDToSpecialTrains = new Dictionary<ulong, List<SpecialTrain>>(); //pre-cleanup foreach (var entity in BaseNetworkable.serverEntities.OfType<BaseEntity>().Where(e => e.skinID == INTERNAL_SKIN || e.skinID == SKIN_SPLAT1)) { entity.Kill(BaseNetworkable.DestroyMode.None); } foreach (var train in BaseNetworkable.serverEntities.OfType<TrainEngine>()) { OnEntitySpawned(train); } //broken from December 2021 forced wipe //FuelManagerCheck(); TruePVECheck(); DeathNotesCheck(); ScheduleTrainEventAtRandom(); } private void OnBookmarkControlStarted(ComputerStation station, BasePlayer player, string text, CCTV_RC cctv) { if (cctv == null) return; if (cctv.skinID != INTERNAL_SKIN) return; var group = Network.Net.sv.visibility.GetGroup(cctv.transform.position); player.net.SwitchSecondaryGroup(group); Interface.CallHook(\"OnBookmarkControlStartedTrainCCTV\", player, text, cctv); } private void OnEntitySpawned(TrainEngine train) { if (Instance == null) return; if (train.PrefabName == PREFAB_LOCOMOTIVE) { return; } SpecialTrain.TrainNetIDToTrainEngine.Add(train.net.ID.Value, train); train.SetFlag(TrainEngine.Flag_AltColor, false); train.SendNetworkUpdateImmediate(); } private void OnCrateHack(HackableLockedCrate crate) { if (Instance == null) return; if (crate.skinID != INTERNAL_SKIN) return; if (!SpecialTrain.WorkcartEntityNetIDToSpecialTrain.ContainsKey(crate.net.ID.Value)) return; SpecialTrain.WorkcartEntityNetIDToSpecialTrain[crate.net.ID.Value].OnCrateHack(crate); Interface.CallHook(\"OnTrainCrateHack\", SpecialTrain.WorkcartEntityNetIDToSpecialTrain[crate.net.ID.Value].Train, crate); } object OnCounterModeToggle(PowerCounter counter, BasePlayer player, bool wants) { if (Instance == null) return null; if (counter.skinID != INTERNAL_SKIN) return null; return false; } private object CanBeWounded(BasePlayer player) { if (Instance == null) return null; if (!SpecialTrain.TrainDriverNetIDToSpecialTrain.ContainsKey(player.net.ID.Value)) { return null; } //drivers can't be wounded return false; } private object OnTurretTarget(AutoTurret turret, ScientistNPC target) { if (Instance == null) return null; if (turret == null) return null; if (turret.net == null) return null; if (target == null) return null; if (target.net == null) return null; if (SpecialTrain.WorkcartEntityNetIDToSpecialTrain.ContainsKey(target.net.ID.Value)) { return false; } return null; } private object CanBradleyApcTarget(BradleyAPC bradley, ScientistNPC target) { if (Instance == null) return null; if (bradley == null) return null; if (target == null) return null; if (target.net == null) return null; if (bradley.net == null) return null; if (SpecialTrain.WorkcartEntityNetIDToSpecialTrain.ContainsKey(target.net.ID.Value)) { return false; } return null; } private object CanHelicopterTarget(PatrolHelicopterAI heli, BasePlayer target) { if (Instance == null) return null; if (heli == null) return null; if (target == null) return null; if (target.net == null) return null; if (SpecialTrain.WorkcartEntityNetIDToSpecialTrain.ContainsKey(target.net.ID.Value)) { return false; } if (SpecialTrain.TrainDriverNetIDToSpecialTrain.ContainsKey(target.net.ID.Value)) { return false; } return null; } private object OnNpcTarget(BasePlayer attacker, BasePlayer target) { if (Instance == null) return null; if (attacker == null) return null; if (target == null) return null; if (target.net == null) return null; if (attacker.net == null) return null; //Drivers will never be targets nor target anything and we can skip a lot of logic if (SpecialTrain.TrainDriverNetIDToSpecialTrain.ContainsKey(target.net.ID.Value)) { return true; } if (SpecialTrain.TrainDriverNetIDToSpecialTrain.ContainsKey(attacker.net.ID.Value)) { return true; } //attacker and target might or might not belong to the train bool attackerIsSpecial = SpecialTrain.WorkcartEntityNetIDToSpecialTrain.ContainsKey(attacker.net.ID.Value) || SpecialTrain.TrainDriverNetIDToSpecialTrain.ContainsKey(attacker.net.ID.Value); bool targetIsSpecial = SpecialTrain.WorkcartEntityNetIDToSpecialTrain.ContainsKey(target.net.ID.Value) || SpecialTrain.TrainDriverNetIDToSpecialTrain.ContainsKey(target.net.ID.Value); if (attackerIsSpecial && targetIsSpecial) { //specials don't target specials return true; } //none of them are special? outside of the scope of the plugin, then if (!(attackerIsSpecial || targetIsSpecial)) { return null; } bool targetIsAlivePlayer = false; var alivePlayer = target as BasePlayer; if (alivePlayer != null) { targetIsAlivePlayer = !alivePlayer.IsNpc; } //at this point, the attacker can be special, the target can be special or the target is aliveplayer //second, who is the target? a tunnel dweller? then don't targe if (targetIsAlivePlayer) { //default rules return null; } else if (attackerIsSpecial) { //is the target a tunnel dweller? //not a special target, so let's see... if (!targetIsSpecial) { if (target.PrefabName.Contains(\"tunneldweller\")) { //let the targetting through if (configData.ScientistsTargetTunnelDwellers) { //default targetting rules return null; } else { return true; } } else //nope it's not a tunnel dweller, so default targetting rules apply { return null; } } else //special attacker AND special target, so don't let that happen { return true; } } else //not a special attacker { if (targetIsSpecial) { //something non special is trying to target something special. //don't let it through return true; } } //anything else: default targetting rules apply return null; } private void OnEntityKill(BaseEntity entity) { if (Instance == null) return; if (entity == null) return; if (entity.net == null) return; if (!SpecialTrain.WorkcartEntityNetIDToSpecialTrain.ContainsKey(entity.net.ID.Value)) return; //remove the entity from your stuff SpecialTrain.WorkcartEntityNetIDToSpecialTrain[entity.net.ID.Value].RemoveWorkcartEntity(entity.net.ID.Value); } private void OnEntityKill(TrainEngine train) { if (Instance == null) return; SpecialTrain.TrainNetIDToTrainEngine.Remove(train.net.ID.Value); if (IsTrainSpecial(train.net.ID.Value)) { MakeTrainNormal(train.net.ID.Value); } } private void Unload() { if (Instance == null) return; foreach (var specialTrain in SpecialTrain.TrainNetIDToSpecialTrain.Values.ToList()) { UnityEngine.Object.DestroyImmediate(specialTrain); } SpecialTrain.TrainDriverNetIDToSpecialTrain = null; SpecialTrain.TrainNetIDToSpecialTrain = null; SpecialTrain.TrainNetIDToTrainEngine = null; SpecialTrain.WorkcartEntityNetIDToSpecialTrain = null; SpecialTrain.PlatformTriggerToTrain = null; SpecialTrain.UserIDToSpecialTrains = null; if (EventTimer != null) { EventTimer.Destroy(); EventTimer = null; } ConfigValues = null; Instance = null; } private void OnPlayerTruePVECleanup(BasePlayer player) { if (TruePVEIsLoaded) { if (SpecialTrain.UserIDToSpecialTrains.ContainsKey(player.userID)) { foreach (var train in SpecialTrain.UserIDToSpecialTrains[player.userID].ToList()) { if (train != null) { if (train.PlayersInTruePVEBubble.ContainsKey(player.userID)) { train.PlayersInTruePVEBubble.Remove(player.userID); } } } SpecialTrain.UserIDToSpecialTrains.Remove(player.userID); } } } private object OnDeathNotice(Dictionary<string, object> dic, string msg) { if (dic == null) return null; if (!dic.ContainsKey(\"HitInfo\")) { return null; } var hit = dic[\"HitInfo\"] as HitInfo; if (hit.InitiatorPlayer == null) { return null; } var victim = hit.HitEntity as BasePlayer; if (victim == null) { return null; } if (hit.InitiatorPlayer.displayName == Instance.configData.TrainDriverName) { return false; } if (victim.displayName == Instance.configData.TrainDriverName) { return false; } return null; } private void OnPlayerDeath(BasePlayer player, HitInfo info) { if (Instance == null) return; OnPlayerTruePVECleanup(player); //ignore non-drivers here if (!SpecialTrain.TrainDriverNetIDToSpecialTrain.ContainsKey(player.net.ID.Value)) { return; } SpecialTrain.TrainDriverNetIDToSpecialTrain[player.net.ID.Value].OnTrainDriverKilled(info); } private void OnPlayerDisconnect(BasePlayer player) { if (Instance == null) return; OnPlayerTruePVECleanup(player); } private object OnEntityTakeDamage(BaseCombatEntity combatEntity, HitInfo info) { if (Instance == null) return null; if (combatEntity == null) return null; if (combatEntity.net == null) return null; if (info == null) return null; if (SpecialTrain.WorkcartEntityNetIDToSpecialTrain.ContainsKey(combatEntity.net.ID.Value)) { return SpecialTrain.WorkcartEntityNetIDToSpecialTrain[combatEntity.net.ID.Value].OnTrainEntityTakeDamage(combatEntity, info); } if (SpecialTrain.TrainDriverNetIDToSpecialTrain.ContainsKey(combatEntity.net.ID.Value)) { return SpecialTrain.TrainDriverNetIDToSpecialTrain[combatEntity.net.ID.Value].OnTrainEntityTakeDamage(combatEntity, info); } //don't let them damage splats if (combatEntity.PrefabName == PREFAB_RUG && combatEntity.skinID == SKIN_SPLAT1) { return true; } return null; } private object OnEntityTakeDamage(TrainEngine train, HitInfo info) { if (Instance == null) return null; if (SpecialTrain.TrainNetIDToSpecialTrain.ContainsKey(train.net.ID.Value)) { return SpecialTrain.TrainNetIDToSpecialTrain[train.net.ID.Value].OnTrainEntityTakeDamage(train, info); } return null; } //broken from the December 2021 forced wipe /* private object OnFuelAbstract(EntityFuelSystem fuelSystem, object returnOnSuccess) { if (Instance == null) return null; if (fuelSystem.owner.OwnerID != INTERNAL_OWNERID) return null; if (!SpecialTrain.TrainNetIDToSpecialTrain.ContainsKey(fuelSystem.owner.net.ID)) { return null; } //no infinite fuel if the driver is dead if (!SpecialTrain.TrainNetIDToSpecialTrain[fuelSystem.owner.net.ID].DriverIsAlive) { return null; } return returnOnSuccess; } private object OnFuelCheck(EntityFuelSystem fuelSystem) => OnFuelAbstract(fuelSystem, true); private object CanUseFuel(EntityFuelSystem fuelSystem, StorageContainer container, float seconds, float fuelUsedPerSecond) => OnFuelCheck(fuelSystem); object OnFuelAmountCheck(EntityFuelSystem fuelSystem, Item item) => OnFuelAbstract(fuelSystem, 1337); */ #endregion #region PERMISSION public const string PERM_ADMIN = \"cargotrainevent.admin\"; #endregion #region LANG public const string MSG_FUEL_MANAGER_PRESENT = \"MSG_FUEL_MANAGER_PRESENT\"; public const string MSG_FUEL_MANAGER_NOT_PRESENT = \"MSG_FUEL_MANAGER_NOT_PRESENT\"; public const string MSG_CHAT_PREFIX = \"MSG_CHAT_PREFIX\"; public const string MSG_EVENT_SCHEDULED_IN = \"MSG_EVENT_SCHEDULED_IN\"; public const string MSG_EVENT_SCHEDULE_DISABLED = \"MSG_EVENT_SCHEDULE_DISABLED\"; public const string MSG_EVENT_STARTED = \"MSG_EVENT_STARTED\"; public const string MSG_EVENT_UPDATE_POSITION = \"MSG_EVENT_UPDATE_POSITION\"; public const string MSG_EVENT_OVER = \"MSG_EVENT_OVER\"; public const string MSG_EVENT_DRIVER_DEAD = \"MSG_EVENT_DRIVER_DEAD\"; public const string MSG_EVENT_CRATE_BEING_HACKED = \"MSG_EVENT_CRATE_BEING_HACKED\"; public const string MSG_EVENT_SELF_DESTRUCT_INITIATED = \"MSG_EVENT_SELF_DESTRUCT_INITIATED\"; public const string MSG_FORMAT_TIME_BOTH = \"MSG_FORMAT_TIME_BOTH\"; public const string MSG_FORMAT_TIME_SEC = \"MSG_FORMAT_TIME_SEC\"; public const string MSG_FORMAT_TIME_MIN = \"MSG_FORMAT_TIME_MIN\"; public const string MSG_AVAILABLE_CAMERAS = \"MSG_AVAILABLE_CAMERAS\"; public const string MSG_AVAILABLE_CAMERAS2 = \"MSG_AVAILABLE_CAMERAS2\"; public const string MSG_VALUE_HAS_BEEN_SET = \"MSG_VALUE_HAS_BEEN_SET\"; private const string MSG_CFG_DEFAULT = \"MSG_CFG_DEFAULT\"; private const string MSG_CFG_RUNDOWN_FORMAT = \"MSG_CFG_RUNDOWN_FORMAT\"; private const string MSG_CFG_DETAILS_FORMAT = \"MSG_CFG_DETAILS_FORMAT\"; private const string MSG_CFG_NO_SETTING_FOUND = \"MSG_CFG_NO_SETTING_FOUND\"; private Dictionary<string, string> LangMessages = new Dictionary<string, string> { [MSG_FUEL_MANAGER_PRESENT] = \"Fuel Manager v. {0} loaded; handing over fuel handling\", [MSG_FUEL_MANAGER_NOT_PRESENT] = \"Fuel Manager not loaded, using default handling\", [MSG_CHAT_PREFIX] = \"<color=red>[Cargo Train Event]</color>\", [MSG_EVENT_SCHEDULE_DISABLED] = \"Not scheduling the next Cargo Train Event - the built-in event timer is disabled. You will need to run the command manually.\", [MSG_EVENT_SCHEDULED_IN] = \"The next Cargo Train Event has been scheduled to run {0} seconds (= {1} minutes) from now.\", [MSG_EVENT_STARTED] = \"Cargo Workcart inbound at <color=yellow>{0}</color>!\", [MSG_EVENT_UPDATE_POSITION] = \"Cargo Workcart is currently at <color=yellow>{0}</color>!\", [MSG_EVENT_OVER] = \"The Cargo Workcart event is over!\", [MSG_EVENT_DRIVER_DEAD] = \"The original driver of the Cargo Workcart has been taken out!\", [MSG_EVENT_CRATE_BEING_HACKED] = \"Somebody started hacking the locked crate on the Cargo Workcart!\", [MSG_EVENT_SELF_DESTRUCT_INITIATED] = \"The Cargo Workcart will self-destruct in {0}!\", [MSG_FORMAT_TIME_BOTH] = \"{0} m {1} s\", [MSG_FORMAT_TIME_SEC] = \"{0} s\", [MSG_FORMAT_TIME_MIN] = \"{0} m\", [MSG_AVAILABLE_CAMERAS] = \"The following CCTV identifiers have been assigned:{0}\", [MSG_AVAILABLE_CAMERAS2] = \"Event CCTVS: \", [MSG_VALUE_HAS_BEEN_SET] = \"Config value <color=yellow>{0}</color> has been set to {1} by an admin.\", [MSG_CFG_DEFAULT] = \"Here's the current settings. Type <color=yellow>/te_cfg settingName</color> with no parameters to see the description, the current value and what the accepted arguments are. Type <color=yellow>/te_cfg settingName acceptedValue</color> to change the setting.\", [MSG_CFG_RUNDOWN_FORMAT] = \"/te_cfg <color=yellow>{0}</color> (currently: {1})\", [MSG_CFG_DETAILS_FORMAT] = \"<color=green>{0}</color>:\\n{1} ({2})\\nThis value is currently set to: {3}\\n\", [MSG_CFG_NO_SETTING_FOUND] = \"No setting with that name has been found. Type /te_cfg to get a rundown.\", }; private static object ReusableObject; private static bool ReusableBool; private static string ReusableString; private static float ReusableFloat; private static bool ReusableBool2; private static string ReusableString2; private static float ReusableFloat2; private static int ReusableInt2; private static ulong ReusableUlong2; private void TellMessage(BasePlayer player, string message, bool alsoPrintWarning = false) { ReusableString2 = $\"{MSG(MSG_CHAT_PREFIX)} {message}\"; if (player == null) { if (Instance.configData.UseChatMessages) { Instance.PrintToChat(ReusableString2); } if (Instance.configData.UseNotifyPlugin) { foreach (var playah in BasePlayer.activePlayerList) { if (!playah.IsConnected) { continue; } Interface.Call(\"SendNotify\", playah, (int)0, ReusableString2); } } if (Instance.configData.UseGuiAnnouncements) { GUIAnnouncements?.Call(\"CreateAnnouncement\", ReusableString2, \"Grey", "Plugin version": "White", "Link to plugin": "", "Marketplace": "", "Ignore": false }
  12. dustyhansen

    console

    I am getting the color code thing too.
  13. I made this change and so far it seems to have resolved the issue. Is this something you can update in the plugin?
  14. dustyhansen

    Images Not Loading

    This worked and seems to have resolved my issues. My images are now showing in the Kill Feed.
  15. I updated the plugin and then did /decay warn and the data file is still empty: { "List of players.": {} } Nothing seems to write to this data file.
  16. The following plugins show as Not Loaded on my server and have duplicate entries in the Update Checker config. I tried removing these from the config, but they were put back when the plugin was loaded. InviteCommand MinicopterLicensePlate Tebex They have entries in the config file under these names, which are the correct names: Invite MiniPlate TebexPlugin The following plugins show as Not Found on my server and have duplicate entries in the Update Checker config. I tried removing these from the config, but the were put back when the plugin was loaded. Mini-CopterOptions RustServer.ggVote They have entries in the config file under these names, which are the correct names: MiniCopterOptions RSVote Why can't I remove the bad duplicate files from the config? They just reappear when I do so.
  17. It would be nice if plugins didn't completely vanish from the site as if they never existed. I had a plugin that I downloaded, not sure if I paid for it (I don't see it in Orders) or if it was free, but it appears to no longer exist at all on here. https://codefling.com/plugins/remote-team-invite So all of the discussions, support tickets, etc. are just lost? There is no way to re-download the file? No information on why it was pulled or anything?
  18. It would be nice if our Purchases tab showed free files we downloaded. Currently I can't see the free plugins I have downloaded anywhere, or at least that I can tell.
  19. dustyhansen

    Inventory Not Saving

    If I switch to player mode and restart the server, won't it lose whatever is in my admin inventory though because of RAM? I didn't test this, but just assumed that you cannot store stuff in both inventories and have it remember both inventories after a server restart because of the way it is written.
  20. I shared my config with you in a separate thread, but will share it again. I have 2 modes, but both modes have separate inventories set to "false". And how would I assign myself 2 modes? Especially when my steam ID isn't allowed on the other mode? AdminToggle (1).json
  21. That is not the issue we were trying to fix though. I thought what you were suggesting was that if I was an admin on the roof and toggled to player mode and fell to the bottom of the base and got stuck because of no clip, that this option would TP me back to the roof so I wasn't stuck anymore. I thought it TP you back to where you were when you exited admin mode. No?
  22. dustyhansen

    Images Not Loading

    Like the other guy said, it just switches back to "Internal" anyways, so what is the point? I tried changing it to "ImageLibrary" and reloaded the plugin, but not sure how long it stayed Image Library?
  23. No bot necessary, just go to the channel you want it to post in, click on edit channel, then integrations to add a webhook. There you can create the webhook, name it and give it an avatar. Copy that URL and put it in your config file. As for the Discord message ID, you will have to wait for the plugin to post it's first message and then you can right click that message to get the message ID, assuming you have dev mode on. This will make the plugin update the same message every time it posts instead of posting a new message in the channel. It is optional, you could leave it blank and have the plugin post a new message every hour (or whenever) if you want.
  24. Ok, understood. Thanks for the clarification.
1.6m

Downloads

Total number of downloads.

7.7k

Customers

Total customers served.

115.6k

Files Sold

Total number of files sold.

2.4m

Payments Processed

Total payments processed.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.