-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathRepoRoles.cs
More file actions
483 lines (362 loc) · 18.2 KB
/
RepoRoles.cs
File metadata and controls
483 lines (362 loc) · 18.2 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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using MenuLib;
using MenuLib.MonoBehaviors;
using REPOLib;
using REPOLib.Modules;
using R.E.P.O.Roles;
using R.E.P.O.Roles.patches;
using System;
using System.IO;
using System.Reflection;
using UnityEngine;
using UnityEngine.SceneManagement;
using static MenuLib.MenuAPI;
using static MenuLib.MonoBehaviors.REPOSlider;
namespace Repo_Roles
{
[BepInPlugin("R3Labs.Repo_Roles.Classic", "REPO Roles Classic", "2.2.3")]
[BepInDependency("REPOLib", BepInDependency.DependencyFlags.HardDependency)]
[BepInDependency("nickklmao.menulib", BepInDependency.DependencyFlags.HardDependency)]
[BepInDependency("nickklmao.repoconfig", BepInDependency.DependencyFlags.HardDependency)]
[BepInDependency("PxntxrezStudio.REPOConomyPlus", BepInDependency.DependencyFlags.SoftDependency)]
public class RepoRoles : BaseUnityPlugin
{
public static RepoRoles Instance { get; private set; }
internal static new ManualLogSource Logger { get; private set; }
public readonly Harmony harmony = new Harmony("Repo_Roles");
public static Font newFont;
public static guiManager GUIinstance;
public static ConfigEntry<KeyCode> toggleKey;
public static ConfigEntry<KeyCode> showSpellsKey;
public static ConfigEntry<KeyCode> healKey;
public static ConfigEntry<KeyCode> speedKey;
public static ConfigEntry<KeyCode> overchargeKey;
public static ConfigEntry<KeyCode> jumpKey;
public static ConfigEntry<KeyCode> staminaKey;
public static ConfigEntry<KeyCode> scoutKey;
public static ConfigEntry<string> customRoleNameRunner;
public static ConfigEntry<string> customRoleNameTank;
public static ConfigEntry<string> customRoleNameGambler;
public static ConfigEntry<string> customRoleNameStrongman;
public static ConfigEntry<string> customRoleNameRL;
public static ConfigEntry<string> customRoleNameAthletic;
public static ConfigEntry<string> customRoleNameMage;
public static ConfigEntry<string> customRoleNameReaper;
public static ConfigEntry<string> customRoleNameScout;
public static ConfigEntry<string> customRoleNameRegular;
public static ConfigEntry<string> customRoleDecRunner;
public static ConfigEntry<string> customRoleDecTank;
public static ConfigEntry<string> customRoleDecGambler;
public static ConfigEntry<string> customRoleDecStrongman;
public static ConfigEntry<string> customRoleDecRL;
public static ConfigEntry<string> customRoleDecAthletic;
public static ConfigEntry<string> customRoleDecMage;
public static ConfigEntry<string> customRoleDecReaper;
public static ConfigEntry<string> customRoleDecScout;
public static ConfigEntry<string> customRoleDecRegular;
public static ConfigEntry<string> savedRole;
public static ConfigEntry<bool> enableRoleUpgrades;
public static ConfigEntry<bool> assignRoleAfterRevive;
public static ConfigEntry<bool> mageTopManaConf;
public static ConfigEntry<bool> showGUIAtStart;
public ConfigDefinition showGUIAtStartDef = new ConfigDefinition("GUI", "Show GUI when being assigned a role");
public ConfigDefinition mageTopManaDef = new ConfigDefinition("Role", "Place where mana is shown");
public ConfigDefinition def = new ConfigDefinition("GUI", "GUI Toggle Key");
public ConfigDefinition scoutButtonDef = new ConfigDefinition("GUI", "Activate Scout Ability");
public ConfigDefinition customRoleNameRunnerDef = new ConfigDefinition("Role Names", "Runner Name");
public ConfigDefinition customRoleNameTankDef = new ConfigDefinition("Role Names", "Tank Name");
public ConfigDefinition customRoleNameGamblerDef = new ConfigDefinition("Role Names", "Gambler Name");
public ConfigDefinition customRoleNameStrongmanDef = new ConfigDefinition("Role Names", "Strongman Name");
public ConfigDefinition customRoleNameRLDef = new ConfigDefinition("Role Names", "Ranged Looter Name");
public ConfigDefinition customRoleNameAthleticDef = new ConfigDefinition("Role Names", "Athletic Name");
public ConfigDefinition customRoleNameMageDef = new ConfigDefinition("Role Names", "Mage Name");
public ConfigDefinition customRoleNameReaperDef = new ConfigDefinition("Role Names", "Reaper Name");
public ConfigDefinition customRoleNameScoutDef = new ConfigDefinition("Role Names", "Scout Name");
public ConfigDefinition customRoleNameRegularDef = new ConfigDefinition("Role Names", "Regular Name");
public ConfigDefinition customRoleDesRunnerDef = new ConfigDefinition("Role Descriptions", "Runner Description");
public ConfigDefinition customRoleDesTankDef = new ConfigDefinition("Role Descriptions", "Tank Description");
public ConfigDefinition customRoleDesGamblerDef = new ConfigDefinition("Role Descriptions", "Gambler Description");
public ConfigDefinition customRoleDesStrongmanDef = new ConfigDefinition("Role Descriptions", "Strongman Description");
public ConfigDefinition customRoleDesRLDef = new ConfigDefinition("Role Descriptions", "Ranged Looter Description");
public ConfigDefinition customRoleDesAthleticDef = new ConfigDefinition("Role Descriptions", "Athletic Description");
public ConfigDefinition customRoleDesMageDef = new ConfigDefinition("Role Descriptions", "Mage Description");
public ConfigDefinition customRoleDesReaperDef = new ConfigDefinition("Role Descriptions", "Reaper Description");
public ConfigDefinition customRoleDesScoutDef = new ConfigDefinition("Role Descriptions", "Scout Description");
public ConfigDefinition customRoleDesRegularDef = new ConfigDefinition("Role Descriptions", "Regular Description");
public ConfigDefinition showSpellsDef = new ConfigDefinition("Mage", "Show Spells");
public ConfigDefinition healDef = new ConfigDefinition("Mage", "Healing Spell");
public ConfigDefinition speedDef = new ConfigDefinition("Mage", "Speed Spell");
public ConfigDefinition overchargeDef = new ConfigDefinition("Mage", "Overcharge Spell");
public ConfigDefinition jumpDef = new ConfigDefinition("Mage", "Jump Boost Spell");
public ConfigDefinition staminaDef = new ConfigDefinition("Mage", "Stamina Refill Spell");
public ConfigDefinition roleUpgrades = new ConfigDefinition("Upgrades", "Enable Role Upgrades in Shop");
public ConfigDefinition selectedRoleDef = new ConfigDefinition("Role", "Your selected role");
public ConfigDefinition afterDeathRoleDef = new ConfigDefinition("Role", "Reaasign roles after being revived");
public static ConfigEntry<bool> enableRunner;
public static ConfigEntry<bool> enableTank;
public static ConfigEntry<bool> enableGambler;
public static ConfigEntry<bool> enableStrongman;
public static ConfigEntry<bool> enableRL;
public static ConfigEntry<bool> enableAthletic;
public static ConfigEntry<bool> enableMage;
public static ConfigEntry<bool> enableReaper;
public static ConfigEntry<bool> enableScout;
public static ConfigEntry<bool> enableRegular;
public ConfigDefinition enableRunnerDef = new ConfigDefinition("Role", "Enable Runner");
public ConfigDefinition enableTankDef = new ConfigDefinition("Role", "Enable Tank");
public ConfigDefinition enableGamblerDef = new ConfigDefinition("Role", "Enable Gambler");
public ConfigDefinition enableStrongmanDef = new ConfigDefinition("Role", "Enable Strongman");
public ConfigDefinition enableRLDef = new ConfigDefinition("Role", "Enable Ranged Looter");
public ConfigDefinition enableAthleticDef = new ConfigDefinition("Role", "Enable Athletic");
public ConfigDefinition enableMageDef = new ConfigDefinition("Role", "Enable Mage");
public ConfigDefinition enableReaperDef = new ConfigDefinition("Role", "Enable Reaper");
public ConfigDefinition enableScoutDef = new ConfigDefinition("Role", "Enable Scout");
public ConfigDefinition enableRegularDef = new ConfigDefinition("Role", "Enable Regular");
private REPOSlider slider;
private REPOPopupPage configPage;
private REPOButton buttonOpen;
private REPOButton buttonOpenLobby;
private REPOButton buttonClose;
private REPOToggle afterDeathRoleToggle;
private REPOToggle mageTopMana;
public static bool afterDeathNewRole = false;
public static bool mageTopManaBool;
public static string chosenRoleName = "Random";
public void sliderConf(string a)
{
savedRole.Value = a;
chosenRoleName = a;
}
public void aDRC(bool a)
{
assignRoleAfterRevive.Value = a;
afterDeathNewRole = a;
}
public void mageManaFunc(bool a)
{
mageTopManaConf.Value = a;
mageTopManaBool = a;
// Force save the config
Config.Save();
// Update mana display immediately if player is mage
if (guiManager.isMage && GUIinstance != null)
{
GUIinstance.UpdateManaDisplay();
}
}
public static string getPath()
{
return Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "REPORoles_assets2");
}
private void Awake()
{
Instance = this;
Logger = base.Logger;
savedRole = Config.Bind(selectedRoleDef, "Random", null);
assignRoleAfterRevive = Config.Bind(afterDeathRoleDef, false, null);
mageTopManaConf = Config.Bind(mageTopManaDef, true, null);
mageTopManaBool = mageTopManaConf.Value;
showGUIAtStart = Config.Bind(showGUIAtStartDef, true, null);
enableRoleUpgrades = Config.Bind(roleUpgrades, true, null);
enableRunner = Config.Bind(enableRunnerDef, true, null);
enableTank = Config.Bind(enableTankDef, true, null);
enableGambler = Config.Bind(enableGamblerDef, true, null);
enableStrongman = Config.Bind(enableStrongmanDef, true, null);
enableRL = Config.Bind(enableRLDef, true, null);
enableAthletic = Config.Bind(enableAthleticDef, true, null);
enableMage = Config.Bind(enableMageDef, true, null);
enableReaper = Config.Bind(enableReaperDef, true, null);
enableScout = Config.Bind(enableScoutDef, true, null);
enableRegular = Config.Bind(enableRegularDef, true, null);
MenuAPI.AddElementToSettingsMenu((BuilderDelegate)delegate (Transform parent)
{
if ((UnityEngine.Object)(object)configPage == null)
{
configPage = MenuAPI.CreateREPOPopupPage("REPORoles Classic", 0, true, true, 1.5f);
}
buttonOpen = MenuAPI.CreateREPOButton("REPORoles Classic Config", (Action)delegate
{
configPage.OpenPage(false);
}, parent, new Vector2(500f, 10f));
configPage.AddElementToScrollView(delegate (Transform scrollView)
{
if ((UnityEngine.Object)(object)slider == null)
{
slider = MenuAPI.CreateREPOSlider("REPORoles Classic", "Choose your role", (Action<string>)delegate (string s)
{
sliderConf(s);
}, scrollView, new string[11] { "Random", "Runner", "Tank", "Gambler", "Strongman", "Ranged Looter", "Athletic", "Mage", "Reaper", "Scout", "Regular" }, savedRole.Value, new Vector2(0f, 0f), "", "", (BarBehavior)0);
}
return ((REPOElement)slider).rectTransform;
}, 0f, 0f);
configPage.AddElementToScrollView(delegate (Transform scrollView)
{
if ((UnityEngine.Object)(object)afterDeathRoleToggle == null)
{
afterDeathRoleToggle = MenuAPI.CreateREPOToggle("Reassign role on respawn", (Action<bool>)delegate (bool b)
{
aDRC(b);
}, scrollView, new Vector2(0f, 0f), "ON", "OFF", assignRoleAfterRevive.Value);
}
return ((REPOElement)afterDeathRoleToggle).rectTransform;
}, 0f, 0f);
configPage.AddElementToScrollView(delegate (Transform scrollView)
{
if ((UnityEngine.Object)(object)mageTopMana == null)
{
mageTopMana = MenuAPI.CreateREPOToggle("Mage Mana Position", (Action<bool>)delegate (bool b)
{
mageManaFunc(b);
}, scrollView, new Vector2(0f, 0f), "TOP", "LEFT", mageTopManaConf.Value);
}
return ((REPOElement)mageTopMana).rectTransform;
}, 0f, 0f);
configPage.AddElement((BuilderDelegate)delegate (Transform val)
{
if ((UnityEngine.Object)(object)buttonClose == null)
{
buttonClose = MenuAPI.CreateREPOButton("Back", (Action)delegate
{
configPage.ClosePage(false);
}, val, Vector2.zero);
}
});
});
MenuAPI.AddElementToLobbyMenu((BuilderDelegate)delegate (Transform parent)
{
buttonOpenLobby = MenuAPI.CreateREPOButton("REPO Roles Config", (Action)delegate
{
configPage.OpenPage(false);
}, parent, new Vector2(500f, 500f));
});
if ((UnityEngine.Object)(object)Instance == null)
{
Instance = this;
}
harmony.PatchAll(typeof(RepoRoles));
harmony.PatchAll(typeof(Sender));
Logger.LogInfo($"Plugin {MyPluginInfo.PLUGIN_NAME} v{MyPluginInfo.PLUGIN_VERSION} loaded successfully.");
SceneManager.sceneLoaded += delegate
{
if (GUIinstance == null)
{
GameObject val = new GameObject();
GUIinstance = val.AddComponent<guiManager>();
GUIinstance.text = "";
GUIinstance.color = Color.cyan;
UnityEngine.Object.DontDestroyOnLoad((UnityEngine.Object)(object)val);
}
};
toggleKey = Config.Bind(def, (KeyCode)114, null);
showSpellsKey = Config.Bind(showSpellsDef, (KeyCode)109, null);
healKey = Config.Bind(healDef, (KeyCode)104, null);
speedKey = Config.Bind(speedDef, (KeyCode)106, null);
overchargeKey = Config.Bind(overchargeDef, (KeyCode)111, null);
jumpKey = Config.Bind(jumpDef, (KeyCode)107, null);
scoutKey = Config.Bind(scoutButtonDef, (KeyCode)103, null);
staminaKey = Config.Bind(staminaDef, (KeyCode)110, null);
customRoleNameRunner = Config.Bind(customRoleNameRunnerDef, "Runner", null);
customRoleNameTank = Config.Bind(customRoleNameTankDef, "Tank", null);
customRoleNameGambler = Config.Bind(customRoleNameGamblerDef, "Gambler", null);
customRoleNameStrongman = Config.Bind(customRoleNameStrongmanDef, "Strongman", null);
customRoleNameRL = Config.Bind(customRoleNameRLDef, "Ranged Looter", null);
customRoleNameAthletic = Config.Bind(customRoleNameAthleticDef, "Athletic", null);
customRoleNameMage = Config.Bind(customRoleNameMageDef, "Mage", null);
customRoleNameReaper = Config.Bind(customRoleNameReaperDef, "Reaper", null);
customRoleNameScout = Config.Bind(customRoleNameScoutDef, "Scout", null);
customRoleNameRegular = Config.Bind(customRoleNameRegularDef, "Regular", null);
customRoleDecRunner = Config.Bind(customRoleDesRunnerDef, "You have more stamina and run much faster than everyone else!", null);
customRoleDecTank = Config.Bind(customRoleDesTankDef, "You walk slower but your hp is doubled!", null);
customRoleDecGambler = Config.Bind(customRoleDesGamblerDef, "You rolled random effects:", null);
customRoleDecStrongman = Config.Bind(customRoleDesStrongmanDef, "You\u00b4re incredibly strong!", null);
customRoleDecRL = Config.Bind(customRoleDesRLDef, "You can reach objects from far away!", null);
customRoleDecAthletic = Config.Bind(customRoleDesAthleticDef, "You have more stamina, strength and can jump higher", null);
customRoleDecMage = Config.Bind(customRoleDesMageDef, "You are able to use your mana to become incredibly strong!", null);
customRoleDecReaper = Config.Bind(customRoleDesReaperDef, "For each enemy you and your friends kill, you become stronger!", null);
customRoleDecScout = Config.Bind(customRoleDesScoutDef, "Your stamina is more efficient and by pressing [G] you can see all enemies around you.", null);
customRoleDecRegular = Config.Bind(customRoleDesRegularDef, "You are just a regular Semibot. Nothing special.", null);
harmony.PatchAll(typeof(PunManagerPatch));
harmony.PatchAll(typeof(PlayerAvatarPatch));
harmony.PatchAll(typeof(StatsManagerPatch));
harmony.PatchAll(typeof(ShopManagerPatch));
harmony.PatchAll(typeof(EnemyHealthPatch));
BundleLoader.LoadBundle(getPath(), delegate (AssetBundle assetBundle)
{
string[] upgrades = new[] { "Mana Regeneration Upgrade", "Scout Cooldown Upgrade" };
foreach (var upgradeName in upgrades)
{
try
{
Item item = assetBundle.LoadAsset<Item>(upgradeName);
if (item == null)
{
Logger.LogError($"Failed loading Item asset '{upgradeName}' from bundle.");
continue;
}
// load prefabs
GameObject prefab = assetBundle.LoadAsset<GameObject>(upgradeName);
if (prefab == null)
{
Logger.LogError($"Failed loading prefab for upgrade '{upgradeName}'. Make sure the prefab is included in the bundle.");
continue;
}
// unique name
string assetName = $"REPORoles_upgrade {upgradeName}";
prefab.name = assetName;
item.name = assetName;
item.itemName = $"{upgradeName}";
// Add Value if missing (dont remember)
if (item.value == null)
{
Value v = ScriptableObject.CreateInstance<Value>();
v.valueMin = 100f;
v.valueMax = 100f;
item.value = v;
}
// hook
ItemAttributes itemAttributes = prefab.GetComponent<ItemAttributes>() ?? prefab.AddComponent<ItemAttributes>();
itemAttributes.item = item;
// Add or reuse the REPOLib upgrade component and set its private id
REPOLibItemUpgrade itemUpgrade = prefab.GetComponent<REPOLibItemUpgrade>() ?? prefab.AddComponent<REPOLibItemUpgrade>();
AccessTools.Field(typeof(REPOLibItemUpgrade), "_upgradeId").SetValue(itemUpgrade, upgradeName);
// Register the prefab/item with REPOLib
var prefabRef = Items.RegisterItem(itemAttributes);
if (prefabRef == null)
{
Logger.LogWarning($"Items.RegisterItem returned null for '{upgradeName}'. It may already be registered or there was an error.");
}
else
{
Logger.LogInfo($"Registered upgrade item '{upgradeName}'.");
}
// Register the upgrades with REPOLib
Upgrades.RegisterUpgrade(upgradeName, item, null, null);
}
catch (System.Exception e)
{
Logger.LogError($"Exception while registering upgrade '{upgradeName}': {e}");
}
}
}, false);
}
public static void Update_ManaRegeneration()
{
if (LevelGenerator.Instance.Generated && !SemiFunc.MenuLevel())
{
int stat = Upgrader.GetStat(PlayerAvatar.instance.steamID, "playerUpgradeManaRegeneration");
guiManager.manaRegenRate = Upgrader.GetStat(PlayerAvatar.instance.steamID, "playerUpgradeManaRegeneration");
}
}
public static void Update_ScoutCooldown()
{
if (LevelGenerator.Instance.Generated && !SemiFunc.MenuLevel())
{
int stat = Upgrader.GetStat(PlayerAvatar.instance.steamID, "playerUpgradeScoutCooldownReduction");
ScoutMarker.reductionUpgrades = Upgrader.GetStat(PlayerAvatar.instance.steamID, "playerUpgradeScoutCooldownReduction");
}
}
}
}