-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDisableRecycleEfficiency.cs
More file actions
125 lines (107 loc) · 4.52 KB
/
DisableRecycleEfficiency.cs
File metadata and controls
125 lines (107 loc) · 4.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
Copyright © 2024 Mabel
All rights reserved. This plugin is protected by copyright law.
You may not modify, redistribute, or resell this software without explicit written permission from the copyright owner.
For any support please message me directly via Discord `mabel8686`
*/
using System.Collections.Generic;
using Oxide.Core;
namespace Oxide.Plugins
{
[Info("Disable Recycle Efficiency", "Mabel", "1.0.1")]
[Description("Disables the recycle efficiency.")]
public class DisableRecycleEfficiency : RustPlugin
{
private const float DisabledRecycleEfficiency = 0.5f;
private class RecyclerState
{
public float RecycleEfficiency { get; set; }
public float SafezoneRecycleEfficiency { get; set; }
public float RadtownRecycleEfficiency { get; set; }
public bool OriginalFlagState { get; set; }
}
private Dictionary<ulong, RecyclerState> recyclerOriginalStates = new Dictionary<ulong, RecyclerState>();
private void Init()
{
LoadData();
}
private void OnServerInitialized()
{
foreach (var entity in BaseNetworkable.serverEntities)
{
if (entity is Recycler recycler)
{
SaveOriginalState(recycler);
DisableEfficiency(recycler);
recycler.SetFlag(BaseEntity.Flags.Reserved9, false, false);
}
}
}
private void OnEntitySpawned(BaseNetworkable entity)
{
if (entity is Recycler recycler)
{
SaveOriginalState(recycler);
DisableEfficiency(recycler);
recycler.SetFlag(BaseEntity.Flags.Reserved9, false, false);
}
}
private void SaveOriginalState(Recycler recycler)
{
if (!recyclerOriginalStates.ContainsKey(recycler.net.ID.Value))
{
recyclerOriginalStates[recycler.net.ID.Value] = new RecyclerState
{
RecycleEfficiency = recycler.recycleEfficiency,
SafezoneRecycleEfficiency = recycler.safezoneRecycleEfficiency,
RadtownRecycleEfficiency = recycler.radtownRecycleEfficiency,
OriginalFlagState = recycler.HasFlag(BaseEntity.Flags.Reserved9)
};
SaveData();
}
}
private void DisableEfficiency(Recycler recycler)
{
recycler.recycleEfficiency = DisabledRecycleEfficiency;
recycler.safezoneRecycleEfficiency = DisabledRecycleEfficiency;
recycler.radtownRecycleEfficiency = DisabledRecycleEfficiency;
}
private void Unload()
{
foreach (var entity in BaseNetworkable.serverEntities)
{
if (entity is Recycler recycler)
{
RestoreOriginalState(recycler);
}
}
recyclerOriginalStates.Clear();
SaveData();
}
private void RestoreOriginalState(Recycler recycler)
{
if (recyclerOriginalStates.TryGetValue(recycler.net.ID.Value, out RecyclerState originalState))
{
recycler.recycleEfficiency = originalState.RecycleEfficiency;
recycler.safezoneRecycleEfficiency = originalState.SafezoneRecycleEfficiency;
recycler.radtownRecycleEfficiency = originalState.RadtownRecycleEfficiency;
recycler.SetFlag(BaseEntity.Flags.Reserved9, originalState.OriginalFlagState, true, true);
}
}
private void SaveData()
{
Interface.Oxide.DataFileSystem.WriteObject(Name, recyclerOriginalStates);
}
private void LoadData()
{
recyclerOriginalStates = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, RecyclerState>>(Name) ?? new Dictionary<ulong, RecyclerState>();
}
private void NewSave()
{
recyclerOriginalStates.Clear(); SaveData(); Puts("Recycler states data has been wiped.");
}
[ConsoleCommand("dre_wipe")]
private void WipeRecyclerData(ConsoleSystem.Arg arg) { if (arg.Args == null) { ResetData(); } }
private void ResetData() { recyclerOriginalStates.Clear(); SaveData(); Puts("Recycler states data has been wiped."); }
}
}