211 Commits

Author SHA1 Message Date
8a149d45ec Try and cook dodge timings 2025-05-21 23:34:12 +02:00
c2fe7b0c9e Implement transpiler for level up stat evaluation in Actions_ClickedStat 2025-05-21 20:51:41 +02:00
71163fc589 Add source files 2025-05-21 20:40:04 +02:00
0f2a242b30 Add options for level up stats and skills 2025-05-21 20:18:57 +02:00
4ae13418a6 Add dodge window option 2025-05-21 16:53:46 +02:00
9583944c69 Add current input tracking and enhance debug logging in ExpressionConfigEntry 2025-05-21 16:49:31 +02:00
345f8c4565 Add debug logs to our expressions 2025-05-21 16:28:04 +02:00
66ca370ac2 Implement ExpressionConfigEntry that implements shunting yard and postfix notation to compute values based on strings 2025-05-21 16:16:01 +02:00
dea5256339 Copy paste to banquet for fools 2025-05-21 15:41:49 +02:00
f56aae2dbf Update subproject commits for MineDumpControl, DifficultySettingsMod, and DoubleQoLMod 2025-05-17 13:59:49 +02:00
1e1268cee6 Remove debug mining configuration and related patch due to functionality issues 2025-05-17 13:58:25 +02:00
005c1805e9 Add debug option for every other config option 2025-05-17 13:55:24 +02:00
fbcabc90b7 Add mining multiplier 2025-05-17 13:52:38 +02:00
f72fcee86c Add hiring cost multiplier and patch for cost calculation 2025-05-17 13:17:01 +02:00
5bde3c20b4 Rework customer, decoration bonuses, and walking speed multipliers 2025-05-17 13:13:33 +02:00
28bb3038c5 Add offsets for daily customer, decoration addition, and global speed multipliers 2025-05-17 13:00:15 +02:00
8c4e8b9366 Add multipliers for daily customers, decoration addition, and global speed 2025-05-17 12:58:04 +02:00
dcf88a498e Make always chads 2025-05-17 12:47:58 +02:00
402909f3fd Always level skills evenly 2025-05-17 12:38:17 +02:00
fbe307281c Add salary multiplier 2025-05-17 12:07:45 +02:00
eed75e919f Multiply research 2025-05-17 11:41:57 +02:00
1af46039ea Remove suo files
What the fuck anyway...
2025-05-17 11:11:38 +02:00
5adb7defec Multiply the monies 2025-05-17 11:11:15 +02:00
fff44bfc93 Add blacksmith master project 2025-05-17 10:50:17 +02:00
22b048a629 Update 2025-05-17 10:35:45 +02:00
69125d6342 Copy terratech to erenshor 2025-04-15 20:34:52 +02:00
1d5855989b Add xp multiplier maybe 2025-04-06 00:44:52 +02:00
e4a99d093a Copy paste terratech to quasimorph 2025-04-06 00:40:48 +02:00
b54210ec69 Update 2025-04-06 00:28:31 +02:00
dcc039afcb Update 2025-04-06 00:28:28 +02:00
793fc2b48d Implement weight fuuckery for zompiercer 2025-03-07 02:01:28 +01:00
2c1f5d5688 Add zompiercer 2025-03-07 01:43:57 +01:00
7aca70b7b6 Code format 2025-02-26 09:54:33 +01:00
44705dcc75 Add multi-buy functionality for block purchasing 2025-02-25 18:48:20 +01:00
2e483b1869 Fix block availability calculation in UISnapshotPanelBuyAll 2025-02-25 15:58:23 +01:00
ce6ea32f4e Add support for right-click block purchasing on swap button 2025-02-25 15:52:48 +01:00
1d8699761e Refactor UISnapshotPanelBuyAll to improve block purchase logic 2025-02-25 15:49:33 +01:00
9d40375b8c Implement auto buying missing blocks for a given tech snapshot 2025-02-25 15:37:35 +01:00
573c517dac Add TankManager with module registration and recheck functionality 2025-02-25 14:56:45 +01:00
8fbabf3931 Add ModuleManagerMapper for dynamic module management 2025-02-25 11:57:56 +01:00
e4700847df Fix player-only option in ModuleWingManager 2025-02-25 09:46:59 +01:00
acdc4d2a78 Update ModuleEnergyManager to patch OnAnchorStatusChanged instead of OnAttached 2025-02-25 08:42:16 +01:00
7964f8f395 Remove projectile and missile projectile configuration from ModuleWeaponGunManager 2025-02-24 22:20:19 +01:00
9e3e4fa367 Add projectile explode on stick configuration option 2025-02-24 22:18:54 +01:00
b10eb8752b Add projectile and missile projectile configuration to ModuleWeaponGunManager 2025-02-24 22:01:13 +01:00
d0ffe1951b Replace TechBoosterManager with ModuleFuelTankManager 2025-02-24 21:06:13 +01:00
4f51f8599e Add TechBoosterManager with configurable fuel multipliers 2025-02-24 18:28:09 +01:00
5723e9592e Add ModuleHeartManager with configurable multipliers 2025-02-24 16:43:13 +01:00
dc7be36bdb Add player-only configuration to module managers 2025-02-24 15:51:39 +01:00
0b4883ed6c Make apply only to player option 2025-02-24 15:46:42 +01:00
446ef52012 Add IsObjectTank method with error handling to CykUtil 2025-02-24 15:41:54 +01:00
af0c47e9e5 Add CykUtil for checking player tank ownership 2025-02-24 15:37:42 +01:00
106afee250 Code format 2025-02-24 15:37:00 +01:00
d53a5bb6cc Fix wing and item producer module naming and patching 2025-02-24 15:06:42 +01:00
c23be11e4b Only apply booleans if they're true 2025-02-24 11:30:58 +01:00
c460a65234 Fix typos n shit 2025-02-24 11:20:51 +01:00
c441d3ad10 Fix booster cast 2025-02-24 10:47:34 +01:00
91e2bf4b61 Enhance MultipliedObjectManager with robust error handling and reference management 2025-02-24 10:44:07 +01:00
622094fbe9 Add ModuleWeaponManager for configurable weapon rotate speed 2025-02-24 10:18:42 +01:00
bdced22781 Add TankBeamManager for configurable tank beam settings 2025-02-24 10:17:37 +01:00
708607b2f5 Add ModuleWheelsManager for configurable wheel torque settings 2025-02-24 10:14:40 +01:00
dbeb55e2aa Add BooleanField for configurable boolean field settings 2025-02-24 10:10:34 +01:00
212c82b448 Add ModuleWeaponGunManager for configurable weapon gun settings 2025-02-24 10:08:22 +01:00
0c440a4876 Add ModuleRemoteChargerManager for configurable remote charger settings 2025-02-24 10:03:50 +01:00
bd554f4c0f Add ModuleItemProducerManager for configurable item producer settings 2025-02-24 10:02:41 +01:00
cda2f3a75c Update FieldConfiguration to support generic multiplier types 2025-02-24 09:59:03 +01:00
11c7d74489 Make both the multiplier and field generic 2025-02-24 09:57:36 +01:00
95fdbc7cda Add ModuleItemHolderManager for configurable item holder settings 2025-02-24 09:53:24 +01:00
551acd2690 Add ModuleGyroManager for configurable gyro active speed 2025-02-24 09:42:27 +01:00
e485f5b2d2 Remove redundant configuration variables and clean up commented code 2025-02-24 09:40:41 +01:00
f7f73a6891 Add ModuleEnergyStoreManager for configurable energy store capacity 2025-02-24 09:40:32 +01:00
a5fd22a9c5 Simplify configuration variable names across module managers 2025-02-24 09:38:32 +01:00
0f494e7ae1 Add ModuleEnergyManager for configurable energy module settings 2025-02-24 09:36:31 +01:00
e86c26a0d8 Code polish 2025-02-24 09:34:41 +01:00
f17ef5b559 Rename FireDataManager to ModuleWeaponGunManager 2025-02-24 09:34:02 +01:00
320c032e30 Add ModuleBoosterManager for configurable booster thrust multipliers 2025-02-24 09:33:27 +01:00
9718e254aa Refactor FireData configuration to FireDataManager 2025-02-24 09:26:10 +01:00
b69db2edc8 Refactor shield configuration to ModuleShieldGeneratorManager 2025-02-24 09:14:44 +01:00
255d563b86 Refactor settings to modulewingmanager 2025-02-24 09:13:05 +01:00
fe5b4084ff Add FireData configuration multipliers for kickback and muzzle velocity 2025-02-24 09:05:44 +01:00
ba6ebf6d07 Add aerofoil configuration multipliers and ModuleWingManager 2025-02-24 09:01:10 +01:00
4f695d907b Write out this shit for dotnet6 2025-02-24 08:48:45 +01:00
897f0a3546 Add shield healing radius multiplier configuration 2025-02-24 08:48:45 +01:00
edc8fd5a5b Enhance ObjectFieldMultiplier with flexible field configuration and selective application 2025-02-24 08:44:18 +01:00
13610a301a Fix multiplication in multiplier 2025-02-24 08:33:13 +01:00
e0b9bed690 Remove old shit 2025-02-24 08:30:46 +01:00
fd8ce5c59e Improve ObjectFieldMultiplier with naming conventions and documentation 2025-02-24 00:26:12 +01:00
c8302ea177 Refactor ObjectFieldMultiplier with code style improvements and minor optimizations 2025-02-24 00:24:49 +01:00
89a557dc96 Extract generic object field multiplier logic to separate file 2025-02-24 00:13:43 +01:00
741ab21977 Enhance ModuleShieldGeneratorManager with robust error handling and debug logging 2025-02-24 00:10:32 +01:00
336a4dfff7 Refactor ModuleShieldGeneratorManager with generic multiplied object management 2025-02-24 00:08:42 +01:00
a53bcc246e Refactor the fuck out of ModuleShieldGeneratorManager with generic multiplier handling 2025-02-24 00:06:04 +01:00
5df952a69a Add battery capacity multiplier configuration 2025-02-23 23:50:36 +01:00
4ad206a198 Add shield and energy module configuration multipliers 2025-02-23 23:46:44 +01:00
e16a941413 Add shop block multipliers 2025-02-23 18:15:17 +01:00
8c58bf504c "Fix" rotation speed maybe 2025-02-23 16:02:33 +01:00
b5d75ccffd Add rotation speed log patch 2025-02-23 15:44:18 +01:00
44c24e4ae7 Format 2025-02-23 15:40:05 +01:00
5e2b2546bf Update terratech 2025-02-23 15:31:57 +01:00
03c8043c77 Night raidering 2025-02-23 15:31:52 +01:00
a71a25226f More cheap train 2024-12-31 16:06:04 +01:00
cd104d142e Implement auto loot 2024-12-31 15:21:57 +01:00
983aaa68e6 Add night rider 2024-12-31 13:46:32 +01:00
3c7b9f7360 Add additional reverse engineer chance 2024-12-10 11:34:24 +01:00
80173da3b0 Implement reverse engineer chance multiplier 2024-12-10 11:30:57 +01:00
1c6dbb79e6 Update configuration manager and unity explorer 2024-12-10 11:30:50 +01:00
b24100c89b Add disassemble multiplier 2024-12-09 23:19:54 +01:00
b1ca039574 Reduce bonus attribute bonus 2024-12-09 21:11:02 +01:00
dd3c227447 Always get some skills please 2024-12-09 17:25:29 +01:00
dd515529f9 More better logging 2024-12-09 17:24:46 +01:00
6d468300a2 Add xp multiplier 2024-12-09 12:51:23 +01:00
f6bc2eff3f Add multipliers for fucking level up stats 2024-12-09 12:26:10 +01:00
490aa3bf2e Fix up the fuCKIGN versions 2024-12-09 11:45:41 +01:00
f5498cad02 Migrate back to whatever the fuck works (framework 481) 2024-12-09 11:30:32 +01:00
bbcf1f229d Add xp multiplier.. of some variety 2024-12-08 23:53:37 +01:00
fdc4ccef4c First coq build 2024-12-08 23:44:42 +01:00
1fde73924a Migrate to net sdk?????? 2024-12-08 23:40:27 +01:00
a40cb99745 Add cykaOfqud 2024-12-08 23:22:46 +01:00
059c8a53a4 Add recipe output multiplier 2024-10-20 16:31:15 +02:00
90edaaf5c8 Remove COI extended
Turns out its not open source
2024-10-20 13:48:27 +02:00
1740f7f4ba Update submodules 2024-10-20 13:48:07 +02:00
a95bf892ab Implement actual excavator mining area multiplier 2024-10-20 01:19:32 +02:00
b786897b9f Implement custom autosave
Because the built in one goes only as low as 10 min
I want 10 second
2024-10-19 22:24:26 +02:00
259446cfbe Fix up doubleqol 2024-10-19 21:33:05 +02:00
9476ddabf3 Reduce mining timers maybe.... 2024-10-19 20:53:00 +02:00
5bd4d341f8 Update MD controler 2024-10-19 15:56:49 +02:00
fcf24a7cbe Fix patch for mining distance 2024-10-19 14:58:40 +02:00
d0b0a45f3a Add debug logs 2024-10-19 14:33:11 +02:00
c7a55276e2 Fix issue where excavators do not properly excavate 2024-10-19 14:30:12 +02:00
1a81695349 Maybe fix capacity now 2024-10-19 00:01:43 +02:00
ef58960245 Fix excavator capacity bullshit 2024-10-18 22:59:48 +02:00
f663d28109 Update submodules 2024-10-18 22:21:18 +02:00
df73f0cb07 Add difficulty settings mod 2024-10-18 20:23:13 +02:00
c2508563e0 Update submodules 2024-10-18 20:22:21 +02:00
0306be5dfb Refactor CykaOfIndustry 2024-10-18 19:20:03 +02:00
1f8a0bbf21 Add submodules 2024-10-18 19:07:48 +02:00
abf53a9cd0 Refactor to cyka 2024-10-18 19:00:20 +02:00
519e6e3a6c Update COI sync 2024-10-18 18:54:59 +02:00
7b3f628215 Add libs to COI 2024-10-18 18:54:08 +02:00
335fc98ac2 Code format 2024-10-18 18:51:17 +02:00
289bb5be8e Add sync to COI 2024-10-18 18:50:42 +02:00
3d48f4fded Update COI csproj 2024-10-18 18:50:42 +02:00
9347202722 Remove symlink to bepinex 2024-10-18 18:50:42 +02:00
105fb30dd7 Remove libs 2024-10-18 18:50:42 +02:00
e7672fadba Add adult and old age config 2024-09-29 11:45:03 +02:00
32f62fff02 Add vehicle movement speed patch 2024-09-29 11:27:34 +02:00
fda4abd0ea Add config for max building volume 2024-09-29 03:14:53 +02:00
ffc398c202 Make wall angle more betterer 2024-09-29 01:56:39 +02:00
dee8e85eb9 Remove colision from walls towers and gates
To be able to ACTUALLY place wire
2024-09-29 01:47:52 +02:00
f0e4a2d64b Fix rotating speed modifier 2024-09-29 01:18:31 +02:00
34ad8bef4d Fix improperly loading prod multiplier 2024-09-29 00:05:07 +02:00
2e030b6fe2 Implement echoing tower selection to all towers 2024-09-28 23:59:56 +02:00
c05212a860 Fix issue where sunrise/set is not applied for negative values 2024-09-28 22:43:41 +02:00
21963d9013 Add sunrise hour offset 2024-09-28 22:42:41 +02:00
306b95644b Add production multiplier
Actually a setpoint
2024-09-28 22:35:39 +02:00
ace4fba19e Add sunset hour offset 2024-09-28 21:42:59 +02:00
1904f12d6c More slower rotationing 2024-09-28 21:29:15 +02:00
4afa45fa4e Add deconstruction workers setting
For more worker per building destruct
2024-09-28 20:24:29 +02:00
761b524f20 Remove scavenge patch
It broke game.. :(
2024-09-28 20:05:31 +02:00
4cf2eb9e9b Fix up birthing config 2024-09-28 20:00:11 +02:00
2273610965 Specify debug per setting
It was getting too spammy... And laggy (with debug on all)
2024-09-28 19:13:40 +02:00
e95e86092a Add birthing configs 2024-09-28 19:06:38 +02:00
bf982418ca Maybe fix bug with infinite resource duplication on deconstruct 2024-09-28 17:29:19 +02:00
54294574de Add production time multiplier 2024-09-28 16:11:59 +02:00
d432d5df96 Fix deconstruction materials infinitely duplicating 2024-09-28 16:11:54 +02:00
2c2ba060cc Add people multiplier 2024-09-28 16:11:54 +02:00
02f370fd66 Add construct time multiplier 2024-09-28 16:11:54 +02:00
ec5dd30826 Add deconstruct time multiplier 2024-09-28 14:57:14 +02:00
a4c81ea445 Add vehicle cargo multiplier 2024-09-28 14:20:01 +02:00
d704437cc7 Move sync 2024-09-28 13:48:12 +02:00
c0852dcc68 Remove debug log from movement speed patch 2024-09-28 13:48:12 +02:00
fa822cedd4 Add speed multiplier for humans 2024-09-28 13:46:24 +02:00
1ce4d4368e Add building deconstruct resource multiplier 2024-09-28 02:26:27 +02:00
efdab6cb38 Add building size multiplier 2024-09-28 02:03:11 +02:00
a4ac6d63cd Rework gathering multiplier 2024-09-28 01:48:25 +02:00
8f8f3a1969 Add scavenge multiplier item 2024-09-28 01:26:47 +02:00
8eaaaadcd0 Work speed no workey :( 2024-09-28 01:06:35 +02:00
b36d7717eb Add work speed and gather multipliers 2024-09-28 00:59:29 +02:00
2e4fe4e7e3 Add resource multiplier multiplier 2024-09-28 00:40:13 +02:00
10e8218d07 Update sync 2024-09-28 00:26:30 +02:00
2e7f8015c5 Add InfectionFreeZone 2024-09-28 00:25:03 +02:00
b8b06f2efe Add debug option 2024-09-26 15:25:28 +02:00
be05eb013e Fix quality patch 2024-09-26 15:24:44 +02:00
8fc5fa8c26 Add config manager bindings 2024-09-26 15:17:02 +02:00
4eee4d89e3 More peoples and more prestiges 2024-09-26 15:16:01 +02:00
6d782ef9ed Add xp patch 2024-09-26 14:44:45 +02:00
0a48ce2f63 Fix issue with game speed patch 2024-09-26 14:41:13 +02:00
1e479005a1 Add logs to taverndave 2024-09-26 14:40:09 +02:00
bdf34571be Add speed modifier to tavernmaster 2024-09-26 14:38:32 +02:00
2f42e410e8 Update airportceo 2024-09-26 14:36:07 +02:00
64b52c0e95 Add tavernmaster 2024-09-26 14:36:07 +02:00
bbe92da556 Add airportCEO 2024-08-24 21:17:30 +02:00
d32cda849e Add supermarket simulator 2024-08-24 21:15:12 +02:00
a48fc8ad10 Add unity explorer 2024-08-24 21:15:09 +02:00
d8d717c53a Add failed builderdecoration 2024-08-23 21:41:30 +02:00
0ee56fc7b1 Enable setting prices even when they're the same 2024-08-23 21:41:24 +02:00
a87821f2ad Implement auto pricer
Sets prices to price * multiplier automatically
2024-08-23 12:16:07 +02:00
74668188ce Add editorconfig 2024-08-23 12:15:46 +02:00
72c9b4baa3 Begin work on auto pricer 2024-08-23 09:19:37 +02:00
762a1707af Refactor employee patches 2024-08-23 09:18:25 +02:00
a0edd9edec Refactor player faking 2024-08-23 09:12:28 +02:00
59e94959da Refactor wait times into their own class 2024-08-23 09:10:45 +02:00
454939d0eb Fix sync script 2024-08-22 20:10:20 +02:00
00a9ad69bb Rename assembly names 2024-08-22 20:07:27 +02:00
b4eb299415 Add mirror 2024-08-22 20:05:12 +02:00
92cb8b7ca4 Add patch for manipulating npc wait timers 2024-08-22 20:03:49 +02:00
ed67c49c04 Add patch for employee extra money 2024-08-22 19:25:41 +02:00
f216cfddb3 Rework employee speed perk patch 2024-08-22 19:24:29 +02:00
12c4be7c10 Make employee perk transpile more robust 2024-08-22 19:21:48 +02:00
42acdd9204 Add config for employee per perk 2024-08-22 19:11:43 +02:00
2876c0c41b Remove libs 2024-08-22 16:01:32 +02:00
571 changed files with 288668 additions and 1610 deletions

6
.gitignore vendored
View File

@@ -6,3 +6,9 @@ ConfigurationManager
MelonLoader.Installer.exe MelonLoader.Installer.exe
ConfigurationManager ConfigurationManager
Projects/Regiments/Regiments/obj/Release Projects/Regiments/Regiments/obj/Release
Projects/CykaOfQud/.vs/
Projects/CykaOfQud/.vscode/
*.suo
Projects/BanquetForFools/.vs/BanquetForCyka

14
.gitmodules vendored Normal file
View File

@@ -0,0 +1,14 @@
[submodule "Projects/CaptainOfIndustry/CaptainOfCheats"]
path = Projects/CaptainOfIndustry/CaptainOfCheats
url = https://github.com/altmank/CaptainOfCheats
url = https://github.com/Keranik/COI-Extended
[submodule "Projects/CaptainOfIndustry/DoubleQoLMod"]
path = Projects/CaptainOfIndustry/DoubleQoLMod
url = https://github.com/PhatDave/DoubleQoLMod
url = https://github.com/Keranik/COI-Extended
[submodule "Projects/CaptainOfIndustry/COI_MineDumpControl"]
path = Projects/CaptainOfIndustry/COI_MineDumpControl
url = https://github.com/hreintke/COI_MineDumpControl
[submodule "Projects/CaptainOfIndustry/DifficultySettingsMod"]
path = Projects/CaptainOfIndustry/DifficultySettingsMod
url = https://github.com/KptKosmit91/CaptainOfIndustry-DifficultySettingsMod

Binary file not shown.

Binary file not shown.

BIN
BepInEx.Patcher.exe Normal file

Binary file not shown.

View File

@@ -0,0 +1,16 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirportCEO", "AirportCEO\AirportCEO.csproj", "{DA9D274E-486F-4F82-84FF-CD9388CB0B09}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DA9D274E-486F-4F82-84FF-CD9388CB0B09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DA9D274E-486F-4F82-84FF-CD9388CB0B09}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DA9D274E-486F-4F82-84FF-CD9388CB0B09}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DA9D274E-486F-4F82-84FF-CD9388CB0B09}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,4 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer&gt;&#xD;
&lt;Assembly Path="C:\Users\Administrator\RiderProjects\Bepinex\Projects\SupermarketTogether\SupermarketTogether\bin\Release\Assembly-CSharp.dll" /&gt;&#xD;
&lt;/AssemblyExplorer&gt;</s:String></wpf:ResourceDictionary>

View File

@@ -0,0 +1,6 @@
# CSharp formatting rules:
[*.cs]
csharp_new_line_before_open_brace = none
csharp_new_line_before_else = false
csharp_new_line_before_catch = false
csharp_new_line_before_finally = false

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')"/>
<PropertyGroup>
<GAME_DIR>C:/Games/Airport CEO</GAME_DIR>
<GAME_MANAGED>$(GAME_DIR)/Airport CEO_Data/Managed</GAME_MANAGED>
<GAME_BEPINEX>$(GAME_DIR)/BepInEx</GAME_BEPINEX>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{DA9D274E-486F-4F82-84FF-CD9388CB0B09}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DaveCEO</RootNamespace>
<AssemblyName>DaveCEO</AssemblyName>
<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="DaveCEO.cs"/>
<Compile Include="Properties\AssemblyInfo.cs"/>
</ItemGroup>
<ItemGroup>
<Reference Include="0Harmony">
<HintPath>$(GAME_BEPINEX)/core/0Harmony.dll</HintPath>
</Reference>
<Reference Include="BepInEx">
<HintPath>$(GAME_BEPINEX)/core/BepInEx.dll</HintPath>
</Reference>
<Reference Include="ConfigurationManager">
<HintPath>$(GAME_BEPINEX)/plugins/ConfigurationManager/ConfigurationManager.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>$(GAME_MANAGED)/Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="UnityEngine">
<HintPath>$(GAME_MANAGED)/UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>$(GAME_MANAGED)/UnityEngine.CoreModule.dll</HintPath>
</Reference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets"/>
</Project>

View File

@@ -0,0 +1,41 @@
using System;
using System.Linq;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using HarmonyLib.Tools;
using UnityEngine.SceneManagement;
namespace DaveCEO {
[BepInPlugin(pluginGuid, pluginName, pluginVersion)]
public class Main : BaseUnityPlugin {
private const string pluginGuid = "DaveCEO";
private const string pluginName = "DaveCEO";
private const string pluginVersion = "1.0.0";
public static ConfigEntry<float> moneyMultiplier;
public void Awake() {
moneyMultiplier = Config.Bind("General", "MoneyMultiplier", 1f);
Logger.LogInfo("Cyka mod loaded");
HarmonyFileLog.Enabled = true;
Harmony harmony = new Harmony(pluginGuid);
harmony.PatchAll();
var originalMethods = harmony.GetPatchedMethods();
Logger.LogInfo("Patched " + originalMethods.Count() + " methods");
foreach (var method in originalMethods) {
Logger.LogInfo("Patched " + method.Name);
}
}
}
[HarmonyPatch]
public class Patches {
[HarmonyPrefix]
[HarmonyPatch(typeof(EconomyController), "AddFunds")]
public static void Prefix(ref float sum) {
sum *= Main.moneyMultiplier.Value;
}
}
}

View File

@@ -0,0 +1,35 @@
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("DaveCEO")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DaveCEO")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("DA9D274E-486F-4F82-84FF-CD9388CB0B09")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,3 @@
- source: bin/Release/DaveCEO.dll
target: C:\Games\Airport CEO\BepInEx\plugins\DaveCEO.dll
delete: true

View File

@@ -0,0 +1,4 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer&gt;&#xD;
&lt;Assembly Path="C:\Users\Administrator\RiderProjects\Bepinex\Projects\SupermarketTogether\SupermarketTogether\bin\Release\Assembly-CSharp.dll" /&gt;&#xD;
&lt;/AssemblyExplorer&gt;</s:String></wpf:ResourceDictionary>

View File

@@ -0,0 +1,4 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer&gt;&#xD;
&lt;Assembly Path="C:\Users\Administrator\RiderProjects\Bepinex\Projects\SupermarketTogether\SupermarketTogether\bin\Release\Assembly-CSharp.dll" /&gt;&#xD;
&lt;/AssemblyExplorer&gt;</s:String></wpf:ResourceDictionary>

View File

@@ -0,0 +1,3 @@
BasedOnStyle: Google
IndentWidth: 4
ColumnLimit: 120

View File

@@ -1,16 +1,16 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CaptainOfIndustry", "CaptainOfIndustry\CaptainOfIndustry.csproj", "{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BanquetForCyka", "BanquetForCyka\BanquetForCyka.csproj", "{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Debug|Any CPU.Build.0 = Debug|Any CPU {EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Release|Any CPU.ActiveCfg = Release|Any CPU {EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Release|Any CPU.Build.0 = Release|Any CPU {EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props"
Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<GAME_DIR>C:/Games/Banquet.for.Fools.Build.18497011</GAME_DIR>
<GAME_MANAGED>$(GAME_DIR)/Banquet for Fools_Data/Managed</GAME_MANAGED>
<GAME_BEPINEX>$(GAME_DIR)/BepInEx</GAME_BEPINEX>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BanquetForCyka</RootNamespace>
<AssemblyName>BanquetForCyka</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="Class1.cs" />
<Compile Include="ExpressionConfigEntry.cs" />
<!-- <Compile Include="ModuleShieldGeneratorManager.cs" />
<Compile Include="ObjectFieldMultiplier.cs" />
<Compile Include="Patches.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SeekingProjectileManager.cs" />
<Compile Include="ModuleWingManager.cs" />
<Compile Include="ModuleBoosterManager.cs" />
<Compile Include="ModuleWeaponGunManager.cs" />
<Compile Include="ModuleEnergyManager.cs" />
<Compile Include="ModuleEnergyStoreManager.cs" />
<Compile Include="ModuleGyroManager.cs" />
<Compile Include="ModuleItemHolderManager.cs" />
<Compile Include="ModuleItemProducerManager.cs" />
<Compile Include="ModuleRemoteChargerManager.cs" />
<Compile Include="ModuleWheelsManager.cs" />
<Compile Include="TankBeamManager.cs" />
<Compile Include="ModuleWeaponManager.cs" />
<Compile Include="CykUtil.cs" />
<Compile Include="ModuleHeartManager.cs" />
<Compile Include="ModuleFuelTankManager.cs" />
<Compile Include="ProjectilePatch.cs" />
<Compile Include="TankManager.cs" />
<Compile Include="UISnapshotPanelBuyAll.cs" />
<Compile Include="MultiBuy.cs" /> -->
</ItemGroup>
<ItemGroup>
<Reference Include="0Harmony">
<HintPath>$(GAME_BEPINEX)/core/0Harmony.dll</HintPath>
</Reference>
<Reference Include="BepInEx">
<HintPath>$(GAME_BEPINEX)/core/BepInEx.dll</HintPath>
</Reference>
<Reference Include="UnityEngine">
<HintPath>$(GAME_MANAGED)/UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>$(GAME_MANAGED)/UnityEngine.CoreModule.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>$(GAME_MANAGED)/Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="ConfigurationManager">
<HintPath>$(GAME_BEPINEX)/plugins/ConfigurationManager/ConfigurationManager.dll</HintPath>
</Reference>
<Reference Include="System" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,147 @@
using System;
using System.Linq;
using System.Collections.Generic;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using HarmonyLib.Tools;
using System.Reflection.Emit;
namespace BanquetForCyka {
[BepInPlugin(PluginGuid, PluginName, PluginVersion)]
public class Main : BaseUnityPlugin {
private const string PluginGuid = "BanquetForCyka";
private const string PluginName = "BanquetForCyka";
private const string PluginVersion = "1.0.0";
public static ConfigEntry<bool> debug;
public static ConfigEntry<bool> debugXp;
public static ConfigEntry<bool> debugDodgeWindow;
public static ConfigEntry<bool> debugStatEntry;
public static ConfigEntry<bool> debugSkillEntry;
public static ConfigEntry<bool> debugLevelUpEntry;
public static ExpressionConfigEntry xpMultiplier;
public static ExpressionConfigEntry dodgeWindowTotal;
public static ExpressionConfigEntry dodgeWindowPerfect;
public static ExpressionConfigEntry levelUpStatEntry;
public static ExpressionConfigEntry levelUpSkillEntry;
public void Awake() {
debug = Config.Bind("Debug", "Global Debug", false);
debugXp = Config.Bind("Debug", "XP Debug", false);
debugDodgeWindow = Config.Bind("Debug", "Dodge Window Debug", false);
debugStatEntry = Config.Bind("Debug", "Stat Entry Debug", false);
debugSkillEntry = Config.Bind("Debug", "Skill Entry Debug", false);
debugLevelUpEntry = Config.Bind("Debug", "Level Up Entry Debug", false);
xpMultiplier = new ExpressionConfigEntry(
Config, "General", "XP Multiplier", "v*1",
"XP Multiplier expression. Use 'v' to represent the original value.", debugXp);
dodgeWindowTotal = new ExpressionConfigEntry(
Config, "General", "Dodge Window Total", "v*1",
"Total dodge window duration expression. Use 'v' to represent the original value (20).",
debugDodgeWindow);
dodgeWindowPerfect = new ExpressionConfigEntry(
Config, "General", "Dodge Window Perfect", "v*1",
"Perfect dodge window percentage expression. Use 'v' to represent the original value (0.25).",
debugDodgeWindow);
levelUpStatEntry = new ExpressionConfigEntry(
Config, "General", "Level Up Stat Entry", "v*1",
"Stat Entry expression. Use 'v' to represent the original value.", debugStatEntry);
levelUpSkillEntry = new ExpressionConfigEntry(
Config, "General", "Level Up Skill Entry", "v*1",
"Skill Entry expression. Use 'v' to represent the original value.", debugSkillEntry);
Logger.LogInfo("BanquetForCyka loaded");
HarmonyFileLog.Enabled = true;
Harmony harmony = new Harmony(PluginGuid);
harmony.PatchAll();
var originalMethods = harmony.GetPatchedMethods();
Logger.LogInfo("Patched " + originalMethods.Count() + " methods");
}
public static void LogDebug(string message, ConfigEntry<bool> debugFlag = null) {
if (debug.Value || (debugFlag != null && debugFlag.Value))
Console.WriteLine(message);
}
}
[HarmonyPatch(typeof(Stats), "AddXP")]
public class Stats_AddXP {
public static void Prefix(ref int amt) {
Main.LogDebug("Original XP amount: " + amt, Main.debugXp);
float result = Main.xpMultiplier.Evaluate(amt);
amt = (int)result;
Main.LogDebug("Modified XP amount: " + amt, Main.debugXp);
}
}
[HarmonyPatch(typeof(Actions), "DodgeCalculation")]
public class Actions_DodgeCalculation_Transpiler {
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) {
var codes = new List<CodeInstruction>(instructions);
// Find the ldc.r4 20 instruction
for (int i = 0; i < codes.Count; i++) {
if (codes[i].opcode == OpCodes.Ldc_R4 && (float)codes[i].operand == 20f) {
// Replace with our expression evaluation
codes[i] = new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(Main), "dodgeWindowTotal"));
codes.Insert(i + 1, new CodeInstruction(OpCodes.Ldc_R4, 20f));
codes.Insert(i + 2,
new CodeInstruction(OpCodes.Callvirt,
AccessTools.Method(typeof(ExpressionConfigEntry), "Evaluate")));
break;
}
}
// Find the ldc.r4 0.25 instruction
for (int i = 0; i < codes.Count; i++) {
if (codes[i].opcode == OpCodes.Ldc_R4 && (float)codes[i].operand == 0.25f) {
// Replace with our expression evaluation
codes[i] =
new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(Main), "dodgeWindowPerfect"));
codes.Insert(i + 1, new CodeInstruction(OpCodes.Ldc_R4, 0.25f));
codes.Insert(i + 2,
new CodeInstruction(OpCodes.Callvirt,
AccessTools.Method(typeof(ExpressionConfigEntry), "Evaluate")));
break;
}
}
return codes;
}
}
[HarmonyPatch(typeof(LevelUp), "ClickedStat")]
public class Actions_ClickedStat {
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) {
var codes = new List<CodeInstruction>(instructions);
// Find the ldc.r4 1 instruction
for (int i = codes.Count - 1; i >= 0; i--) {
if (codes[i].opcode == OpCodes.Ldc_R4 && (float)codes[i].operand == 1f) {
// Replace with our expression evaluation
codes[i] = new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(Main), "levelUpStatEntry"));
codes.Insert(i + 1, new CodeInstruction(OpCodes.Ldc_R4, 1f));
codes.Insert(i + 2,
new CodeInstruction(OpCodes.Callvirt,
AccessTools.Method(typeof(ExpressionConfigEntry), "Evaluate")));
break;
}
}
return codes;
}
}
[HarmonyPatch(typeof(LevelUp), "IncreaseAmt")]
public class Actions_IncreaseAmount {
public static void Postfix(ref int __result) {
Main.LogDebug("Original amount: " + __result, Main.debugLevelUpEntry);
float result = Main.levelUpSkillEntry.Evaluate(__result);
__result = (int)result;
Main.LogDebug("Modified amount: " + __result, Main.debugLevelUpEntry);
}
}
}

View File

@@ -0,0 +1,28 @@
using System;
namespace BanquetForCyka {
public class CykUtil {
public static bool IsPlayerTank(Module module) {
if (module == null)
return false;
TankBlock block = module.block;
if (block == null)
return false;
Tank tank = block.tank;
if (tank == null)
return false;
return tank.ControllableByLocalPlayer;
}
public static Func<object, bool> isObjectPlayerTank = obj => {
if (obj == null)
return false;
try {
return IsPlayerTank(obj as Module);
} catch (Exception e) {
Console.WriteLine("Failed to check if object is a player tank: " + e.Message);
return false;
}
};
}
}

View File

@@ -0,0 +1,269 @@
using System;
using System.Collections.Generic;
using BepInEx.Configuration;
using UnityEngine;
namespace BanquetForCyka {
public class ExpressionConfigEntry {
private readonly ConfigEntry<string> _configEntry;
private readonly ConfigEntry<bool> _debug;
private Func<float, float> _compiledExpression;
private string _lastValidExpression;
private bool _isValid = true;
private string _currentInput;
public string Value {
get => _configEntry.Value;
set {
if (value == _configEntry.Value)
return;
_currentInput = value;
// Try to compile the expression
try {
LogDebug($"=== Starting compilation of new expression ===", _debug);
LogDebug($"Input expression: '{value}'", _debug);
var newExpr = ParseExpression(value, _debug);
_compiledExpression = newExpr;
_lastValidExpression = value;
_isValid = true;
LogDebug($"=== Expression compilation successful ===", _debug);
} catch (Exception e) {
_isValid = false;
LogDebug($"=== Expression compilation failed ===", _debug);
LogDebug($"Error: {e.Message}", _debug);
LogDebug($"Stack trace: {e.StackTrace}", _debug);
LogDebug($"Expression is invalid but keeping input: '{value}'", _debug);
}
}
}
public bool IsValid => _isValid;
public string LastValidExpression => _lastValidExpression;
public string CurrentInput => _currentInput;
public ExpressionConfigEntry(ConfigFile config, string section, string key, string defaultValue,
string description, ConfigEntry<bool> debug = null) {
_debug = debug;
LogDebug($"=== Initializing ExpressionConfigEntry ===", _debug);
LogDebug($"Section: {section}", _debug);
LogDebug($"Key: {key}", _debug);
LogDebug($"Default value: {defaultValue}", _debug);
_configEntry = config.Bind(
section, key, defaultValue,
new ConfigDescription(description +
"\nUse 'v' to represent the input value. Examples: 'v*4', 'v+13', '(v+5)*2'"));
_currentInput = defaultValue;
// Initial compilation
try {
LogDebug($"=== Starting initial compilation ===", _debug);
LogDebug($"Initial expression: '{_configEntry.Value}'", _debug);
_compiledExpression = ParseExpression(_configEntry.Value, _debug);
_lastValidExpression = _configEntry.Value;
_isValid = true;
LogDebug($"=== Initial compilation successful ===", _debug);
} catch (Exception e) {
LogDebug($"=== Initial compilation failed ===", _debug);
LogDebug($"Error: {e.Message}", _debug);
LogDebug($"Stack trace: {e.StackTrace}", _debug);
_isValid = false;
}
// Recompile when config changes
_configEntry.SettingChanged += (sender, args) => {
try {
LogDebug($"=== Config changed, starting recompilation ===", _debug);
LogDebug($"New expression: '{_configEntry.Value}'", _debug);
_compiledExpression = ParseExpression(_configEntry.Value, _debug);
_lastValidExpression = _configEntry.Value;
_isValid = true;
_currentInput = _configEntry.Value;
LogDebug($"=== Recompilation successful ===", _debug);
} catch (Exception e) {
_isValid = false;
LogDebug($"=== Recompilation failed ===", _debug);
LogDebug($"Error: {e.Message}", _debug);
LogDebug($"Stack trace: {e.StackTrace}", _debug);
LogDebug($"Expression is invalid but keeping input: '{_configEntry.Value}'", _debug);
_currentInput = _configEntry.Value;
}
};
}
public float Evaluate(float input) {
if (!_isValid) {
LogDebug($"=== Evaluation with invalid expression ===", _debug);
LogDebug($"Input value: {input}", _debug);
LogDebug($"Using last valid expression: '{_lastValidExpression}'", _debug);
return input; // Return original value if expression is invalid
}
LogDebug($"=== Starting expression evaluation ===", _debug);
LogDebug($"Expression: '{_configEntry.Value}'", _debug);
LogDebug($"Input value: {input}", _debug);
var result = _compiledExpression(input);
LogDebug($"Output value: {result}", _debug);
LogDebug($"=== Evaluation complete ===", _debug);
return result;
}
private static void LogDebug(string message, ConfigEntry<bool> debug) {
if (debug?.Value == true) {
Console.WriteLine($"[ExpressionConfigEntry] {message}");
}
}
// Copy of the expression parser from Main
private static Func<float, float> ParseExpression(string expr, ConfigEntry<bool> debug) {
try {
LogDebug($"=== Starting expression parsing ===", debug);
LogDebug($"Raw expression: '{expr}'", debug);
// Remove all whitespace
expr = expr.Replace(" ", "");
LogDebug($"After whitespace removal: '{expr}'", debug);
var tokens = new List<string>();
var current = "";
// Tokenize the expression
LogDebug("=== Tokenizing expression ===", debug);
for (int i = 0; i < expr.Length; i++) {
char c = expr[i];
if (c == 'v') {
if (current != "") {
LogDebug($"Found number token: '{current}'", debug);
tokens.Add(current);
current = "";
}
LogDebug("Found variable token: 'v'", debug);
tokens.Add("v");
} else if (c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')') {
if (current != "") {
LogDebug($"Found number token: '{current}'", debug);
tokens.Add(current);
current = "";
}
LogDebug($"Found operator token: '{c}'", debug);
tokens.Add(c.ToString());
} else {
current += c;
}
}
if (current != "") {
LogDebug($"Found final number token: '{current}'", debug);
tokens.Add(current);
}
LogDebug($"All tokens: {string.Join(", ", tokens)}", debug);
// Convert to postfix notation using shunting yard
LogDebug("=== Converting to postfix notation ===", debug);
var output = new List<string>();
var operators = new Stack<string>();
foreach (var token in tokens) {
if (token == "v" || float.TryParse(token, out _)) {
LogDebug($"Pushing operand to output: '{token}'", debug);
output.Add(token);
} else if (token == "(") {
LogDebug("Pushing '(' to operator stack", debug);
operators.Push(token);
} else if (token == ")") {
LogDebug("Found ')', popping operators until '('", debug);
while (operators.Count > 0 && operators.Peek() != "(") {
var op = operators.Pop();
LogDebug($"Popped operator to output: '{op}'", debug);
output.Add(op);
}
if (operators.Count > 0) {
LogDebug("Popping '(' from stack", debug);
operators.Pop(); // Remove "("
}
} else {
LogDebug($"Processing operator: '{token}'", debug);
while (operators.Count > 0 && operators.Peek() != "(" &&
GetPrecedence(operators.Peek()) >= GetPrecedence(token)) {
var op = operators.Pop();
LogDebug($"Popped higher precedence operator to output: '{op}'", debug);
output.Add(op);
}
LogDebug($"Pushing operator to stack: '{token}'", debug);
operators.Push(token);
}
}
while (operators.Count > 0) {
var op = operators.Pop();
LogDebug($"Popping remaining operator to output: '{op}'", debug);
output.Add(op);
}
LogDebug($"Postfix expression: {string.Join(" ", output)}", debug);
// Build the expression tree
LogDebug("=== Building expression tree ===", debug);
var stack = new Stack<Func<float, float>>();
foreach (var token in output) {
if (token == "v") {
LogDebug("Pushing variable function to stack", debug);
stack.Push(v => v);
} else if (float.TryParse(token, out float num)) {
LogDebug($"Pushing constant function to stack: {num}", debug);
stack.Push(v => num);
} else {
var right = stack.Pop();
var left = stack.Pop();
LogDebug($"Popped two functions for operator: '{token}'", debug);
switch (token) {
case "+":
LogDebug("Creating addition function", debug);
stack.Push(v => left(v) + right(v));
break;
case "-":
LogDebug("Creating subtraction function", debug);
stack.Push(v => left(v) - right(v));
break;
case "*":
LogDebug("Creating multiplication function", debug);
stack.Push(v => left(v) * right(v));
break;
case "/":
LogDebug("Creating division function", debug);
stack.Push(v => {
var r = right(v);
return r != 0 ? left(v) / r : left(v);
});
break;
}
}
}
LogDebug("=== Expression parsing complete ===", debug);
return stack.Pop();
} catch (Exception e) {
LogDebug($"=== Expression parsing failed ===", debug);
LogDebug($"Error: {e.Message}", debug);
throw new FormatException($"Failed to parse expression '{expr}': {e.Message}");
}
}
private static int GetPrecedence(string op) {
switch (op) {
case "+":
return 1;
case "-":
return 1;
case "*":
return 2;
case "/":
return 2;
default:
return 0;
}
}
}
}

View File

@@ -0,0 +1,84 @@
using System;
using System.Collections.Generic;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleBoosterManager {
private static readonly MultipliedObjectManager<FanJet> FanManager =
new MultipliedObjectManager<FanJet>(ConfigureFanThruster);
private static readonly MultipliedObjectManager<BoosterJet> JetManager =
new MultipliedObjectManager<BoosterJet>(ConfigureJetThruster);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> fanThrustMultiplier;
private static ConfigEntry<float> jetThrustMultiplier;
public static void Setup(ConfigFile config) {
float min = 0.01f;
float max = 32f;
playerOnly = config.Bind("Booster", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
fanThrustMultiplier =
config.Bind("Booster", "Fan Thrust Multiplier", 1f,
new ConfigDescription("Fan Thrust Multiplier", new AcceptableValueRange<float>(min, max)));
fanThrustMultiplier.SettingChanged += (sender, args) => DoPatch();
jetThrustMultiplier =
config.Bind("Booster", "Jet Thrust Multiplier", 1f,
new ConfigDescription("Jet Thrust Multiplier", new AcceptableValueRange<float>(min, max)));
jetThrustMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureFanThruster(MultipliedObject<FanJet> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_Force", fanThrustMultiplier, ShouldApply));
}
private static void ConfigureJetThruster(MultipliedObject<BoosterJet> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_Force", jetThrustMultiplier, ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.isObjectPlayerTank(obj);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleBooster), "OnAttached")]
public static void PostfixCreate(ModuleBooster __instance) {
var trav = Traverse.Create(__instance);
var fans = trav.Field("fans").GetValue<List<FanJet>>();
var jets = trav.Field("jets").GetValue<List<BoosterJet>>();
foreach (var fan in fans) FanManager.OnObjectAttached(fan);
foreach (var jet in jets) JetManager.OnObjectAttached(jet);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleBooster), "OnDetaching")]
public static void PostfixDestroy(ModuleBooster __instance) {
var trav = Traverse.Create(__instance);
var fans = trav.Field("fans").GetValue<List<FanJet>>();
var jets = trav.Field("jets").GetValue<List<BoosterJet>>();
foreach (var fan in fans) FanManager.OnObjectDetached(fan);
foreach (var jet in jets) JetManager.OnObjectDetached(jet);
}
private static void DoPatch() {
FanManager.ApplyAll();
JetManager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleBooster: {0}", obj);
PostfixCreate(obj as ModuleBooster);
return true;
};
}
}

View File

@@ -0,0 +1,67 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleEnergyManager {
private static readonly MultipliedObjectManager<ModuleEnergy> Manager =
new MultipliedObjectManager<ModuleEnergy>(ConfigureModuleEnergy);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> outputMultiplier;
private static ConfigEntry<float> powerUpDelayMultiplier;
public static void Setup(ConfigFile config) {
float min = 0.01f;
float max = 32f;
playerOnly = config.Bind("Energy", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
outputMultiplier =
config.Bind("Energy", "Output Multiplier", 1f,
new ConfigDescription("Output Multiplier", new AcceptableValueRange<float>(min, max)));
outputMultiplier.SettingChanged += (sender, args) => DoPatch();
powerUpDelayMultiplier = config.Bind(
"Energy", "Power Up Delay Multiplier", 1f,
new ConfigDescription("Power Up Delay Multiplier", new AcceptableValueRange<float>(min, max)));
powerUpDelayMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureModuleEnergy(MultipliedObject<ModuleEnergy> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_OutputPerSecond", outputMultiplier, ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("m_PowerUpDelay", powerUpDelayMultiplier, ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.IsPlayerTank(obj as Module);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleEnergy), "OnAnchorStatusChanged")]
public static void PostfixCreate(ModuleEnergy __instance) {
Manager.OnObjectAttached(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleEnergy), "OnDetaching")]
public static void PostfixDestroy(ModuleEnergy __instance) {
Manager.OnObjectDetached(__instance);
}
private static void DoPatch() {
Manager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleEnergy: {0}", obj);
PostfixCreate(obj as ModuleEnergy);
return true;
};
}
}

View File

@@ -0,0 +1,60 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleEnergyStoreManager {
private static readonly MultipliedObjectManager<ModuleEnergyStore> Manager =
new MultipliedObjectManager<ModuleEnergyStore>(ConfigureModuleEnergyStore);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> capacityMultiplier;
public static void Setup(ConfigFile config) {
float min = 0.01f;
float max = 32f;
playerOnly = config.Bind("Energy", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
capacityMultiplier =
config.Bind("Energy", "Capacity Multiplier", 1f,
new ConfigDescription("Capacity Multiplier", new AcceptableValueRange<float>(min, max)));
capacityMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureModuleEnergyStore(MultipliedObject<ModuleEnergyStore> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_Capacity", capacityMultiplier, ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.IsPlayerTank(obj as Module);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleEnergyStore), "OnAttached")]
public static void PostfixCreate(ModuleEnergyStore __instance) {
Manager.OnObjectAttached(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleEnergyStore), "OnDetaching")]
public static void PostfixDestroy(ModuleEnergyStore __instance) {
Manager.OnObjectDetached(__instance);
}
private static void DoPatch() {
Manager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleEnergyStore: {0}", obj);
PostfixCreate(obj as ModuleEnergyStore);
return true;
};
}
}

View File

@@ -0,0 +1,67 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleFuelTankManager {
private static readonly MultipliedObjectManager<ModuleFuelTank> Manager =
new MultipliedObjectManager<ModuleFuelTank>(ConfigureFuelTank);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> fuelCapacityMultiplier;
private static ConfigEntry<float> fuelRefillMultiplier;
public static void Setup(ConfigFile config) {
float min = 0.01f;
float max = 32f;
playerOnly = config.Bind("FuelTank", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
fuelCapacityMultiplier = config.Bind(
"FuelTank", "Fuel Capacity Multiplier", 1f,
new ConfigDescription("Fuel Capacity Multiplier", new AcceptableValueRange<float>(min, max)));
fuelCapacityMultiplier.SettingChanged += (sender, args) => DoPatch();
fuelRefillMultiplier =
config.Bind("FuelTank", "Fuel Refill Multiplier", 1f,
new ConfigDescription("Fuel Refill Multiplier", new AcceptableValueRange<float>(min, max)));
fuelRefillMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureFuelTank(MultipliedObject<ModuleFuelTank> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_Capacity", fuelCapacityMultiplier, ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("m_RefillRate", fuelRefillMultiplier, ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.isObjectPlayerTank(obj);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleFuelTank), "OnAttached")]
public static void PostfixCreate(ModuleFuelTank __instance) {
Manager.OnObjectAttached(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleFuelTank), "OnDetaching")]
public static void PostfixDestroy(ModuleFuelTank __instance) {
Manager.OnObjectDetached(__instance);
}
private static void DoPatch() {
Manager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleFuelTank: {0}", obj);
PostfixCreate(obj as ModuleFuelTank);
return true;
};
}
}

View File

@@ -0,0 +1,60 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleGyroManager {
private static readonly MultipliedObjectManager<ModuleGyro> Manager =
new MultipliedObjectManager<ModuleGyro>(ConfigureModuleGyro);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> activeSpeedMultiplier;
public static void Setup(ConfigFile config) {
float min = 0.01f;
float max = 32f;
playerOnly = config.Bind("Gyro", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
activeSpeedMultiplier = config.Bind(
"Gyro", "Active Speed Multiplier", 1f,
new ConfigDescription("Active Speed Multiplier", new AcceptableValueRange<float>(min, max)));
activeSpeedMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureModuleGyro(MultipliedObject<ModuleGyro> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_ActiveSpeed", activeSpeedMultiplier, ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.IsPlayerTank(obj as Module);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleGyro), "OnAttached")]
public static void PostfixCreate(ModuleGyro __instance) {
Manager.OnObjectAttached(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleGyro), "OnDetaching")]
public static void PostfixDestroy(ModuleGyro __instance) {
Manager.OnObjectDetached(__instance);
}
private static void DoPatch() {
Manager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleGyro: {0}", obj);
PostfixCreate(obj as ModuleGyro);
return true;
};
}
}

View File

@@ -0,0 +1,76 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleHeartManager {
private static readonly MultipliedObjectManager<ModuleHeart> Manager =
new MultipliedObjectManager<ModuleHeart>(ConfigureHeart);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> eventHorizonRadiusMultiplier;
private static ConfigEntry<float> setupTimeMultiplier;
private static ConfigEntry<float> startShrinkingRadiusMultiplier;
public static void Setup(ConfigFile config) {
float min = 0.01f;
float max = 32f;
playerOnly = config.Bind("Heart", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
eventHorizonRadiusMultiplier = config.Bind(
"Heart", "Event Horizon Radius Multiplier", 1f,
new ConfigDescription("Event Horizon Radius Multiplier", new AcceptableValueRange<float>(min, max)));
eventHorizonRadiusMultiplier.SettingChanged += (sender, args) => DoPatch();
setupTimeMultiplier =
config.Bind("Heart", "Setup Time Multiplier", 1f,
new ConfigDescription("Setup Time Multiplier", new AcceptableValueRange<float>(min, max)));
setupTimeMultiplier.SettingChanged += (sender, args) => DoPatch();
startShrinkingRadiusMultiplier = config.Bind(
"Heart", "Start Shrinking Radius Multiplier", 1f,
new ConfigDescription("Start Shrinking Radius Multiplier", new AcceptableValueRange<float>(min, max)));
startShrinkingRadiusMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureHeart(MultipliedObject<ModuleHeart> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_EventHorizonRadius", eventHorizonRadiusMultiplier,
ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("m_SetupTime", setupTimeMultiplier, ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("m_StartShrinkingRadius", startShrinkingRadiusMultiplier,
ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.isObjectPlayerTank(obj);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleHeart), "OnAttached")]
public static void PostfixCreate(ModuleHeart __instance) {
Manager.OnObjectAttached(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleHeart), "OnDetaching")]
public static void PostfixDestroy(ModuleHeart __instance) {
Manager.OnObjectDetached(__instance);
}
private static void DoPatch() {
Manager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleHeart: {0}", obj);
PostfixCreate(obj as ModuleHeart);
return true;
};
}
}

View File

@@ -0,0 +1,164 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleItemHolderManager {
private static readonly MultipliedObjectManager<ModuleItemHolder> BeamManager =
new MultipliedObjectManager<ModuleItemHolder>(ConfigureBeam);
private static readonly MultipliedObjectManager<ModuleItemHolderBeam> BeamHolderManager =
new MultipliedObjectManager<ModuleItemHolderBeam>(ConfigureBeamHolder);
private static readonly MultipliedObjectManager<ModuleItemPickup> BeamPickupManager =
new MultipliedObjectManager<ModuleItemPickup>(ConfigureBeamPickup);
private static readonly MultipliedObjectManager<ModuleItemHolderMagnet> MagnetHolderManager =
new MultipliedObjectManager<ModuleItemHolderMagnet>(ConfigureMagnetHolder);
private static readonly MultipliedObjectManager<ModuleItemPickup> MagnetPickupManager =
new MultipliedObjectManager<ModuleItemPickup>(ConfigureMagnetPickup);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> capacityPerStackMultiplier;
private static ConfigEntry<float> beamStrengthMultiplier;
private static ConfigEntry<float> beamHeightIncrementScaleMultiplier;
private static ConfigEntry<float> beamPickupRangeMultiplier;
private static ConfigEntry<float> magnetStrengthMultiplier;
private static ConfigEntry<float> magnetPickupRangeMultiplier;
public static void Setup(ConfigFile config) {
float min = 0.01f;
float max = 32f;
playerOnly = config.Bind("Item Holder", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
capacityPerStackMultiplier = config.Bind(
"Item Holder", "Capacity Per Stack Multiplier", 1f,
new ConfigDescription("Capacity Per Stack Multiplier", new AcceptableValueRange<float>(min, max)));
capacityPerStackMultiplier.SettingChanged += (sender, args) => DoPatch();
beamStrengthMultiplier = config.Bind(
"Item Holder", "Beam Strength Multiplier", 1f,
new ConfigDescription("Beam Strength Multiplier", new AcceptableValueRange<float>(min, max)));
beamStrengthMultiplier.SettingChanged += (sender, args) => DoPatch();
beamHeightIncrementScaleMultiplier =
config.Bind("Item Holder", "Beam Height Increment Scale Multiplier", 1f,
new ConfigDescription("Beam Height Increment Scale Multiplier",
new AcceptableValueRange<float>(min, max)));
beamHeightIncrementScaleMultiplier.SettingChanged += (sender, args) => DoPatch();
beamPickupRangeMultiplier = config.Bind(
"Item Holder", "Beam Pickup Range Multiplier", 1f,
new ConfigDescription("Beam Pickup Range Multiplier", new AcceptableValueRange<float>(min, max)));
beamPickupRangeMultiplier.SettingChanged += (sender, args) => DoPatch();
magnetStrengthMultiplier = config.Bind(
"Item Holder", "Magnet Strength Multiplier", 1f,
new ConfigDescription("Magnet Strength Multiplier", new AcceptableValueRange<float>(min, max)));
magnetStrengthMultiplier.SettingChanged += (sender, args) => DoPatch();
magnetPickupRangeMultiplier = config.Bind(
"Item Holder", "Magnet Pickup Range Multiplier", 1f,
new ConfigDescription("Magnet Pickup Range Multiplier", new AcceptableValueRange<float>(min, max)));
magnetPickupRangeMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureBeam(MultipliedObject<ModuleItemHolder> obj) {
obj.AddField(
new FieldConfiguration<int, float>("m_CapacityPerStack", capacityPerStackMultiplier, ShouldApply));
}
private static void ConfigureBeamHolder(MultipliedObject<ModuleItemHolderBeam> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_BeamStrength", beamStrengthMultiplier, ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("m_HeightIncrementScale",
beamHeightIncrementScaleMultiplier, ShouldApply));
}
private static void ConfigureBeamPickup(MultipliedObject<ModuleItemPickup> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_PickupRange", beamPickupRangeMultiplier, ShouldApply));
}
private static void ConfigureMagnetHolder(MultipliedObject<ModuleItemHolderMagnet> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_Strength", magnetStrengthMultiplier, ShouldApply));
}
private static void ConfigureMagnetPickup(MultipliedObject<ModuleItemPickup> obj) {
obj.AddField(
new FieldConfiguration<float, float>("m_PickupRange", magnetPickupRangeMultiplier, ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.IsPlayerTank(obj as Module);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleItemHolder), "OnAttached")]
public static void PostfixCreate(ModuleItemHolder __instance) {
BeamManager.OnObjectAttached(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleItemHolder), "OnDetaching")]
public static void PostfixDestroy(ModuleItemHolder __instance) {
BeamManager.OnObjectDetached(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleItemHolderBeam), "OnAttached")]
public static void PostfixCreate(ModuleItemHolderBeam __instance) {
var trav = Traverse.Create(__instance);
var pickup = trav.Field("m_Pickup").GetValue<ModuleItemPickup>();
BeamHolderManager.OnObjectAttached(__instance);
BeamPickupManager.OnObjectAttached(pickup);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleItemHolderBeam), "OnDetaching")]
public static void PostfixDestroy(ModuleItemHolderBeam __instance) {
var trav = Traverse.Create(__instance);
var pickup = trav.Field("m_Pickup").GetValue<ModuleItemPickup>();
BeamHolderManager.OnObjectDetached(__instance);
BeamPickupManager.OnObjectDetached(pickup);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleItemHolderMagnet), "OnAttached")]
public static void PostfixCreate(ModuleItemHolderMagnet __instance) {
var trav = Traverse.Create(__instance);
var pickup = trav.Field("m_Pickup").GetValue<ModuleItemPickup>();
MagnetHolderManager.OnObjectAttached(__instance);
MagnetPickupManager.OnObjectAttached(pickup);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleItemHolderMagnet), "OnDetaching")]
public static void PostfixDestroy(ModuleItemHolderMagnet __instance) {
var trav = Traverse.Create(__instance);
var pickup = trav.Field("m_Pickup").GetValue<ModuleItemPickup>();
MagnetHolderManager.OnObjectDetached(__instance);
MagnetPickupManager.OnObjectDetached(pickup);
}
private static void DoPatch() {
BeamManager.ApplyAll();
BeamHolderManager.ApplyAll();
BeamPickupManager.ApplyAll();
MagnetHolderManager.ApplyAll();
MagnetPickupManager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleItemHolder: {0}", obj);
PostfixCreate(obj as ModuleItemHolder);
return true;
};
}
}

View File

@@ -0,0 +1,77 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleItemProducerManager {
private static readonly MultipliedObjectManager<ModuleItemProducer> Manager =
new MultipliedObjectManager<ModuleItemProducer>(ConfigureModuleItemProducer);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> resourceGroundRadiusMultiplier;
private static ConfigEntry<float> minDispenseIntervalMultiplier;
private static ConfigEntry<float> secPerItemProducedMultiplier;
public static void Setup(ConfigFile config) {
float min = 0.01f;
float max = 32f;
playerOnly = config.Bind("Item Producer", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
resourceGroundRadiusMultiplier = config.Bind(
"Item Producer", "Resource Ground Radius Multiplier", 1f,
new ConfigDescription("Resource Ground Radius Multiplier", new AcceptableValueRange<float>(min, max)));
resourceGroundRadiusMultiplier.SettingChanged += (sender, args) => DoPatch();
minDispenseIntervalMultiplier = config.Bind(
"Item Producer", "Min Dispense Interval Multiplier", 1f,
new ConfigDescription("Min Dispense Interval Multiplier", new AcceptableValueRange<float>(min, max)));
minDispenseIntervalMultiplier.SettingChanged += (sender, args) => DoPatch();
secPerItemProducedMultiplier = config.Bind(
"Item Producer", "Sec Per Item Produced Multiplier", 1f,
new ConfigDescription("Sec Per Item Produced Multiplier", new AcceptableValueRange<float>(min, max)));
secPerItemProducedMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureModuleItemProducer(MultipliedObject<ModuleItemProducer> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_ResourceGroundRadius", resourceGroundRadiusMultiplier,
ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("m_MinDispenseInterval", minDispenseIntervalMultiplier,
ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("m_SecPerItemProduced", secPerItemProducedMultiplier,
ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.IsPlayerTank(obj as Module);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleItemProducer), "GetClosestResourceReservoirInRange")]
public static void PostfixCreate(ModuleItemProducer __instance) {
Manager.OnObjectAttached(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleItemProducer), "OnDetaching")]
public static void PostfixDestroy(ModuleItemProducer __instance) {
Manager.OnObjectDetached(__instance);
}
private static void DoPatch() {
Manager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleItemProducer: {0}", obj);
PostfixCreate(obj as ModuleItemProducer);
return true;
};
}
}

View File

@@ -0,0 +1,77 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleRemoteChargerManager {
private static readonly MultipliedObjectManager<ModuleRemoteCharger> Manager =
new MultipliedObjectManager<ModuleRemoteCharger>(ConfigureModuleRemoteCharger);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> arcFiringIntervalMultiplier;
private static ConfigEntry<float> chargingRadiusMultiplier;
private static ConfigEntry<float> powerTransferPerArcMultiplier;
public static void Setup(ConfigFile config) {
const float min = 0.01f;
const float max = 32f;
playerOnly = config.Bind("Remote Charger", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
arcFiringIntervalMultiplier = config.Bind(
"Remote Charger", "Arc Firing Interval Multiplier", 1f,
new ConfigDescription("Arc Firing Interval Multiplier", new AcceptableValueRange<float>(min, max)));
arcFiringIntervalMultiplier.SettingChanged += (sender, args) => DoPatch();
chargingRadiusMultiplier = config.Bind(
"Remote Charger", "Charging Radius Multiplier", 1f,
new ConfigDescription("Charging Radius Multiplier", new AcceptableValueRange<float>(min, max)));
chargingRadiusMultiplier.SettingChanged += (sender, args) => DoPatch();
powerTransferPerArcMultiplier = config.Bind(
"Remote Charger", "Power Transfer Per Arc Multiplier", 1f,
new ConfigDescription("Power Transfer Per Arc Multiplier", new AcceptableValueRange<float>(min, max)));
powerTransferPerArcMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureModuleRemoteCharger(MultipliedObject<ModuleRemoteCharger> obj) {
obj.AddField(
new FieldConfiguration<float, float>("m_ArcFiringInterval", arcFiringIntervalMultiplier, ShouldApply));
obj.AddField(
new FieldConfiguration<float, float>("m_ChargingRadius", chargingRadiusMultiplier, ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("m_PowerTransferPerArc", powerTransferPerArcMultiplier,
ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.IsPlayerTank(obj as Module);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleRemoteCharger), "OnAttached")]
public static void PostfixCreate(ModuleRemoteCharger __instance) {
Manager.OnObjectAttached(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleRemoteCharger), "OnDetaching")]
public static void PostfixDestroy(ModuleRemoteCharger __instance) {
Manager.OnObjectDetached(__instance);
}
private static void DoPatch() {
Manager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleRemoteCharger: {0}", obj);
PostfixCreate(obj as ModuleRemoteCharger);
return true;
};
}
}

View File

@@ -0,0 +1,88 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleShieldGeneratorManager {
private static readonly MultipliedObjectManager<ModuleShieldGenerator> Manager =
new MultipliedObjectManager<ModuleShieldGenerator>(ConfigureShieldGenerator);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> radiusMultiplier;
private static ConfigEntry<float> radiusMultiplierHealing;
private static ConfigEntry<float> heartbeatIntervalMultiplier;
private static ConfigEntry<float> powerUpDelayMultiplier;
public static void Setup(ConfigFile config) {
const float min = 0.01f;
const float max = 32f;
playerOnly = config.Bind("Shield", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
radiusMultiplier =
config.Bind("Shield", "Radius Multiplier", 1f,
new ConfigDescription("Radius Multiplier", new AcceptableValueRange<float>(min, max)));
radiusMultiplier.SettingChanged += (sender, args) => DoPatch();
heartbeatIntervalMultiplier = config.Bind(
"Shield", "Heartbeat Interval Multiplier", 1f,
new ConfigDescription("Heartbeat Interval Multiplier", new AcceptableValueRange<float>(min, max)));
heartbeatIntervalMultiplier.SettingChanged += (sender, args) => DoPatch();
powerUpDelayMultiplier = config.Bind(
"Shield", "Power Up Delay Multiplier", 1f,
new ConfigDescription("Power Up Delay Multiplier", new AcceptableValueRange<float>(min, max)));
powerUpDelayMultiplier.SettingChanged += (sender, args) => DoPatch();
radiusMultiplierHealing = config.Bind(
"Shield", "Radius Multiplier Healing", 1f,
new ConfigDescription("Radius Multiplier Healing", new AcceptableValueRange<float>(min, max)));
radiusMultiplierHealing.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureShieldGenerator(MultipliedObject<ModuleShieldGenerator> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_HealingHeartbeatInterval", heartbeatIntervalMultiplier,
ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("m_Radius", radiusMultiplier, __instance => {
if (!ShouldApply(__instance))
return radiusMultiplier;
var shield = (ModuleShieldGenerator)__instance;
return shield.m_Healing ? radiusMultiplierHealing : radiusMultiplier;
}));
obj.AddField(new FieldConfiguration<float, float>("m_PowerUpDelay", powerUpDelayMultiplier, ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.IsPlayerTank(obj as Module);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleShieldGenerator), "OnAttached")]
public static void PostfixCreate(ModuleShieldGenerator __instance) {
Manager.OnObjectAttached(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleShieldGenerator), "OnDetaching")]
public static void PostfixDestroy(ModuleShieldGenerator __instance) {
Manager.OnObjectDetached(__instance);
}
private static void DoPatch() {
Manager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleShieldGenerator: {0}", obj);
PostfixCreate(obj as ModuleShieldGenerator);
return true;
};
}
}

View File

@@ -0,0 +1,121 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleWeaponGunManager {
private static readonly MultipliedObjectManager<ModuleWeaponGun> Manager =
new MultipliedObjectManager<ModuleWeaponGun>(ConfigureManager);
private static readonly MultipliedObjectManager<FireData> FireDataManager =
new MultipliedObjectManager<FireData>(ConfigureFireData);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> kickbackStrengthMultiplier;
private static ConfigEntry<float> muzzleVelocityMultiplier;
private static ConfigEntry<float> burstCooldownMultiplier;
private static ConfigEntry<float> burstShotCountMultiplier;
private static ConfigEntry<float> shotCooldownMultiplier;
private static ConfigEntry<bool> seekingRoundsAll;
private static ConfigEntry<bool> resetBurstOnInterruptAll;
public static void Setup(ConfigFile config) {
const float min = 0.01f;
const float max = 32f;
playerOnly = config.Bind("WeaponGun", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
kickbackStrengthMultiplier = config.Bind(
"FireData", "Kickback Strength Multiplier", 1f,
new ConfigDescription("Kickback Strength Multiplier", new AcceptableValueRange<float>(min, max)));
kickbackStrengthMultiplier.SettingChanged += (sender, args) => DoPatch();
muzzleVelocityMultiplier = config.Bind(
"FireData", "Muzzle Velocity Multiplier", 1f,
new ConfigDescription("Muzzle Velocity Multiplier", new AcceptableValueRange<float>(min, max)));
muzzleVelocityMultiplier.SettingChanged += (sender, args) => DoPatch();
burstCooldownMultiplier = config.Bind(
"FireData", "Burst Cooldown Multiplier", 1f,
new ConfigDescription("Burst Cooldown Multiplier", new AcceptableValueRange<float>(min, max)));
burstCooldownMultiplier.SettingChanged += (sender, args) => DoPatch();
burstShotCountMultiplier = config.Bind(
"FireData", "Burst Shot Count Multiplier", 1f,
new ConfigDescription("Burst Shot Count Multiplier", new AcceptableValueRange<float>(min, max)));
burstShotCountMultiplier.SettingChanged += (sender, args) => DoPatch();
shotCooldownMultiplier = config.Bind(
"FireData", "Shot Cooldown Multiplier", 1f,
new ConfigDescription("Shot Cooldown Multiplier", new AcceptableValueRange<float>(min, max)));
shotCooldownMultiplier.SettingChanged += (sender, args) => DoPatch();
seekingRoundsAll =
config.Bind("FireData", "Seeking Rounds All", false,
new ConfigDescription("Seeking Rounds All", new AcceptableValueRange<bool>(false, true)));
seekingRoundsAll.SettingChanged += (sender, args) => DoPatch();
resetBurstOnInterruptAll = config.Bind(
"FireData", "Reset Burst On Interrupt All", false,
new ConfigDescription("Reset Burst On Interrupt All", new AcceptableValueRange<bool>(false, true)));
resetBurstOnInterruptAll.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureManager(MultipliedObject<ModuleWeaponGun> obj) {
obj.AddBooleanField(new BooleanFieldConfiguration("m_SeekingRounds", seekingRoundsAll, ShouldApply));
obj.AddBooleanField(
new BooleanFieldConfiguration("m_ResetBurstOnInterrupt", resetBurstOnInterruptAll, ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("m_BurstCooldown", burstCooldownMultiplier, ShouldApply));
obj.AddField(new FieldConfiguration<int, float>("m_BurstShotCount", burstShotCountMultiplier, ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("m_ShotCooldown", shotCooldownMultiplier, ShouldApply));
}
private static void ConfigureFireData(MultipliedObject<FireData> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_MuzzleVelocity", muzzleVelocityMultiplier));
obj.AddField(new FieldConfiguration<float, float>("m_KickbackStrength", kickbackStrengthMultiplier));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.IsPlayerTank(obj as Module);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleWeaponGun), "OnAttached")]
public static void PostfixCreate(ModuleWeaponGun __instance) {
Manager.OnObjectAttached(__instance);
if (playerOnly.Value && !CykUtil.IsPlayerTank(__instance))
return;
var trav = Traverse.Create(__instance);
var firingData = trav.Field("m_FiringData");
FireDataManager.OnObjectAttached(firingData.GetValue<FireData>());
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleWeaponGun), "OnDetaching")]
public static void PostfixDestroy(ModuleWeaponGun __instance) {
Manager.OnObjectAttached(__instance);
var trav = Traverse.Create(__instance);
if (playerOnly.Value && !CykUtil.IsPlayerTank(__instance))
return;
var firingData = trav.Field("m_FiringData");
FireDataManager.OnObjectDetached(firingData.GetValue<FireData>());
}
private static void DoPatch() {
FireDataManager.ApplyAll();
Manager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleWeaponGun: {0}", obj);
PostfixCreate(obj as ModuleWeaponGun);
return true;
};
}
}

View File

@@ -0,0 +1,60 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleWeaponManager {
private static readonly MultipliedObjectManager<ModuleWeapon> Manager =
new MultipliedObjectManager<ModuleWeapon>(ConfigureManager);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> rotateSpeedMultiplier;
public static void Setup(ConfigFile config) {
const float min = 0.01f;
const float max = 32f;
playerOnly = config.Bind("ModuleWeapon", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
rotateSpeedMultiplier = config.Bind(
"ModuleWeapon", "Rotate Speed Multiplier", 1f,
new ConfigDescription("Rotate Speed Multiplier", new AcceptableValueRange<float>(min, max)));
rotateSpeedMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureManager(MultipliedObject<ModuleWeapon> obj) {
obj.AddField(new FieldConfiguration<float, float>("m_RotateSpeed", rotateSpeedMultiplier, ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.IsPlayerTank(obj as Module);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleWeapon), "OnAttached")]
public static void PostfixCreate(ModuleWeapon __instance) {
Manager.OnObjectAttached(__instance);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleWeapon), "OnDetaching")]
public static void PostfixDestroy(ModuleWeapon __instance) {
Manager.OnObjectDetached(__instance);
}
private static void DoPatch() {
Manager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleWeapon: {0}", obj);
PostfixCreate(obj as ModuleWeapon);
return true;
};
}
}

View File

@@ -0,0 +1,71 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleWheelsManager {
private static readonly MultipliedObjectManager<ManWheels.TorqueParams> TorqueParamsManager =
new MultipliedObjectManager<ManWheels.TorqueParams>(ConfigureTorqueParams);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> torqueRpmMultiplier;
private static ConfigEntry<float> torqueMultiplier;
public static void Setup(ConfigFile config) {
const float min = 0.01f;
const float max = 32f;
playerOnly = config.Bind("TorqueParams", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
torqueRpmMultiplier =
config.Bind("TorqueParams", "Torque RPM Multiplier", 1f,
new ConfigDescription("Torque RPM Multiplier", new AcceptableValueRange<float>(min, max)));
torqueRpmMultiplier.SettingChanged += (sender, args) => DoPatch();
torqueMultiplier =
config.Bind("TorqueParams", "Torque Multiplier", 1f,
new ConfigDescription("Torque Multiplier", new AcceptableValueRange<float>(min, max)));
torqueMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureTorqueParams(MultipliedObject<ManWheels.TorqueParams> obj) {
obj.AddField(new FieldConfiguration<float, float>("torqueCurveMaxRpm", torqueRpmMultiplier, ShouldApply));
obj.AddField(new FieldConfiguration<float, float>("torqueCurveMaxTorque", torqueMultiplier, ShouldApply));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.IsPlayerTank(obj as Module);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleWheels), "OnAttached")]
public static void PostfixCreate(ModuleWheels __instance) {
var trav = Traverse.Create(__instance);
var torqueParams = trav.Field("torqueParams");
TorqueParamsManager.OnObjectAttached(torqueParams.GetValue<ManWheels.TorqueParams>());
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleWheels), "OnDetaching")]
public static void PostfixDestroy(ModuleWheels __instance) {
var trav = Traverse.Create(__instance);
var torqueParams = trav.Field("torqueParams");
TorqueParamsManager.OnObjectDetached(torqueParams.GetValue<ManWheels.TorqueParams>());
}
private static void DoPatch() {
TorqueParamsManager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleWheels: {0}", obj);
PostfixCreate(obj as ModuleWheels);
return true;
};
}
}

View File

@@ -0,0 +1,83 @@
using System;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ModuleWingManager {
private static readonly MultipliedObjectManager<ModuleWing.Aerofoil> Manager =
new MultipliedObjectManager<ModuleWing.Aerofoil>(ConfigureAerofoil);
private static ConfigEntry<bool> playerOnly;
private static ConfigEntry<float> angleRangeMultiplier;
private static ConfigEntry<float> turnSpeedMultiplier;
private static ConfigEntry<float> liftStrengthMultiplier;
public static void Setup(ConfigFile config) {
const float min = 0.01f;
const float max = 32f;
playerOnly = config.Bind("Aerofoil", "Player Only", false, new ConfigDescription("Player Only"));
playerOnly.SettingChanged += (sender, args) => DoPatch();
angleRangeMultiplier =
config.Bind("Aerofoil", "Angle Range Multiplier", 1f,
new ConfigDescription("Angle Range Multiplier", new AcceptableValueRange<float>(min, max)));
angleRangeMultiplier.SettingChanged += (sender, args) => DoPatch();
turnSpeedMultiplier =
config.Bind("Aerofoil", "Turn Speed Multiplier", 1f,
new ConfigDescription("Turn Speed Multiplier", new AcceptableValueRange<float>(min, max)));
turnSpeedMultiplier.SettingChanged += (sender, args) => DoPatch();
liftStrengthMultiplier = config.Bind(
"Aerofoil", "Lift Strength Multiplier", 1f,
new ConfigDescription("Lift Strength Multiplier", new AcceptableValueRange<float>(min, max)));
liftStrengthMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureAerofoil(MultipliedObject<ModuleWing.Aerofoil> obj) {
obj.AddField(new FieldConfiguration<float, float>("flapAngleRangeActual", angleRangeMultiplier));
obj.AddField(new FieldConfiguration<float, float>("flapAngleRangeVisual", angleRangeMultiplier));
obj.AddField(new FieldConfiguration<float, float>("flapTurnSpeed", turnSpeedMultiplier));
obj.AddField(new FieldConfiguration<float, float>("liftStrength", liftStrengthMultiplier));
}
private static readonly Func<object, bool> ShouldApply = obj => {
if (!playerOnly.Value)
return true;
return CykUtil.IsPlayerTank(obj as Module);
};
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleWing), "OnAttached")]
public static void PostfixCreate(ModuleWing __instance) {
if (playerOnly.Value && !CykUtil.IsPlayerTank(__instance))
return;
for (int i = 0; i < __instance.m_Aerofoils.Length; i++) {
var aerofoil = __instance.m_Aerofoils[i];
Manager.OnObjectAttached(aerofoil);
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ModuleWing), "OnDetaching")]
public static void PostfixDestroy(ModuleWing __instance) {
if (playerOnly.Value && !CykUtil.IsPlayerTank(__instance))
return;
foreach (var aerofoil in __instance.m_Aerofoils) Manager.OnObjectDetached(aerofoil);
}
private static void DoPatch() {
Manager.ApplyAll();
}
public static readonly Func<Module, bool> Register = obj => {
if (Main.debug.Value)
Console.WriteLine("Registering ModuleWing: {0}", obj);
PostfixCreate(obj as ModuleWing);
return true;
};
}
}

View File

@@ -0,0 +1,71 @@
using System;
using System.Reflection;
using HarmonyLib;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace BanquetForCyka {
[HarmonyPatch]
public class MultiBuy {
public static UIShopBlockSelect panel;
public static Traverse panelTraverse;
[HarmonyPostfix]
[HarmonyPatch(typeof(UIShopBlockSelect), "OnSpawn")]
public static void PostfixCreate(UIShopBlockSelect __instance) {
panel = __instance;
if (Main.debugBuyAll.Value)
Console.WriteLine("UISnapshotPanel.OnPool: {0}", __instance);
panelTraverse = Traverse.Create(__instance);
var placeButton = panelTraverse.Field("m_PurchaseBlockButton").GetValue<Button>();
placeButton.gameObject.AddComponent<MultiBuyRightClickHandler>();
}
}
class MultiBuyRightClickHandler : MonoBehaviour, IPointerClickHandler {
// private void Awake() {
// }
public void OnPointerClick(PointerEventData eventData) {
if (Main.debugBuyAll.Value)
Console.WriteLine("MultiBuyRightClickHandler.OnPointerClick: {0} {1}", gameObject.name,
eventData.button);
try {
if (eventData.button == PointerEventData.InputButton.Right) {
UIBlockSelectGrid grid = MultiBuy.panelTraverse.Field("m_Grid").GetValue<UIBlockSelectGrid>();
BlockTypes blockTypes;
bool ok = grid.TryGetSelection(out blockTypes);
if (!ok) {
if (Main.debugBuyAll.Value)
Console.WriteLine(
"MultiBuyRightClickHandler.OnPointerClick: Failed to get block selection from grid");
return;
}
uint shopBlockPoolID = MultiBuy.panelTraverse.Field("m_ShopBlockPoolID").GetValue<uint>();
MethodInfo canPurchaseMethod =
AccessTools.Method(typeof(UIShopBlockSelect), "CanPurchaseBlock", new[] { typeof(BlockTypes) });
Func<BlockTypes, bool> canPurchase = (Func<BlockTypes, bool>)Delegate.CreateDelegate(
typeof(Func<BlockTypes, bool>), MultiBuy.panel, canPurchaseMethod);
for (int i = 0; i < Main.multiBuyAmount.Value; i++) {
if (!canPurchase.Invoke(blockTypes)) {
if (Main.debugBuyAll.Value)
Console.WriteLine("MultiBuyRightClickHandler.OnPointerClick: Can purchase no more {0}",
blockTypes);
return;
}
Singleton.Manager<ManPurchases>.inst.RequestPurchaseBlock(shopBlockPoolID, blockTypes, 1);
if (Main.debugBuyAll.Value)
Console.WriteLine("MultiBuyRightClickHandler.OnPointerClick: Purchased {0} block",
blockTypes);
}
}
} catch (Exception e) {
if (Main.debugBuyAll.Value)
Console.WriteLine("MultiBuyRightClickHandler.OnPointerClick: Exception occurred: {0}", e);
}
}
}
}

View File

@@ -0,0 +1,531 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
public interface IFieldModifier {
void CaptureOriginal();
void Apply();
void Restore();
void LogValue(string prefix);
}
/// <summary>
/// Represents a field that can be multiplied by a configurable value
/// </summary>
/// <typeparam name="TField">The type of the field value</typeparam>
/// <typeparam name="TMul">The type of the multiplier</typeparam>
public class FieldConfiguration<TField, TMul> {
private string _fieldName;
private ConfigEntry<TMul> _defaultMultiplier;
private Func<object, ConfigEntry<TMul>> _conditionalMultiplier;
private Func<object, bool> _applyCondition;
public string FieldName {
get { return _fieldName; }
set { _fieldName = value; }
}
public ConfigEntry<TMul> DefaultMultiplier {
get { return _defaultMultiplier; }
set { _defaultMultiplier = value; }
}
public Func<object, ConfigEntry<TMul>> ConditionalMultiplier {
get { return _conditionalMultiplier; }
set { _conditionalMultiplier = value; }
}
public Func<object, bool> ApplyCondition {
get { return _applyCondition; }
set { _applyCondition = value; }
}
public FieldConfiguration(string fieldName, ConfigEntry<TMul> defaultMultiplier) {
_fieldName = fieldName;
_defaultMultiplier = defaultMultiplier;
}
public FieldConfiguration(string fieldName, ConfigEntry<TMul> defaultMultiplier,
Func<object, ConfigEntry<TMul>> conditionalMultiplier) {
_fieldName = fieldName;
_defaultMultiplier = defaultMultiplier;
_conditionalMultiplier = conditionalMultiplier;
}
public FieldConfiguration(string fieldName, ConfigEntry<TMul> defaultMultiplier,
Func<object, bool> applyCondition) {
_fieldName = fieldName;
_defaultMultiplier = defaultMultiplier;
_applyCondition = applyCondition;
}
public FieldConfiguration(string fieldName, ConfigEntry<TMul> defaultMultiplier,
Func<object, ConfigEntry<TMul>> conditionalMultiplier,
Func<object, bool> applyCondition) {
_fieldName = fieldName;
_defaultMultiplier = defaultMultiplier;
_conditionalMultiplier = conditionalMultiplier;
_applyCondition = applyCondition;
}
public ConfigEntry<TMul> GetMultiplier(object __instance) {
if (_conditionalMultiplier == null) {
return _defaultMultiplier;
}
return _conditionalMultiplier(__instance);
}
public bool ShouldApply(object __instance) {
if (_applyCondition == null) {
return true;
}
return _applyCondition(__instance);
}
}
public class MultipliedField<TField, TMul> : IFieldModifier {
private readonly string _fieldName;
private readonly ConfigEntry<TMul> _multiplier;
private readonly Traverse _parentTraverse;
private readonly Func<object, bool> _applyCondition;
private TField _originalValue;
public string FieldName {
get { return _fieldName; }
}
public MultipliedField(string fieldName, ConfigEntry<TMul> multiplier, Traverse parentTraverse,
Func<object, bool> applyCondition = null) {
_fieldName = fieldName;
_multiplier = multiplier;
_parentTraverse = parentTraverse;
_applyCondition = applyCondition;
if (!parentTraverse.Field(fieldName).FieldExists()) {
throw new ArgumentException(
string.Format("Field {0} does not exist on {1}", fieldName, parentTraverse));
}
// Verify TField is a numeric type
if (!IsNumericType(typeof(TField))) {
throw new ArgumentException(
string.Format("Field type {0} must be a numeric type", typeof(TField).Name));
}
// Verify TMul is a numeric type
if (!IsNumericType(typeof(TMul))) {
throw new ArgumentException(
string.Format("Multiplier type {0} must be a numeric type", typeof(TMul).Name));
}
}
private static bool IsNumericType(Type type) {
return type == typeof(byte) || type == typeof(sbyte) || type == typeof(short) || type == typeof(ushort) ||
type == typeof(int) || type == typeof(uint) || type == typeof(long) || type == typeof(ulong) ||
type == typeof(float) || type == typeof(double) || type == typeof(decimal);
}
private TField MultiplyValues(TField fieldValue, TMul multiplierValue) {
// Convert both to double for the multiplication
double fieldDouble = Convert.ToDouble(fieldValue);
double multiplierDouble = Convert.ToDouble(multiplierValue);
double result = fieldDouble * multiplierDouble;
// Convert back to TField
return (TField)Convert.ChangeType(result, typeof(TField));
}
public TField GetValue() {
var value = _parentTraverse.Field(_fieldName).GetValue();
if (value == null)
throw new InvalidOperationException(string.Format("Field {0} returned null", _fieldName));
return (TField)value;
}
public void SetValue(TField value) {
_parentTraverse.Field(_fieldName).SetValue(value);
var verifyValue = GetValue();
if (!verifyValue.Equals(value))
throw new InvalidOperationException(
string.Format("Field {0} set to {1} but read back as {2}", _fieldName, value, verifyValue));
}
public void CaptureOriginal() {
_originalValue = GetValue();
if (Main.debug.Value)
Console.WriteLine("Captured original value for {0}: {1}", _fieldName, _originalValue);
}
public void Apply() {
try {
if (_applyCondition != null && !_applyCondition(_parentTraverse.GetValue())) {
if (Main.debug.Value)
Console.WriteLine("Skipping {0}: condition not met", _fieldName);
return;
}
var newValue = MultiplyValues(_originalValue, _multiplier.Value);
if (Main.debug.Value)
Console.WriteLine("Applying to {0}: {1} * {2} = {3}", _fieldName, _originalValue, _multiplier.Value,
newValue);
SetValue(newValue);
} catch (Exception e) {
throw new InvalidOperationException(string.Format("Failed to apply multiplication to {0}", _fieldName),
e);
}
}
public void Restore() {
if (Main.debug.Value)
Console.WriteLine("Restoring {0} to original value: {1}", _fieldName, _originalValue);
SetValue(_originalValue);
}
public void LogValue(string prefix) {
if (!Main.debug.Value)
return;
var currentValue = GetValue();
Console.WriteLine("{0} {1}; {2}: {3} (original: {4}, multiplier: {5})", prefix, _parentTraverse, _fieldName,
currentValue, _originalValue, _multiplier.Value);
}
}
public class BooleanFieldConfiguration {
private string _fieldName;
private ConfigEntry<bool> _value;
private Func<object, ConfigEntry<bool>> _conditionalValue;
private Func<object, bool> _applyCondition;
public string FieldName {
get { return _fieldName; }
set { _fieldName = value; }
}
public ConfigEntry<bool> Value {
get { return _value; }
set { _value = value; }
}
public Func<object, ConfigEntry<bool>> ConditionalValue {
get { return _conditionalValue; }
set { _conditionalValue = value; }
}
public Func<object, bool> ApplyCondition {
get { return _applyCondition; }
set { _applyCondition = value; }
}
public BooleanFieldConfiguration(string fieldName, ConfigEntry<bool> value) {
_fieldName = fieldName;
_value = value;
}
public BooleanFieldConfiguration(string fieldName, ConfigEntry<bool> value,
Func<object, ConfigEntry<bool>> conditionalValue) {
_fieldName = fieldName;
_value = value;
_conditionalValue = conditionalValue;
}
public BooleanFieldConfiguration(string fieldName, ConfigEntry<bool> value, Func<object, bool> applyCondition) {
_fieldName = fieldName;
_value = value;
_applyCondition = applyCondition;
}
public BooleanFieldConfiguration(string fieldName, ConfigEntry<bool> value,
Func<object, ConfigEntry<bool>> conditionalValue,
Func<object, bool> applyCondition) {
_fieldName = fieldName;
_value = value;
_conditionalValue = conditionalValue;
_applyCondition = applyCondition;
}
public ConfigEntry<bool> GetValue(object __instance) {
if (_conditionalValue == null) {
return _value;
}
return _conditionalValue(__instance);
}
public bool ShouldApply(object __instance) {
if (_applyCondition == null) {
return true;
}
return _applyCondition(__instance);
}
}
public class BooleanField : IFieldModifier {
private readonly string _fieldName;
private readonly ConfigEntry<bool> _value;
private readonly Traverse _parentTraverse;
private readonly Func<object, bool> _applyCondition;
private bool _originalValue;
public string FieldName {
get { return _fieldName; }
}
public BooleanField(string fieldName, ConfigEntry<bool> value, Traverse parentTraverse,
Func<object, bool> applyCondition = null) {
_fieldName = fieldName;
_value = value;
_parentTraverse = parentTraverse;
_applyCondition = applyCondition;
if (!parentTraverse.Field(fieldName).FieldExists()) {
throw new ArgumentException(
string.Format("Field {0} does not exist on {1}", fieldName, parentTraverse));
}
}
public bool GetValue() {
var value = _parentTraverse.Field(_fieldName).GetValue();
if (value == null)
throw new InvalidOperationException(string.Format("Field {0} returned null", _fieldName));
return (bool)value;
}
public void SetValue(bool value) {
_parentTraverse.Field(_fieldName).SetValue(value);
var verifyValue = GetValue();
if (verifyValue != value)
throw new InvalidOperationException(
string.Format("Field {0} set to {1} but read back as {2}", _fieldName, value, verifyValue));
}
public void CaptureOriginal() {
_originalValue = GetValue();
if (Main.debug.Value)
Console.WriteLine("Captured original value for {0}: {1}", _fieldName, _originalValue);
}
public void Apply() {
try {
if (_applyCondition != null && !_applyCondition(_parentTraverse.GetValue())) {
if (Main.debug.Value)
Console.WriteLine("Skipping {0}: condition not met", _fieldName);
return;
}
if (_value.Value) {
if (Main.debug.Value)
Console.WriteLine("Applying to {0}: forcing to true", _fieldName);
SetValue(true);
} else {
if (Main.debug.Value)
Console.WriteLine("Applying to {0}: leaving as {1} (config is false)", _fieldName, GetValue());
}
} catch (Exception e) {
throw new InvalidOperationException(string.Format("Failed to apply value to {0}", _fieldName), e);
}
}
public void Restore() {
if (Main.debug.Value)
Console.WriteLine("Restoring {0} to original value: {1}", _fieldName, _originalValue);
SetValue(_originalValue);
}
public void LogValue(string prefix) {
if (!Main.debug.Value)
return;
var currentValue = GetValue();
Console.WriteLine("{0} {1}; {2}: {3} (original: {4}, config: {5})", prefix, _parentTraverse, _fieldName,
currentValue, _originalValue, _value.Value);
}
}
/// <summary>
/// Represents an object with multiple fields that can be multiplied
/// </summary>
/// <typeparam name="T">The type of the object being managed</typeparam>
public class MultipliedObject<T> {
private readonly T _instance;
private readonly Traverse _objectTraverse;
private readonly Dictionary<string, IFieldModifier> _fields;
public MultipliedObject(T __instance) {
_instance = __instance;
_objectTraverse = Traverse.Create(__instance);
_fields = new Dictionary<string, IFieldModifier>();
}
public void AddField<TField, TMul>(FieldConfiguration<TField, TMul> config) {
var multiplier = config.GetMultiplier(_instance);
_fields[config.FieldName] =
new MultipliedField<TField, TMul>(config.FieldName, multiplier, _objectTraverse, config.ShouldApply);
}
public void AddBooleanField(BooleanFieldConfiguration config) {
var value = config.GetValue(_instance);
_fields[config.FieldName] = new BooleanField(config.FieldName, value, _objectTraverse, config.ShouldApply);
}
public void CaptureFrom() {
foreach (var field in _fields.Values) {
field.CaptureOriginal();
}
}
public void ApplyTo(IEnumerable<string> fieldNames = null) {
IEnumerable<string> fieldsToApply = fieldNames ?? _fields.Keys;
foreach (var fieldName in fieldsToApply.Where(name => _fields.ContainsKey(name)))
_fields[fieldName].Apply();
}
public void RestoreTo(IEnumerable<string> fieldNames = null) {
IEnumerable<string> fieldsToRestore = fieldNames ?? _fields.Keys;
foreach (var fieldName in fieldsToRestore.Where(name => _fields.ContainsKey(name)))
_fields[fieldName].Restore();
}
public void LogValues(string prefix) {
if (!Main.debug.Value)
return;
foreach (var field in _fields.Values) {
field.LogValue(prefix);
}
}
}
/// <summary>
/// Manages a collection of objects whose fields can be multiplied
/// </summary>
/// <typeparam name="T">The type of objects being managed</typeparam>
public class MultipliedObjectManager<T> {
private readonly Dictionary<T, MultipliedObject<T>> _managedObjects;
private readonly Action<MultipliedObject<T>> _configureObject;
public MultipliedObjectManager(Action<MultipliedObject<T>> configureObject) {
if (configureObject == null)
throw new ArgumentNullException("configureObject");
_configureObject = configureObject;
_managedObjects = new Dictionary<T, MultipliedObject<T>>();
}
private void SafeRemove(T __instance) {
if (__instance == null)
return;
try {
_managedObjects.Remove(__instance);
} catch (Exception e) {
Console.WriteLine("Error removing __instance from _managedObjects: {0}", e);
}
}
public void OnObjectAttached(T __instance) {
if (Main.debug.Value)
Console.WriteLine("{0}.OnAttached", typeof(T).Name);
if (__instance == null) {
Console.WriteLine("Attempted to attach null __instance");
return;
}
try {
if (_managedObjects.ContainsKey(__instance)) {
if (Main.debug.Value)
Console.WriteLine("{0} already managed, skipping", typeof(T).Name);
return;
}
var multipliedObject = new MultipliedObject<T>(__instance);
_configureObject(multipliedObject);
multipliedObject.CaptureFrom();
_managedObjects.Add(__instance, multipliedObject);
multipliedObject.LogValues("Patching");
ApplyTo(__instance);
multipliedObject.LogValues("Patched");
} catch (Exception e) {
Console.WriteLine("Error in OnObjectAttached: {0}", e);
}
}
public void OnObjectDetached(T __instance) {
if (Main.debug.Value)
Console.WriteLine("{0}.OnDetaching", typeof(T).Name);
if (__instance == null) {
Console.WriteLine("Attempted to detach null __instance");
return;
}
try {
MultipliedObject<T> multipliedObject;
if (_managedObjects.TryGetValue(__instance, out multipliedObject)) {
if (Main.debug.Value)
multipliedObject.LogValues("Restoring");
try {
RestoreTo(__instance);
multipliedObject.LogValues("Restored");
} catch (Exception e) {
Console.WriteLine("Error restoring values: {0}", e);
}
SafeRemove(__instance);
}
} catch (Exception e) {
Console.WriteLine("Error in OnObjectDetached: {0}", e);
}
}
public void ApplyAll(IEnumerable<string> fieldNames = null) {
if (Main.debug.Value)
Console.WriteLine("Modifying {0} {1}", _managedObjects.Count, typeof(T).Name);
// Make a copy of the keys to avoid modification during enumeration
var instances = _managedObjects.Keys.ToList();
foreach (var __instance in instances) {
try {
RestoreTo(__instance, fieldNames);
ApplyTo(__instance, fieldNames);
} catch (Exception e) {
Console.WriteLine("Error applying to __instance: {0}", e);
}
}
}
public void ApplyTo(T __instance, IEnumerable<string> fieldNames = null) {
if (Main.debug.Value)
Console.WriteLine("Applying {0}", typeof(T).Name);
if (__instance == null)
return;
try {
MultipliedObject<T> obj;
if (_managedObjects.TryGetValue(__instance, out obj))
obj.ApplyTo(fieldNames);
} catch (Exception e) {
Console.WriteLine("Error in ApplyTo: {0}", e);
}
}
public void RestoreTo(T __instance, IEnumerable<string> fieldNames = null) {
if (Main.debug.Value)
Console.WriteLine("Restoring {0}", typeof(T).Name);
if (__instance == null)
return;
try {
MultipliedObject<T> obj;
if (_managedObjects.TryGetValue(__instance, out obj))
obj.RestoreTo(fieldNames);
} catch (Exception e) {
Console.WriteLine("Error in RestoreTo: {0}", e);
}
}
}
}

View File

@@ -0,0 +1,24 @@
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class Patches {
[HarmonyPrefix]
[HarmonyPatch(typeof(ManLicenses), "AddXP")]
static void XpMulti(FactionSubTypes corporation, ref int xp, bool showUI = true) {
xp = (int)(xp * Main.xpMultiplier.Value);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ManPlayer), "AddMoney")]
static void MoneyMulti(ref int amount) {
amount = (int)(amount * Main.moneyMultiplier.Value);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(TechHolders), "SetHeartbeatInterval")]
static void HeartbeatMulti(ref float interval) {
interval *= Main.heartbeatIntervalMultiplier.Value;
}
}
}

View File

@@ -0,0 +1,22 @@
using System;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class ProjectilePatch {
[HarmonyPrefix]
[HarmonyPatch(typeof(Projectile), "StickToObjectWithVisuals")]
static void Prefix(Projectile __instance) {
if (Main.debug.Value)
Console.WriteLine("Projectile created");
var trav = Traverse.Create(__instance);
var explodeOnStick = trav.Field("m_ExplodeOnStick");
if (!explodeOnStick.GetValue<bool>()) {
if (Main.debug.Value)
Console.WriteLine("Exploding on stick");
explodeOnStick.SetValue(Main.projectileExplodeOnStick.Value);
}
}
}
}

View File

@@ -0,0 +1,35 @@
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly:AssemblyTitle("BanquetForCyka")]
[assembly:AssemblyDescription("")]
[assembly:AssemblyConfiguration("")]
[assembly:AssemblyCompany("")]
[assembly:AssemblyProduct("BanquetForCyka")]
[assembly:AssemblyCopyright("Copyright © 2023")]
[assembly:AssemblyTrademark("")]
[assembly:AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly:ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly:Guid("EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly:AssemblyVersion("1.0.0.0")]
[assembly:AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,30 @@
using System;
using HarmonyLib;
namespace BanquetForCyka {
public class SeekingProjectileManager {
[HarmonyPatch(typeof(SeekingProjectile), "OnSpawn")]
class Patch {
public static void Postfix(SeekingProjectile __instance) {
if (Main.debug.Value)
Console.WriteLine("SeekingProjectile created");
SetField(
__instance, "m_VisionConeAngle",
Main.seekingProjectileVisionConeAngleMultiplier.Value * GetField(__instance, "m_VisionConeAngle"));
SetField(__instance, "m_VisionRange",
Main.seekingProjectileVisionRangeMultiplier.Value * GetField(__instance, "m_VisionRange"));
SetField(__instance, "m_TurnSpeed",
Main.seekingProjectileTurningSpeedMultiplier.Value * GetField(__instance, "m_TurnSpeed"));
}
}
private static float GetField(SeekingProjectile seekingProjectile, string field) {
return Traverse.Create(seekingProjectile).Field(field).GetValue() as float ? ?? 0f;
}
private static void SetField(SeekingProjectile seekingProjectile, string field, float value) {
Traverse.Create(seekingProjectile).Field(field).SetValue(value);
}
}
}

View File

@@ -0,0 +1,53 @@
using BepInEx.Configuration;
using HarmonyLib;
namespace BanquetForCyka {
[HarmonyPatch]
public class TankBeamManager {
private static readonly MultipliedObjectManager<TankBeam> Manager =
new MultipliedObjectManager<TankBeam>(ConfigureBeam);
public static ConfigEntry<float> hoverClearanceMultiplier;
public static ConfigEntry<float> nudgeSpeedForwardMultiplier;
public static ConfigEntry<float> nudgeSpeedRotateMultiplier;
public static void Setup(ConfigFile config) {
float min = 0.01f;
float max = 32f;
hoverClearanceMultiplier = config.Bind(
"TankBeam", "Hover Clearance Multiplier", 1f,
new ConfigDescription("Hover Clearance Multiplier", new AcceptableValueRange<float>(min, max)));
hoverClearanceMultiplier.SettingChanged += (sender, args) => DoPatch();
nudgeSpeedForwardMultiplier = config.Bind(
"TankBeam", "Nudge Speed Forward Multiplier", 1f,
new ConfigDescription("Nudge Speed Forward Multiplier", new AcceptableValueRange<float>(min, max)));
nudgeSpeedForwardMultiplier.SettingChanged += (sender, args) => DoPatch();
nudgeSpeedRotateMultiplier = config.Bind(
"TankBeam", "Nudge Speed Rotate Multiplier", 1f,
new ConfigDescription("Nudge Speed Rotate Multiplier", new AcceptableValueRange<float>(min, max)));
nudgeSpeedRotateMultiplier.SettingChanged += (sender, args) => DoPatch();
}
private static void ConfigureBeam(MultipliedObject<TankBeam> obj) {
obj.AddField(new FieldConfiguration<float, float>("hoverClearance", hoverClearanceMultiplier));
obj.AddField(new FieldConfiguration<float, float>("nudgeSpeedForward", nudgeSpeedForwardMultiplier));
obj.AddField(new FieldConfiguration<float, float>("nudgeSpeedRotate", nudgeSpeedRotateMultiplier));
}
[HarmonyPrefix]
[HarmonyPatch(typeof(TankBeam), "EnableBeam")]
public static void PostfixCreate(TankBeam __instance, ref bool enable) {
if (enable)
Manager.OnObjectAttached(__instance);
else
Manager.OnObjectDetached(__instance);
}
public static void DoPatch() {
Manager.ApplyAll();
}
}
}

View File

@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using BepInEx.Configuration;
using HarmonyLib;
using UnityEngine;
namespace BanquetForCyka {
[HarmonyPatch]
public class TankManager {
public static ConfigEntry<bool> recheck;
public static Dictionary<Type, Func<Module, bool>> moduleManagerMapper =
new Dictionary<Type, Func<Module, bool>>();
public static void Setup(ConfigFile config) {
recheck = config.Bind("Tank", "Recheck", false, new ConfigDescription("Recheck"));
moduleManagerMapper.Add(typeof(ModuleBooster), ModuleBoosterManager.Register);
moduleManagerMapper.Add(typeof(ModuleEnergy), ModuleEnergyManager.Register);
moduleManagerMapper.Add(typeof(ModuleEnergyStore), ModuleEnergyStoreManager.Register);
moduleManagerMapper.Add(typeof(ModuleFuelTank), ModuleFuelTankManager.Register);
moduleManagerMapper.Add(typeof(ModuleGyro), ModuleGyroManager.Register);
moduleManagerMapper.Add(typeof(ModuleHeart), ModuleHeartManager.Register);
moduleManagerMapper.Add(typeof(ModuleItemHolder), ModuleItemHolderManager.Register);
moduleManagerMapper.Add(typeof(ModuleItemProducer), ModuleItemProducerManager.Register);
moduleManagerMapper.Add(typeof(ModuleRemoteCharger), ModuleRemoteChargerManager.Register);
moduleManagerMapper.Add(typeof(ModuleShieldGenerator), ModuleShieldGeneratorManager.Register);
moduleManagerMapper.Add(typeof(ModuleWeaponGun), ModuleWeaponGunManager.Register);
moduleManagerMapper.Add(typeof(ModuleWeapon), ModuleWeaponManager.Register);
moduleManagerMapper.Add(typeof(ModuleWheels), ModuleWheelsManager.Register);
moduleManagerMapper.Add(typeof(ModuleWing), ModuleWingManager.Register);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(Tank), "NotifyAnchor")]
public static void PostfixCreate(Tank __instance, ModuleAnchor anchor, bool anchored) {
if (Main.debug.Value)
Console.WriteLine("TankManager.NotifyAnchor: {0}", __instance);
if (!__instance.ControllableByLocalPlayer)
return;
if (!recheck.Value)
return;
foreach (Transform child in __instance.transform) {
GameObject childObj = child.gameObject;
Component[] components = childObj.GetComponents<Component>();
foreach (Component component in components) {
Func<Module, bool> manager;
if (moduleManagerMapper.TryGetValue(component.GetType(), out manager))
manager(component as Module);
}
}
}
}
}

View File

@@ -0,0 +1,181 @@
using System;
using System.Collections.Generic;
using HarmonyLib;
using Snapshots;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace BanquetForCyka {
[HarmonyPatch]
public class UISnapshotPanelBuyAll {
public static UISnapshotPanel panel;
public static Traverse panelTraverse;
public static SnapshotLiveData selectedData;
[HarmonyPostfix]
[HarmonyPatch(typeof(UISnapshotPanel), "OnPool")]
public static void PostfixCreate(UISnapshotPanel __instance) {
if (Main.debugBuyAll.Value)
Console.WriteLine("UISnapshotPanel.OnPool: {0}", __instance);
panel = __instance;
panelTraverse = Traverse.Create(__instance);
var placeButton = panelTraverse.Field("m_PlaceButton").GetValue<Button>();
placeButton.gameObject.AddComponent<RightClickHandler>();
var swapButton = panelTraverse.Field("m_SwapButton").GetValue<Button>();
swapButton.gameObject.AddComponent<RightClickHandlerSwap>();
}
[HarmonyPostfix]
[HarmonyPatch(typeof(UISnapshotPanel), "OnSelectedChanged")]
public static void PostfixCreate(UISnapshotPanel __instance, ref SnapshotLiveData selectedData) {
if (Main.debugBuyAll.Value)
Console.WriteLine("UISnapshotPanel.OnSelectedChanged: {0}", __instance);
UISnapshotPanelBuyAll.selectedData = selectedData;
}
}
public abstract class BaseRightClickHandler : MonoBehaviour, IPointerClickHandler {
protected static Traverse m_TechAvailLookupTraverse;
protected static Dictionary<Snapshot, TechDataAvailValidation> m_TechAvailLookup;
protected virtual void Awake() {
var trav = Traverse.Create(Singleton.Manager<ManSnapshots>.inst);
m_TechAvailLookupTraverse = trav.Field("m_TechAvailLookup");
m_TechAvailLookup = m_TechAvailLookupTraverse.GetValue<Dictionary<Snapshot, TechDataAvailValidation>>();
}
protected Dictionary<BlockTypes, int> CalculateMissingBlocks(
Dictionary<BlockTypes, TechDataAvailValidation.BlockTypeAvailability> blockAvailability, bool isSpawning) {
Dictionary<BlockTypes, int> missing = new Dictionary<BlockTypes, int>();
foreach (var kvp in blockAvailability) {
int numMissing;
if (isSpawning)
numMissing = kvp.Value.numRequired - kvp.Value.numInInventory;
else
numMissing = kvp.Value.numRequired - kvp.Value.numInInventory - kvp.Value.numOnPlayerTech;
}
if (missing.Count == 0)
foreach (var kvp in blockAvailability) missing.Add(kvp.Key, kvp.Value.numRequired);
return missing;
}
protected int CalculateTotalCost(Dictionary<BlockTypes, int> missingBlocks) {
int totalCost = 0;
RecipeManager recipeManager = Singleton.Manager<RecipeManager>.inst;
foreach (var kvp in missingBlocks) {
int cost = recipeManager.GetBlockBuyPrice(kvp.Key) * kvp.Value;
totalCost += cost;
if (Main.debugBuyAll.Value)
Console.WriteLine("{0} of {1} would cost {2}, total now {3}", kvp.Value, kvp.Key, cost, totalCost);
}
return totalCost;
}
protected bool TryPurchaseBlocks(Dictionary<BlockTypes, int> missingBlocks, int totalCost) {
ManPlayer player = Singleton.Manager<ManPlayer>.inst;
if (player.GetCurrentMoney() < totalCost) {
if (Main.debugBuyAll.Value)
Console.WriteLine("Not enough money, have {0} but need {1}, nothing to do",
player.GetCurrentMoney(), totalCost);
return false;
}
player.PayMoney(totalCost);
foreach (var kvp in missingBlocks) {
if (Main.debugBuyAll.Value)
Console.WriteLine("Buying {0} of {1}", kvp.Value, kvp.Key);
player.PlayerInventory.HostAddItem(kvp.Key, kvp.Value);
}
return true;
}
protected bool ProcessPurchase(
Dictionary<BlockTypes, TechDataAvailValidation.BlockTypeAvailability> blockAvailability, bool isSpawning) {
try {
if (blockAvailability == null) {
if (Main.debugBuyAll.Value)
Console.WriteLine("Block availability is null (wtf?), nothing to do");
return false;
}
var missingBlocks = CalculateMissingBlocks(blockAvailability, isSpawning);
int totalCost = CalculateTotalCost(missingBlocks);
if (totalCost > 0) {
if (Main.debugBuyAll.Value)
Console.WriteLine("Total cost: {0}", totalCost);
return TryPurchaseBlocks(missingBlocks, totalCost);
}
if (Main.debugBuyAll.Value)
Console.WriteLine("No blocks missing or no cost calculated");
return false;
} catch (Exception e) {
if (Main.debugBuyAll.Value)
Console.WriteLine("Error during purchase processing: {0}", e);
return false;
}
}
protected Dictionary<BlockTypes, TechDataAvailValidation.BlockTypeAvailability> GetCurrentBlockAvailability() {
SnapshotLiveData selectedSnapshotData = UISnapshotPanelBuyAll.selectedData;
Snapshot selectedSnapshot = selectedSnapshotData.m_Snapshot;
if (selectedSnapshot == null) {
if (Main.debugBuyAll.Value)
Console.WriteLine("Selected snapshot is null wtf??: {0}", gameObject.name);
return null;
}
TechDataAvailValidation techDataAvail;
if (!m_TechAvailLookup.TryGetValue(selectedSnapshot, out techDataAvail)) {
if (Main.debugBuyAll.Value)
Console.WriteLine("Failed to find TechDataAvailValidation for snapshot: {0}", selectedSnapshot);
return null;
}
var trav = Traverse.Create(techDataAvail);
var mBlockAvailabilityField = trav.Field("m_BlockAvailability");
var mBlockAvailability =
mBlockAvailabilityField
.GetValue<Dictionary<BlockTypes, TechDataAvailValidation.BlockTypeAvailability>>();
return mBlockAvailability;
}
public abstract void OnPointerClick(PointerEventData eventData);
}
public class RightClickHandler : BaseRightClickHandler {
public override void OnPointerClick(PointerEventData eventData) {
if (Main.debugBuyAll.Value)
Console.WriteLine("UISnapshotPanel.OnPointerClick: {0} {1}", gameObject.name, eventData.button);
try {
if (eventData.button == PointerEventData.InputButton.Right)
ProcessPurchase(GetCurrentBlockAvailability(), true);
} catch (Exception e) {
if (Main.debugBuyAll.Value)
Console.WriteLine("Shit exploded fml: {0}", e);
}
}
}
public class RightClickHandlerSwap : BaseRightClickHandler {
public override void OnPointerClick(PointerEventData eventData) {
if (Main.debugBuyAll.Value)
Console.WriteLine("UISnapshotPanel.OnPointerClick: {0} {1}", gameObject.name, eventData.button);
try {
if (eventData.button == PointerEventData.InputButton.Right)
ProcessPurchase(GetCurrentBlockAvailability(), false);
} catch (Exception e) {
if (Main.debugBuyAll.Value)
Console.WriteLine("Shit exploded fml: {0}", e);
}
}
}
}

View File

@@ -0,0 +1,14 @@
static void Postfix(UIItemSelectGrid __instance) {
try {
StringBuilder sb = new StringBuilder();
sb.AppendLine("--------------------");
sb.AppendLine("void UIItemSelectGrid::Repopulate()");
sb.Append("- __instance: ").AppendLine(__instance.ToString());
foreach (var item in __instance.m_FilteredItemList) {
sb.Append("- item: ").AppendLine(item.ToString());
}
UnityExplorer.ExplorerCore.Log(sb.ToString());
} catch (System.Exception ex) {
UnityExplorer.ExplorerCore.LogWarning($"Exception in patch of void UIItemSelectGrid::Repopulate():\n{ex}");
}
}

View File

@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{7F2F647A-CC44-4F99-A411-8C0F6446A5CE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7F2F647A-CC44-4F99-A411-8C0F6446A5CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7F2F647A-CC44-4F99-A411-8C0F6446A5CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7F2F647A-CC44-4F99-A411-8C0F6446A5CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7F2F647A-CC44-4F99-A411-8C0F6446A5CE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
using System;
using UnityEngine;
// Token: 0x02000081 RID: 129
public class AddressablesManager : MonoBehaviour
{
}

View File

@@ -0,0 +1,149 @@
using System;
using UnityEngine;
// Token: 0x02000012 RID: 18
public class Ailment : MonoBehaviour
{
// Token: 0x0600018D RID: 397 RVA: 0x0001F899 File Offset: 0x0001DA99
private void OnEnable()
{
this.Reset();
}
// Token: 0x0600018E RID: 398 RVA: 0x0001F8A1 File Offset: 0x0001DAA1
private void Reset()
{
this._ProcAilment = false;
this._TileCount = 0;
this._TurnCount = 0;
}
// Token: 0x0600018F RID: 399 RVA: 0x0001F8B8 File Offset: 0x0001DAB8
public void Inflicted()
{
}
// Token: 0x06000190 RID: 400 RVA: 0x0001F8BA File Offset: 0x0001DABA
public void Healed(bool dead, bool doRemove)
{
}
// Token: 0x0400031C RID: 796
[Header("Table Info")]
public GameObject databaseObj;
// Token: 0x0400031D RID: 797
private GameObject databaseObjMain;
// Token: 0x0400031E RID: 798
public string _Table;
// Token: 0x0400031F RID: 799
public int tableID;
// Token: 0x04000320 RID: 800
public int _TurnCount;
// Token: 0x04000321 RID: 801
public int _TileCount;
// Token: 0x04000322 RID: 802
public int _CureID;
// Token: 0x04000323 RID: 803
public bool _ProcAilment;
// Token: 0x04000324 RID: 804
private float TotalProcs;
// Token: 0x04000325 RID: 805
public string _AilmentID;
// Token: 0x04000326 RID: 806
public string _ProcAction;
// Token: 0x04000327 RID: 807
public float _ProcTrigger;
// Token: 0x04000328 RID: 808
public float _TriggerCount;
// Token: 0x04000329 RID: 809
public string _EmitNoiseType;
// Token: 0x0400032A RID: 810
public string descriptionText;
// Token: 0x0400032B RID: 811
public string displayName;
// Token: 0x0400032C RID: 812
public int potency;
// Token: 0x0400032D RID: 813
[Header("Players")]
public Character targetAI;
// Token: 0x0400032E RID: 814
[Header("Players")]
public Character attackerAI;
// Token: 0x0400032F RID: 815
public Stats charInfo;
// Token: 0x04000330 RID: 816
public GameObject target;
// Token: 0x04000331 RID: 817
public GameObject attacker;
// Token: 0x04000332 RID: 818
public Item currItem;
// Token: 0x04000333 RID: 819
public string currAction;
// Token: 0x04000334 RID: 820
[Header("Misc")]
public bool fromLoad;
// Token: 0x04000335 RID: 821
public string typeText;
// Token: 0x04000336 RID: 822
public string cureText;
// Token: 0x04000337 RID: 823
public string effectPrefab = "";
// Token: 0x04000338 RID: 824
private StringFast str = new StringFast(64);
// Token: 0x04000339 RID: 825
private StringFast str1 = new StringFast(64);
// Token: 0x0400033A RID: 826
public AudioSource audio1;
// Token: 0x0400033B RID: 827
[Header("Progress")]
public int currTileCount;
// Token: 0x0400033C RID: 828
public int currTurnCount;
// Token: 0x0400033D RID: 829
public int currTriggerCount;
// Token: 0x0400033E RID: 830
public Vector3 currTilePos;
// Token: 0x0400033F RID: 831
public int aimLocation;
// Token: 0x04000340 RID: 832
public bool inflicted;
// Token: 0x04000341 RID: 833
public bool didFall;
}

View File

@@ -0,0 +1,228 @@
using System;
using System.Collections.Generic;
using UnityEngine;
// Token: 0x02000078 RID: 120
public class AllSounds : MonoBehaviour
{
// Token: 0x06000BAD RID: 2989 RVA: 0x000E10D4 File Offset: 0x000DF2D4
public AudioClip PlaySound(string type, int id, int num, string extra)
{
if (type == "Human")
{
if (id < this.characters.Count && id > -1)
{
if (num == 0)
{
this.curr = this.characters[id].walk;
}
if (num == 1)
{
this.curr = this.characters[id].run;
}
if (num == 2)
{
this.curr = this.characters[id].hit;
}
if (num == 3)
{
this.curr = this.characters[id].death;
}
if (num == 4)
{
this.curr = this.characters[id].jump;
}
if (num == 6)
{
this.curr = this.characters[id].idle;
}
if (num == 7)
{
this.curr = this.characters[id].hit;
}
if (this.curr != null)
{
if (this.curr.Count <= 0)
{
return null;
}
if (num == 0 && id == 0)
{
int num2 = 0;
int num3 = this.curr.Count;
if (extra.Contains("Guts"))
{
num2 = 15;
num3 = 20;
}
else if (extra.Contains("Fabric"))
{
num2 = 0;
num3 = 5;
}
else if (extra.Contains("Snow"))
{
num2 = 20;
num3 = 25;
}
else if (extra.Contains("Wood"))
{
num2 = 10;
num3 = 15;
}
else if (extra.Contains("Grass"))
{
num2 = 5;
num3 = 10;
}
else if (extra.Contains("Puddle"))
{
num2 = 25;
num3 = 30;
}
else if (extra.Contains("Sand"))
{
num2 = 30;
num3 = 35;
}
else if (extra.Contains("Rocks"))
{
num2 = 35;
num3 = 40;
}
return this.curr[Random.Range(num2, num3)];
}
return this.curr[Random.Range(0, this.curr.Count)];
}
}
this.curr = null;
return null;
}
if (type == "Animal")
{
if (num == 0)
{
this.curr = this.animals[id].walk;
}
if (num == 1)
{
this.curr = this.animals[id].run;
}
if (num == 2)
{
this.curr = this.animals[id].hit;
}
if (num == 3)
{
this.curr = this.animals[id].death;
}
if (num == 4)
{
this.curr = this.animals[id].melee;
}
if (num == 5)
{
this.curr = this.animals[id].range;
}
if (num == 6)
{
this.curr = this.animals[id].idle;
}
if (num == 7)
{
this.curr = this.animals[id].heard;
}
if (this.curr == null)
{
this.curr = null;
return null;
}
if (this.curr.Count > 0)
{
return this.curr[Random.Range(0, this.curr.Count)];
}
return null;
}
else if (type == "Talking")
{
if (num == 10)
{
this.curr = this.talking[id].happy;
}
if (num == 11)
{
this.curr = this.talking[id].neutral;
}
if (num == 12)
{
this.curr = this.talking[id].hostile;
}
if (num == 13)
{
this.curr = this.talking[id].question;
}
if (num == 14)
{
this.curr = this.talking[id].exclaim;
}
if (num == 15)
{
this.curr = this.talking[id].spooked;
}
if (this.curr == null)
{
this.curr = null;
return null;
}
if (this.curr.Count > 0)
{
return this.curr[Random.Range(0, this.curr.Count)];
}
return null;
}
else
{
if (!(type == "Critter"))
{
return null;
}
if (num == 0)
{
this.curr = this.critters[id].idle;
}
if (num == 1)
{
this.curr = this.critters[id].move;
}
if (num == 2)
{
this.curr = this.critters[id].death;
}
if (this.curr == null)
{
this.curr = null;
return null;
}
if (this.curr.Count > 0)
{
return this.curr[Random.Range(0, this.curr.Count)];
}
return null;
}
}
// Token: 0x040011EB RID: 4587
public List<SoundSet.CharacterSounds> characters = new List<SoundSet.CharacterSounds>();
// Token: 0x040011EC RID: 4588
public List<SoundSet.AnimalSounds> animals = new List<SoundSet.AnimalSounds>();
// Token: 0x040011ED RID: 4589
public List<SoundSet.HumanTalking> talking = new List<SoundSet.HumanTalking>();
// Token: 0x040011EE RID: 4590
public List<SoundSet.CritterSounds> critters = new List<SoundSet.CritterSounds>();
// Token: 0x040011EF RID: 4591
private List<AudioClip> curr;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,79 @@
using System;
using UnityEngine;
// Token: 0x0200005B RID: 91
public class AnimationFlags : MonoBehaviour
{
// Token: 0x06000B39 RID: 2873 RVA: 0x000DD3BF File Offset: 0x000DB5BF
private void Start()
{
this.ClearAll();
}
// Token: 0x06000B3A RID: 2874 RVA: 0x000DD3C8 File Offset: 0x000DB5C8
public void StartQTE()
{
this.startQTE = true;
Debug.Log("start qte " + Time.timeSinceLevelLoad.ToString());
}
// Token: 0x06000B3B RID: 2875 RVA: 0x000DD3F8 File Offset: 0x000DB5F8
public void HitTarget()
{
this.hitTarget = true;
Debug.Log("hit target " + Time.timeSinceLevelLoad.ToString());
}
// Token: 0x06000B3C RID: 2876 RVA: 0x000DD428 File Offset: 0x000DB628
public void LeavePocket()
{
this.end = true;
}
// Token: 0x06000B3D RID: 2877 RVA: 0x000DD431 File Offset: 0x000DB631
public void StartTargetFollow()
{
this.targetFollow = true;
}
// Token: 0x06000B3E RID: 2878 RVA: 0x000DD43A File Offset: 0x000DB63A
public void StartBounce()
{
this.bounce = true;
}
// Token: 0x06000B3F RID: 2879 RVA: 0x000DD443 File Offset: 0x000DB643
public void PlayAnimation()
{
this.animate = true;
}
// Token: 0x06000B40 RID: 2880 RVA: 0x000DD44C File Offset: 0x000DB64C
public void ClearAll()
{
this.end = false;
this.hitTarget = false;
this.startQTE = false;
this.targetFollow = false;
this.bounce = false;
this.animate = false;
}
// Token: 0x0400102E RID: 4142
public bool end;
// Token: 0x0400102F RID: 4143
public bool startQTE;
// Token: 0x04001030 RID: 4144
public bool hitTarget;
// Token: 0x04001031 RID: 4145
public bool targetFollow;
// Token: 0x04001032 RID: 4146
public bool bounce;
// Token: 0x04001033 RID: 4147
public bool animate;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,145 @@
using System;
using System.Collections.Generic;
using DarkTonic.MasterAudio;
using UnityEngine;
// Token: 0x02000013 RID: 19
public class Armor : MonoBehaviour
{
// Token: 0x06000192 RID: 402 RVA: 0x0001F8EC File Offset: 0x0001DAEC
private void Awake()
{
if (!this.tr)
{
this.tr = base.transform;
}
if (!this.camTr)
{
this.camTr = Links.x.worldCamera.gameObject.transform;
}
this.forw = Vector3.forward;
this.up = Vector3.up;
}
// Token: 0x06000193 RID: 403 RVA: 0x0001F950 File Offset: 0x0001DB50
public void UpdateArmor(int curr)
{
SpriteRenderer spriteRenderer = null;
this.currentArmor = curr;
float num = (float)this.pieces.Count;
float num2 = (float)this.maxArmor / num;
float num3 = (float)curr;
this.segments = num3;
for (int i = 0; i < this.pieces.Count; i++)
{
float num4 = (float)i * num2;
if (num3 > num4)
{
this.pieces[i].color = this.normal;
}
else
{
if (this.pieces[i].color == this.normal)
{
spriteRenderer = this.pieces[i];
}
this.pieces[i].color = this.broken;
}
}
if (spriteRenderer)
{
MasterAudio.PlaySound3DAtVector3AndForget("Armor Break", this.character.torsoPosition, 1f, new float?(1f), 0.5f, "", null);
RectTransform hannahAnimator = Links.x.cellar.GetHannahAnimator(1);
hannahAnimator.gameObject.SetActive(true);
hannahAnimator.gameObject.GetComponent<HannahAnimator>().Play("Idle");
Vector3 vector = Links.x.worldCamera.WorldToScreenPoint(spriteRenderer.transform.position);
vector.z = 0f;
vector.x = vector.x * (1920f / (float)Screen.width) - 960f;
vector.y = vector.y * (Links.x.canvasRT.sizeDelta.y / (float)Screen.height) - Links.x.canvasRT.sizeDelta.y / 2f;
hannahAnimator.localPosition = vector;
if (this.type == "Armor")
{
GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(119);
pooledGameObject.transform.position = this.character.torsoPosition;
pooledGameObject.SetActive(true);
this.str.Clear();
this.str.Append(this.character.stats.GetName());
this.str.Append("'s armor is damaged");
Links.x.gameFeed.AddFeed(this.str.ToString());
}
}
}
// Token: 0x06000194 RID: 404 RVA: 0x0001FBAB File Offset: 0x0001DDAB
public void End()
{
Object.Destroy(base.gameObject);
}
// Token: 0x06000195 RID: 405 RVA: 0x0001FBB8 File Offset: 0x0001DDB8
public void Setup(Character c, int max, int curr, string counterType)
{
this.character = c;
this.type = counterType;
this.currentArmor = curr;
this.maxArmor = max;
this.UpdateArmor(curr);
this.LateUpdate();
}
// Token: 0x06000196 RID: 406 RVA: 0x0001FBE4 File Offset: 0x0001DDE4
private void LateUpdate()
{
this.tr.LookAt(this.tr.position + this.camTr.rotation * this.forw, this.camTr.rotation * this.up);
if (this.type == "Armor")
{
this.tr.position = this.character.body.GetHead().position + new Vector3(0f, 1f, 0f);
return;
}
if (this.character.party)
{
this.tr.position = this.character.body.GetHead().position + new Vector3(0f, 1.1f, 0f);
return;
}
this.tr.position = this.character.body.GetHead().position + new Vector3(0f, 1.85f, 0f);
}
// Token: 0x04000342 RID: 834
public List<SpriteRenderer> pieces = new List<SpriteRenderer>();
// Token: 0x04000343 RID: 835
public Character character;
// Token: 0x04000344 RID: 836
public int maxArmor;
// Token: 0x04000345 RID: 837
public int currentArmor;
// Token: 0x04000346 RID: 838
public float segments;
// Token: 0x04000347 RID: 839
private Transform tr;
// Token: 0x04000348 RID: 840
private Transform camTr;
// Token: 0x04000349 RID: 841
private Vector3 forw;
// Token: 0x0400034A RID: 842
private Vector3 up;
// Token: 0x0400034B RID: 843
public Color normal;
// Token: 0x0400034C RID: 844
public Color broken;
// Token: 0x0400034D RID: 845
private StringFast str = new StringFast(32);
// Token: 0x0400034E RID: 846
public string type;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,382 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7F2F647A-CC44-4F99-A411-8C0F6446A5CE}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>Assembly-CSharp</RootNamespace>
<AssemblyName>Assembly-CSharp</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Assembly-CSharp-firstpass">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
</Reference>
<Reference Include="AstarPathfindingProject">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\AstarPathfindingProject.dll</HintPath>
</Reference>
<Reference Include="Boxophobic.TheVegetationEngine.Runtime">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\Boxophobic.TheVegetationEngine.Runtime.dll</HintPath>
</Reference>
<Reference Include="MagicaClothV2">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\MagicaClothV2.dll</HintPath>
</Reference>
<Reference Include="netstandard">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\netstandard.dll</HintPath>
</Reference>
<Reference Include="Unity.InputSystem">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\Unity.InputSystem.dll</HintPath>
</Reference>
<Reference Include="Unity.TextMeshPro">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\Unity.TextMeshPro.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AnimationModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AudioModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.AudioModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ImageConversionModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.ImageConversionModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.IMGUIModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.InputLegacyModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ParticleSystemModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.ParticleSystemModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.PhysicsModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TerrainModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.TerrainModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UI">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.UI.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.UIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VideoModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.VideoModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VRModule">
<HintPath>..\..\..\..\..\..\..\..\..\..\Games\Banquet.for.Fools.Build.18497011\Banquet for Fools_Data\Managed\UnityEngine.VRModule.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<AppDesigner Include="Properties\" />
</ItemGroup>
<ItemGroup>
<Compile Include="Actions.cs" />
<Compile Include="AddressablesManager.cs" />
<Compile Include="Ailment.cs" />
<Compile Include="AllSounds.cs" />
<Compile Include="AnimateButton.cs" />
<Compile Include="AnimationFlags.cs" />
<Compile Include="Archives.cs" />
<Compile Include="Armor.cs" />
<Compile Include="ArrowKit.cs" />
<Compile Include="AttackAI.cs" />
<Compile Include="AudioListenForMain.cs" />
<Compile Include="AudioSourceDebugging.cs" />
<Compile Include="Bag.cs" />
<Compile Include="BakedMeshAnimation.cs" />
<Compile Include="BakedMeshAnimator.cs" />
<Compile Include="BakedMeshAnimatorUpdater.cs" />
<Compile Include="Billboard.cs" />
<Compile Include="BirdMaterialChanger.cs" />
<Compile Include="Boat.cs" />
<Compile Include="Body.cs" />
<Compile Include="BoneListener.cs" />
<Compile Include="Books.cs" />
<Compile Include="Boro.cs" />
<Compile Include="Breakable.cs" />
<Compile Include="BreakableActions.cs" />
<Compile Include="BtnAlphaThreshold.cs" />
<Compile Include="ButtonMultiTargets.cs" />
<Compile Include="ButtonSmartNavigation.cs" />
<Compile Include="ByeProbuilder.cs" />
<Compile Include="cakeslice\LinkedSet.cs" />
<Compile Include="cakeslice\LinkedSetGlow.cs" />
<Compile Include="cakeslice\Outline.cs" />
<Compile Include="cakeslice\OutlineEffect.cs" />
<Compile Include="cakeslice\OutlineEffectGlow.cs" />
<Compile Include="cakeslice\OutlineGlow.cs" />
<Compile Include="CameraControls.cs" />
<Compile Include="CameraEffects.cs" />
<Compile Include="CameraFogOfWar.cs" />
<Compile Include="CameraParams.cs" />
<Compile Include="CaptureAreaInfo.cs" />
<Compile Include="CaptureBackgrounds.cs" />
<Compile Include="Cellar.cs" />
<Compile Include="Character.cs" />
<Compile Include="CharacterQuips.cs" />
<Compile Include="Chest.cs" />
<Compile Include="ChestActions.cs" />
<Compile Include="Cinematics.cs" />
<Compile Include="ClayShaderVariables.cs" />
<Compile Include="CleanIK.cs" />
<Compile Include="CollectCharacters.cs" />
<Compile Include="CollisionListener.cs" />
<Compile Include="Combat.cs" />
<Compile Include="CompanionDrop.cs" />
<Compile Include="CompanionIcon.cs" />
<Compile Include="ContentSizeFitterEx.cs" />
<Compile Include="CoolAudioSource.cs" />
<Compile Include="CopyShadows.cs" />
<Compile Include="CopyShadowsBaker.cs" />
<Compile Include="CreateCircle.cs" />
<Compile Include="Creation.cs" />
<Compile Include="CreationSkills.cs" />
<Compile Include="CreatureActions.cs" />
<Compile Include="CreatureBoat.cs" />
<Compile Include="Creatures.cs" />
<Compile Include="CritterActions.cs" />
<Compile Include="Critters.cs" />
<Compile Include="Culling.cs" />
<Compile Include="Data.cs" />
<Compile Include="DeathScreen.cs" />
<Compile Include="Dialogue.cs" />
<Compile Include="DialogueSounds.cs" />
<Compile Include="Diorama.cs" />
<Compile Include="DockFriend.cs" />
<Compile Include="Door.cs" />
<Compile Include="DoorActions.cs" />
<Compile Include="DrawBounds.cs" />
<Compile Include="DrawMesh.cs" />
<Compile Include="DrawSettingController.cs" />
<Compile Include="DrawSettings.cs" />
<Compile Include="DrawViewController.cs" />
<Compile Include="Effects.cs" />
<Compile Include="EnchantItem.cs" />
<Compile Include="EnemyGroup.cs" />
<Compile Include="EnvironmentNodes.cs" />
<Compile Include="Equipment.cs" />
<Compile Include="Fauna.cs" />
<Compile Include="Fellowship.cs" />
<Compile Include="Flag.cs" />
<Compile Include="FloatExtensions.cs" />
<Compile Include="FlockChild.cs" />
<Compile Include="FlockChildSound.cs" />
<Compile Include="FlockController.cs" />
<Compile Include="FlockScare.cs" />
<Compile Include="FlockWaypointTrigger.cs" />
<Compile Include="Forfeits.cs" />
<Compile Include="Formation.cs" />
<Compile Include="FOWRevealer.cs" />
<Compile Include="FOWRevealerInterior.cs" />
<Compile Include="FOWSystem.cs" />
<Compile Include="FOWSystemInterior.cs" />
<Compile Include="FPS.cs" />
<Compile Include="Gaia.cs" />
<Compile Include="GameCard.cs" />
<Compile Include="GameFeed.cs" />
<Compile Include="Gameplay.cs" />
<Compile Include="GameSecondCounter.cs" />
<Compile Include="GatherEmeraldsXP.cs" />
<Compile Include="Gauge.cs" />
<Compile Include="GhostBrush.cs" />
<Compile Include="Gore.cs" />
<Compile Include="GoreListen.cs" />
<Compile Include="GroundBag.cs" />
<Compile Include="GroundItemText.cs" />
<Compile Include="Groupies.cs" />
<Compile Include="guiE3.cs" />
<Compile Include="guiMenu.cs" />
<Compile Include="HannahAnimator.cs" />
<Compile Include="HannahAnimatorSimple.cs" />
<Compile Include="HUD.cs" />
<Compile Include="Huddle.cs" />
<Compile Include="HuddleButton.cs" />
<Compile Include="InputActions.cs" />
<Compile Include="InputControls.cs" />
<Compile Include="Interact.cs" />
<Compile Include="InteractionIconAnimator.cs" />
<Compile Include="Interactive.cs" />
<Compile Include="InteriorLights.cs" />
<Compile Include="Inventory.cs" />
<Compile Include="InventoryContainer.cs" />
<Compile Include="Item.cs" />
<Compile Include="ItemBook.cs" />
<Compile Include="ItemCard.cs" />
<Compile Include="ItemCollector.cs" />
<Compile Include="ItemEquipped.cs" />
<Compile Include="ItemLabelGrid.cs" />
<Compile Include="Journal.cs" />
<Compile Include="JournalScroll.cs" />
<Compile Include="KeyboardScript.cs" />
<Compile Include="KeyControl.cs" />
<Compile Include="KeyDrag.cs" />
<Compile Include="KeyDrop.cs" />
<Compile Include="LandingButtons.cs" />
<Compile Include="LandingSpot.cs" />
<Compile Include="LandingSpotController.cs" />
<Compile Include="LevelUp.cs" />
<Compile Include="Library.cs" />
<Compile Include="LibrarySetup.cs" />
<Compile Include="LineWave.cs" />
<Compile Include="LineWaveCollider.cs" />
<Compile Include="Links.cs" />
<Compile Include="ListenerQTE.cs" />
<Compile Include="LookAtCamera.cs" />
<Compile Include="LookAtController.cs" />
<Compile Include="LOS\AttackShapes.cs" />
<Compile Include="LOS\ILOSSource.cs" />
<Compile Include="LOS\LineOfSightCone.cs" />
<Compile Include="LOS\LOSBufferStorage.cs" />
<Compile Include="LOS\LOSCuller.cs" />
<Compile Include="LOS\LOSFinalResolve.cs" />
<Compile Include="LOS\LOSHelper.cs" />
<Compile Include="LOS\LOSLayerExcluder.cs" />
<Compile Include="LOS\LOSManager.cs" />
<Compile Include="LOS\LOSQualityLevel.cs" />
<Compile Include="LOS\LOSSource.cs" />
<Compile Include="LOS\Materials.cs" />
<Compile Include="LOS\PixelOperation.cs" />
<Compile Include="LOS\PointLightShadows.cs" />
<Compile Include="LOS\ShaderID.cs" />
<Compile Include="LOS\Shaders.cs" />
<Compile Include="LOS\Util.cs" />
<Compile Include="MainMenu.cs" />
<Compile Include="Manual.cs" />
<Compile Include="MapConfirm.cs" />
<Compile Include="MapExit.cs" />
<Compile Include="MapExitActions.cs" />
<Compile Include="MapExitIcon.cs" />
<Compile Include="MapPawn.cs" />
<Compile Include="MapPiece.cs" />
<Compile Include="MaskColors.cs" />
<Compile Include="meanPos.cs" />
<Compile Include="MechanimSounds.cs" />
<Compile Include="MenuCameraCrossFade.cs" />
<Compile Include="MenuInputActions.cs" />
<Compile Include="Merchant.cs" />
<Compile Include="MeshSaver.cs" />
<Compile Include="Minigame.cs" />
<Compile Include="MiniMap.cs" />
<Compile Include="Moonlight.cs" />
<Compile Include="MoonlightRevealer.cs" />
<Compile Include="MoonlightSystem.cs" />
<Compile Include="MouseOrbitImproved.cs" />
<Compile Include="MTE\TileContainer.cs" />
<Compile Include="MultiTargetGraphics.cs" />
<Compile Include="NGSSFrustumShadowsSS.cs" />
<Compile Include="Options.cs" />
<Compile Include="OverHeadUI.cs" />
<Compile Include="OverworldMap.cs" />
<Compile Include="OverworldMapMenu.cs" />
<Compile Include="ParticleSunRotation.cs" />
<Compile Include="PartyCollider.cs" />
<Compile Include="Pickups.cs" />
<Compile Include="Pin.cs" />
<Compile Include="PinHolder.cs" />
<Compile Include="PlayerBorders.cs" />
<Compile Include="PlayVideo.cs" />
<Compile Include="Pocket.cs" />
<Compile Include="Pointer.cs" />
<Compile Include="Portrait.cs" />
<Compile Include="Projectile.cs" />
<Compile Include="PromptActions.cs" />
<Compile Include="Prompts.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Puzzle.cs" />
<Compile Include="PuzzleActions.cs" />
<Compile Include="PuzzleListener.cs" />
<Compile Include="QTE.cs" />
<Compile Include="QuestEnd.cs" />
<Compile Include="QuestObjects.cs" />
<Compile Include="QuestTimePoint.cs" />
<Compile Include="QuipSet.cs" />
<Compile Include="RallyStage.cs" />
<Compile Include="RandomAnimationStart.cs" />
<Compile Include="RandomMaterial.cs" />
<Compile Include="Records.cs" />
<Compile Include="RenderPortraits.cs" />
<Compile Include="RenderPortraitSetup.cs" />
<Compile Include="rendertype.cs" />
<Compile Include="ResourceLocation.cs" />
<Compile Include="Rest.cs" />
<Compile Include="RoleSheet.cs" />
<Compile Include="Rope.cs" />
<Compile Include="RtsCamera.cs" />
<Compile Include="SaveKeeper.cs" />
<Compile Include="SaveLoad.cs" />
<Compile Include="SceneCamera.cs" />
<Compile Include="SceneInfo.cs" />
<Compile Include="SceneItem.cs" />
<Compile Include="SceneMap.cs" />
<Compile Include="SceneMapRender.cs" />
<Compile Include="ScrollRectNoDragging.cs" />
<Compile Include="SelectionBox.cs" />
<Compile Include="SelectionCircle.cs" />
<Compile Include="Sensory.cs" />
<Compile Include="SetSpellMaterial.cs" />
<Compile Include="ShadowCaster.cs" />
<Compile Include="ShadowCasterBaker.cs" />
<Compile Include="SkillBag.cs" />
<Compile Include="SkillButton.cs" />
<Compile Include="SoundSet.cs" />
<Compile Include="Spellcrafting.cs" />
<Compile Include="SpellVine.cs" />
<Compile Include="StackSplit.cs" />
<Compile Include="Stamina.cs" />
<Compile Include="Stats.cs" />
<Compile Include="StatusRing.cs" />
<Compile Include="StopMotionAnimations.cs" />
<Compile Include="StringFast.cs" />
<Compile Include="StringSplitter.cs" />
<Compile Include="Sunlight.cs" />
<Compile Include="TerrainDetailDistance.cs" />
<Compile Include="TextFieldBehavior.cs" />
<Compile Include="TextParser.cs" />
<Compile Include="TileEffects.cs" />
<Compile Include="TimedBreakable.cs" />
<Compile Include="TimelineIcon.cs" />
<Compile Include="TimeOfDay.cs" />
<Compile Include="Tooltip.cs" />
<Compile Include="ToonyColorsPro\Runtime\PlanarReflection.cs" />
<Compile Include="TranslateShaderOffset.cs" />
<Compile Include="UITriggerButton.cs" />
<Compile Include="UndergroundMap.cs" />
<Compile Include="UndergroundMapPiece.cs" />
<Compile Include="UnitySourceGeneratedAssemblyMonoScriptTypes_v1.cs" />
<Compile Include="UnityStandardAssets\ImageEffects\BlurOptimized.cs" />
<Compile Include="UnluckDistanceDisabler.cs" />
<Compile Include="Vignettes.cs" />
<Compile Include="Vine.cs" />
<Compile Include="WaterCollisions.cs" />
<Compile Include="WindowHandles.cs" />
<Compile Include="Windows.cs" />
<Compile Include="Wings.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,242 @@
using System;
using System.Collections;
using UnityEngine;
// Token: 0x02000015 RID: 21
public class AudioListenForMain : MonoBehaviour
{
// Token: 0x0600020F RID: 527 RVA: 0x0002C690 File Offset: 0x0002A890
private void Start()
{
this.coolAudio = base.gameObject.GetComponent<CoolAudioSource>();
this.coolAudio.audioSource.volume = 0f;
this.distance = this.coolAudio.audioSource.maxDistance;
this.offDistance = this.distance + 10f;
this.position = base.gameObject.transform.position;
this.maxAudioVolume = 1f;
if (this.coolAudio.is2D)
{
this.maxAudioVolume = 0.9f;
if (this.coolAudio.audioSource.clip.name.Contains("Bar"))
{
this.maxAudioVolume = 0.5f;
}
if (this.coolAudio.audioSource.clip.name.Contains("Rozafir"))
{
this.keepPlayingThroughInterior = true;
}
}
if (this.coolAudio.audioSource.clip.name.Contains("RozafirDrums"))
{
this.listenForCharacter = true;
this.overrideMainSoundtrack = true;
this.characterListenName = "RozafirDancerFlutist";
}
}
// Token: 0x06000210 RID: 528 RVA: 0x0002C7B4 File Offset: 0x0002A9B4
private void Update()
{
if (Links.x.hasMain)
{
if (!Records.x.inMenus && !Links.x.gaia.loadingCharacterCreation)
{
float sqrMagnitude = (Links.x.main.currentPosition - this.position).sqrMagnitude;
if (sqrMagnitude < this.distance * this.distance)
{
bool flag = false;
if (this.listenForCharacter)
{
if (!this.character)
{
this.character = Links.x.diorama.FindCharacterAnyState(this.characterListenName);
}
if (this.character && !this.character.dead && !this.character.stunned)
{
flag = true;
}
}
if (!this.inRange && (this.coolAudio.playEveryTimePlayerIsNear || this.endAudio == null) && (!this.listenForCharacter || flag))
{
this.coolAudio.audioSource.Play();
if (this.endAudio == null)
{
this.coolAudio.audioSource.volume = 0f;
}
this.inRange = true;
this.StartAudioBegin();
}
}
else if (this.inRange && sqrMagnitude > this.offDistance * this.offDistance && this.endAudio == null)
{
if (this.keepPlayingThroughInterior)
{
if (!(Links.x.rtsCamera.currentBoundsName == "interior_frog_bridgeA") && !Links.x.cameraEffects.transitioning)
{
this.StartAudioEnd();
}
}
else
{
this.StartAudioEnd();
}
}
}
if (this.playing && Links.x.gaia.loadingCharacterCreation)
{
this.StartAudioEnd();
}
}
}
// Token: 0x06000211 RID: 529 RVA: 0x0002C974 File Offset: 0x0002AB74
private void StartAudioBegin()
{
if (this.startAudio == null)
{
this.startAudio = this.AudioFadeIn();
base.StartCoroutine(this.startAudio);
}
}
// Token: 0x06000212 RID: 530 RVA: 0x0002C998 File Offset: 0x0002AB98
private void OnDisable()
{
if (this.endAudio != null)
{
base.StopCoroutine(this.endAudio);
this.endAudio = null;
}
if (this.inRange)
{
if (Links.x.hasMain && ((this.coolAudio.loopIt && this.overrideMainSoundtrack) || !this.coolAudio.loopIt))
{
Links.x.gaia.playingSoundtrackFromInWorld = false;
Links.x.gaia.SetEnvironmentPlaylist(Links.x.gameplay.sailing, Links.x.main.inTown, true);
}
this.inRange = false;
this.coolAudio.audioSource.Stop();
}
if (this.startAudio != null)
{
base.StopCoroutine(this.startAudio);
this.startAudio = null;
if (Links.x.hasMain && ((this.coolAudio.loopIt && this.overrideMainSoundtrack) || !this.coolAudio.loopIt))
{
Links.x.gaia.playingSoundtrackFromInWorld = false;
Links.x.gaia.SetEnvironmentPlaylist(Links.x.gameplay.sailing, Links.x.main.inTown, true);
}
this.inRange = false;
}
}
// Token: 0x06000213 RID: 531 RVA: 0x0002CADF File Offset: 0x0002ACDF
private IEnumerator AudioFadeIn()
{
if ((this.coolAudio.loopIt && this.overrideMainSoundtrack) || !this.coolAudio.loopIt)
{
Links.x.gaia.playingSoundtrackFromInWorld = true;
Links.x.gaia.FadeOutPlaylist(true, 0.5f);
}
float startValue = this.coolAudio.audioSource.volume;
float num = Links.x.options.soundVolume * this.maxAudioVolume;
float timeToLerp = 3f;
float percentage = 0f;
float startTime = Time.realtimeSinceStartup;
while (percentage < 1f)
{
num = Links.x.options.soundVolume;
num *= this.maxAudioVolume;
percentage = (Time.realtimeSinceStartup - startTime) / timeToLerp;
float num2 = Mathf.Lerp(startValue, num, percentage);
this.coolAudio.audioSource.volume = num2;
yield return null;
}
this.startAudio = null;
yield break;
}
// Token: 0x06000214 RID: 532 RVA: 0x0002CAEE File Offset: 0x0002ACEE
private void StartAudioEnd()
{
if (this.endAudio == null)
{
this.endAudio = this.AudioFadeOut();
base.StartCoroutine(this.endAudio);
}
}
// Token: 0x06000215 RID: 533 RVA: 0x0002CB11 File Offset: 0x0002AD11
private IEnumerator AudioFadeOut()
{
this.playing = false;
float startValue = this.coolAudio.audioSource.volume;
float endValue = 0f;
float timeToLerp = 3f;
float percentage = 0f;
float startTime = Time.realtimeSinceStartup;
while (percentage < 1f)
{
percentage = (Time.realtimeSinceStartup - startTime) / timeToLerp;
float num = Mathf.Lerp(startValue, endValue, percentage);
this.coolAudio.audioSource.volume = num;
yield return null;
}
if (Links.x.hasMain && ((this.coolAudio.loopIt && this.overrideMainSoundtrack) || !this.coolAudio.loopIt))
{
Links.x.gaia.playingSoundtrackFromInWorld = false;
Links.x.gaia.SetEnvironmentPlaylist(Links.x.gameplay.sailing, Links.x.main.inTown, true);
}
this.inRange = false;
this.coolAudio.audioSource.Stop();
if (!this.coolAudio.playEveryTimePlayerIsNear)
{
float num2 = Random.Range(3f, 5f) * 60f;
yield return new WaitForSeconds(num2);
}
this.endAudio = null;
yield break;
}
// Token: 0x040003D7 RID: 983
public CoolAudioSource coolAudio;
// Token: 0x040003D8 RID: 984
private float distance;
// Token: 0x040003D9 RID: 985
private float offDistance;
// Token: 0x040003DA RID: 986
private Vector3 position;
// Token: 0x040003DB RID: 987
public bool inRange;
// Token: 0x040003DC RID: 988
public bool playing;
// Token: 0x040003DD RID: 989
public bool keepPlayingThroughInterior;
// Token: 0x040003DE RID: 990
public bool listenForCharacter;
// Token: 0x040003DF RID: 991
public string characterListenName;
// Token: 0x040003E0 RID: 992
private IEnumerator startAudio;
// Token: 0x040003E1 RID: 993
private IEnumerator endAudio;
// Token: 0x040003E2 RID: 994
private float maxAudioVolume;
// Token: 0x040003E3 RID: 995
private Character character;
// Token: 0x040003E4 RID: 996
private bool overrideMainSoundtrack;
}

View File

@@ -0,0 +1,14 @@
using System;
using UnityEngine;
// Token: 0x0200008B RID: 139
public class AudioSourceDebugging : MonoBehaviour
{
// Token: 0x06000DDB RID: 3547 RVA: 0x00105600 File Offset: 0x00103800
private void Update()
{
}
// Token: 0x04001664 RID: 5732
private AudioSource[] sources;
}

View File

@@ -0,0 +1,86 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
// Token: 0x02000095 RID: 149
public class Bag : MonoBehaviour
{
// Token: 0x06000E5E RID: 3678 RVA: 0x0011444A File Offset: 0x0011264A
private void Awake()
{
this.Setup();
}
// Token: 0x06000E5F RID: 3679 RVA: 0x00114454 File Offset: 0x00112654
public void Setup()
{
if (this.gridTrs.Count == 0)
{
foreach (object obj in this.gridTr)
{
Transform transform = (Transform)obj;
if (transform != this.gridTr)
{
this.gridImg.Add(transform.gameObject.GetComponent<Image>());
this.gridTrs.Add(transform);
this.gridState.Add(false);
transform.gameObject.GetComponent<Image>().sprite = this.emptySprite;
}
}
}
}
// Token: 0x06000E60 RID: 3680 RVA: 0x00114508 File Offset: 0x00112708
public void End()
{
for (int i = 0; i < this.gridImg.Count; i++)
{
if (!this.gridImg[i].sprite != this.emptySprite)
{
this.gridImg[i].sprite = this.emptySprite;
}
this.gridState[i] = false;
}
}
// Token: 0x06000E61 RID: 3681 RVA: 0x00114578 File Offset: 0x00112778
public Vector3 SubtractVectors(Vector3 a, Vector3 b)
{
Vector3 vector;
vector.x = a.x - b.x;
vector.y = a.y - b.y;
vector.z = a.z - b.z;
return vector;
}
// Token: 0x040016D9 RID: 5849
public Transform gridTr;
// Token: 0x040016DA RID: 5850
public int gridAmt;
// Token: 0x040016DB RID: 5851
public int mainBagX = 6;
// Token: 0x040016DC RID: 5852
public int mainBagY = 6;
// Token: 0x040016DD RID: 5853
public List<Image> gridImg = new List<Image>();
// Token: 0x040016DE RID: 5854
public List<bool> gridState = new List<bool>();
// Token: 0x040016DF RID: 5855
public List<Transform> gridTrs = new List<Transform>();
// Token: 0x040016E0 RID: 5856
public List<int> dragHoverImg = new List<int>();
// Token: 0x040016E1 RID: 5857
public bool secondary;
// Token: 0x040016E2 RID: 5858
public Sprite emptySprite;
}

View File

@@ -0,0 +1,37 @@
using System;
using UnityEngine;
// Token: 0x020000FB RID: 251
public class BakedMeshAnimation : MonoBehaviour
{
// Token: 0x040025D0 RID: 9680
public Mesh[] meshes;
// Token: 0x040025D1 RID: 9681
public float playSpeed = 30f;
// Token: 0x040025D2 RID: 9682
[HideInInspector]
public Renderer rendererComponent;
// Token: 0x040025D3 RID: 9683
public bool randomStartFrame = true;
// Token: 0x040025D4 RID: 9684
public bool loop = true;
// Token: 0x040025D5 RID: 9685
public bool pingPong;
// Token: 0x040025D6 RID: 9686
public bool playOnAwake = true;
// Token: 0x040025D7 RID: 9687
public Transform transformCache;
// Token: 0x040025D8 RID: 9688
public int transitionFrame;
// Token: 0x040025D9 RID: 9689
public int crossfadeFrame;
}

View File

@@ -0,0 +1,387 @@
using System;
using System.Collections.Generic;
using UnityEngine;
// Token: 0x020000FC RID: 252
public class BakedMeshAnimator : MonoBehaviour
{
// Token: 0x060015A7 RID: 5543 RVA: 0x0019B24C File Offset: 0x0019944C
private void Awake()
{
this.tr = base.transform;
this.currentAnimation = Mathf.Clamp(this.startAnimation, 0, this.animations.Length - 1);
if (this.animationMeshRenderer == null)
{
this.animationMeshRenderer = base.GetComponent<MeshRenderer>();
}
if (this.animationMeshRenderer == null)
{
Debug.LogError("BakedMeshAnimator: " + ((this != null) ? this.ToString() : null) + " has no assigned MeshRenderer!");
}
this.meshFilter = this.animationMeshRenderer.GetComponent<MeshFilter>();
this.meshCacheCount = this.animations[this.currentAnimation].meshes.Length;
this.currentSpeed = this.animations[this.currentAnimation].playSpeed;
this.CreateCrossFadeMesh();
this.StartCrossfade();
if (this.meshFilter.sharedMesh == null)
{
this.meshFilter.sharedMesh = this.animations[0].meshes[0];
}
}
// Token: 0x060015A8 RID: 5544 RVA: 0x0019B346 File Offset: 0x00199546
public void AnimateUpdate()
{
if (this.animations.Length == 0)
{
return;
}
this.Animate();
}
// Token: 0x060015A9 RID: 5545 RVA: 0x0019B358 File Offset: 0x00199558
public void SetAnimation(int _animation, int _transitionFrame)
{
if (this.currentAnimation == _animation)
{
return;
}
this.transitionFrame = _transitionFrame;
this.anim = _animation;
this.SetAnimCommon();
}
// Token: 0x060015AA RID: 5546 RVA: 0x0019B378 File Offset: 0x00199578
public void SetAnimation(int _animation)
{
if (this.currentAnimation == _animation)
{
return;
}
this.transitionFrame = this.animations[this.currentAnimation].transitionFrame;
this.anim = _animation;
this.SetAnimCommon();
}
// Token: 0x060015AB RID: 5547 RVA: 0x0019B3A9 File Offset: 0x001995A9
private void SetAnimCommon()
{
base.enabled = true;
this.transitioning = true;
this.StartCrossfade();
}
// Token: 0x060015AC RID: 5548 RVA: 0x0019B3C0 File Offset: 0x001995C0
public void Animate()
{
if (!this.animationMeshRenderer.isVisible)
{
return;
}
Vector3 cameraTargetPosition = Links.x.rtsCamera.cameraTargetPosition;
cameraTargetPosition.y = this.tr.position.y;
if ((this.tr.position - cameraTargetPosition).sqrMagnitude > 1600f)
{
return;
}
if (this.transitioning)
{
if (this.crossfade || (int)this.currentFrame == this.transitionFrame || this.failsafe > this.transitionFailsafe)
{
this.failsafe = 0f;
this.transitioning = false;
this.currentAnimation = this.anim;
this.meshCacheCount = this.animations[this.currentAnimation].meshes.Length;
this.currentSpeed = this.animations[this.currentAnimation].playSpeed;
if (Time.time < 1f && this.animations[this.currentAnimation].randomStartFrame)
{
this.currentFrame = (float)Random.Range(this.meshCacheCount, 0);
}
else if (this.crossfade)
{
this.currentFrame = (float)this.animations[this.currentAnimation].crossfadeFrame;
}
else
{
this.currentFrame = (float)this.animations[this.currentAnimation].transitionFrame;
}
}
else
{
this.failsafe += Time.deltaTime;
}
}
if (!this.doCrossfade)
{
if (this.animations[this.currentAnimation].pingPong)
{
this.PingPongFrame();
}
else
{
this.NextFrame();
}
if (this.currentFrameInt != (int)this.currentFrame)
{
this.currentFrameInt = (int)this.currentFrame;
if (this.crossfade && this.crossfadeNormalFix)
{
this.animations[this.currentAnimation].meshes[(int)this.currentFrame].GetVertices(this.norms);
this.crossfadeMeshEnd.SetVertices(this.norms);
}
else
{
this.meshFilter.sharedMesh = this.animations[this.currentAnimation].meshes[(int)this.currentFrame];
}
}
}
this.UpdateCrossfade();
}
// Token: 0x060015AD RID: 5549 RVA: 0x0019B5EC File Offset: 0x001997EC
public bool NextFrame()
{
this.currentFrame += this.currentSpeed * Time.deltaTime * this.playSpeedMultiplier;
if (this.currentFrame > (float)(this.meshCacheCount + 1))
{
this.currentFrame = 0f;
if (!this.animations[this.currentAnimation].loop)
{
base.enabled = false;
}
return true;
}
if (this.currentFrame >= (float)this.meshCacheCount)
{
this.currentFrame = (float)this.meshCacheCount - this.currentFrame;
if (!this.animations[this.currentAnimation].loop)
{
base.enabled = false;
}
return true;
}
return false;
}
// Token: 0x060015AE RID: 5550 RVA: 0x0019B694 File Offset: 0x00199894
public bool PingPongFrame()
{
if (this.pingPongToggle)
{
this.currentFrame += this.currentSpeed * Time.deltaTime * this.playSpeedMultiplier;
}
else
{
this.currentFrame -= this.currentSpeed * Time.deltaTime * this.playSpeedMultiplier;
}
if (this.currentFrame <= 0f)
{
this.currentFrame = 0f;
this.pingPongToggle = true;
return true;
}
if (this.currentFrame >= (float)this.meshCacheCount)
{
this.pingPongToggle = false;
this.currentFrame = (float)(this.meshCacheCount - 1);
return true;
}
return false;
}
// Token: 0x060015AF RID: 5551 RVA: 0x0019B734 File Offset: 0x00199934
public void SetSpeedMultiplier(float speed)
{
this.playSpeedMultiplier = speed;
}
// Token: 0x060015B0 RID: 5552 RVA: 0x0019B740 File Offset: 0x00199940
private void CrossfadeInit()
{
if (this.vertsDiff == null)
{
this.vertsDiff = new Vector3[this.vertsStart.Count];
}
this.crossfadeMestTo.GetVertices(this.meshVerts);
for (int i = 0; i < this.vertsStart.Count; i++)
{
this.vertsDiff[i] = this.meshVerts[i] - this.vertsStart[i];
}
}
// Token: 0x060015B1 RID: 5553 RVA: 0x0019B7BC File Offset: 0x001999BC
private void CreateCrossFadeMesh()
{
if (!this.crossfade)
{
return;
}
this.crossfadeMeshStart = this.meshFilter.sharedMesh;
this.crossfadeMeshStart.GetVertices(this.vertsStart);
if (this.crossfadeMeshEnd == null)
{
this.crossfadeMeshEnd = new Mesh();
this.crossfadeMeshEnd.MarkDynamic();
this.crossfadeMeshEnd.SetVertices(this.vertsStart);
this.crossfadeMeshEnd.triangles = this.crossfadeMeshStart.triangles;
this.crossfadeMeshEnd.uv = this.crossfadeMeshStart.uv;
this.crossfadeMeshStart.GetNormals(this.norms);
this.crossfadeMeshEnd.SetNormals(this.norms);
}
}
// Token: 0x060015B2 RID: 5554 RVA: 0x0019B878 File Offset: 0x00199A78
private void StartCrossfade()
{
if (!this.crossfade)
{
return;
}
this.crossfadeMeshStart = this.meshFilter.sharedMesh;
this.crossfadeMeshStart.GetVertices(this.vertsStart);
this.doCrossfade = true;
this.crossfadeWeight = 0f;
this.crossfadeMeshEnd.SetVertices(this.vertsStart);
this.meshFilter.mesh = this.crossfadeMeshEnd;
this.crossfadeMeshStart.GetVertices(this.vertsStart);
if (this.vertsCurrent == null)
{
this.vertsCurrent = new Vector3[this.vertsStart.Count];
}
}
// Token: 0x060015B3 RID: 5555 RVA: 0x0019B914 File Offset: 0x00199B14
private void UpdateCrossfade()
{
if (!this.crossfade)
{
return;
}
this.nextUpdate += Time.deltaTime;
if (this.nextUpdate < this.crossfadeFrequency)
{
return;
}
this.nextUpdate = 0f;
if (this.crossfadeWeight >= 1f)
{
this.doCrossfade = false;
return;
}
this.crossfadeMestTo = this.animations[this.currentAnimation].meshes[this.animations[this.currentAnimation].crossfadeFrame];
if (this.crossfadeWeight == 0f)
{
this.CrossfadeInit();
}
for (int i = 0; i < this.vertsCurrent.Length; i++)
{
this.vertsCurrent[i] = this.vertsStart[i];
}
if (this.vertsDiff.Length != this.vertsStart.Count)
{
return;
}
for (int j = 0; j < this.vertsCurrent.Length; j++)
{
this.vertsCurrent[j] += this.vertsDiff[j] * this.crossfadeWeight;
}
this.crossfadeMeshEnd.SetVertices(this.vertsCurrent);
this.crossfadeWeight += this.crossfadeWeightAdd;
}
// Token: 0x040025DA RID: 9690
public MeshRenderer animationMeshRenderer;
// Token: 0x040025DB RID: 9691
public BakedMeshAnimation[] animations;
// Token: 0x040025DC RID: 9692
public int startAnimation;
// Token: 0x040025DD RID: 9693
private int currentAnimation;
// Token: 0x040025DE RID: 9694
private MeshFilter meshFilter;
// Token: 0x040025DF RID: 9695
public float currentFrame;
// Token: 0x040025E0 RID: 9696
private int currentFrameInt;
// Token: 0x040025E1 RID: 9697
private float currentSpeed;
// Token: 0x040025E2 RID: 9698
private bool pingPongToggle;
// Token: 0x040025E3 RID: 9699
public float playSpeedMultiplier = 1f;
// Token: 0x040025E4 RID: 9700
private int meshCacheCount;
// Token: 0x040025E5 RID: 9701
public float transitionFailsafe = 0.4f;
// Token: 0x040025E6 RID: 9702
private float failsafe;
// Token: 0x040025E7 RID: 9703
private int transitionFrame;
// Token: 0x040025E8 RID: 9704
private int anim;
// Token: 0x040025E9 RID: 9705
private bool transitioning = true;
// Token: 0x040025EA RID: 9706
private Transform tr;
// Token: 0x040025EB RID: 9707
public bool crossfade;
// Token: 0x040025EC RID: 9708
public bool crossfadeNormalFix;
// Token: 0x040025ED RID: 9709
public float crossfadeFrequency = 0.05f;
// Token: 0x040025EE RID: 9710
public float crossfadeWeightAdd = 0.221f;
// Token: 0x040025EF RID: 9711
private bool doCrossfade;
// Token: 0x040025F0 RID: 9712
private float crossfadeWeight = 1f;
// Token: 0x040025F1 RID: 9713
private Mesh crossfadeMestTo;
// Token: 0x040025F2 RID: 9714
private Mesh crossfadeMeshStart;
// Token: 0x040025F3 RID: 9715
private Mesh crossfadeMeshEnd;
// Token: 0x040025F4 RID: 9716
private List<Vector3> vertsStart = new List<Vector3>();
// Token: 0x040025F5 RID: 9717
private List<Vector3> norms = new List<Vector3>();
// Token: 0x040025F6 RID: 9718
private Vector3[] vertsCurrent;
// Token: 0x040025F7 RID: 9719
private Vector3[] vertsDiff;
// Token: 0x040025F8 RID: 9720
private List<Vector3> meshVerts = new List<Vector3>();
// Token: 0x040025F9 RID: 9721
private float nextUpdate;
}

View File

@@ -0,0 +1,60 @@
using System;
using UnityEngine;
// Token: 0x020000FD RID: 253
public class BakedMeshAnimatorUpdater : MonoBehaviour
{
// Token: 0x060015B5 RID: 5557 RVA: 0x0019BAC8 File Offset: 0x00199CC8
private void Start()
{
if (this.updateChildren)
{
this.children = base.transform.GetComponentsInChildren<BakedMeshAnimator>();
for (int i = 0; i < this.children.Length; i++)
{
if (this.randomizeSpeed)
{
this.children[i].SetSpeedMultiplier(Random.Range(this.minSpeedMultiplier, this.maxSpeedMultiplier));
}
}
return;
}
this.animatedMesh = base.GetComponent<BakedMeshAnimator>();
if (this.randomizeSpeed)
{
this.animatedMesh.SetSpeedMultiplier(Random.Range(this.minSpeedMultiplier, this.maxSpeedMultiplier));
}
}
// Token: 0x060015B6 RID: 5558 RVA: 0x0019BB58 File Offset: 0x00199D58
private void Update()
{
if (this.updateChildren)
{
for (int i = 0; i < this.children.Length; i++)
{
this.children[i].AnimateUpdate();
}
return;
}
this.animatedMesh.AnimateUpdate();
}
// Token: 0x040025FA RID: 9722
private BakedMeshAnimator animatedMesh;
// Token: 0x040025FB RID: 9723
private BakedMeshAnimator[] children;
// Token: 0x040025FC RID: 9724
public bool updateChildren;
// Token: 0x040025FD RID: 9725
public bool randomizeSpeed;
// Token: 0x040025FE RID: 9726
public float minSpeedMultiplier = 1f;
// Token: 0x040025FF RID: 9727
public float maxSpeedMultiplier = 1f;
}

View File

@@ -0,0 +1,60 @@
using System;
using UnityEngine;
// Token: 0x02000096 RID: 150
public class Billboard : MonoBehaviour
{
// Token: 0x06000E63 RID: 3683 RVA: 0x00114611 File Offset: 0x00112811
private void OnEnable()
{
this.GetVariables();
}
// Token: 0x06000E64 RID: 3684 RVA: 0x0011461C File Offset: 0x0011281C
public void GetVariables()
{
if (!this.tr)
{
this.tr = base.transform;
}
if (Links.x.rallyStage.playing && this.inRally)
{
this.camTr = Links.x.rallyStage.rallyCamera.gameObject.transform;
}
else
{
this.camTr = Links.x.rtsCamera.tr;
}
this.forw = Vector3.forward;
this.up = Vector3.up;
this.hasVars = true;
}
// Token: 0x06000E65 RID: 3685 RVA: 0x001146B0 File Offset: 0x001128B0
private void LateUpdate()
{
if (!this.hasVars)
{
this.GetVariables();
}
this.tr.LookAt(this.tr.position + this.camTr.rotation * this.forw, this.camTr.rotation * this.up);
}
// Token: 0x040016E3 RID: 5859
private Transform tr;
// Token: 0x040016E4 RID: 5860
private Transform camTr;
// Token: 0x040016E5 RID: 5861
private Vector3 forw;
// Token: 0x040016E6 RID: 5862
private Vector3 up;
// Token: 0x040016E7 RID: 5863
private bool hasVars;
// Token: 0x040016E8 RID: 5864
public bool inRally;
}

View File

@@ -0,0 +1,25 @@
using System;
using UnityEngine;
// Token: 0x020000EF RID: 239
public class BirdMaterialChanger : MonoBehaviour
{
// Token: 0x0600154B RID: 5451 RVA: 0x001983D8 File Offset: 0x001965D8
private void Start()
{
this.ChangeMaterial();
}
// Token: 0x0600154C RID: 5452 RVA: 0x001983E0 File Offset: 0x001965E0
private void ChangeMaterial()
{
base.GetComponentInChildren<SkinnedMeshRenderer>().sharedMaterial = this.materials[BirdMaterialChanger.counter];
BirdMaterialChanger.counter++;
}
// Token: 0x04002529 RID: 9513
public Material[] materials;
// Token: 0x0400252A RID: 9514
private static int counter;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,19 @@
using System;
using UnityEngine;
// Token: 0x02000018 RID: 24
public class BoneListener : MonoBehaviour
{
// Token: 0x060002BE RID: 702 RVA: 0x00038B33 File Offset: 0x00036D33
private void Start()
{
}
// Token: 0x060002BF RID: 703 RVA: 0x00038B35 File Offset: 0x00036D35
private void OnCollisionEnter(Collision collision)
{
}
// Token: 0x040004ED RID: 1261
private float startTime;
}

View File

@@ -0,0 +1,670 @@
using System;
using System.Collections.Generic;
using DarkTonic.MasterAudio;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
// Token: 0x02000097 RID: 151
public class Books : MonoBehaviour
{
// Token: 0x06000E67 RID: 3687 RVA: 0x0011471A File Offset: 0x0011291A
private void Start()
{
this.tr = base.gameObject.transform;
}
// Token: 0x06000E68 RID: 3688 RVA: 0x00114730 File Offset: 0x00112930
public void CloseMenu()
{
if (Links.x.characterSheet.open)
{
MasterAudio.PlaySoundAndForget("Paper Open 2", 1f, new float?(1f), 0f, "", null);
}
this.ReturnSelected();
for (int i = 0; i < this.spells.Count; i++)
{
if (this.spells[i].star)
{
this.spells[i].star = null;
}
Links.x.cellar.ReturnPooledUIObject(49, this.spells[i].gameObject);
}
this.RemoveStars();
this.spells.Clear();
this.open = false;
this.anim.Play("CloseSubMenu");
Links.x.characterSheet.CheckLevelUp();
if (Links.x.joy)
{
Links.x.characterSheet.closeText.SetActive(true);
}
if (Links.x.joy)
{
Links.x.characterSheet.DraggingButtons(false);
}
if (Links.x.joy)
{
if (this.clickedOpen)
{
if (this.clickedOpen.activeSelf && this.clickedOpen.activeInHierarchy)
{
Links.x.gameplay.SetInteractableSelected(EventSystem.current, this.clickedOpen);
return;
}
Links.x.gameplay.SetInteractableSelected(EventSystem.current, Links.x.characterSheet.character.characterSheetPortrait.gameObject);
return;
}
else
{
Links.x.gameplay.SetInteractableSelected(EventSystem.current, Links.x.characterSheet.character.characterSheetPortrait.gameObject);
}
}
}
// Token: 0x06000E69 RID: 3689 RVA: 0x00114903 File Offset: 0x00112B03
public void OpenWords()
{
this.currentType = "Words";
this.SetGrid("Words", Links.x.characterSheet.character, false);
}
// Token: 0x06000E6A RID: 3690 RVA: 0x0011492C File Offset: 0x00112B2C
public void OpenSpells()
{
this.favoriteMessage.SetActive(false);
this.RemoveStars();
MasterAudio.PlaySoundAndForget("Paper Open", 1f, new float?(1f), 0f, "", null);
if (Links.x.arrowKit.open)
{
Links.x.arrowKit.CloseMenu();
}
if (Links.x.characterSheet.note.activeSelf)
{
Links.x.characterSheet.CloseNote();
}
this.currentType = "Spells";
this.SetGrid("Spells", Links.x.characterSheet.character, false);
Links.x.characterSheet.levelUpButton.SetActive(false);
if (Links.x.joy)
{
Links.x.characterSheet.closeText.SetActive(false);
}
if (Links.x.joy)
{
Links.x.characterSheet.DraggingButtons(true);
if (this.spells.Count > 0)
{
Links.x.gameplay.SetInteractableSelected(EventSystem.current, this.spells[0].gameObject);
}
}
if (Links.x.characterSheet.minstrel)
{
this.closeButton.SetActive(false);
}
else
{
this.closeButton.SetActive(true);
}
Links.x.characterSheet.SetPortraitNav(false);
if (Links.x.joy)
{
this.controllerSpellDelete.spriteAsset = Links.x.GetSpriteSheetAsset(Links.x.gameplay.currentSpriteSheetAsset);
this.str.Clear();
this.str.Append("<voffset=.4em><size=40><sprite=");
int num = Links.x.gameplay.GetControllerSprite("Action", Links.x.gameplay.controllerName);
this.str.Append(num);
this.str.Append("></size></voffset>Toggle Favorite ");
this.str.Append("<voffset=.4em><size=40><sprite=");
num = Links.x.gameplay.GetControllerSprite("Interact", Links.x.gameplay.controllerName);
this.str.Append(num);
this.str.Append("></size></voffset>Delete Spell ");
this.controllerSpellDelete.text = this.str.ToString();
return;
}
this.controllerSpellDelete.text = "";
}
// Token: 0x06000E6B RID: 3691 RVA: 0x00114BB0 File Offset: 0x00112DB0
public void OpenSongs()
{
this.controllerSpellDelete.text = "";
this.RemoveStars();
this.favoriteMessage.SetActive(false);
MasterAudio.PlaySoundAndForget("Paper Open", 1f, new float?(1f), 0f, "", null);
if (Links.x.arrowKit.open)
{
Links.x.arrowKit.CloseMenu();
}
if (Links.x.characterSheet.note.activeSelf)
{
Links.x.characterSheet.CloseNote();
}
this.autoCast.SetActive(false);
this.currentType = "Songs";
this.SetGrid("Songs", Links.x.characterSheet.character, false);
Links.x.characterSheet.levelUpButton.SetActive(false);
if (Links.x.joy)
{
Links.x.characterSheet.closeText.SetActive(false);
}
if (Links.x.joy)
{
Links.x.characterSheet.DraggingButtons(true);
if (this.spells.Count > 0 && !Links.x.characterSheet.minstrel)
{
Links.x.gameplay.SetInteractableSelected(EventSystem.current, this.spells[0].gameObject);
}
}
if (Links.x.characterSheet.minstrel)
{
this.closeButton.SetActive(false);
}
else
{
this.closeButton.SetActive(true);
}
this.knowledgeText.enabled = false;
this.krt.gameObject.SetActive(false);
Links.x.characterSheet.SetPortraitNav(false);
}
// Token: 0x06000E6C RID: 3692 RVA: 0x00114D74 File Offset: 0x00112F74
private void Update()
{
if (Links.x.characterSheet.open && (Links.x.characterSheet.character != this.character || this.doUpdate))
{
this.favoriteMessage.SetActive(false);
this.RemoveStars();
this.SetGrid(this.currentType, Links.x.characterSheet.character, false);
this.doUpdate = false;
}
}
// Token: 0x06000E6D RID: 3693 RVA: 0x00114DEB File Offset: 0x00112FEB
public void UpdateAbilityTriggers()
{
}
// Token: 0x06000E6E RID: 3694 RVA: 0x00114DF0 File Offset: 0x00112FF0
public void Equipped()
{
if (this.savedCharacter != Links.x.characterSheet.character)
{
this.abilityNames = Links.x.characterSheet.character.stats.abilityNames;
this.uniqueNames = Links.x.characterSheet.character.stats.uniqueNames;
this.spellLevels = Links.x.characterSheet.character.stats.abilityLevels;
this.abilityCosts = Links.x.characterSheet.character.stats.abilityCost;
this.abilityRows = Links.x.characterSheet.character.stats.abilityRows;
}
this.savedCharacter = Links.x.characterSheet.character;
this.songPointsText.text = Links.x.characterSheet.character.stats.songPoints.ToString();
}
// Token: 0x06000E6F RID: 3695 RVA: 0x00114EF8 File Offset: 0x001130F8
public void SetGrid(string type, Character c, bool allSpells)
{
this.ReturnSelected();
base.gameObject.SetActive(true);
this.open = true;
this.character = c;
if (this.savedCharacter != Links.x.characterSheet.character)
{
this.abilityNames = Links.x.characterSheet.character.stats.abilityNames;
this.uniqueNames = Links.x.characterSheet.character.stats.uniqueNames;
this.spellLevels = Links.x.characterSheet.character.stats.abilityLevels;
this.abilityCosts = Links.x.characterSheet.character.stats.abilityCost;
this.abilityRows = Links.x.characterSheet.character.stats.abilityRows;
}
this.savedCharacter = Links.x.characterSheet.character;
int count = this.abilityNames.Count;
if (this.spells.Count > 0)
{
for (int i = 0; i < this.spells.Count; i++)
{
if (this.spells[i].star)
{
this.spells[i].star = null;
}
Links.x.cellar.ReturnPooledUIObject(49, this.spells[i].gameObject);
}
this.spells.Clear();
}
if (allSpells)
{
this.headerText.text = c.stats.GetName() + "'s ";
TextMeshProUGUI textMeshProUGUI = this.headerText;
textMeshProUGUI.text += " Spell Variants";
}
if (type == "Spells")
{
this.pointsObject.SetActive(false);
this.knowledgeText.enabled = true;
this.knowledgeText.text = "";
this.knowledge = this.character.stats.knowledge;
this.str.Clear();
this.str.Append("\n\n<align=center><size=1.5em><font=Bold>Learned Effects</font></size></align>\n");
for (int j = 0; j < this.knowledge.Count; j++)
{
this.str.Append("<size=1.2em><font=Bold>");
Library.Pagan paganRow = Links.x.library.GetPaganRow(this.knowledge[j]);
this.str.Append(paganRow._DisplayName);
this.str.Append("</font></size>\n");
this.str.Append(paganRow._Description);
this.str.Append("\n\n");
}
if (this.knowledge.Count == 0)
{
this.str.Append("None\n");
}
this.str.Append("\n\n");
this.knowledgeText.text = this.str.ToString();
this.krt.sizeDelta = new Vector2(this.krt.sizeDelta.x, this.knowledgeText.preferredHeight);
}
else
{
this.pointsObject.SetActive(true);
}
if ((type == "Spells" && c.stats.HasSpellbook()) || (type == "Songs" && c.stats.HasSongbook()))
{
for (int k = 0; k < count; k++)
{
bool flag = false;
if (this.abilityRows[k]._IsSpell && allSpells)
{
flag = true;
}
string mainSkill = this.abilityRows[k]._MainSkill;
if (this.abilityRows[k]._IsSpell && type == "Spells" && !allSpells)
{
flag = true;
}
if (!this.abilityRows[k]._IsSpell && !this.abilityRows[k]._IsSong && !allSpells && type == "Words")
{
flag = true;
}
if (this.abilityRows[k]._IsSong && type == "Songs" && !allSpells)
{
flag = true;
}
if (flag)
{
GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(49);
pooledGameObject.SetActive(true);
pooledGameObject.transform.SetParent(this.gridTransform, false);
SkillButton component = pooledGameObject.GetComponent<SkillButton>();
component.inSpellMenu = false;
if (allSpells || type == "Spells")
{
component.abilityName = this.abilityNames[k];
component.uniqueName = this.uniqueNames[k];
component.index = k;
component.abilityCost = (float)((int)this.abilityCosts[k].x);
component.character = c;
component.spellStats = this.spellLevels[k];
if (allSpells)
{
component.inSpellMenu = true;
}
else
{
component.inSpellMenu = false;
}
if (this.character.stats.IsFavoriteSpell(component.uniqueName) && !component.star)
{
this.AddStar(component);
}
}
if (type == "Songs")
{
component.abilityName = this.abilityNames[k];
component.index = k;
component.character = c;
component.componentID = -1;
component.uniqueName = this.uniqueNames[k];
component.inSpellMenu = false;
}
if (type == "Words")
{
component.abilityName = this.abilityNames[k];
component.index = k;
component.character = c;
component.componentID = -1;
component.uniqueName = this.uniqueNames[k];
}
component.inWindow = false;
component.Setup(true, true);
this.spells.Add(component);
pooledGameObject.transform.localPosition = new Vector3(pooledGameObject.transform.localPosition.x, pooledGameObject.transform.localPosition.y, 0f);
}
}
}
if (this.spells.Count > 0)
{
this.noAbilitiesText.text = "";
this.headerText.text = c.stats.GetName() + "'s ";
if (type == "Spells")
{
TextMeshProUGUI textMeshProUGUI2 = this.headerText;
textMeshProUGUI2.text += "Spellbook";
}
if (type == "Songs")
{
TextMeshProUGUI textMeshProUGUI3 = this.headerText;
textMeshProUGUI3.text += "Songbook";
}
if (type == "Words")
{
TextMeshProUGUI textMeshProUGUI4 = this.headerText;
textMeshProUGUI4.text += " Words";
}
if (this.autoCast && !allSpells && this.currentType == "Spells")
{
this.autoCast.SetActive(true);
}
if (type == "Spells")
{
this.favoriteMessage.SetActive(true);
}
}
else
{
this.str.Clear();
this.str.Append(c.stats.GetName());
if (type == "Spells")
{
if (!c.stats.HasSpellbook())
{
this.str.Append(" doesn't have a spellbook");
}
else
{
this.str.Append(" has not crafted any spells yet");
}
this.headerText.text = "";
}
if (type == "Songs")
{
if (!c.stats.HasSongbook())
{
this.str.Append(" doesn't have a songbook");
}
else
{
this.str.Append(" hasn't learned any songs yet");
}
this.headerText.text = "";
}
if (type == "Words")
{
this.str.Append("Words of Power");
}
this.str.Append(".");
this.noAbilitiesText.text = this.str.ToString();
if (this.autoCast)
{
this.autoCast.SetActive(false);
}
}
if (this.empty && this.krt)
{
if (type == "Spells")
{
this.autoCast.transform.SetAsFirstSibling();
this.empty.gameObject.transform.SetAsLastSibling();
this.krt.gameObject.transform.SetAsLastSibling();
this.empty.SetActive(true);
this.krt.gameObject.SetActive(true);
this.favoriteMessage.transform.SetAsLastSibling();
}
else
{
this.krt.gameObject.SetActive(false);
this.empty.SetActive(false);
}
}
this.UpdateSelected();
}
// Token: 0x06000E70 RID: 3696 RVA: 0x00115818 File Offset: 0x00113A18
public void RemoveStars()
{
for (int i = 0; i < this.stars.Count; i++)
{
this.stars[i].SetActive(false);
this.stars[i].transform.SetParent(this.tr);
}
}
// Token: 0x06000E71 RID: 3697 RVA: 0x0011586C File Offset: 0x00113A6C
public void AddStar(SkillButton b)
{
GameObject gameObject = null;
bool flag = false;
for (int i = 0; i < this.stars.Count; i++)
{
if (!this.stars[i])
{
flag = true;
}
else if (!this.stars[i].activeSelf)
{
gameObject = this.stars[i];
break;
}
}
if (flag)
{
this.stars.RemoveAll((GameObject item) => item == null);
}
if (!gameObject)
{
gameObject = Object.Instantiate<GameObject>(this.stars[0], Vector3.zero, Quaternion.Euler(Vector3.zero), null);
this.stars.Add(gameObject);
}
b.star = gameObject;
b.star.SetActive(true);
b.star.transform.SetParent(b.transform);
b.star.transform.position = b.transform.position;
gameObject.transform.localScale = new Vector3(1f, 1f, 1f);
b.star.transform.localPosition = new Vector3(b.star.transform.localPosition.x, b.star.transform.localPosition.y, 0f);
}
// Token: 0x06000E72 RID: 3698 RVA: 0x001159D8 File Offset: 0x00113BD8
public void AddFavoriteSpell(SkillButton b)
{
if (!this.open)
{
return;
}
if (this.character.stats.IsFavoriteSpell(b.uniqueName))
{
this.RemoveFavoriteSpell(b);
return;
}
this.character.stats.AddFavoriteSpell(b.uniqueName);
if (!b.star)
{
this.AddStar(b);
}
}
// Token: 0x06000E73 RID: 3699 RVA: 0x00115A38 File Offset: 0x00113C38
public void RemoveFavoriteSpell(SkillButton b)
{
this.character.stats.RemoveFavoriteSpell(b.uniqueName);
if (b.star)
{
b.star.SetActive(false);
b.star = null;
}
}
// Token: 0x06000E74 RID: 3700 RVA: 0x00115A70 File Offset: 0x00113C70
public void UpdateSelected()
{
foreach (Image image in this.selectedImages)
{
image.enabled = false;
}
if (this.currentType == "Songs")
{
this.equippedList = this.character.stats.equippedSongList;
}
if (this.currentType == "Songs")
{
int num = 0;
int count = this.spells.Count;
for (int i = 0; i < count; i++)
{
if (this.equippedList.Contains(this.spells[i].uniqueName))
{
this.selectedImages[num].enabled = true;
this.selectedImages[num].gameObject.transform.SetParent(this.spells[i].iconBG.gameObject.transform, false);
this.selectedImages[num].gameObject.transform.localPosition = new Vector3(-6f, 4f, 0f);
num++;
}
}
}
this.Equipped();
}
// Token: 0x06000E75 RID: 3701 RVA: 0x00115BC0 File Offset: 0x00113DC0
public void ReturnSelected()
{
}
// Token: 0x06000E76 RID: 3702 RVA: 0x00115BC4 File Offset: 0x00113DC4
public void CloseSpellDelete()
{
this.deletePopup.SetActive(false);
if (Links.x.joy)
{
if (this.spells.Count > 0)
{
Links.x.gameplay.SetInteractableSelected(EventSystem.current, this.spells[0].gameObject);
return;
}
Links.x.gameplay.SetInteractableSelected(EventSystem.current, Links.x.characterSheet.character.characterSheetPortrait.gameObject);
}
}
// Token: 0x06000E77 RID: 3703 RVA: 0x00115C4A File Offset: 0x00113E4A
public void OpenSpellDelete(string spellname)
{
this.toDelete = spellname;
this.deletePopup.SetActive(true);
this.deletePopupText.text = "Are you sure you want to delete " + spellname + "?";
}
// Token: 0x06000E78 RID: 3704 RVA: 0x00115C7A File Offset: 0x00113E7A
public void Delete()
{
this.character.stats.RemoveSpell(this.toDelete);
this.SetGrid("Spells", this.character, false);
this.CloseSpellDelete();
}
// Token: 0x040016E9 RID: 5865
public List<Library.Abilities> abilityRows;
// Token: 0x040016EA RID: 5866
private List<string> uniqueNames;
// Token: 0x040016EB RID: 5867
private List<string> abilityNames;
// Token: 0x040016EC RID: 5868
private List<Vector2> abilityCosts;
// Token: 0x040016ED RID: 5869
private List<Vector4> spellLevels;
// Token: 0x040016EE RID: 5870
public List<SkillButton> spells = new List<SkillButton>();
// Token: 0x040016EF RID: 5871
public TextMeshProUGUI deletePopupText;
// Token: 0x040016F0 RID: 5872
public TextMeshProUGUI noAbilitiesText;
// Token: 0x040016F1 RID: 5873
public TextMeshProUGUI headerText;
// Token: 0x040016F2 RID: 5874
public TextMeshProUGUI songPointsText;
// Token: 0x040016F3 RID: 5875
public TextMeshProUGUI knowledgeText;
// Token: 0x040016F4 RID: 5876
public TextMeshProUGUI controllerSpellDelete;
// Token: 0x040016F5 RID: 5877
public GameObject deletePopup;
// Token: 0x040016F6 RID: 5878
private StringFast str = new StringFast(64);
// Token: 0x040016F7 RID: 5879
public string toDelete;
// Token: 0x040016F8 RID: 5880
public Character character;
// Token: 0x040016F9 RID: 5881
public Character savedCharacter;
// Token: 0x040016FA RID: 5882
public Transform gridTransform;
// Token: 0x040016FB RID: 5883
public Animator anim;
// Token: 0x040016FC RID: 5884
public string currentType;
// Token: 0x040016FD RID: 5885
public bool open;
// Token: 0x040016FE RID: 5886
public List<Image> selectedImages = new List<Image>();
// Token: 0x040016FF RID: 5887
private List<string> equippedList;
// Token: 0x04001700 RID: 5888
public GameObject pointsObject;
// Token: 0x04001701 RID: 5889
public bool doUpdate;
// Token: 0x04001702 RID: 5890
public GameObject clickedOpen;
// Token: 0x04001703 RID: 5891
public GameObject closeButton;
// Token: 0x04001704 RID: 5892
private List<string> knowledge;
// Token: 0x04001705 RID: 5893
public RectTransform krt;
// Token: 0x04001706 RID: 5894
public GameObject empty;
// Token: 0x04001707 RID: 5895
public GameObject autoCast;
// Token: 0x04001708 RID: 5896
public GameObject favoriteMessage;
// Token: 0x04001709 RID: 5897
public List<GameObject> stars = new List<GameObject>();
// Token: 0x0400170A RID: 5898
private Transform tr;
}

View File

@@ -0,0 +1,731 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Pathfinding;
using UnityEngine;
// Token: 0x02000019 RID: 25
public class Boro : MonoBehaviour
{
// Token: 0x060002C1 RID: 705 RVA: 0x00038B3F File Offset: 0x00036D3F
private void Start()
{
}
// Token: 0x060002C2 RID: 706 RVA: 0x00038B41 File Offset: 0x00036D41
public void Setup()
{
this.character = base.gameObject.GetComponent<Character>();
this.party = Links.x.portraitOrder;
}
// Token: 0x060002C3 RID: 707 RVA: 0x00038B64 File Offset: 0x00036D64
private void OnDisable()
{
this.Stop();
}
// Token: 0x060002C4 RID: 708 RVA: 0x00038B6C File Offset: 0x00036D6C
public void Call(Character callingParty)
{
if (this.corout == null && Links.x.gaia.pathfindingReady)
{
if (this.leaveCoroutine != null)
{
base.StopCoroutine(this.leaveCoroutine);
this.leaveCoroutine = null;
}
if (this.attempt == 0)
{
string text = "Calling " + Records.x.boroName + "...";
Links.x.gameFeed.AddFeed(text);
}
this.corout = this.FindSpot(callingParty, true);
base.StartCoroutine(this.corout);
}
}
// Token: 0x060002C5 RID: 709 RVA: 0x00038BFC File Offset: 0x00036DFC
public void Move(Character callingParty)
{
if (this.corout != null)
{
base.StopCoroutine(this.corout);
this.corout = null;
}
if (this.corout == null && Links.x.gaia.pathfindingReady)
{
this.corout = this.FindSpot(callingParty, true);
base.StartCoroutine(this.corout);
}
}
// Token: 0x060002C6 RID: 710 RVA: 0x00038C58 File Offset: 0x00036E58
private IEnumerator FindSpot(Character callingParty, bool instant)
{
float radius = 12f;
ConstantPath constPath = ConstantPath.ConstructFast(callingParty.node, Records.x.GetConstantPathRadius((int)radius), null);
this.SetNodeConstraint(null, false);
this.nodeConstraint.constrainWalkability = false;
constPath.nnConstraint = this.nodeConstraint;
AstarPath.StartPath(constPath, false);
yield return base.StartCoroutine(constPath.WaitForPath());
constPath.Claim(this);
this.allNodes = constPath.allNodes;
int num = this.allNodes.Count;
int num2 = num - 1;
this.SetNodeConstraint(this.character, true);
this.suitableNodes.Clear();
this.edgeNodes.Clear();
this.nearNodes.Clear();
radius *= Records.x.nodeSize;
for (int i = num2; i >= 0; i--)
{
GraphNode graphNode = this.allNodes[i];
if (((Vector3)graphNode.position - (Vector3)callingParty.node.position).sqrMagnitude < radius * radius && this.nodeConstraint.Suitable(graphNode))
{
this.suitableNodes.Add(graphNode);
}
}
constPath.Release(this, false);
num = this.suitableNodes.Count;
Vector3 position = callingParty.tr.position;
this.added.Clear();
for (int j = 0; j < num; j++)
{
this.added.Add(false);
}
for (int k = 0; k < 15; k++)
{
float num3 = float.PositiveInfinity;
int num4 = -1;
for (int l = 0; l < num; l++)
{
if (!this.added[l])
{
float sqrMagnitude = this.SubtractVectors(position, (Vector3)this.suitableNodes[l].position).sqrMagnitude;
if (sqrMagnitude < num3)
{
num3 = sqrMagnitude;
num4 = l;
}
}
}
if (num4 > -1)
{
this.added[num4] = true;
this.edgeNodes.Add(this.suitableNodes[num4]);
}
}
if (this.edgeNodes.Count > 0)
{
this.character.SetMeshState(false);
Links.x.gaia.boro.body.SetMeshState(false, true);
if (Links.x.gaia.boro.circleTr)
{
Links.x.gaia.boro.circleTr.gameObject.SetActive(false);
}
float num5 = Vector3.Distance(this.character.tr.position, callingParty.tr.position);
num5 *= 0.05f;
if (num5 < 1f)
{
num5 = 1f;
}
if (this.attempt == 0 && !instant)
{
yield return new WaitForSeconds(num5);
}
else if (this.attempt == 0 && instant)
{
yield return new WaitForSeconds(0.5f);
}
GraphNode graphNode2 = this.edgeNodes[this.edgeNodes.Count - 1];
int num6 = this.edgeNodes.Count - 1;
this.attempt = 0;
if (this.character.inactive)
{
this.character.TurnScriptsOn();
}
this.boroInvisible = false;
Records.x.boroInvisible = this.boroInvisible;
this.character.tr.position = (Vector3)this.edgeNodes[num6].position;
this.character.SetRotation(Quaternion.LookRotation(callingParty.tr.position - this.character.tr.position), false, true);
this.character.FirstPosition(this.edgeNodes[num6]);
this.character.SetMeshState(true);
Links.x.gaia.boro.body.SetMeshState(true, true);
if (Links.x.gaia.boro.circleTr)
{
Links.x.gaia.boro.circleTr.gameObject.SetActive(true);
}
Links.x.gaia.boro.body.SeeThroughColliders(true);
Links.x.gaia.boro.thisCollider.enabled = true;
this.character.PlaySoundFX(0, 6);
Links.x.hudControl.ToggleBoroButtonSprite();
}
else if (this.attempt < 5)
{
this.attempt++;
yield return new WaitForSeconds(0.5f);
this.corout = null;
this.Call(callingParty);
}
else
{
Links.x.hudControl.ToggleBoroButtonSprite();
Links.x.gameFeed.AddFeed("Boro cannot stand here");
Links.x.gameFeed.ShowNotice("Boro cannot find a place to stand here");
}
this.corout = null;
yield return new WaitForSeconds(0.1f);
yield break;
}
// Token: 0x060002C7 RID: 711 RVA: 0x00038C78 File Offset: 0x00036E78
public bool BoroNearby()
{
return this.character.sailing || (!this.boroInvisible && (Links.x.hasMain && (Links.x.main.currentPosition - this.character.tr.position).sqrMagnitude < 900f));
}
// Token: 0x060002C8 RID: 712 RVA: 0x00038CE0 File Offset: 0x00036EE0
public void StartLeaveWait()
{
if (this.leaveCoroutine == null)
{
this.leaveCoroutine = this.WaitToLeave(false);
base.StartCoroutine(this.leaveCoroutine);
}
}
// Token: 0x060002C9 RID: 713 RVA: 0x00038D04 File Offset: 0x00036F04
private IEnumerator WaitToLeave(bool fromButton)
{
Links.x.hudControl.ToggleBoroButtonSprite();
float timeToLerp = 3f;
float percentage = 0f;
float startTime = Time.time;
if (fromButton)
{
timeToLerp = 1f;
this.character.Flee(Links.x.main.node, false, Links.x.gameplay.seconds, 10f);
}
if (!Links.x.gaia.sceneLoaded)
{
timeToLerp = 0.0001f;
fromButton = true;
}
while (percentage < 1f && (!this.BoroNearby() || fromButton))
{
percentage = (Time.time - startTime) / timeToLerp;
yield return null;
}
if (!this.BoroNearby() || fromButton)
{
bool sceneLoaded = Links.x.gaia.sceneLoaded;
this.character.SetMeshState(false);
this.character.body.SetMeshState(false, sceneLoaded);
this.boroInvisible = true;
Records.x.boroInvisible = this.boroInvisible;
Links.x.gaia.boro.body.SeeThroughColliders(false);
Links.x.gaia.boro.thisCollider.enabled = false;
yield return new WaitForSeconds(0.5f);
this.character.RemoveLastNode(true);
this.character.TurnScriptsOff();
}
Links.x.hudControl.ToggleBoroButtonSprite();
this.leaveCoroutine = null;
yield break;
}
// Token: 0x060002CA RID: 714 RVA: 0x00038D1C File Offset: 0x00036F1C
public void Leave()
{
if (Records.x.partySailing)
{
return;
}
if (this.leaveCoroutine != null)
{
base.StopCoroutine(this.leaveCoroutine);
this.leaveCoroutine = null;
}
this.leaveCoroutine = this.WaitToLeave(true);
base.StartCoroutine(this.leaveCoroutine);
}
// Token: 0x060002CB RID: 715 RVA: 0x00038D6C File Offset: 0x00036F6C
public void BackToBeach()
{
if (this.coroutBack == null && Records.x.boroLastBeachPoint != Vector3.zero)
{
this.coroutBack = this.Back();
base.StartCoroutine(this.coroutBack);
return;
}
Links.x.gameFeed.AddFeed("Boro is busy");
}
// Token: 0x060002CC RID: 716 RVA: 0x00038DC5 File Offset: 0x00036FC5
private IEnumerator Back()
{
this.SetNodeConstraint(this.character, true);
GraphNode beachNode = this.character.NearNode(Records.x.boroLastBeachPoint, true, 0, -1, 0);
bool flag;
if (beachNode == null)
{
flag = false;
Links.x.gameFeed.AddFeed("Boro cannot find a place on beach");
Links.x.gameFeed.ShowNotice("Boro cannot find a place to stand");
}
else
{
flag = true;
}
if (flag)
{
this.character.SetMeshState(false);
Links.x.gaia.boro.body.SetMeshState(false, true);
if (Links.x.gaia.boro.circleTr)
{
Links.x.gaia.boro.circleTr.gameObject.SetActive(false);
}
float t = 0.5f;
yield return new WaitForSeconds(t);
this.character.tr.position = (Vector3)beachNode.position;
this.character.FirstPosition(beachNode);
yield return new WaitForSeconds(t);
this.character.SetMeshState(true);
Links.x.gaia.boro.body.SetMeshState(true, true);
if (Links.x.gaia.boro.circleTr)
{
Links.x.gaia.boro.circleTr.gameObject.SetActive(true);
}
this.character.PlaySoundFX(0, 6);
}
this.coroutBack = null;
yield break;
}
// Token: 0x060002CD RID: 717 RVA: 0x00038DD4 File Offset: 0x00036FD4
public void LeavingForCombat()
{
if (this.boroInvisible)
{
return;
}
if (this.character.sailing)
{
return;
}
if (this.coroutCombat != null)
{
base.StopCoroutine(this.coroutCombat);
this.coroutCombat = null;
}
if (this.coroutCombat == null && !this.boroInvisible)
{
this.savedNode = this.character.node;
this.coroutCombat = this.FindCombatRetreat(false, true);
base.StartCoroutine(this.coroutCombat);
}
}
// Token: 0x060002CE RID: 718 RVA: 0x00038E50 File Offset: 0x00037050
public void ComingBackFromCombat()
{
if (this.character.sailing)
{
return;
}
if (!Links.x.gaia.pathfindingReady)
{
return;
}
if (this.boroInvisible)
{
return;
}
if (this.coroutCombat != null)
{
base.StopCoroutine(this.coroutCombat);
this.coroutCombat = null;
}
if (this.coroutCombat == null && this.character.node == null)
{
this.coroutCombat = this.FindCombatRetreat(true, true);
base.StartCoroutine(this.coroutCombat);
return;
}
if (this.character.node != null)
{
this.character.TurnScriptsOn();
this.boroInvisible = false;
Records.x.boroInvisible = this.boroInvisible;
Links.x.gaia.boro.body.SetMeshState(true, true);
this.character.EndPath();
Links.x.gaia.boro.body.SeeThroughColliders(true);
Links.x.gaia.boro.thisCollider.enabled = true;
}
}
// Token: 0x060002CF RID: 719 RVA: 0x00038F5B File Offset: 0x0003715B
private IEnumerator FindCombatRetreat(bool state, bool instant)
{
bool enoughNodes = false;
float radius = 12f;
if (!state)
{
this.character.CircleAnimation("");
}
GraphNode centerNode = this.character.node;
if (state)
{
this.character.TurnScriptsOn();
this.character.FindCurrentNode(true);
}
if (this.character.node == null && Links.x.diorama.playerStartBoatDefault)
{
this.character.tr.position = Links.x.diorama.playerStartBoatDefault.position;
this.character.FirstPosition(null);
}
if (this.character.node == null)
{
Debug.Log("Sheep node is null");
this.character.SetMeshState(state);
Links.x.gaia.boro.body.SetMeshState(state, true);
if (!state)
{
this.boroInvisible = true;
}
else
{
this.boroInvisible = false;
}
Records.x.boroInvisible = this.boroInvisible;
if (this.boroInvisible)
{
Links.x.gaia.boro.body.SeeThroughColliders(false);
Links.x.gaia.boro.thisCollider.enabled = false;
}
else
{
Links.x.gaia.boro.body.SeeThroughColliders(true);
Links.x.gaia.boro.thisCollider.enabled = true;
}
}
else
{
if (state)
{
this.character.tr.position = (Vector3)this.character.node.position;
centerNode = this.savedNode;
}
ConstantPath constPath = ConstantPath.ConstructFast(centerNode, Records.x.GetConstantPathRadius((int)radius), null);
this.SetNodeConstraint(null, true);
this.nodeConstraint.constrainWalkability = false;
constPath.nnConstraint = this.nodeConstraint;
AstarPath.StartPath(constPath, false);
yield return base.StartCoroutine(constPath.WaitForPath());
constPath.Claim(this);
this.allNodes = constPath.allNodes;
int num = this.allNodes.Count;
int num2 = num - 1;
Vector3 zero = Vector3.zero;
Vector3 zero2 = Vector3.zero;
Vector3 zero3 = Vector3.zero;
Vector3 zero4 = Vector3.zero;
Vector3 forward = Vector3.forward;
Vector3 zero5 = Vector3.zero;
Vector3 zero6 = Vector3.zero;
this.SetNodeConstraint(this.character, true);
this.suitableNodes.Clear();
this.edgeNodes.Clear();
this.nearNodes.Clear();
radius *= Records.x.nodeSize;
if (!state)
{
for (int j = num2; j >= 0; j--)
{
GraphNode graphNode = this.allNodes[j];
if (((Vector3)graphNode.position - (Vector3)centerNode.position).sqrMagnitude < radius * radius && this.nodeConstraint.Suitable(graphNode))
{
this.suitableNodes.Add(graphNode);
}
}
}
else
{
for (int k = 0; k < num; k++)
{
GraphNode graphNode = this.allNodes[k];
if (((Vector3)graphNode.position - (Vector3)centerNode.position).sqrMagnitude < radius * radius && this.nodeConstraint.Suitable(graphNode))
{
this.suitableNodes.Add(graphNode);
}
}
}
num = this.suitableNodes.Count;
num2 = num - 1;
Vector3 position = this.character.tr.position;
for (int l = 0; l < num; l++)
{
if (!enoughNodes)
{
GraphNode graphNode = this.suitableNodes[l];
this.edgeNodes.Add(graphNode);
if (this.edgeNodes.Count >= 100)
{
enoughNodes = true;
break;
}
}
}
constPath.Release(this, false);
this.character.PlaySoundFX(0, 6);
int nodeIndex = -1;
if (this.edgeNodes.Count > 0)
{
bool foundPath = false;
int num3;
for (int i = 0; i < this.edgeNodes.Count; i = num3 + 1)
{
if (!foundPath)
{
ABPath p = ABPath.ConstructFast(this.character.node, this.edgeNodes[i], null);
p.nnConstraint = this.nodeConstraint;
AstarPath.StartPath(p, false);
yield return base.StartCoroutine(p.WaitForPath());
p.Claim(this);
if (!p.error)
{
foundPath = true;
nodeIndex = i;
}
p.Release(this, false);
p = null;
}
num3 = i;
}
}
GraphNode graphNode2 = null;
if (nodeIndex > -1)
{
graphNode2 = this.edgeNodes[nodeIndex];
}
if (graphNode2 == null || instant)
{
this.character.SetMeshState(state);
Links.x.gaia.boro.body.SetMeshState(state, true);
if (!state)
{
this.boroInvisible = true;
}
else
{
this.boroInvisible = false;
}
Records.x.boroInvisible = this.boroInvisible;
if (this.boroInvisible)
{
Links.x.gaia.boro.body.SeeThroughColliders(false);
Links.x.gaia.boro.thisCollider.enabled = false;
}
else
{
Links.x.gaia.boro.body.SeeThroughColliders(true);
Links.x.gaia.boro.thisCollider.enabled = true;
}
}
else
{
bool flag = true;
if (state)
{
flag = false;
}
this.character.MakePath(this.edgeNodes[nodeIndex], 10, false, flag, true);
yield return new WaitForSecondsRealtime(2f);
this.character.SetMeshState(state);
Links.x.gaia.boro.body.SetMeshState(state, true);
if (state)
{
this.character.CircleAnimation("");
}
if (!state)
{
this.boroInvisible = true;
}
else
{
this.boroInvisible = false;
}
Records.x.boroInvisible = this.boroInvisible;
if (this.boroInvisible)
{
Links.x.gaia.boro.body.SeeThroughColliders(false);
Links.x.gaia.boro.thisCollider.enabled = false;
}
else
{
Links.x.gaia.boro.body.SeeThroughColliders(true);
Links.x.gaia.boro.thisCollider.enabled = true;
}
if (!state)
{
yield return new WaitForSecondsRealtime(2f);
this.character.TargetReached();
this.character.RemoveLastNode(true);
this.character.TurnScriptsOff();
}
}
constPath = null;
}
Links.x.hudControl.ToggleBoroButtonSprite();
this.coroutCombat = null;
yield break;
}
// Token: 0x060002D0 RID: 720 RVA: 0x00038F78 File Offset: 0x00037178
private GraphNode GetSuitableNode()
{
for (int i = 0; i < this.edgeNodes.Count; i++)
{
if (this.nodeConstraint.Suitable(this.edgeNodes[i]))
{
return this.edgeNodes[i];
}
}
return null;
}
// Token: 0x060002D1 RID: 721 RVA: 0x00038FC2 File Offset: 0x000371C2
public void Stop()
{
this.attempt = 0;
if (this.corout != null)
{
base.StopCoroutine(this.corout);
this.corout = null;
}
if (this.coroutCombat != null)
{
base.StopCoroutine(this.coroutCombat);
this.coroutCombat = null;
}
}
// Token: 0x060002D2 RID: 722 RVA: 0x00039001 File Offset: 0x00037201
public void Sail()
{
}
// Token: 0x060002D3 RID: 723 RVA: 0x00039003 File Offset: 0x00037203
public void LevelUp()
{
}
// Token: 0x060002D4 RID: 724 RVA: 0x00039008 File Offset: 0x00037208
public void SetNodeConstraint(Character pathfinder, bool constrainTags)
{
this.nodeConstraint.constrainWalkability = true;
this.nodeConstraint.walkable = true;
this.nodeConstraint.constrainTags = constrainTags;
this.nodeConstraint.checkCircleID = 0;
if (!pathfinder)
{
this.nodeConstraint.passID = 0;
this.nodeConstraint.passID2 = 0;
this.nodeConstraint.checkConnections = 0;
this.nodeConstraint.constrainPenalty = 0;
}
else
{
this.nodeConstraint.passID = pathfinder.nodeStationaryID;
this.nodeConstraint.passID2 = pathfinder.nodeMovingID;
this.nodeConstraint.checkConnections = pathfinder.ConnectionNumber();
this.nodeConstraint.constrainPenalty = 0;
}
this.nodeConstraint.constrainToArea = -1;
}
// Token: 0x060002D5 RID: 725 RVA: 0x000390CC File Offset: 0x000372CC
public Vector3 CustomNormalize(Vector3 v)
{
double num = Math.Sqrt((double)(v.x * v.x + v.y * v.y + v.z * v.z));
if (num > 9.99999974737875E-06)
{
float num2 = (float)num;
v.x /= num2;
v.y /= num2;
v.z /= num2;
return v;
}
return Vector3.zero;
}
// Token: 0x060002D6 RID: 726 RVA: 0x00039143 File Offset: 0x00037343
public float GetDot(Vector3 vector1, Vector3 vector2)
{
return vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z;
}
// Token: 0x060002D7 RID: 727 RVA: 0x00039170 File Offset: 0x00037370
public Vector3 SubtractVectors(Vector3 a, Vector3 b)
{
Vector3 vector;
vector.x = a.x - b.x;
vector.y = a.y - b.y;
vector.z = a.z - b.z;
return vector;
}
// Token: 0x040004EE RID: 1262
private IEnumerator corout;
// Token: 0x040004EF RID: 1263
private IEnumerator coroutCombat;
// Token: 0x040004F0 RID: 1264
private IEnumerator coroutBack;
// Token: 0x040004F1 RID: 1265
private NNConstraint nodeConstraint = new NNConstraint();
// Token: 0x040004F2 RID: 1266
private List<GraphNode> allNodes;
// Token: 0x040004F3 RID: 1267
private Character character;
// Token: 0x040004F4 RID: 1268
private List<GraphNode> suitableNodes = new List<GraphNode>();
// Token: 0x040004F5 RID: 1269
private List<GraphNode> edgeNodes = new List<GraphNode>();
// Token: 0x040004F6 RID: 1270
private List<GraphNode> nearNodes = new List<GraphNode>();
// Token: 0x040004F7 RID: 1271
public int attempt;
// Token: 0x040004F8 RID: 1272
public bool nearbyDuringCombat;
// Token: 0x040004F9 RID: 1273
private List<Character> party;
// Token: 0x040004FA RID: 1274
private GraphNode savedNode;
// Token: 0x040004FB RID: 1275
public Vector3 lastBeachPoint;
// Token: 0x040004FC RID: 1276
public bool boroInvisible;
// Token: 0x040004FD RID: 1277
private List<bool> added = new List<bool>();
// Token: 0x040004FE RID: 1278
private IEnumerator leaveCoroutine;
}

View File

@@ -0,0 +1,160 @@
using System;
using UnityEngine;
// Token: 0x0200005C RID: 92
public class Breakable : MonoBehaviour
{
// Token: 0x04001034 RID: 4148
public int armor;
// Token: 0x04001035 RID: 4149
public int health = 1;
// Token: 0x04001036 RID: 4150
public GameObject linkedExit;
// Token: 0x04001037 RID: 4151
public Breakable.BreakableTypes type;
// Token: 0x04001038 RID: 4152
[Header("HOW TO BREAK IT")]
public Breakable.BreakableEffectRequired effectRequired;
// Token: 0x04001039 RID: 4153
public bool enemy;
// Token: 0x0400103A RID: 4154
[Header("WHAT'S INSIDE")]
public SceneItem.xmlNames itemA = SceneItem.xmlNames.None;
// Token: 0x0400103B RID: 4155
public int itemStackA;
// Token: 0x0400103C RID: 4156
public SceneItem.xmlNames itemB = SceneItem.xmlNames.None;
// Token: 0x0400103D RID: 4157
public int itemStackB;
// Token: 0x0400103E RID: 4158
public SceneItem.xmlNames itemC = SceneItem.xmlNames.None;
// Token: 0x0400103F RID: 4159
public int itemStackC;
// Token: 0x04001040 RID: 4160
public SceneItem.xmlNames itemD = SceneItem.xmlNames.None;
// Token: 0x04001041 RID: 4161
public int itemStackD;
// Token: 0x04001042 RID: 4162
public Breakable.BarrelLiquidTypes barrelLiquid;
// Token: 0x04001043 RID: 4163
[Header("If elyxir component")]
public Breakable.ComponentTypes component;
// Token: 0x04001044 RID: 4164
[Header("If puzzle connected")]
public Puzzle puzzle;
// Token: 0x04001045 RID: 4165
public Prompts prompt;
// Token: 0x020001BE RID: 446
public enum BreakableTypes
{
// Token: 0x04002BEA RID: 11242
Barrel,
// Token: 0x04002BEB RID: 11243
Fence,
// Token: 0x04002BEC RID: 11244
Gate,
// Token: 0x04002BED RID: 11245
Wall,
// Token: 0x04002BEE RID: 11246
Bramble,
// Token: 0x04002BEF RID: 11247
Plank,
// Token: 0x04002BF0 RID: 11248
Box,
// Token: 0x04002BF1 RID: 11249
Vase,
// Token: 0x04002BF2 RID: 11250
Urn,
// Token: 0x04002BF3 RID: 11251
Acorn,
// Token: 0x04002BF4 RID: 11252
Mushroom,
// Token: 0x04002BF5 RID: 11253
Shell,
// Token: 0x04002BF6 RID: 11254
Rock,
// Token: 0x04002BF7 RID: 11255
Frog,
// Token: 0x04002BF8 RID: 11256
Stick,
// Token: 0x04002BF9 RID: 11257
HollowStick,
// Token: 0x04002BFA RID: 11258
Berry,
// Token: 0x04002BFB RID: 11259
Egg,
// Token: 0x04002BFC RID: 11260
ThickBramble
}
// Token: 0x020001BF RID: 447
public enum BreakableEffectRequired
{
// Token: 0x04002BFE RID: 11262
Damage,
// Token: 0x04002BFF RID: 11263
Stuck,
// Token: 0x04002C00 RID: 11264
Cold,
// Token: 0x04002C01 RID: 11265
Fire
}
// Token: 0x020001C0 RID: 448
public enum BarrelLiquidTypes
{
// Token: 0x04002C03 RID: 11267
none,
// Token: 0x04002C04 RID: 11268
oil,
// Token: 0x04002C05 RID: 11269
sap,
// Token: 0x04002C06 RID: 11270
wine,
// Token: 0x04002C07 RID: 11271
lizard,
// Token: 0x04002C08 RID: 11272
spores
}
// Token: 0x020001C1 RID: 449
public enum ComponentTypes
{
// Token: 0x04002C0A RID: 11274
None,
// Token: 0x04002C0B RID: 11275
Acorn,
// Token: 0x04002C0C RID: 11276
Mushroom,
// Token: 0x04002C0D RID: 11277
Shell,
// Token: 0x04002C0E RID: 11278
Rock,
// Token: 0x04002C0F RID: 11279
Frog,
// Token: 0x04002C10 RID: 11280
Stick,
// Token: 0x04002C11 RID: 11281
HollowStick,
// Token: 0x04002C12 RID: 11282
Berry
}
}

View File

@@ -0,0 +1,920 @@
using System;
using System.Collections;
using System.Collections.Generic;
using DarkTonic.MasterAudio;
using Pathfinding;
using UnityEngine;
// Token: 0x0200001A RID: 26
public class BreakableActions : MonoBehaviour
{
// Token: 0x060002D9 RID: 729 RVA: 0x000391FC File Offset: 0x000373FC
private void Awake()
{
if (!this.fromSpell)
{
base.enabled = false;
}
base.gameObject.layer = 16;
this.saveName = base.gameObject.name;
this.mainCollider = base.gameObject.GetComponent<Collider>();
if (!this.mainCollider && base.transform.childCount > 0)
{
foreach (object obj in base.transform)
{
Collider component = ((Transform)obj).gameObject.GetComponent<Collider>();
if (component)
{
this.mainCollider = component;
}
}
}
this.pt = base.gameObject.transform.position;
}
// Token: 0x060002DA RID: 730 RVA: 0x000392D8 File Offset: 0x000374D8
private void OnEnable()
{
this.pt = base.gameObject.transform.position;
if (this.fromSpell)
{
this.destroyed = false;
if (this.renderers.Length == 0)
{
this.GetObjects();
}
this.mainCollider.enabled = true;
this.currentHealth = this.breakable.health;
this.UpdateAstar();
}
if (this.particles.Length != 0)
{
ParticleSystem[] array = this.particles;
for (int i = 0; i < array.Length; i++)
{
array[i].gameObject.SetActive(true);
}
}
if (this.breakable)
{
if (this.breakable.component != Breakable.ComponentTypes.None)
{
for (int j = 0; j < this.renderers.Length; j++)
{
this.renderers[j].enabled = true;
}
this.mainCollider.enabled = true;
}
if (this.breakable.enemy)
{
this.aiShouldBreakIt = true;
}
}
}
// Token: 0x060002DB RID: 731 RVA: 0x000393C3 File Offset: 0x000375C3
public void LoadGameSetup(int h)
{
this.currentHealth = h;
if (h <= 0 && this.resourceLocation == 0)
{
this.ClickToBreak(null, true, false);
}
}
// Token: 0x060002DC RID: 732 RVA: 0x000393E1 File Offset: 0x000375E1
public void NewGameSetup()
{
if (this.breakable.armor > 0)
{
this.currentHealth = this.breakable.health;
return;
}
this.currentHealth = 1;
}
// Token: 0x060002DD RID: 733 RVA: 0x0003940C File Offset: 0x0003760C
public void SetLayers(int x)
{
if (x == 6)
{
if (this.layers == null)
{
this.layers = new List<int>();
for (int i = 0; i < this.renderers.Length; i++)
{
if (this.renderers[i])
{
this.layers.Add(this.renderers[i].gameObject.layer);
if (this.renderers[i].gameObject.layer != 29)
{
this.renderers[i].gameObject.layer = 6;
}
}
else
{
this.layers.Add(0);
}
}
return;
}
}
else
{
for (int j = 0; j < this.renderers.Length; j++)
{
if (this.renderers[j])
{
this.renderers[j].gameObject.layer = this.layers[j];
}
}
}
}
// Token: 0x060002DE RID: 734 RVA: 0x000394F0 File Offset: 0x000376F0
public void Remove()
{
if (this.renderers.Length == 0)
{
this.GetObjects();
}
this.mainCollider.enabled = false;
Links.x.hudControl.AddRemoveInteraction(false, null, this, null, null, null, null, null);
base.enabled = true;
if (this.interactiveCharacterObject)
{
Object.Destroy(this.interactiveCharacterObject);
}
base.StartCoroutine(this.UpdatePath(true));
}
// Token: 0x060002DF RID: 735 RVA: 0x0003955C File Offset: 0x0003775C
public void GetNode()
{
if (!this.destroyed)
{
bool flag = this.fromSpell;
}
}
// Token: 0x060002E0 RID: 736 RVA: 0x00039570 File Offset: 0x00037770
public void GetObjects()
{
if (this.renderers.Length == 0)
{
this.renderers = base.gameObject.GetComponentsInChildren<Renderer>(false);
}
this.rigidbodies = base.gameObject.GetComponentsInChildren<Rigidbody>(true);
if (base.gameObject.transform.childCount > 0)
{
this.normal = base.gameObject.transform.GetChild(0).gameObject;
this.broken = base.gameObject.transform.GetChild(1).gameObject;
if (this.broken && (this.broken.gameObject.layer == 29 || this.broken.gameObject.name.Contains("Block")) && base.gameObject.transform.childCount > 2)
{
this.broken = base.gameObject.transform.GetChild(2).gameObject;
}
}
for (int i = 0; i < this.renderers.Length; i++)
{
if (this.renderers[i].gameObject.name.Contains("Blocker"))
{
this.renderers[i].gameObject.layer = 29;
}
}
this.pt = base.gameObject.transform.position;
}
// Token: 0x060002E1 RID: 737 RVA: 0x000396BF File Offset: 0x000378BF
public void GetDifferentRenderers(GameObject g)
{
this.renderers = g.GetComponentsInChildren<Renderer>(false);
}
// Token: 0x060002E2 RID: 738 RVA: 0x000396CE File Offset: 0x000378CE
public void OutOfRange()
{
if (this.inRangeFX)
{
Links.x.cellar.ReturnPooledGameObject(33, this.inRangeFX);
this.inRangeFX = null;
}
}
// Token: 0x060002E3 RID: 739 RVA: 0x000396FC File Offset: 0x000378FC
public void InRange()
{
if (!this.inRangeFX)
{
this.inRangeFX = Links.x.cellar.GetPooledGameObject(33);
this.inRangeFX.transform.position = base.transform.position + new Vector3(0f, 1f, 0f);
this.inRangeFX.SetActive(true);
}
}
// Token: 0x060002E4 RID: 740 RVA: 0x00039770 File Offset: 0x00037970
public void HoverIn(bool isMainHover)
{
if (this.renderers.Length == 0)
{
this.GetObjects();
}
if (!this.destroyed)
{
int num = 0;
if (this.mainCollider)
{
this.bounds = this.mainCollider.bounds;
}
else
{
this.bounds = default(Bounds);
if (this.renderers.Length != 0 && this.renderers[0])
{
this.bounds = this.renderers[0].bounds;
if (this.renderers.Length > 1)
{
int i = 1;
int num2 = this.renderers.Length;
while (i < num2)
{
if (this.renderers[i] && this.renderers[i].gameObject.layer != 29)
{
this.bounds.Encapsulate(this.renderers[i].bounds);
}
i++;
}
}
}
}
this.bounds.Expand(0.25f);
if (Records.x.pocketPause)
{
num = 2;
}
if (!this.bracket)
{
this.bracket = Links.x.cellar.GetBracket(num, this.bounds);
}
else
{
Links.x.cellar.SetBracketMaterial(num, this.bracket);
}
if (isMainHover)
{
Links.x.hoverObject = base.gameObject;
Shader.SetGlobalVector("_DoorLightPosition", this.bounds.center + Links.x.rtsCamera.gameObject.transform.forward * -2f);
Records.x.hoverLightColor = Color.white * 0.25f;
Shader.SetGlobalFloat("_DoorLightRange", 2f);
if (Records.x.pocketPause && !Links.x.gameplay.attackingCharacter.CanAttack())
{
bool rallyWheelOpen = Links.x.pocketWheel.rallyWheelOpen;
}
}
}
}
// Token: 0x060002E5 RID: 741 RVA: 0x00039964 File Offset: 0x00037B64
public void HoverOut()
{
if (Links.x.hoverObject == base.gameObject)
{
Links.x.hoverObject = null;
}
if (this.multiHover)
{
Links.x.combat.MultiHitCharacters(false);
Links.x.combat.MultiHitObjects(false, base.gameObject.transform.position, this, null, null);
this.multiHover = false;
Links.x.gameplay.CheckIfAnythingShouldRedoMultiTargetHover();
}
if (this.bracket)
{
Links.x.cellar.ReturnPooledGameObject(61, this.bracket);
this.bracket = null;
}
}
// Token: 0x060002E6 RID: 742 RVA: 0x00039A10 File Offset: 0x00037C10
public void CombatSheen(int num)
{
if (this.renderers.Length == 0)
{
this.GetObjects();
}
if (this.destroyed && num == 3)
{
return;
}
bool flag = false;
if (num == 3)
{
flag = true;
}
this.combatTargetID = num;
for (int i = 0; i < this.renderers.Length; i++)
{
if (this.renderers[i].gameObject.layer != 29)
{
this.mats = this.renderers[i].materials;
foreach (Material material in this.mats)
{
this.sheen = 0f;
if (flag)
{
this.sheen = 1f;
}
material.SetFloat("_InCombatBubble", this.sheen);
}
}
}
}
// Token: 0x060002E7 RID: 743 RVA: 0x00039AC8 File Offset: 0x00037CC8
public void Damage(Character party)
{
GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(60);
pooledGameObject.transform.position = base.gameObject.transform.position + new Vector3(0f, 1f, 0f);
pooledGameObject.SetActive(true);
}
// Token: 0x060002E8 RID: 744 RVA: 0x00039B20 File Offset: 0x00037D20
public void Bend()
{
if (this.currentHealth < this.breakable.health && !this.destroyed && this.currentHealth > 0)
{
if (this.timeSinceHeal == 0f)
{
this.timeSinceHeal = Links.x.gameplay.seconds;
}
if (Links.x.gameplay.seconds > this.timeSinceHeal + 100f || this.timeSinceHeal == 0f)
{
this.timeSinceHeal = Links.x.gameplay.seconds;
float num = (float)this.breakable.health / 5f;
this.currentHealth += Mathf.RoundToInt(num);
Vector3 position = this.mainCollider.gameObject.transform.position;
Vector3 vector = Links.x.worldCamera.WorldToScreenPoint(position);
vector.z = 0f;
vector.x = vector.x * (1920f / (float)Screen.width) - 960f;
vector.y = vector.y * (Links.x.canvasRT.sizeDelta.y / (float)Screen.height) - Links.x.canvasRT.sizeDelta.y / 2f;
Links.x.repairFX.localPosition = vector;
Links.x.repairFX.gameObject.SetActive(true);
Links.x.repairFX.gameObject.GetComponent<HannahAnimator>().Play("Idle");
string text = "Repair 1";
if (Random.Range(0, 2) == 0)
{
text = "Repair 2";
}
if (Random.Range(0, 3) == 0)
{
text = "Repair 3";
}
MasterAudio.PlaySound3DAtVector3AndForget("Interactives", base.gameObject.transform.position, Random.Range(0.7f, 0.9f), new float?(1f), 0f, text, null);
if (this.currentHealth == this.breakable.health)
{
this.timeSinceHeal = 0f;
}
}
}
}
// Token: 0x060002E9 RID: 745 RVA: 0x00039D44 File Offset: 0x00037F44
public void ClickToBreak(Character party, bool fromSave, bool fromKick)
{
this.kicked = fromKick;
if (!this.destroyed)
{
this.destroyed = true;
if (base.gameObject.activeSelf)
{
base.StartCoroutine(this.Breaking(party, fromSave, this.kicked));
}
if (!fromSave && this.breakable.puzzle)
{
this.breakable.puzzle.gameObject.GetComponent<PuzzleActions>().BreakablePuzzle(false);
}
}
}
// Token: 0x060002EA RID: 746 RVA: 0x00039DB9 File Offset: 0x00037FB9
private IEnumerator Breaking(Character party, bool fromSave, bool fromKick)
{
if (this.renderers.Length == 0)
{
this.GetObjects();
}
if (!fromSave)
{
while (Links.x.combat.rallyTarget)
{
yield return null;
}
}
if (!fromSave && party)
{
this.OutOfRange();
if (this.breakable.armor == 0 && !Records.x.pocketPause && fromKick)
{
while (party.moving)
{
yield return null;
}
party.TargetReached();
party.alwaysTurn = true;
party.SetRotation(Quaternion.LookRotation(base.gameObject.transform.position - party.tr.position), false, true);
if (this.resourceLocation == -1)
{
party.EndTurning(false);
party.PlayAnimation("Kick", 0f);
Links.x.sensory.LookAtObject(base.transform, 15f, false, party, 4f, 0.5f, null, 0);
}
else
{
party.EndTurning(false);
party.PlayAnimation("Use", 0f);
}
}
}
if (!fromSave)
{
this.HoverOut();
}
bool canBreak = true;
if (!fromSave && party && !canBreak)
{
this.destroyed = false;
}
if (!fromSave && this.breakable.armor == 0 && !Records.x.pocketPause && fromKick)
{
yield return new WaitForSeconds(0.25f);
party.inAction = false;
}
if (!fromSave)
{
Links.x.sensory.AddNoise(party.gameObject, party.node, "Break", party);
}
if (canBreak)
{
if (this.normal)
{
this.normal.gameObject.SetActive(false);
}
if (!fromSave)
{
if (this.broken)
{
this.broken.gameObject.SetActive(true);
}
if (this.resourceLocation >= 0)
{
Links.x.diorama.ReturnResource(this.resourceLocation, base.gameObject);
if (this.breakable.component == Breakable.ComponentTypes.Acorn || this.breakable.component == Breakable.ComponentTypes.Berry || this.breakable.component == Breakable.ComponentTypes.Frog || this.breakable.component == Breakable.ComponentTypes.Mushroom || this.breakable.component == Breakable.ComponentTypes.Rock)
{
this.itemA = this.breakable.itemA.ToString();
if (this.itemA != "" && this.itemA != "None")
{
Library.Inventory invRowFromName = Links.x.library.GetInvRowFromName(this.itemA);
if (invRowFromName != null)
{
Item item;
ItemEquipped itemEquipped;
Links.x.inventory.AddFromGround(null, null, 0, false, 0f, invRowFromName._ID, 1, Vector3.zero, Vector3.zero, new Vector4((float)invRowFromName._DurabilityMax, 0f, 0f, 0f), party, true, false, out item, out itemEquipped);
}
if (this.breakable.component == Breakable.ComponentTypes.Frog)
{
party.StartQuip("Got it!");
}
}
}
if (this.breakable.component == Breakable.ComponentTypes.Stick || this.breakable.component == Breakable.ComponentTypes.HollowStick)
{
this.itemA = this.breakable.itemA.ToString();
if (this.itemA != "" && this.itemA != "None")
{
Library.Inventory invRowFromName2 = Links.x.library.GetInvRowFromName(this.itemA);
if (invRowFromName2 != null && invRowFromName2 != null)
{
Item item2;
ItemEquipped itemEquipped2;
Links.x.inventory.AddFromGround(null, null, 0, false, 0f, invRowFromName2._ID, 1, Vector3.zero, Vector3.zero, new Vector4((float)invRowFromName2._DurabilityMax, 0f, 0f, 0f), party, true, false, out item2, out itemEquipped2);
}
if (this.breakable.component == Breakable.ComponentTypes.Stick)
{
GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(60);
pooledGameObject.transform.position = base.gameObject.transform.position;
pooledGameObject.SetActive(true);
}
}
}
Links.x.itemPickupFX.gameObject.SetActive(true);
Links.x.itemPickupFX.gameObject.GetComponent<HannahAnimator>().Play("Idle");
Vector3 position = base.gameObject.transform.position;
Vector3 vector = Links.x.worldCamera.WorldToScreenPoint(position);
vector.z = 0f;
vector.x = vector.x * (1920f / (float)Screen.width) - 960f;
vector.y = vector.y * (Links.x.canvasRT.sizeDelta.y / (float)Screen.height) - Links.x.canvasRT.sizeDelta.y / 2f;
Links.x.itemPickupFX.localPosition = vector;
MasterAudio.PlaySound3DAtVector3AndForget("Interactives", base.gameObject.transform.position, 0.5f, new float?(1f), 0f, "Collect Resource", null);
if (this.breakable.component == Breakable.ComponentTypes.Frog)
{
HannahAnimatorSimple component = base.gameObject.GetComponent<HannahAnimatorSimple>();
if (component)
{
component.enabled = true;
}
}
if (this.particles.Length != 0)
{
ParticleSystem[] array = this.particles;
for (int i = 0; i < array.Length; i++)
{
array[i].gameObject.SetActive(false);
}
}
for (int j = 0; j < this.renderers.Length; j++)
{
this.renderers[j].enabled = false;
}
}
else
{
for (int k = 0; k < this.rigidbodies.Length; k++)
{
this.rigidbodies[k].gameObject.layer = 20;
Transform transform = this.rigidbodies[k].gameObject.transform;
if (!this.rigidbodies[k].gameObject.GetComponent<BoxCollider>())
{
this.rigidbodies[k].gameObject.AddComponent<BoxCollider>();
}
foreach (object obj in transform)
{
((Transform)obj).gameObject.layer = 20;
}
if (!fromSave && party)
{
Quaternion quaternion = Quaternion.LookRotation(base.gameObject.transform.position - party.body.headBone.position);
this.rigidbodies[k].AddForce(quaternion * Vector3.forward * 3000f, ForceMode.Force);
}
else
{
Vector3 position2 = base.gameObject.transform.position;
Quaternion quaternion2 = Quaternion.LookRotation(position2 - new Vector3(position2.x + Random.Range(-1f, 1f), position2.y + 2f, position2.z + Random.Range(-1f, 1f)));
this.rigidbodies[k].AddForce(quaternion2 * Vector3.forward * 300f, ForceMode.Force);
}
}
MasterAudio.PlaySound3DAtVector3AndForget("Interactives", Links.x.main.tr.position, 1f, new float?(1f), 0f, "Chest Break", null);
Breakable.BarrelLiquidTypes barrelLiquid = this.breakable.barrelLiquid;
if (this.breakable.itemA != SceneItem.xmlNames.None)
{
this.itemA = this.breakable.itemA.ToString();
}
if (this.breakable.itemB != SceneItem.xmlNames.None)
{
this.itemB = this.breakable.itemB.ToString();
}
if (this.breakable.itemC != SceneItem.xmlNames.None)
{
this.itemC = this.breakable.itemC.ToString();
}
if (this.breakable.itemD != SceneItem.xmlNames.None)
{
this.itemD = this.breakable.itemD.ToString();
}
int num = -1;
if (this.node != null)
{
num = (int)this.node.Area;
}
if (this.itemA != "" && this.itemA != "None")
{
Library.Inventory inventory = Links.x.library.GetInvRowFromName(this.itemA);
if (inventory != null)
{
Item item3 = Links.x.inventory.groundBag.DropLoot(inventory._ID, this.breakable.itemStackA, Vector3.zero, Vector3.zero, new Vector4((float)inventory._DurabilityMax, 0f, 0f, 0f), null, base.gameObject.transform.position, false, false, num);
Links.x.diorama.AddItem(item3);
}
}
if (this.itemB != "" && this.itemB != "None")
{
Library.Inventory inventory = Links.x.library.GetInvRowFromName(this.itemB);
if (inventory != null)
{
Item item4 = Links.x.inventory.groundBag.DropLoot(inventory._ID, this.breakable.itemStackB, Vector3.zero, Vector3.zero, new Vector4((float)inventory._DurabilityMax, 0f, 0f, 0f), null, base.gameObject.transform.position, false, false, num);
Links.x.diorama.AddItem(item4);
}
}
if (this.itemC != "" && this.itemC != "None")
{
Library.Inventory inventory = Links.x.library.GetInvRowFromName(this.itemC);
if (inventory != null)
{
Item item5 = Links.x.inventory.groundBag.DropLoot(inventory._ID, this.breakable.itemStackC, Vector3.zero, Vector3.zero, new Vector4((float)inventory._DurabilityMax, 0f, 0f, 0f), null, base.gameObject.transform.position, false, false, num);
Links.x.diorama.AddItem(item5);
}
}
if (this.itemD != "" && this.itemD != "None")
{
Library.Inventory inventory = Links.x.library.GetInvRowFromName(this.itemD);
if (inventory != null)
{
Item item6 = Links.x.inventory.groundBag.DropLoot(inventory._ID, this.breakable.itemStackD, Vector3.zero, Vector3.zero, new Vector4((float)inventory._DurabilityMax, 0f, 0f, 0f), null, base.gameObject.transform.position, false, false, num);
Links.x.diorama.AddItem(item6);
}
}
if (this.breakable.barrelLiquid == Breakable.BarrelLiquidTypes.lizard)
{
Vector3 position3 = base.transform.position;
string text = "SmallLizards";
Quaternion quaternion3 = Quaternion.LookRotation(Links.x.main.tr.position - base.transform.position);
bool flag = false;
Character firstCharacter = Links.x.gaia.CreateCreature(position3, quaternion3, text, flag, 0f, 1).GetFirstCharacter();
firstCharacter.SetPosition(position3, null);
firstCharacter.SetRotation(quaternion3, false, false);
firstCharacter.hostility = 2;
firstCharacter.UpdateLKP(Links.x.main, Links.x.main.node, "Attack", true);
firstCharacter.jumpingPosition = false;
if (!Records.x.InCombat(false))
{
Links.x.combat.StartCombat(Links.x.main, firstCharacter, false, true);
}
Links.x.combat.AddParty(firstCharacter, false, null, true);
}
else if (this.breakable.barrelLiquid != Breakable.BarrelLiquidTypes.none)
{
string text2 = this.breakable.barrelLiquid.ToString();
if (text2 == "none")
{
text2 = "Wine";
}
base.StartCoroutine(this.FindNodes(text2, base.transform.position, party));
}
if (Records.x.pocketPause && party.mainSelected)
{
Links.x.gameplay.PocketPause(false);
}
}
}
this.currentHealth = 0;
Links.x.hudControl.AddRemoveInteraction(false, null, this, null, null, null, null, null);
Links.x.combat.AddRemoveInteraction(false, this, null, null, null);
if (this.mainCollider)
{
this.mainCollider.enabled = false;
}
if (this.resourceLocation == -1 || this.fromSpell)
{
this.UpdateAstar();
}
}
yield break;
}
// Token: 0x060002EB RID: 747 RVA: 0x00039DDD File Offset: 0x00037FDD
public void UpdateAstar()
{
if (!this.updatingPath || this.fromSpell)
{
this.updatingPath = true;
base.enabled = true;
base.StartCoroutine(this.UpdatePath(false));
}
}
// Token: 0x060002EC RID: 748 RVA: 0x00039E0B File Offset: 0x0003800B
private IEnumerator UpdatePath(bool destroying)
{
Vector3 vector = this.currTile;
yield return new WaitForSecondsRealtime(0.1f);
this.currTile = base.gameObject.transform.position;
while (!Links.x.gaia.pathfindingReady)
{
yield return null;
}
if (!Links.x.gaia.sceneLoaded)
{
yield return new WaitForSecondsRealtime(Random.Range(0.2f, 0.5f));
}
AstarPath.active.UpdateGraphs(new Bounds(this.currTile + new Vector3(0f, -1f, 0f), new Vector3(4f, 40f, 4f)));
this.updatingPath = false;
if (this.fromSpell && this.destroyed)
{
if (this.tileEffect)
{
this.tileEffect.RemoveTile(this.node, base.gameObject, this);
}
}
else
{
bool flag = this.fromSpell && destroying;
}
if (!this.fromSpell)
{
base.enabled = false;
}
if (Links.x.fogOfWar)
{
Links.x.fogOfWar.UpdateGrid(this.currTile, 6f);
}
if (Links.x.fogOfWarInterior)
{
Links.x.fogOfWarInterior.UpdateGrid(this.currTile, 6f);
}
yield break;
}
// Token: 0x060002ED RID: 749 RVA: 0x00039E21 File Offset: 0x00038021
private IEnumerator FindNodes(string abilityName, Vector3 startPosition, Character party)
{
if (abilityName == "oil")
{
abilityName = "Oil";
}
if (abilityName == "sap")
{
abilityName = "Sap";
}
if (abilityName == "wine")
{
abilityName = "Wine";
}
if (abilityName == "spores")
{
abilityName = "Spores";
}
Library.Effects effectRow = Links.x.library.GetEffectRow(abilityName);
this.pickedGroundNodes.Clear();
this.SetNodeConstraint(false, 0);
GraphNode targetNode = AstarPath.active.GetNearest(startPosition, this.nodeConstraint).node;
float num = (float)effectRow._TileRadius;
float max = (num * Records.x.nodeSize + 0.1f) * (num * Records.x.nodeSize + 0.1f);
if (Links.x.gaia.pathfindingReady)
{
ConstantPath constPath = null;
constPath = ConstantPath.ConstructFast(targetNode, Records.x.GetConstantPathRadius((int)num), null);
constPath.nnConstraint = this.nodeConstraint;
AstarPath.StartPath(constPath, false);
yield return base.StartCoroutine(constPath.WaitForPath());
int num2 = 0;
constPath.Claim(this);
this.allNodes = constPath.allNodes;
int count = this.allNodes.Count;
int num3 = 0;
for (int i = 0; i < count; i++)
{
if (((Vector3)this.allNodes[i].position - (Vector3)targetNode.position).sqrMagnitude < max)
{
this.pickedGroundNodes.Add(this.allNodes[i]);
num3++;
num2++;
}
}
constPath.Release(this, false);
int num4 = this.pickedGroundNodes.IndexOf(targetNode);
if (num4 > -1)
{
this.pickedGroundNodes.RemoveAt(num4);
}
this.pickedGroundNodes.Add(targetNode);
num2++;
if (this.pickedGroundNodes.Count > 0)
{
TileEffects tileEffects = Links.x.tileEffects.AddComponent<TileEffects>();
tileEffects.gameObject.SetActive(true);
tileEffects.Setup(null, effectRow, null, this, null, party);
}
this.pickedGroundNodes.Clear();
constPath = null;
}
yield break;
}
// Token: 0x060002EE RID: 750 RVA: 0x00039E48 File Offset: 0x00038048
public void SetNodeConstraint(bool constrainTags, int uniqueID)
{
this.nodeConstraint.constrainWalkability = true;
this.nodeConstraint.walkable = true;
this.nodeConstraint.constrainTags = constrainTags;
this.nodeConstraint.checkCircleID = 0;
this.nodeConstraint.passID = 0;
this.nodeConstraint.passID2 = 0;
this.nodeConstraint.checkConnections = 0;
this.nodeConstraint.constrainPenalty = 0;
this.nodeConstraint.constrainToArea = -1;
}
// Token: 0x040004FF RID: 1279
public Breakable breakable;
// Token: 0x04000500 RID: 1280
public bool aiShouldBreakIt;
// Token: 0x04000501 RID: 1281
public string saveName;
// Token: 0x04000502 RID: 1282
public int currentHealth;
// Token: 0x04000503 RID: 1283
private string itemA;
// Token: 0x04000504 RID: 1284
private string itemB;
// Token: 0x04000505 RID: 1285
private string itemC;
// Token: 0x04000506 RID: 1286
private string itemD;
// Token: 0x04000507 RID: 1287
public Renderer[] renderers = new Renderer[0];
// Token: 0x04000508 RID: 1288
public ParticleSystem[] particles = new ParticleSystem[0];
// Token: 0x04000509 RID: 1289
public GameObject normal;
// Token: 0x0400050A RID: 1290
public GameObject broken;
// Token: 0x0400050B RID: 1291
public Rigidbody[] rigidbodies = new Rigidbody[0];
// Token: 0x0400050C RID: 1292
public bool destroyed;
// Token: 0x0400050D RID: 1293
private bool updatingPath;
// Token: 0x0400050E RID: 1294
private Vector3 prevTile;
// Token: 0x0400050F RID: 1295
private Vector3 currTile;
// Token: 0x04000510 RID: 1296
public Collider mainCollider;
// Token: 0x04000511 RID: 1297
public GraphNode node;
// Token: 0x04000512 RID: 1298
public List<GraphNode> pickedGroundNodes = new List<GraphNode>();
// Token: 0x04000513 RID: 1299
private NNConstraint nodeConstraint = new NNConstraint();
// Token: 0x04000514 RID: 1300
private List<GraphNode> allNodes;
// Token: 0x04000515 RID: 1301
public bool fromSpell;
// Token: 0x04000516 RID: 1302
public TileEffects tileEffect;
// Token: 0x04000517 RID: 1303
public int effectID;
// Token: 0x04000518 RID: 1304
public int resourceLocation = -1;
// Token: 0x04000519 RID: 1305
public Character interactiveCharacterObject;
// Token: 0x0400051A RID: 1306
private GameObject inRangeFX;
// Token: 0x0400051B RID: 1307
private Material[] mats;
// Token: 0x0400051C RID: 1308
public Character caster;
// Token: 0x0400051D RID: 1309
public GameObject bracket;
// Token: 0x0400051E RID: 1310
private Bounds bounds;
// Token: 0x0400051F RID: 1311
private List<int> layers;
// Token: 0x04000520 RID: 1312
private bool multiHover;
// Token: 0x04000521 RID: 1313
public int combatTargetID;
// Token: 0x04000522 RID: 1314
public bool kicked;
// Token: 0x04000523 RID: 1315
public Vector3 pt;
// Token: 0x04000524 RID: 1316
public float sheen;
// Token: 0x04000525 RID: 1317
private float timeSinceHeal;
}

View File

@@ -0,0 +1,17 @@
using System;
using UnityEngine;
using UnityEngine.UI;
// Token: 0x02000098 RID: 152
public class BtnAlphaThreshold : MonoBehaviour
{
// Token: 0x06000E7A RID: 3706 RVA: 0x00115CE0 File Offset: 0x00113EE0
private void Awake()
{
base.gameObject.GetComponent<Image>().alphaHitTestMinimumThreshold = this.threshold;
base.enabled = false;
}
// Token: 0x0400170B RID: 5899
public float threshold = 0.5f;
}

View File

@@ -0,0 +1,144 @@
using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
// Token: 0x02000099 RID: 153
public class ButtonMultiTargets : Button
{
// Token: 0x06000E7C RID: 3708 RVA: 0x00115D14 File Offset: 0x00113F14
protected override void Start()
{
this.GetTargetGraphics();
base.Start();
Color color = base.colors.normalColor;
if (this.hasTargetGraphics)
{
Image[] array = this.targetImages;
for (int i = 0; i < array.Length; i++)
{
array[i].CrossFadeColor(color, 0f, true, true);
TextMeshProUGUI[] array2 = this.targetText;
for (int j = 0; j < array2.Length; j++)
{
array2[j].CrossFadeColor(color, 0f, true, true);
}
}
if (base.currentSelectionState == Selectable.SelectionState.Disabled)
{
color = base.colors.disabledColor;
array = this.targetImages;
for (int i = 0; i < array.Length; i++)
{
array[i].CrossFadeColor(color, 0f, true, true);
TextMeshProUGUI[] array2 = this.targetText;
for (int j = 0; j < array2.Length; j++)
{
array2[j].CrossFadeColor(color, 0f, true, true);
}
}
}
}
}
// Token: 0x06000E7D RID: 3709 RVA: 0x00115E04 File Offset: 0x00114004
private void GetTargetGraphics()
{
if (!this.targetGraphics)
{
this.targetGraphics = base.GetComponent<MultiTargetGraphics>();
this.hasTargetGraphics = true;
}
if (this.hasTargetGraphics)
{
this.targetImages = this.targetGraphics.targetImages;
this.targetText = this.targetGraphics.targetText;
}
}
// Token: 0x06000E7E RID: 3710 RVA: 0x00115E5C File Offset: 0x0011405C
protected override void DoStateTransition(Selectable.SelectionState state, bool instant)
{
if (!this.hasTargetGraphics)
{
this.GetTargetGraphics();
}
if (state == Selectable.SelectionState.Highlighted && Input.GetMouseButton(0))
{
return;
}
Color color = ((state == Selectable.SelectionState.Disabled) ? base.colors.disabledColor : ((state == Selectable.SelectionState.Highlighted) ? base.colors.highlightedColor : ((state == Selectable.SelectionState.Normal) ? base.colors.normalColor : ((state == Selectable.SelectionState.Pressed) ? base.colors.pressedColor : ((state == Selectable.SelectionState.Selected) ? base.colors.selectedColor : Color.white)))));
Image[] array = this.targetImages;
for (int i = 0; i < array.Length; i++)
{
array[i].CrossFadeColor(color, instant ? 0f : base.colors.fadeDuration, true, true);
}
TextMeshProUGUI[] array2 = this.targetText;
for (int i = 0; i < array2.Length; i++)
{
array2[i].CrossFadeColor(color, instant ? 0f : base.colors.fadeDuration, true, true);
}
}
// Token: 0x06000E7F RID: 3711 RVA: 0x00115F60 File Offset: 0x00114160
private bool CanReachSelectable(Selectable select)
{
return !select || (select.interactable && select.gameObject.activeInHierarchy);
}
// Token: 0x06000E80 RID: 3712 RVA: 0x00115F84 File Offset: 0x00114184
public override Selectable FindSelectableOnLeft()
{
Selectable selectable = base.FindSelectableOnLeft();
while (!this.CanReachSelectable(selectable))
{
selectable = selectable.FindSelectableOnLeft();
}
return selectable;
}
// Token: 0x06000E81 RID: 3713 RVA: 0x00115FAC File Offset: 0x001141AC
public override Selectable FindSelectableOnRight()
{
Selectable selectable = base.FindSelectableOnRight();
while (!this.CanReachSelectable(selectable))
{
selectable = selectable.FindSelectableOnRight();
}
return selectable;
}
// Token: 0x06000E82 RID: 3714 RVA: 0x00115FD4 File Offset: 0x001141D4
public override Selectable FindSelectableOnUp()
{
Selectable selectable = base.FindSelectableOnUp();
while (!this.CanReachSelectable(selectable))
{
selectable = selectable.FindSelectableOnUp();
}
return selectable;
}
// Token: 0x06000E83 RID: 3715 RVA: 0x00115FFC File Offset: 0x001141FC
public override Selectable FindSelectableOnDown()
{
Selectable selectable = base.FindSelectableOnDown();
while (!this.CanReachSelectable(selectable))
{
selectable = selectable.FindSelectableOnDown();
}
return selectable;
}
// Token: 0x0400170C RID: 5900
private Image[] targetImages;
// Token: 0x0400170D RID: 5901
private TextMeshProUGUI[] targetText;
// Token: 0x0400170E RID: 5902
private MultiTargetGraphics targetGraphics;
// Token: 0x0400170F RID: 5903
private bool hasTargetGraphics;
}

View File

@@ -0,0 +1,56 @@
using System;
using UnityEngine.UI;
// Token: 0x0200009A RID: 154
public class ButtonSmartNavigation : Button
{
// Token: 0x06000E85 RID: 3717 RVA: 0x0011602B File Offset: 0x0011422B
private bool CanReachSelectable(Selectable select)
{
return !select || (select.interactable && select.gameObject.activeInHierarchy);
}
// Token: 0x06000E86 RID: 3718 RVA: 0x0011604C File Offset: 0x0011424C
public override Selectable FindSelectableOnLeft()
{
Selectable selectable = base.FindSelectableOnLeft();
while (!this.CanReachSelectable(selectable))
{
selectable = selectable.FindSelectableOnLeft();
}
return selectable;
}
// Token: 0x06000E87 RID: 3719 RVA: 0x00116074 File Offset: 0x00114274
public override Selectable FindSelectableOnRight()
{
Selectable selectable = base.FindSelectableOnRight();
while (!this.CanReachSelectable(selectable))
{
selectable = selectable.FindSelectableOnRight();
}
return selectable;
}
// Token: 0x06000E88 RID: 3720 RVA: 0x0011609C File Offset: 0x0011429C
public override Selectable FindSelectableOnUp()
{
Selectable selectable = base.FindSelectableOnUp();
while (!this.CanReachSelectable(selectable))
{
selectable = selectable.FindSelectableOnUp();
}
return selectable;
}
// Token: 0x06000E89 RID: 3721 RVA: 0x001160C4 File Offset: 0x001142C4
public override Selectable FindSelectableOnDown()
{
Selectable selectable = base.FindSelectableOnDown();
while (!this.CanReachSelectable(selectable))
{
selectable = selectable.FindSelectableOnDown();
}
return selectable;
}
}

View File

@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using UnityEngine;
// Token: 0x02000082 RID: 130
[Serializable]
public class ByeProbuilder : MonoBehaviour
{
// Token: 0x0400146D RID: 5229
public Bounds bounds;
// Token: 0x0400146E RID: 5230
public List<Transform> parentList = new List<Transform>();
// Token: 0x0400146F RID: 5231
public List<Transform> childList = new List<Transform>();
// Token: 0x04001470 RID: 5232
public List<Light> lightList = new List<Light>();
// Token: 0x04001471 RID: 5233
public int settingMin;
// Token: 0x04001472 RID: 5234
public LayerMask everythingCullingMask = -1;
// Token: 0x04001473 RID: 5235
public List<GameObject> pointChildren = new List<GameObject>();
// Token: 0x04001474 RID: 5236
public List<Vector3> points = new List<Vector3>();
// Token: 0x04001475 RID: 5237
public List<Quaternion> rots = new List<Quaternion>();
// Token: 0x04001476 RID: 5238
public List<GameObject> spheres = new List<GameObject>();
// Token: 0x04001477 RID: 5239
private RaycastHit[] hits;
}

View File

@@ -0,0 +1,161 @@
using System;
using UnityEngine;
// Token: 0x02000002 RID: 2
public class CameraControls : MonoBehaviour
{
// Token: 0x04000001 RID: 1
[Header("Smoothing")]
public bool Smoothing;
// Token: 0x04000002 RID: 2
public float MoveDampening;
// Token: 0x04000003 RID: 3
public float ZoomDampening;
// Token: 0x04000004 RID: 4
public float RotationDampening;
// Token: 0x04000005 RID: 5
public float TiltDampening;
// Token: 0x04000006 RID: 6
[Header("Keys and Mouse")]
public bool AllowMove;
// Token: 0x04000007 RID: 7
public float MoveSpeed;
// Token: 0x04000008 RID: 8
public bool AllowFastMove;
// Token: 0x04000009 RID: 9
public float FastMoveSpeed;
// Token: 0x0400000A RID: 10
public KeyCode FastMoveKeyCode1;
// Token: 0x0400000B RID: 11
public KeyCode FastMoveKeyCode2;
// Token: 0x0400000C RID: 12
public bool AllowRotate;
// Token: 0x0400000D RID: 13
public float RotateSpeed;
// Token: 0x0400000E RID: 14
public bool AllowZoom;
// Token: 0x0400000F RID: 15
public float ZoomSpeed;
// Token: 0x04000010 RID: 16
public bool AllowTilt;
// Token: 0x04000011 RID: 17
public float TiltSpeed;
// Token: 0x04000012 RID: 18
public KeyCode ResetKey;
// Token: 0x04000013 RID: 19
public bool IncludePositionOnReset;
// Token: 0x04000014 RID: 20
public bool MovementBreaksFollow;
// Token: 0x04000015 RID: 21
public string HorizontalInputAxis = "Horizontal";
// Token: 0x04000016 RID: 22
public string VerticalInputAxis = "Vertical";
// Token: 0x04000017 RID: 23
public bool RotateUsesInputAxis;
// Token: 0x04000018 RID: 24
public string RotateInputAxis = "KbCameraRotate";
// Token: 0x04000019 RID: 25
public KeyCode RotateLeftKey = KeyCode.Q;
// Token: 0x0400001A RID: 26
public KeyCode RotateRightKey = KeyCode.E;
// Token: 0x0400001B RID: 27
public bool ZoomUsesInputAxis;
// Token: 0x0400001C RID: 28
public string ZoomInputAxis = "KbCameraZoom";
// Token: 0x0400001D RID: 29
public KeyCode ZoomOutKey = KeyCode.Z;
// Token: 0x0400001E RID: 30
public KeyCode ZoomInKey = KeyCode.X;
// Token: 0x0400001F RID: 31
public bool TiltUsesInputAxis;
// Token: 0x04000020 RID: 32
public string TiltInputAxis = "KbCameraTilt";
// Token: 0x04000021 RID: 33
public KeyCode TiltUpKey = KeyCode.R;
// Token: 0x04000022 RID: 34
public KeyCode TiltDownKey = KeyCode.F;
// Token: 0x04000023 RID: 35
public KeyCode MouseOrbitButton;
// Token: 0x04000024 RID: 36
public bool AllowScreenEdgeMove;
// Token: 0x04000025 RID: 37
public bool ScreenEdgeMoveBreaksFollow;
// Token: 0x04000026 RID: 38
public int ScreenEdgeBorderWidth;
// Token: 0x04000027 RID: 39
public bool AllowPan;
// Token: 0x04000028 RID: 40
public bool PanBreaksFollow;
// Token: 0x04000029 RID: 41
public float PanSpeed;
// Token: 0x0400002A RID: 42
public float RotateSpeedMouse;
// Token: 0x0400002B RID: 43
public float MoveSpeedMouse;
// Token: 0x0400002C RID: 44
public float TiltSpeedMouse;
// Token: 0x0400002D RID: 45
public float ZoomSpeedMouse;
// Token: 0x0400002E RID: 46
public float FollowSpeed;
// Token: 0x0400002F RID: 47
public string RotateInputAxisMouse = "Mouse X";
// Token: 0x04000030 RID: 48
public string TiltInputAxisMouse = "Mouse Y";
// Token: 0x04000031 RID: 49
public string ZoomInputAxisMouse = "Mouse ScrollWheel";
// Token: 0x04000032 RID: 50
public KeyCode PanKey1 = KeyCode.LeftShift;
// Token: 0x04000033 RID: 51
public KeyCode PanKey2 = KeyCode.RightShift;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,46 @@
using System;
using UnityEngine;
// Token: 0x0200005D RID: 93
public class CameraFogOfWar : MonoBehaviour
{
// Token: 0x06000B43 RID: 2883 RVA: 0x000DD4AF File Offset: 0x000DB6AF
private void Start()
{
}
// Token: 0x06000B44 RID: 2884 RVA: 0x000DD4B1 File Offset: 0x000DB6B1
private void OnEnable()
{
}
// Token: 0x06000B45 RID: 2885 RVA: 0x000DD4B3 File Offset: 0x000DB6B3
private void OnDisable()
{
}
// Token: 0x06000B46 RID: 2886 RVA: 0x000DD4B8 File Offset: 0x000DB6B8
private void OnRenderImage(RenderTexture src, RenderTexture dest)
{
if (!this.cam)
{
this.cam = Camera.main;
}
if (this.cam)
{
Matrix4x4 cameraToWorldMatrix = this.cam.cameraToWorldMatrix;
Shader.SetGlobalMatrix("_CamToWorld", this.cam.cameraToWorldMatrix);
if (!this.fogMaterial)
{
this.fogMaterial = new Material(Shader.Find("Hannah/FogOfWar"));
}
Graphics.Blit(src, dest, this.fogMaterial);
}
}
// Token: 0x04001046 RID: 4166
private Material fogMaterial;
// Token: 0x04001047 RID: 4167
private Camera cam;
}

View File

@@ -0,0 +1,136 @@
using System;
using UnityEngine;
using UnityEngine.Rendering;
// Token: 0x0200005E RID: 94
[ExecuteInEditMode]
public class CameraParams : MonoBehaviour
{
// Token: 0x06000B48 RID: 2888 RVA: 0x000DD544 File Offset: 0x000DB744
private void Start()
{
this.SetParams();
if (this.meshRenderer)
{
this.meshRenderer.shadowCastingMode = ShadowCastingMode.Off;
this.meshRenderer.receiveShadows = false;
if (this.meshRenderer && this.meshRenderer.sharedMaterial)
{
this.bakedShadows = this.meshRenderer.sharedMaterial.GetTexture("_ShadowsTex");
}
}
}
// Token: 0x06000B49 RID: 2889 RVA: 0x000DD5B6 File Offset: 0x000DB7B6
private void OnEnable()
{
this.SetParams();
}
// Token: 0x06000B4A RID: 2890 RVA: 0x000DD5BE File Offset: 0x000DB7BE
private void Update()
{
this.SetParams();
}
// Token: 0x06000B4B RID: 2891 RVA: 0x000DD5C8 File Offset: 0x000DB7C8
public void SetParams()
{
if (this.cam)
{
this.sceneMatrix = this.cam.cameraToWorldMatrix;
if (this.meshRenderer && this.meshRenderer.sharedMaterial)
{
this.meshRenderer.sharedMaterial.SetMatrix("_Scene_CamToWorld", this.sceneMatrix);
this.projMatrix = GL.GetGPUProjectionMatrix(this.cam.projectionMatrix, true) * this.cam.worldToCameraMatrix;
this.meshRenderer.sharedMaterial.SetMatrix("_Scene_CameraProjectionMatrix", this.projMatrix);
if (this.shadowParams)
{
this.meshRenderer.sharedMaterial.SetMatrix("_Scene_ShadowMatrix_", this.shadowParams.shadowMatrixMorning);
}
else
{
this.meshRenderer.sharedMaterial.SetMatrix("_Scene_ShadowMatrix_", this.shadowMatrixMorning);
}
float num = 1f;
this.projParams = new Vector4(num, this.cam.nearClipPlane, this.cam.farClipPlane, 1f / this.cam.farClipPlane);
this.meshRenderer.sharedMaterial.SetVector("_Scene_ProjectionParams", this.projParams);
}
}
}
// Token: 0x04001048 RID: 4168
[Header("CAMERA VARIABLES")]
public Matrix4x4 projMatrix;
// Token: 0x04001049 RID: 4169
public Matrix4x4 sceneMatrix;
// Token: 0x0400104A RID: 4170
public Vector4 projParams;
// Token: 0x0400104B RID: 4171
public Matrix4x4 shadowMatrixMorning;
// Token: 0x0400104C RID: 4172
public Matrix4x4 shadowMatrixAfternoon;
// Token: 0x0400104D RID: 4173
public Matrix4x4 shadowMatrixEvening;
// Token: 0x0400104E RID: 4174
public Matrix4x4 shadowMatrixNight;
// Token: 0x0400104F RID: 4175
public Matrix4x4 shadowMatrixIndoor;
// Token: 0x04001050 RID: 4176
public Texture2D shadowsMorning;
// Token: 0x04001051 RID: 4177
public Texture2D shadowsAfternoon;
// Token: 0x04001052 RID: 4178
public Texture2D shadowsEvening;
// Token: 0x04001053 RID: 4179
public Texture2D shadowsNight;
// Token: 0x04001054 RID: 4180
public Texture2D shadowsIndoors;
// Token: 0x04001055 RID: 4181
public Texture bakedShadows;
// Token: 0x04001056 RID: 4182
public Texture2D pointLightShadow1;
// Token: 0x04001057 RID: 4183
public Texture2D pointLightShadow2;
// Token: 0x04001058 RID: 4184
public Texture2D pointLightShadow3;
// Token: 0x04001059 RID: 4185
public Texture2D pointLightShadow4;
// Token: 0x0400105A RID: 4186
public Texture2D pointLightShadow5;
// Token: 0x0400105B RID: 4187
public Texture2D pointLightShadow6;
// Token: 0x0400105C RID: 4188
public Vector3 center;
// Token: 0x0400105D RID: 4189
[Header("RENDERER")]
public MeshRenderer meshRenderer;
// Token: 0x0400105E RID: 4190
[Header("CAMERA")]
public Camera cam;
// Token: 0x0400105F RID: 4191
public CameraParams shadowParams;
}

View File

@@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using UnityEngine;
// Token: 0x0200005F RID: 95
public class CaptureAreaInfo : MonoBehaviour
{
// Token: 0x06000B4D RID: 2893 RVA: 0x000DD71E File Offset: 0x000DB91E
private void Start()
{
}
// Token: 0x06000B4E RID: 2894 RVA: 0x000DD720 File Offset: 0x000DB920
public void TurnOnLights()
{
foreach (InteriorLights interiorLights in this.pointLights)
{
interiorLights.TurnOnLights();
}
}
// Token: 0x06000B4F RID: 2895 RVA: 0x000DD770 File Offset: 0x000DB970
public void TurnOffLights()
{
foreach (InteriorLights interiorLights in this.pointLights)
{
interiorLights.TurnOffLights();
}
}
// Token: 0x04001060 RID: 4192
public int index;
// Token: 0x04001061 RID: 4193
public string id;
// Token: 0x04001062 RID: 4194
public List<BoxCollider> boundingBoxes = new List<BoxCollider>();
// Token: 0x04001063 RID: 4195
public List<BoxCollider> interiorCameraBoxes = new List<BoxCollider>();
// Token: 0x04001064 RID: 4196
public Camera sceneCamera;
// Token: 0x04001065 RID: 4197
public Camera minimapCamera;
// Token: 0x04001066 RID: 4198
public BoxCollider cameraCollider;
// Token: 0x04001067 RID: 4199
public BoxCollider exteriorCameraBoundsCollider;
// Token: 0x04001068 RID: 4200
public GameObject terrainMap;
// Token: 0x04001069 RID: 4201
public List<InteriorLights> pointLights = new List<InteriorLights>();
// Token: 0x0400106A RID: 4202
public List<GameObject> quads = new List<GameObject>();
// Token: 0x0400106B RID: 4203
public bool perspectiveShot;
// Token: 0x0400106C RID: 4204
public bool isInterior;
// Token: 0x0400106D RID: 4205
[Header("Art")]
public GameObject backgroundArt;
// Token: 0x0400106E RID: 4206
public Texture2D sceneMap;
}

View File

@@ -0,0 +1,295 @@
using System;
using UnityEngine;
// Token: 0x02000073 RID: 115
[ExecuteInEditMode]
public class CaptureBackgrounds : MonoBehaviour
{
// Token: 0x06000B85 RID: 2949 RVA: 0x000DF670 File Offset: 0x000DD870
public void Setup()
{
if (this.normalsTexture)
{
this.normalsTexture.Release();
}
if (this.albedoTexture)
{
this.albedoTexture.Release();
}
if (this.smoothnessTexture)
{
this.smoothnessTexture.Release();
}
if (this.depthTexture)
{
this.depthTexture.Release();
}
if (this.pointLightTexture)
{
this.pointLightTexture.Release();
}
if (this.albedoTempTexture)
{
this.albedoTempTexture.Release();
}
if (this.directionalLightTexture)
{
this.directionalLightTexture.Release();
}
if (this.specularTexture)
{
this.specularTexture.Release();
}
if (this.specShadowsTexture)
{
this.specShadowsTexture.Release();
}
this.depthTexture = new RenderTexture(this.depthWidth, this.depthHeight, 24, RenderTextureFormat.ARGBFloat);
this.normalsTexture = new RenderTexture(this.normalWidth, this.normalHeight, 24, RenderTextureFormat.ARGBFloat);
this.albedoTexture = new RenderTexture(this.albedoWidth, this.albedoHeight, 24, RenderTextureFormat.ARGBFloat);
this.smoothnessTexture = new RenderTexture(this.albedoWidth, this.albedoHeight, 24, RenderTextureFormat.ARGBFloat);
this.pointLightTexture = new RenderTexture(this.depthWidth, this.depthHeight, 24, RenderTextureFormat.ARGBHalf);
this.directionalLightTexture = new RenderTexture(this.shadowWidth, this.shadowHeight, 24, RenderTextureFormat.ARGBFloat);
this.albedoTempTexture = new RenderTexture(this.albedoWidth, this.albedoHeight, 24, RenderTextureFormat.ARGBFloat);
this.specularTexture = new RenderTexture(this.shadowWidth, this.shadowHeight, 24, RenderTextureFormat.ARGBFloat);
this.specShadowsTexture = new RenderTexture(this.shadowWidth, this.shadowHeight, 24, RenderTextureFormat.ARGBFloat);
}
// Token: 0x06000B86 RID: 2950 RVA: 0x000DF848 File Offset: 0x000DDA48
private void OnDisable()
{
if (this.normalsTexture)
{
this.normalsTexture.Release();
}
if (this.albedoTexture)
{
this.albedoTexture.Release();
}
if (this.smoothnessTexture)
{
this.smoothnessTexture.Release();
}
if (this.depthTexture)
{
this.depthTexture.Release();
}
if (this.pointLightTexture)
{
this.pointLightTexture.Release();
}
if (this.albedoTempTexture)
{
this.albedoTempTexture.Release();
}
if (this.directionalLightTexture)
{
this.directionalLightTexture.Release();
}
if (this.specularTexture)
{
this.specularTexture.Release();
}
if (this.specShadowsTexture)
{
this.specShadowsTexture.Release();
}
}
// Token: 0x06000B87 RID: 2951 RVA: 0x000DF930 File Offset: 0x000DDB30
private void Update()
{
if (!this.cam)
{
this.cam = base.gameObject.GetComponent<Camera>();
}
if (!this.normalsTexture)
{
this.Setup();
}
if (!this.cam)
{
return;
}
if (this.albedo || this.directionalShadows)
{
this.cam.enabled = true;
}
else
{
this.cam.enabled = false;
}
if (this.normalsTexture.width != this.normalWidth || this.normalsTexture.height != this.normalHeight || this.albedoTexture.width != this.albedoWidth || this.albedoTexture.height != this.albedoHeight || this.depthTexture.height != this.depthHeight || this.pointLightTexture.height != this.depthHeight || this.directionalLightTexture.height != this.shadowHeight)
{
this.Setup();
}
if (this.directionalShadows)
{
if (!this.directionalLightShader)
{
this.directionalLightShader = Shader.Find("Hidden/ViewDirectionalShadows");
}
Shader.SetGlobalFloat("passNumber", 1f);
this.cam.targetTexture = this.directionalLightTexture;
this.cam.RenderWithShader(this.directionalLightShader, "RenderType");
this.cam.targetTexture = null;
Shader.SetGlobalFloat("passNumber", 0f);
this.cam.targetTexture = this.specularTexture;
this.cam.RenderWithShader(this.directionalLightShader, "RenderType");
this.cam.targetTexture = null;
}
if (this.normalsTexture && this.normals)
{
if (!this.normalsShader)
{
this.normalsShader = Shader.Find("Hidden/ViewNormals");
}
this.cam.targetTexture = this.normalsTexture;
this.cam.RenderWithShader(this.normalsShader, "RenderType");
this.cam.targetTexture = null;
Shader.SetGlobalTexture("_GlobalNormalsTex", this.normalsTexture);
}
if (this.depthTexture && this.depth)
{
if (!this.depthShader)
{
this.depthShader = Shader.Find("Hidden/ViewDepthOrtho");
}
this.cam.targetTexture = this.depthTexture;
this.cam.RenderWithShader(this.depthShader, "RenderType");
this.cam.targetTexture = null;
Shader.SetGlobalTexture("_GlobalDepthTex", this.depthTexture);
}
if (this.smoothnessTexture && this.albedo)
{
if (!this.smoothnessShader)
{
this.smoothnessShader = Shader.Find("Hidden/ViewSmoothness");
}
this.cam.targetTexture = this.smoothnessTexture;
this.cam.RenderWithShader(this.smoothnessShader, "RenderType");
this.cam.targetTexture = null;
this.doAlbedo = true;
this.cam.targetTexture = this.albedoTempTexture;
this.cam.Render();
this.cam.targetTexture = null;
this.doAlbedo = false;
}
}
// Token: 0x06000B88 RID: 2952 RVA: 0x000DFC68 File Offset: 0x000DDE68
private void OnRenderImage(RenderTexture src, RenderTexture dest)
{
if (this.albedoTexture && this.doAlbedo)
{
if (!this.albedoMaterial)
{
this.albedoMaterial = new Material(Shader.Find("Hidden/CombineCaptures"));
}
this.albedoMaterial.SetTexture("_SmoothnessTex", this.smoothnessTexture);
this.albedoMaterial.SetTexture("_AlbedoTex", this.albedoTempTexture);
Graphics.Blit(src, this.albedoTexture, this.albedoMaterial, 0);
}
if (this.specularTexture && this.directionalShadows)
{
if (!this.albedoMaterial)
{
this.albedoMaterial = new Material(Shader.Find("Hidden/CombineCaptures"));
}
this.albedoMaterial.SetTexture("_SpecTex", this.specularTexture);
this.albedoMaterial.SetTexture("_LightTex", this.directionalLightTexture);
Graphics.Blit(src, this.specShadowsTexture, this.albedoMaterial, 1);
}
Graphics.Blit(src, dest);
}
// Token: 0x0400117F RID: 4479
public bool normals;
// Token: 0x04001180 RID: 4480
public bool albedo = true;
// Token: 0x04001181 RID: 4481
public bool depth;
// Token: 0x04001182 RID: 4482
public bool directionalShadows;
// Token: 0x04001183 RID: 4483
private Camera cam;
// Token: 0x04001184 RID: 4484
public RenderTexture normalsTexture;
// Token: 0x04001185 RID: 4485
public RenderTexture albedoTexture;
// Token: 0x04001186 RID: 4486
public RenderTexture smoothnessTexture;
// Token: 0x04001187 RID: 4487
public RenderTexture pointLightTexture;
// Token: 0x04001188 RID: 4488
public RenderTexture directionalLightTexture;
// Token: 0x04001189 RID: 4489
public RenderTexture specularTexture;
// Token: 0x0400118A RID: 4490
public RenderTexture albedoTempTexture;
// Token: 0x0400118B RID: 4491
public RenderTexture depthTexture;
// Token: 0x0400118C RID: 4492
public RenderTexture specShadowsTexture;
// Token: 0x0400118D RID: 4493
public Shader normalsShader;
// Token: 0x0400118E RID: 4494
public Shader smoothnessShader;
// Token: 0x0400118F RID: 4495
public Shader depthShader;
// Token: 0x04001190 RID: 4496
public Shader pointBakeShader;
// Token: 0x04001191 RID: 4497
public Shader directionalLightShader;
// Token: 0x04001192 RID: 4498
private Material albedoMaterial;
// Token: 0x04001193 RID: 4499
public int depthWidth = 2048;
// Token: 0x04001194 RID: 4500
public int depthHeight = 2048;
// Token: 0x04001195 RID: 4501
public int albedoWidth = 2048;
// Token: 0x04001196 RID: 4502
public int albedoHeight = 2048;
// Token: 0x04001197 RID: 4503
public int normalWidth = 2048;
// Token: 0x04001198 RID: 4504
public int normalHeight = 2048;
// Token: 0x04001199 RID: 4505
public int shadowWidth = 2048;
// Token: 0x0400119A RID: 4506
public int shadowHeight = 2048;
// Token: 0x0400119B RID: 4507
private bool doAlbedo;
// Token: 0x0400119C RID: 4508
public Transform lightTransform;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,822 @@
using System;
using System.Collections.Generic;
using PixelCrushers.DialogueSystem;
using UnityEngine;
// Token: 0x0200001C RID: 28
public class CharacterQuips : MonoBehaviour
{
// Token: 0x06000460 RID: 1120 RVA: 0x00063B1C File Offset: 0x00061D1C
private void Awake()
{
this.AddQuip("Party");
this.AddQuip("BloodlessHunter");
this.AddQuip("Yeti");
this.AddQuip("Empty");
this.AddQuip("FarmerRozafir");
this.AddQuip("FarmerRozafirChora");
this.AddQuip("Pedlar");
this.AddQuip("Stonesmith");
this.AddQuip("Menestral");
this.AddQuip("Barkeep");
this.AddQuip("BarkeepRozafir");
this.AddQuip("Shipwrith");
this.AddQuip("BarPatron");
this.AddQuip("Herder");
this.AddQuip("Meadmaid");
this.AddQuip("Monger");
this.AddQuip("Chanter");
this.AddQuip("Dolki");
this.AddQuip("Cook");
this.AddQuip("CookApprentice");
this.AddQuip("FarmerLazure");
this.AddQuip("RozafirUnderkeep");
this.AddQuip("HerderRozafir");
this.AddQuip("GuardLazure");
this.AddQuip("GuardRozafir");
this.AddQuip("RozafirStorekeep");
this.AddQuip("RozafirNewStorekeep");
this.AddQuip("Resting");
this.AddQuip("BanquetFriend");
this.AddQuip("BanquetSpawn");
this.AddQuip("GuardMainC5Caravan");
this.AddQuip("GuardC5Caravan");
this.AddQuip("C5Camper");
this.AddQuip("LittleFairyC5_A");
this.AddQuip("LittleFairyC5_B");
this.AddQuip("LittleFairyC5_C");
this.AddQuip("LittleFairyC6_A");
this.AddQuip("LittleFairyC6_B");
this.AddQuip("LittleFairyC6_C");
this.AddQuip("LittleFairyE6_A");
this.AddQuip("LittleFairyE6_B");
this.AddQuip("LittleFairyE6_C");
this.AddQuip("GuardD5");
this.AddQuip("RobberD5");
this.AddQuip("Minstrel");
}
// Token: 0x06000461 RID: 1121 RVA: 0x00063D18 File Offset: 0x00061F18
private void AddQuip(string n)
{
QuipSet.Quips quips = new QuipSet.Quips();
if (n == "Party")
{
quips.type = n;
quips.foundItem = new List<string>();
this.l = quips.foundItem;
this.l.Add("I could use this");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("We should keep moving");
this.l.Add("Come on");
quips.equipJewelry = new List<string>();
this.l = quips.equipJewelry;
this.l.Add("This suits me");
this.l.Add("A fine piece");
this.l.Add("This befits my rank");
this.l.Add("I'm moving up in the world");
quips.equipJewelry = new List<string>();
this.l = quips.equipJewelry;
this.l.Add("I'll put this to good use");
this.l.Add("I can work with this");
this.l.Add("I'll give this a try");
this.l.Add("I could use this");
}
if (n == "BloodlessHunter")
{
quips.type = n;
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Something lingers");
this.l.Add("This air smells of death");
this.l.Add("Death clings to this land");
quips.taunt = new List<string>();
this.l = quips.taunt;
this.l.Add("Come and get me!");
}
if (n == "Yeti")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("Huh?");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("Huh?");
}
if (n == "Empty")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
}
if (n == "Pedlar")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Got used goods?");
this.l.Add("I'll buy anything...");
this.l.Add("Your trash is my treasure");
}
if (n == "Stonesmith")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("So dull...");
this.l.Add("Where are those hammers hiding...?");
this.l.Add("Riddled with holes...");
}
if (n == "Menestral")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("La-la-la di-dilly-day");
this.l.Add("Hmm-hmm-hmmmmmm");
this.l.Add("Do-a-di-a-tra-la-do");
}
if (n == "Barkeep")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Baked apples, mushroom curry...");
this.l.Add("Where has Florina run off to?");
this.l.Add("Etherflora, silaflora, musswort...");
}
if (n == "BarkeepRozafir")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Good music today...");
this.l.Add("Reve has all the farmers working 'round the clock");
this.l.Add("Have you tried the mulled mead?");
this.l.Add("Imported rice beer, all the way from the Taratian hills...");
this.l.Add("Best to unwind with a spiced gin...");
}
if (n == "BarPatron")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Another round?");
this.l.Add("A decent inn, not what I expected");
this.l.Add("A pot of mushroom stew for me, please you");
this.l.Add("How now, Florina?");
this.l.Add("Did you hear about the spy? Reporting to the Renazin he was...");
this.l.Add("Good mead, this");
this.l.Add("Two barrels of peppura, I hear...");
this.l.Add("Just one more");
this.l.Add("What news, my good Nelu?");
}
if (n == "RozafirUnderkeep")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Another round?");
this.l.Add("Does this rice beer taste stale to you?");
this.l.Add("More bread pudding, please you");
this.l.Add("I feel safer down here");
this.l.Add("Have you visited the new shopkeep?");
this.l.Add("Good gin, this");
this.l.Add("Not long 'til harvest");
this.l.Add("Just one more");
this.l.Add("What news, good Vali?");
}
if (n == "Shipwrith")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Faster, faster");
this.l.Add("Not a boat in the harbor");
this.l.Add("Where is that shipment from Porta Dun?");
this.l.Add("No ships on the horizon");
}
if (n == "Shipwrith")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Where have I placed that netting?");
this.l.Add("Not one boat left behind...");
this.l.Add("I hope they're keeping watch on the horizon...");
this.l.Add("Not a ship to be seen...");
}
if (n == "Herder")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("You'll stay here with me");
this.l.Add("Your friends will return soon");
this.l.Add("So far from home...");
this.l.Add("None to tend them...");
}
if (n == "HerderRozafir")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Coats are looking good");
this.l.Add("No fleas");
this.l.Add("Too bright...");
this.l.Add("Not long 'til harvest...");
}
if (n == "Meadmaid")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
}
if (n == "Monger")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("One emerald, two emeralds, three...");
this.l.Add("Five-and-twenty emeralds, six-and-twenty...");
this.l.Add("Fresh wares!");
this.l.Add("Highest quality!");
}
if (n == "Chanter")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Respiv sima soara vivrii");
this.l.Add("Impez sima acru sil");
this.l.Add("Para sima pivi asade");
this.l.Add("Qie sima resivi se");
}
if (n == "Dolki")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Hisssss...");
this.l.Add("Hisss...");
this.l.Add("Hisssssssth...");
}
if (n == "Cook")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Five potatoes...dimi-bushel mushrooms...");
this.l.Add("Forget not the dilwere...");
this.l.Add("Boil, dry, then soak anew....");
}
if (n == "CookApprentice")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Spit duty yesternight");
this.l.Add("Spit duty morrownight");
this.l.Add("Spit duty everlasting");
}
if (n == "FarmerLazure")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Not yet ripe");
this.l.Add("These are ready for harvest");
this.l.Add("Shroomsect eggs...we'll need a potion");
this.l.Add("Blisters all over my hands...");
}
if (n == "FarmerRozafir")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("This plant needs more dew");
this.l.Add("My back aches so...");
this.l.Add("Sela fair blazes today");
this.l.Add("These leaves show signs of shroombites");
this.l.Add("Is that a small footprint?");
this.l.Add("Harvest is not so far away");
this.l.Add("What burrows here?");
}
if (n == "FarmerRozafirChora")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Mmmm-tra-la-la-lo...");
this.l.Add("Do-dora-dae...");
this.l.Add("Lo-La-Li-Lo-La-Li-Le...");
this.l.Add("Chora please bless us...Chora protect us...La-la-li la-la-li loooo...");
this.l.Add("Hmmm hmmmm hm hm hum hmmmmm");
}
if (n == "GuardLazure")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Stay sharp");
this.l.Add("No ships on the horizon yet");
this.l.Add("I should visit the stonesmith");
this.l.Add("Not long 'til harvest");
this.l.Add("No news yet from the Pavura");
this.l.Add("The Renazin would be fools to attack here");
this.l.Add("Was that a bakka howl?");
this.l.Add("The forten's on edge");
this.l.Add("Too soon for news from the army");
this.l.Add("Stay vigilant");
}
if (n == "GuardRozafir")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Stay sharp");
this.l.Add("Step wide around the Dolki");
this.l.Add("This will be the best harvest yet");
this.l.Add("No news yet from Forten Lazure");
this.l.Add("The Renazin would be fools to attack us");
this.l.Add("Wish there was fresh news from Forten Lazure");
}
if (n == "RozafirStorekeep")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Fresh wares all the way from Porta Dun");
this.l.Add("A better deal you'll not find");
this.l.Add("Don't bother traveling to Din Sera, this is premium stock");
}
if (n == "RozafirNewStorekeep")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("How now, my good guard?");
}
if (n == "Resting")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("I am not myself...");
this.l.Add("So tired...");
this.l.Add("I've not the strength to rise....");
}
if (n == "BanquetFriend")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("I never though to see such madness...");
this.l.Add("Where is the Lady of Spring?");
this.l.Add("Spawn of the Bloodless, every one of them...");
this.l.Add("Where are the gods now?");
}
if (n == "BanquetSpawn")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("I will obey...");
this.l.Add("Master...my will is yours...");
this.l.Add("All will fall to him...");
}
if (n == "GuardMainC5Caravan")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Stay sharp");
this.l.Add("Keep the incense burning");
this.l.Add("Another raid would be disastrous");
this.l.Add("Did you hear somewhat?");
this.l.Add("We should not linger here");
}
if (n == "GuardC5Caravan")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Did you hear that?");
this.l.Add("I'll not drop my guard");
this.l.Add("These woods are not safe");
this.l.Add("We should stay near the camp");
this.l.Add("I do not like the look of this place");
}
if (n == "C5Camper")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("This is a dismal beach");
this.l.Add("I fear to leave this fire");
this.l.Add("I long for my bed");
this.l.Add("Our supplies run low soon");
this.l.Add("This island is cursed");
}
if (n == "LittleFairyC5_A")
{
quips.type = n;
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("lis");
}
if (n == "LittleFairyC5_B")
{
quips.type = n;
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("fal");
}
if (n == "LittleFairyC5_C")
{
quips.type = n;
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("ero");
}
if (n == "LittleFairyC6_A")
{
quips.type = n;
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("ila");
}
if (n == "LittleFairyC6_B")
{
quips.type = n;
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("por");
}
if (n == "LittleFairyC6_C")
{
quips.type = n;
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("vex");
}
if (n == "LittleFairyE6_A")
{
quips.type = n;
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("sea");
}
if (n == "LittleFairyE6_B")
{
quips.type = n;
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("mar");
}
if (n == "LittleFairyE6_C")
{
quips.type = n;
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("fin");
}
if (n == "GuardD5")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("To arms!");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Wits sharp, blades sharper");
this.l.Add("House Dura will not falter!");
this.l.Add("What fresh predator stalks our borders?");
this.l.Add("Did you hear somewhat?");
this.l.Add("My skin fair crawls to sleep here");
}
if (n == "RobberD5")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("Intruder!");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("Did you hear that?");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("The cowards will regret their hasty attack!");
this.l.Add("We'll cut them down like the Grave Keeper!");
this.l.Add("We've not had fresh provisions for days...");
this.l.Add("Did you hear somewhat?");
this.l.Add("Rozafir's caverns are well-stocked, and poorly defended...");
}
if (n == "Minstrel")
{
quips.type = n;
quips.seen = new List<string>();
this.l = quips.seen;
this.l.Add("");
quips.heard = new List<string>();
this.l = quips.heard;
this.l.Add("");
quips.idle = new List<string>();
this.l = quips.idle;
this.l.Add("Mmmm-tra-la-la-lo...");
this.l.Add("Do-dora-dae...");
this.l.Add("Lo-La-Li-Lo-La-Li-Le...");
}
this.quips.Add(quips);
}
// Token: 0x06000462 RID: 1122 RVA: 0x00065A74 File Offset: 0x00063C74
public string GetQuip(string type, int quipID)
{
this.list = null;
if (quipID == -1)
{
return "";
}
if (type == "Seen")
{
this.list = this.quips[quipID].seen;
}
if (type == "Heard")
{
this.list = this.quips[quipID].heard;
}
if (type == "Taunt")
{
this.list = this.quips[quipID].taunt;
}
if (type == "Idle")
{
if (quipID == 4)
{
if (QuestLog.GetQuestState("D6_Chora") == QuestState.Complete)
{
this.list = this.quips[5].idle;
}
else
{
this.list = this.quips[quipID].idle;
}
}
else
{
this.list = this.quips[quipID].idle;
}
}
if (type == "End Search")
{
this.list = this.quips[quipID].endSearch;
}
if (type == "Scared")
{
this.list = this.quips[quipID].scared;
}
if (type == "Combat Win")
{
this.list = this.quips[quipID].combatWin;
}
if (type == "Found Item")
{
this.list = this.quips[quipID].foundItem;
}
if (type == "Equip Item")
{
this.list = this.quips[quipID].equipItem;
}
if (type == "Equip Jewelry")
{
this.list = this.quips[quipID].equipJewelry;
}
if (this.list != null && this.list.Count > 0)
{
return this.list[Random.Range(0, this.list.Count)];
}
return "";
}
// Token: 0x06000463 RID: 1123 RVA: 0x00065C7C File Offset: 0x00063E7C
public int GetQuipIndex(string quipLine)
{
for (int i = 0; i < this.quips.Count; i++)
{
if (quipLine == this.quips[i].type)
{
return i;
}
}
return -1;
}
// Token: 0x06000464 RID: 1124 RVA: 0x00065CBC File Offset: 0x00063EBC
public bool HasIdleQuip(int quipID)
{
this.list = null;
if (quipID == -1)
{
return false;
}
this.list = this.quips[quipID].idle;
return this.list != null && this.list.Count > 0;
}
// Token: 0x0400071C RID: 1820
private List<QuipSet.Quips> quips = new List<QuipSet.Quips>();
// Token: 0x0400071D RID: 1821
private List<string> list;
// Token: 0x0400071E RID: 1822
private List<string> l;
}

View File

@@ -0,0 +1,108 @@
using System;
using UnityEngine;
// Token: 0x02000060 RID: 96
public class Chest : MonoBehaviour
{
// Token: 0x0400106F RID: 4207
[Header("IF LOCKABLE")]
public bool lockable;
// Token: 0x04001070 RID: 4208
public bool locked;
// Token: 0x04001071 RID: 4209
public int lockDifficulty;
// Token: 0x04001072 RID: 4210
public int health;
// Token: 0x04001073 RID: 4211
public int armor;
// Token: 0x04001074 RID: 4212
public SceneItem.xmlNames keyItem = SceneItem.xmlNames.None;
// Token: 0x04001075 RID: 4213
public Creatures owner;
// Token: 0x04001076 RID: 4214
[Header("ALWAYS")]
public SceneItem.xmlNames item1 = SceneItem.xmlNames.None;
// Token: 0x04001077 RID: 4215
public int itemStack1 = 1;
// Token: 0x04001078 RID: 4216
public SceneItem.xmlNames item2 = SceneItem.xmlNames.None;
// Token: 0x04001079 RID: 4217
public int itemStack2 = 1;
// Token: 0x0400107A RID: 4218
public SceneItem.xmlNames item3 = SceneItem.xmlNames.None;
// Token: 0x0400107B RID: 4219
public int itemStack3 = 1;
// Token: 0x0400107C RID: 4220
public SceneItem.xmlNames item4 = SceneItem.xmlNames.None;
// Token: 0x0400107D RID: 4221
public int itemStack4 = 1;
// Token: 0x0400107E RID: 4222
public SceneItem.xmlNames item5 = SceneItem.xmlNames.None;
// Token: 0x0400107F RID: 4223
public int itemStack5 = 1;
// Token: 0x04001080 RID: 4224
public SceneItem.xmlNames item6 = SceneItem.xmlNames.None;
// Token: 0x04001081 RID: 4225
public int itemStack6 = 1;
// Token: 0x04001082 RID: 4226
public SceneItem.xmlNames item7 = SceneItem.xmlNames.None;
// Token: 0x04001083 RID: 4227
public int itemStack7 = 1;
// Token: 0x04001084 RID: 4228
public SceneItem.xmlNames item8 = SceneItem.xmlNames.None;
// Token: 0x04001085 RID: 4229
public int itemStack8 = 1;
// Token: 0x04001086 RID: 4230
public SceneItem.xmlNames item9 = SceneItem.xmlNames.None;
// Token: 0x04001087 RID: 4231
public int itemStack9 = 1;
// Token: 0x04001088 RID: 4232
public SceneItem.xmlNames item10 = SceneItem.xmlNames.None;
// Token: 0x04001089 RID: 4233
public int itemStack10 = 1;
// Token: 0x0400108A RID: 4234
[Header("EFFECT ON OPENING")]
public Chest.EffectTypes effect;
// Token: 0x0400108B RID: 4235
[Header("HOW TO BREAK IT")]
public Breakable.BreakableEffectRequired effectRequired;
// Token: 0x020001C2 RID: 450
public enum EffectTypes
{
// Token: 0x04002C14 RID: 11284
none,
// Token: 0x04002C15 RID: 11285
oil,
// Token: 0x04002C16 RID: 11286
sap
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,87 @@
using System;
using UnityEngine;
// Token: 0x02000004 RID: 4
[ExecuteInEditMode]
public class ClayShaderVariables : MonoBehaviour
{
// Token: 0x0600003B RID: 59 RVA: 0x000067E2 File Offset: 0x000049E2
private void Start()
{
}
// Token: 0x0600003C RID: 60 RVA: 0x000067E4 File Offset: 0x000049E4
private void Update()
{
Shader.SetGlobalFloat("_xEnviro_tcp2RampThreshold", this.enviroRampThreshold);
Shader.SetGlobalFloat("_xEnviro_tcp2RampSmoothness", this.enviroRampSmoothness);
Shader.SetGlobalVector("_xEnviro_tcp2HighlightColor", this.enviroHighlightColor);
Shader.SetGlobalVector("_xEnviro_tcp2ShadowColor", this.enviroShadowColor);
Shader.SetGlobalVector("_xEnviro_rimParams", new Vector3(this.enviroRimMin, this.enviroRimMax, this.enviroRimStrength));
Shader.SetGlobalVector("_xEnviro_rimColor", this.enviroRimColor);
Shader.SetGlobalVector("_xEnviro_tcp2DirShadowColor", this.enviroDirectionalShadow);
Shader.SetGlobalFloat("_xCharacter_tcp2RampThreshold", this.characterRampThreshold);
Shader.SetGlobalFloat("_xCharacter_tcp2RampSmoothness", this.characterRampSmoothness);
Shader.SetGlobalVector("_xCharacter_tcp2HighlightColor", this.characterHighlightColor);
Shader.SetGlobalVector("_xCharactertcp2ShadowColor", this.characterShadowColor);
Shader.SetGlobalVector("_xCharacter_rimParams", new Vector3(this.characterRimMin, this.characterRimMax, this.characterRimStrength));
Shader.SetGlobalVector("_xCharacter_rimColor", this.characterRimColor);
Shader.SetGlobalVector("_xCharactertcp2DirShadowColor", this.characterDirectionalShadow);
}
// Token: 0x04000114 RID: 276
[Header("CHARACTER LIGHTING")]
public float characterRampThreshold = 0.5f;
// Token: 0x04000115 RID: 277
public float characterRampSmoothness = 0.1f;
// Token: 0x04000116 RID: 278
public float characterRimMin = 0.8f;
// Token: 0x04000117 RID: 279
public float characterRimMax = 0.85f;
// Token: 0x04000118 RID: 280
public float characterRimStrength = 0.5f;
// Token: 0x04000119 RID: 281
public Color characterRimColor = Color.white;
// Token: 0x0400011A RID: 282
public Color characterHighlightColor = Color.white;
// Token: 0x0400011B RID: 283
public Color characterShadowColor = Color.gray;
// Token: 0x0400011C RID: 284
public Color characterDirectionalShadow = Color.black;
// Token: 0x0400011D RID: 285
[Header("ENVIRONMENT LIGHTING")]
public float enviroRampThreshold = 0.5f;
// Token: 0x0400011E RID: 286
public float enviroRampSmoothness = 0.1f;
// Token: 0x0400011F RID: 287
public float enviroRimMin = 0.8f;
// Token: 0x04000120 RID: 288
public float enviroRimMax = 0.85f;
// Token: 0x04000121 RID: 289
public float enviroRimStrength = 0.5f;
// Token: 0x04000122 RID: 290
public Color enviroRimColor = Color.white;
// Token: 0x04000123 RID: 291
public Color enviroHighlightColor = Color.white;
// Token: 0x04000124 RID: 292
public Color enviroShadowColor = Color.gray;
// Token: 0x04000125 RID: 293
public Color enviroDirectionalShadow = Color.black;
}

View File

@@ -0,0 +1,190 @@
using System;
using UnityEngine;
// Token: 0x0200001E RID: 30
[RequireComponent(typeof(Animator))]
public class CleanIK : MonoBehaviour
{
// Token: 0x06000479 RID: 1145 RVA: 0x00066E5D File Offset: 0x0006505D
private void Start()
{
this.animator = base.GetComponent<Animator>();
this.layerMask = 4194433;
}
// Token: 0x0600047A RID: 1146 RVA: 0x00066E76 File Offset: 0x00065076
private void Update()
{
this.handleColliderOffset();
}
// Token: 0x0600047B RID: 1147 RVA: 0x00066E80 File Offset: 0x00065080
private void OnAnimatorIK()
{
if (this.animator && this.ikActive)
{
if (this.LeftFoot != null)
{
this.solveIK(this.LeftFoot, true);
}
if (this.RightFoot != null)
{
this.solveIK(this.RightFoot, false);
}
}
}
// Token: 0x0600047C RID: 1148 RVA: 0x00066ED8 File Offset: 0x000650D8
private void solveIK(Transform foot, bool left)
{
string name = foot.name;
RaycastHit raycastHit = default(RaycastHit);
Vector3 vector = default(Vector3);
Quaternion quaternion = Quaternion.identity;
if (Physics.Linecast(this.checkOrigin(foot.position), this.checkTarget(foot.position), out raycastHit, this.layerMask))
{
vector = this.footPosition(raycastHit);
quaternion = this.footRotation(foot, raycastHit);
if (left)
{
this.animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot, 1f);
this.animator.SetIKPosition(AvatarIKGoal.LeftFoot, vector);
this.LeftFootY = vector.y;
if (this.rotation)
{
this.animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot, 1f);
this.animator.SetIKRotation(AvatarIKGoal.LeftFoot, quaternion);
}
}
if (!left)
{
this.animator.SetIKPositionWeight(AvatarIKGoal.RightFoot, 1f);
this.animator.SetIKPosition(AvatarIKGoal.RightFoot, vector);
this.RightFootY = vector.y;
if (this.rotation)
{
this.animator.SetIKRotationWeight(AvatarIKGoal.RightFoot, 1f);
this.animator.SetIKRotation(AvatarIKGoal.RightFoot, quaternion);
}
}
}
}
// Token: 0x0600047D RID: 1149 RVA: 0x00066FE4 File Offset: 0x000651E4
private void handleColliderOffset()
{
this.stateBasedLegDistance();
if (!this.controller)
{
this.controller = base.gameObject.transform.parent.GetComponent<CharacterController>();
if (this.controller)
{
this.colliderHeight = this.controller.height;
this.controllerBoundsBottom = this.controller.bounds.extents.y;
}
}
if (this.controller)
{
if (this.planeSpeed(ref this.controller) < 0.1f)
{
float num = Mathf.Abs(this.LeftFootY - this.RightFootY);
this.controller.height = this.colliderHeight - num * this.deltaAmplifier;
return;
}
this.controller.height = this.colliderHeight;
}
}
// Token: 0x0600047E RID: 1150 RVA: 0x000670BA File Offset: 0x000652BA
private void stateBasedLegDistance()
{
if (this.controller)
{
this.legDistance = 1f / (this.planeSpeed(ref this.controller) + 0.8f);
}
}
// Token: 0x0600047F RID: 1151 RVA: 0x000670E8 File Offset: 0x000652E8
private float planeSpeed(ref CharacterController characterController)
{
Vector3 vector = new Vector3(characterController.velocity.x, 0f, characterController.velocity.z);
return vector.magnitude;
}
// Token: 0x06000480 RID: 1152 RVA: 0x00067120 File Offset: 0x00065320
private Quaternion footRotation(Transform foot, RaycastHit hit)
{
return Quaternion.LookRotation(Vector3.ProjectOnPlane(base.transform.forward, hit.normal), hit.normal);
}
// Token: 0x06000481 RID: 1153 RVA: 0x00067148 File Offset: 0x00065348
private Vector3 footPosition(RaycastHit hit)
{
Vector3 point = hit.point;
point.y += this.footOffset;
return point;
}
// Token: 0x06000482 RID: 1154 RVA: 0x0006716F File Offset: 0x0006536F
private Vector3 checkOrigin(Vector3 footPosition)
{
return footPosition + (this.legDistance + 0.25f) * Vector3.up;
}
// Token: 0x06000483 RID: 1155 RVA: 0x0006718D File Offset: 0x0006538D
private Vector3 checkTarget(Vector3 footPosition)
{
return footPosition - this.legDistance / 2f * Vector3.up;
}
// Token: 0x0400073E RID: 1854
protected Animator animator;
// Token: 0x0400073F RID: 1855
public bool ikActive;
// Token: 0x04000740 RID: 1856
public bool rotation = true;
// Token: 0x04000741 RID: 1857
public bool showMarkers;
// Token: 0x04000742 RID: 1858
public Transform LeftFoot;
// Token: 0x04000743 RID: 1859
public Transform RightFoot;
// Token: 0x04000744 RID: 1860
public float footOffset;
// Token: 0x04000745 RID: 1861
private float legDistance;
// Token: 0x04000746 RID: 1862
private int layerMask = 256;
// Token: 0x04000747 RID: 1863
private CharacterController controller;
// Token: 0x04000748 RID: 1864
private float colliderHeight;
// Token: 0x04000749 RID: 1865
private float controllerBoundsBottom;
// Token: 0x0400074A RID: 1866
private float LeftFootY;
// Token: 0x0400074B RID: 1867
private float RightFootY;
// Token: 0x0400074C RID: 1868
public float smooth = 10f;
// Token: 0x0400074D RID: 1869
public float deltaAmplifier = 1f;
// Token: 0x0400074E RID: 1870
private Rigidbody rbody;
}

View File

@@ -0,0 +1,140 @@
using System;
using System.Collections.Generic;
using UnityEngine;
// Token: 0x0200001F RID: 31
public class CollectCharacters : MonoBehaviour
{
// Token: 0x06000485 RID: 1157 RVA: 0x000671DB File Offset: 0x000653DB
private void Start()
{
Links.x.characterCollector = this;
this.tr = base.transform;
base.gameObject.SetActive(false);
}
// Token: 0x06000486 RID: 1158 RVA: 0x00067200 File Offset: 0x00065400
public void SetSpherePosition(Vector3 pos)
{
this.tr.position = pos;
}
// Token: 0x06000487 RID: 1159 RVA: 0x00067210 File Offset: 0x00065410
private void OnTriggerEnter(Collider other)
{
GameObject gameObject = other.gameObject;
this.AddCharacter(gameObject);
}
// Token: 0x06000488 RID: 1160 RVA: 0x0006722B File Offset: 0x0006542B
public void AddCharacter(GameObject go)
{
if (this.charactersGo.IndexOf(go) == -1)
{
this.toAdd.Add(go);
this.changingCharacters = true;
}
}
// Token: 0x06000489 RID: 1161 RVA: 0x0006724F File Offset: 0x0006544F
public void SwitchBlock()
{
this.charactersGo.Clear();
this.characters.Clear();
}
// Token: 0x0600048A RID: 1162 RVA: 0x00067268 File Offset: 0x00065468
public void LateAddCharacter()
{
foreach (GameObject gameObject in this.toAdd)
{
if (gameObject)
{
this.charactersGo.Add(gameObject);
this.characters.Add(gameObject.GetComponent<Character>());
}
}
this.toAdd.Clear();
this.UpdateCharacterNumbers();
}
// Token: 0x0600048B RID: 1163 RVA: 0x000672EC File Offset: 0x000654EC
public void LateRemoveCharacter()
{
int count = this.characters.Count;
for (int i = 0; i < count; i++)
{
if (!this.characters[i])
{
this.toRemove.Add(null);
}
else if (this.characters[i].inactive)
{
this.toRemove.Add(this.charactersGo[i]);
}
}
foreach (GameObject gameObject in this.toRemove)
{
int num = this.charactersGo.IndexOf(gameObject);
if (num > -1)
{
this.charactersGo.RemoveAt(num);
if (this.characters[num])
{
this.characters[num].body.SetMask(false);
}
this.characters.RemoveAt(num);
}
}
this.toRemove.Clear();
this.UpdateCharacterNumbers();
}
// Token: 0x0600048C RID: 1164 RVA: 0x00067408 File Offset: 0x00065608
public void RemoveCharacter(GameObject go)
{
if (this.charactersGo.IndexOf(go) > -1)
{
this.toRemove.Add(go);
this.changingCharacters = true;
}
}
// Token: 0x0600048D RID: 1165 RVA: 0x0006742C File Offset: 0x0006562C
public void UpdateCharacterNumbers()
{
int count = this.characters.Count;
for (int i = 0; i < count; i++)
{
if (this.characters[i] && this.characters[i].body)
{
this.characters[i].body.SetMaskNumber(((float)i + 2f) * 1f);
}
}
}
// Token: 0x0600048E RID: 1166 RVA: 0x000674A0 File Offset: 0x000656A0
private void OnTriggerExit(Collider other)
{
GameObject gameObject = other.gameObject;
this.RemoveCharacter(gameObject);
}
// Token: 0x0400074F RID: 1871
public List<Character> characters = new List<Character>();
// Token: 0x04000750 RID: 1872
public List<GameObject> charactersGo = new List<GameObject>();
// Token: 0x04000751 RID: 1873
private List<GameObject> toRemove = new List<GameObject>();
// Token: 0x04000752 RID: 1874
private List<GameObject> toAdd = new List<GameObject>();
// Token: 0x04000753 RID: 1875
public Transform tr;
// Token: 0x04000754 RID: 1876
public bool changingCharacters;
}

View File

@@ -0,0 +1,251 @@
using System;
using System.Collections;
using DarkTonic.MasterAudio;
using Pathfinding;
using UnityEngine;
// Token: 0x02000020 RID: 32
public class CollisionListener : MonoBehaviour
{
// Token: 0x06000490 RID: 1168 RVA: 0x000674F0 File Offset: 0x000656F0
public void StartLisening(string t)
{
if (this.turnOff != null)
{
this.EndNow();
base.StopCoroutine(this.turnOff);
this.turnOff = null;
}
this.type = t;
base.transform.rotation = Quaternion.identity;
this.rbody.isKinematic = false;
this.timeSinceCollision = 0f;
this.bounced = 0;
this.listen = true;
this.tr = base.transform;
this.dynamicCollide = false;
this.underground = false;
if (this.c)
{
this.safePosition = this.c.tr.position;
this.startPoint = this.c.tr.position;
}
}
// Token: 0x06000491 RID: 1169 RVA: 0x000675B0 File Offset: 0x000657B0
private void Update()
{
RaycastHit raycastHit;
if (this.listen && !this.rbody.isKinematic && !this.dynamicCollide && this.c && Physics.Raycast(this.tr.position + new Vector3(0f, 30f, 0f), Vector3.up * -1f, out raycastHit, 200f, 4194305))
{
if (this.tr.position.y < raycastHit.point.y)
{
this.safePosition = raycastHit.point;
this.underground = true;
return;
}
if (!this.dynamicCollide)
{
Vector3 position = this.tr.position;
bool flag = Physics.Linecast(position + new Vector3(0f, 20f, 0f), raycastHit.point, 144);
bool flag2 = false;
if (!flag)
{
flag2 = Physics.Raycast(position + new Vector3(0f, 400f, 0f), Vector3.up * -1f, 1000f, 768);
}
RaycastHit raycastHit2;
if ((flag || flag2) && !this.dynamicCollide && Physics.SphereCast(this.c.tr.position + new Vector3(0f, 20f, 0f), 1.25f, Vector3.up * -1f, out raycastHit2, 200f, 4194305))
{
if (this.c.node != null)
{
this.c.setArea = (int)this.c.node.Area;
}
GraphNode graphNode = this.c.NearNode(raycastHit2.point, false, 0, -1, 0);
if (graphNode != null)
{
this.safePosition = (Vector3)graphNode.position;
this.c.ClaimNode(graphNode, this.safePosition, false);
}
else if (this.c.node != null)
{
this.safePosition = (Vector3)graphNode.position;
}
else
{
this.safePosition = this.startPoint;
}
this.dynamicCollide = true;
}
}
}
}
// Token: 0x06000492 RID: 1170 RVA: 0x000677F4 File Offset: 0x000659F4
private void FixedUpdate()
{
if (this.listen && !this.rbody.isKinematic)
{
if (this.body)
{
this.body.tr.position = this.tr.position - new Vector3(0f, 0.2f, 0f);
}
if (this.c)
{
if (!this.c.jumpingPosition && !this.c.jumpingAreas)
{
if (this.underground)
{
if (Mathf.Abs(this.tr.position.y - this.safePosition.y) > 0.5f)
{
Vector3 vector = Vector3.Lerp(this.c.tr.position, this.safePosition, Time.fixedDeltaTime * 5f);
this.c.SetPosition(vector, null);
return;
}
}
else
{
if (this.dynamicCollide)
{
Vector3 vector2 = Vector3.Lerp(this.c.tr.position, this.safePosition, Time.fixedDeltaTime * 7f);
this.c.SetPosition(vector2, null);
return;
}
this.c.SetPosition(this.tr.position - new Vector3(0f, 0.4f, 0f), null);
return;
}
}
else
{
this.End();
}
}
}
}
// Token: 0x06000493 RID: 1171 RVA: 0x0006796C File Offset: 0x00065B6C
private void OnCollisionEnter(Collision collision)
{
if ((collision.gameObject.layer == 0 || collision.gameObject.layer == 22) && this.type == "Hit" && (Time.timeSinceLevelLoad > this.timeSinceCollision + 0.1f || this.timeSinceCollision == 0f))
{
if (this.bounced < 2)
{
this.HitFX();
}
this.timeSinceCollision = Time.timeSinceLevelLoad;
this.bounced++;
if (this.bounced >= this.bounceMax)
{
this.rbody.isKinematic = true;
}
}
}
// Token: 0x06000494 RID: 1172 RVA: 0x00067A0C File Offset: 0x00065C0C
private void HitFX()
{
MasterAudio.PlaySound3DAtVector3AndForget("Body Fall", base.gameObject.transform.position, Random.Range(0.5f, 0.6f), new float?(Random.Range(0.95f, 1f)), 0f, "", null);
if (this.c && !this.c.dead)
{
GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(129);
RaycastHit raycastHit;
if (Physics.Raycast(this.c.tr.position + new Vector3(0f, 3f, 0f), Vector3.up * -1f, out raycastHit, 10f, 4194305))
{
pooledGameObject.transform.rotation = Quaternion.Euler(Quaternion.FromToRotation(Vector3.up, raycastHit.normal).eulerAngles);
}
pooledGameObject.transform.position = this.c.tr.position + new Vector3(0f, 0.1f, 0f);
pooledGameObject.SetActive(true);
}
}
// Token: 0x06000495 RID: 1173 RVA: 0x00067B4E File Offset: 0x00065D4E
public void End()
{
this.listen = false;
this.turnOff = this.Ending();
if (!base.gameObject.activeSelf)
{
base.gameObject.SetActive(true);
}
base.StartCoroutine(this.turnOff);
}
// Token: 0x06000496 RID: 1174 RVA: 0x00067B89 File Offset: 0x00065D89
public void TurnOff()
{
this.HitFX();
base.gameObject.SetActive(false);
}
// Token: 0x06000497 RID: 1175 RVA: 0x00067B9D File Offset: 0x00065D9D
public void EndNow()
{
this.ReturnObjs();
}
// Token: 0x06000498 RID: 1176 RVA: 0x00067BA5 File Offset: 0x00065DA5
private IEnumerator Ending()
{
this.rbody.isKinematic = true;
yield return new WaitForSeconds(1f);
this.ReturnObjs();
base.gameObject.SetActive(false);
yield break;
}
// Token: 0x06000499 RID: 1177 RVA: 0x00067BB4 File Offset: 0x00065DB4
private void ReturnObjs()
{
if (this.pooledObject)
{
Links.x.cellar.ReturnPooledGameObject(this.pooledNumber, this.pooledObject);
}
}
// Token: 0x04000755 RID: 1877
public string type;
// Token: 0x04000756 RID: 1878
private IEnumerator turnOff;
// Token: 0x04000757 RID: 1879
private GameObject pooledObject;
// Token: 0x04000758 RID: 1880
private int pooledNumber;
// Token: 0x04000759 RID: 1881
public Rigidbody rbody;
// Token: 0x0400075A RID: 1882
private float timeSinceCollision;
// Token: 0x0400075B RID: 1883
public Character c;
// Token: 0x0400075C RID: 1884
public int bounceMax = 3;
// Token: 0x0400075D RID: 1885
private int bounced;
// Token: 0x0400075E RID: 1886
public bool listen;
// Token: 0x0400075F RID: 1887
private Transform tr;
// Token: 0x04000760 RID: 1888
public Body body;
// Token: 0x04000761 RID: 1889
private Vector3 safePosition;
// Token: 0x04000762 RID: 1890
private bool dynamicCollide;
// Token: 0x04000763 RID: 1891
private bool underground;
// Token: 0x04000764 RID: 1892
private Vector3 startPoint;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,140 @@
using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
// Token: 0x0200009B RID: 155
public class CompanionDrop : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler
{
// Token: 0x06000E8B RID: 3723 RVA: 0x001160F3 File Offset: 0x001142F3
private void OnEnable()
{
}
// Token: 0x06000E8C RID: 3724 RVA: 0x001160F5 File Offset: 0x001142F5
private void Start()
{
this.EndDrag();
}
// Token: 0x06000E8D RID: 3725 RVA: 0x001160FD File Offset: 0x001142FD
public void StartDrag()
{
this.SetButton(true);
}
// Token: 0x06000E8E RID: 3726 RVA: 0x00116106 File Offset: 0x00114306
public void EndDrag()
{
this.SetButton(false);
}
// Token: 0x06000E8F RID: 3727 RVA: 0x00116110 File Offset: 0x00114310
public void SetButton(bool state)
{
new Color(0.6039216f, 0.4745098f, 0.4745098f, 0f);
this.btn.interactable = state;
this.img.raycastTarget = state;
if (state)
{
Color color = this.highlight;
ColorBlock colors = this.btn.colors;
colors.normalColor = color;
colors.selectedColor = color * 1.5f;
colors.highlightedColor = color * 1.5f;
if (!Links.x.formation.dragging)
{
Links.x.formation.ToggleHighlight(this.label1, true);
Links.x.formation.ToggleHighlight(this.label2, true);
return;
}
}
else
{
ColorBlock colors2 = this.btn.colors;
colors2.normalColor = this.normal;
colors2.highlightedColor = this.normal;
colors2.selectedColor = this.normal;
if (Links.x.formation.hoverBox != this)
{
Links.x.formation.ToggleHighlight(this.label1, false);
Links.x.formation.ToggleHighlight(this.label2, false);
}
}
}
// Token: 0x06000E90 RID: 3728 RVA: 0x0011624B File Offset: 0x0011444B
public void ToggleHighlight(bool state)
{
Links.x.formation.ToggleHighlight(this.label1, state);
Links.x.formation.ToggleHighlight(this.label2, state);
}
// Token: 0x06000E91 RID: 3729 RVA: 0x0011627C File Offset: 0x0011447C
public void OnPointerEnter(PointerEventData eventData)
{
if (Links.x.formation)
{
Links.x.formation.canDrop = true;
Links.x.formation.hoverBox = this;
if (Links.x.formation.dragging)
{
Links.x.formation.GetDescription(null, this);
}
}
this.ToggleHighlight(true);
}
// Token: 0x06000E92 RID: 3730 RVA: 0x001162E4 File Offset: 0x001144E4
public void OnPointerExit(PointerEventData eventData)
{
if (Links.x.formation)
{
Links.x.formation.canDrop = false;
Links.x.formation.hoverBox = null;
if (!Links.x.joy)
{
if (!Links.x.formation.selectedCharacter)
{
Links.x.formation.formationDescription = Links.x.formation.defaultText;
}
else
{
Links.x.formation.GetDescription(null, null);
}
}
}
this.ToggleHighlight(false);
}
// Token: 0x06000E93 RID: 3731 RVA: 0x0011637C File Offset: 0x0011457C
public void OnPointerUp(PointerEventData eventData)
{
}
// Token: 0x06000E94 RID: 3732 RVA: 0x0011637E File Offset: 0x0011457E
public void OnPointerDown(PointerEventData eventData)
{
}
// Token: 0x04001710 RID: 5904
public Button btn;
// Token: 0x04001711 RID: 5905
public int dropNum;
// Token: 0x04001712 RID: 5906
public Image img;
// Token: 0x04001713 RID: 5907
public Color highlight;
// Token: 0x04001714 RID: 5908
public Color normal;
// Token: 0x04001715 RID: 5909
public string label1;
// Token: 0x04001716 RID: 5910
public string label2;
}

View File

@@ -0,0 +1,651 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
// Token: 0x0200009C RID: 156
public class CompanionIcon : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler
{
// Token: 0x06000E96 RID: 3734 RVA: 0x00116388 File Offset: 0x00114588
private void Awake()
{
this.normal = this.btn.colors.normalColor;
this.useItemTr = this.useItemsRT.gameObject.transform;
this.autoCastTr = this.autoCastRT.gameObject.transform;
this.leaderTr = this.leaderRT.gameObject.transform;
this.useItemOffset = this.rt.anchoredPosition3D - this.useItemsRT.anchoredPosition3D;
this.autoCastOffset = this.rt.anchoredPosition3D - this.autoCastRT.anchoredPosition3D;
this.leaderOffset = this.rt.anchoredPosition3D - this.leaderRT.anchoredPosition3D;
this.useItems.gameObject.SetActive(false);
this.autoCast.gameObject.SetActive(false);
this.leader.gameObject.SetActive(false);
this.useItemsJoy.gameObject.SetActive(false);
this.autoCastJoy.gameObject.SetActive(false);
this.leaderJoy.gameObject.SetActive(false);
if (this.selected)
{
this.selected.enabled = false;
}
}
// Token: 0x06000E97 RID: 3735 RVA: 0x001164D4 File Offset: 0x001146D4
private void Start()
{
if (this.selected)
{
this.selected.enabled = false;
}
if (!this.tr)
{
this.tr = base.transform;
}
this.allCompanionIcons = Links.x.formation.companionIcons;
}
// Token: 0x06000E98 RID: 3736 RVA: 0x00116528 File Offset: 0x00114728
public void TurnOff()
{
this.character = null;
this.leader.gameObject.SetActive(false);
this.leaderJoy.isOn = false;
this.leaderJoy.gameObject.SetActive(false);
}
// Token: 0x06000E99 RID: 3737 RVA: 0x00116560 File Offset: 0x00114760
public void Setup(Character newCharacter)
{
if (this.selected)
{
this.selected.enabled = false;
}
this.character = newCharacter;
this.dragging = false;
Links.x.renderPortraits.AddCharacter(this.character, this.character.stats.xmlName, null, true, null, null, null, this);
this.updateTime = Time.realtimeSinceStartup;
this.useItems.isOn = false;
this.autoCast.isOn = false;
this.useItems.interactable = true;
this.autoCast.interactable = true;
this.useItems.targetGraphic.raycastTarget = true;
this.autoCast.targetGraphic.raycastTarget = true;
this.useItems.graphic.raycastTarget = true;
this.autoCast.graphic.raycastTarget = true;
this.useItemsJoy.isOn = this.useItems.isOn;
this.autoCastJoy.isOn = this.autoCast.isOn;
this.leaderJoy.isOn = this.leader.isOn;
if (!this.leader.isOn)
{
this.leaderJoy.interactable = false;
}
this.CheckLeader();
if (Links.x.mk)
{
this.useItems.gameObject.SetActive(false);
this.autoCast.gameObject.SetActive(true);
this.leader.gameObject.SetActive(true);
this.useItemsJoy.gameObject.SetActive(false);
this.autoCastJoy.gameObject.SetActive(false);
this.leaderJoy.gameObject.SetActive(false);
return;
}
this.useItems.gameObject.SetActive(false);
this.autoCast.gameObject.SetActive(false);
this.leader.gameObject.SetActive(false);
}
// Token: 0x06000E9A RID: 3738 RVA: 0x00116748 File Offset: 0x00114948
public void CheckLeader()
{
if (this.character)
{
if (Links.x.formation.SharingFormationGroup(this.character))
{
if (this.character.stats.isLeader)
{
this.leader.interactable = true;
this.leader.targetGraphic.raycastTarget = true;
this.leader.graphic.raycastTarget = true;
this.leader.isOn = true;
this.leader.gameObject.SetActive(true);
}
else if (this.character.stats.defendMainInCombat)
{
this.leader.gameObject.SetActive(true);
this.leader.interactable = true;
this.leader.targetGraphic.raycastTarget = true;
this.leader.graphic.raycastTarget = true;
this.leader.isOn = false;
}
else
{
this.leader.isOn = false;
this.leader.gameObject.SetActive(false);
}
}
else
{
this.leader.gameObject.SetActive(false);
this.leaderJoy.gameObject.SetActive(false);
}
if (Links.x.joy)
{
this.leaderJoy.isOn = this.leader.isOn;
this.leaderJoy.interactable = this.leader.interactable;
this.leader.interactable = false;
if (base.gameObject == Links.x.gameplay.currentEventObject && this.character.stats.defendMainInCombat)
{
this.leaderJoy.gameObject.SetActive(true);
}
}
}
}
// Token: 0x06000E9B RID: 3739 RVA: 0x00116904 File Offset: 0x00114B04
private void Update()
{
if (Links.x.joy)
{
if (base.gameObject == Links.x.gameplay.currentEventObject)
{
if (!this.hovering)
{
this.OnPointerEnter(null);
}
}
else if (this.hovering && !this.dragging)
{
this.OnPointerExit(null);
}
}
if (Time.realtimeSinceStartup > this.updateTime + 0.15f)
{
this.updateTime = Time.realtimeSinceStartup;
this.companionPortrait.texture = this.texturesIdle;
}
if (Links.x.mk && (this.hovering || this.dragging))
{
if (Input.GetMouseButtonDown(0))
{
this.OnPointerDown(null);
}
if (Input.GetMouseButtonUp(0))
{
this.OnPointerUp(null);
}
}
if (this.dragging)
{
if (Links.x.mk)
{
this.tr.position = Links.x.menuCamera.ScreenToWorldPoint(Input.mousePosition) + this.offset;
}
else
{
EventSystem.current.SetSelectedGameObject(base.gameObject);
float num = Links.x.fellowship.move.magnitude / 2f;
Vector3 vector = new Vector3(Links.x.fellowship.move.x, Links.x.fellowship.move.y, 0f) * num;
bool flag = true;
Vector3 vector2 = this.tr.position + vector;
if (vector2.x >= Links.x.formation.bottomRight.transform.position.x)
{
flag = false;
}
if (vector2.x <= Links.x.formation.bottomLeft.transform.position.x)
{
flag = false;
}
if (vector2.y >= Links.x.formation.topRight.transform.position.y)
{
flag = false;
}
if (vector2.y <= Links.x.formation.bottomRight.transform.position.y)
{
flag = false;
}
if (flag)
{
this.tr.position += vector;
}
CompanionDrop closestBox = Links.x.formation.GetClosestBox(this.tr.position);
this.prevBox = Links.x.formation.hoverBox;
if (closestBox != this.prevBox)
{
if (this.prevBox)
{
this.prevBox.OnPointerExit(null);
this.prevBox.img.material = Links.x.sceneMap.normalMaterial;
}
if (closestBox)
{
closestBox.OnPointerEnter(null);
closestBox.img.material = Links.x.sceneMap.hoverMaterial;
}
}
Links.x.formation.hoverBox = closestBox;
}
Links.x.formation.dragMessage.text = Links.x.formation.formationDescription;
}
}
// Token: 0x06000E9C RID: 3740 RVA: 0x00116C14 File Offset: 0x00114E14
private void LateUpdate()
{
this.SetIcons();
if (this.waitForDrag && Links.x.mk)
{
if (Input.GetMouseButton(0) && (Time.realtimeSinceStartup > this.waitForDragTime + 0.3f || Vector3.Distance(this.waitForDragPos, Input.mousePosition) > Links.x.formation.dragThreshold))
{
this.Drag();
return;
}
if (Time.realtimeSinceStartup > this.waitForDragTime + 0.3f)
{
this.waitForDrag = false;
}
}
}
// Token: 0x06000E9D RID: 3741 RVA: 0x00116C98 File Offset: 0x00114E98
private void Drag()
{
this.dragging = true;
for (int i = 0; i < this.allCompanionIcons.Count; i++)
{
if (this.allCompanionIcons[i].character && (Links.x.mk || (Links.x.joy && this.allCompanionIcons[i] != this)))
{
this.allCompanionIcons[i].border.raycastTarget = false;
this.allCompanionIcons[i].btn.interactable = false;
}
}
Links.x.formationTooltip.EndHoverText(base.gameObject, false);
this.savedPos = this.tr.position;
CompanionDrop component = this.tr.parent.gameObject.GetComponent<CompanionDrop>();
this.tr.SetParent(Links.x.formation.dragHolder, true);
Links.x.formation.dragging = true;
this.useItems.interactable = false;
this.autoCast.interactable = false;
this.useItems.targetGraphic.raycastTarget = false;
this.autoCast.targetGraphic.raycastTarget = false;
this.useItems.graphic.raycastTarget = false;
this.autoCast.graphic.raycastTarget = false;
this.leader.interactable = false;
this.leader.interactable = false;
this.leader.isOn = false;
this.character.stats.isLeader = false;
this.leaderJoy.isOn = this.leader.isOn;
this.leaderJoy.interactable = this.leader.interactable;
if (Links.x.joy)
{
this.leaderJoy.gameObject.SetActive(this.leader.interactable);
}
this.leader.targetGraphic.raycastTarget = false;
this.leader.graphic.raycastTarget = false;
Links.x.formation.group1box.StartDrag();
Links.x.formation.group2box.StartDrag();
Links.x.formation.group3box.StartDrag();
Links.x.formation.group4box.StartDrag();
Links.x.formation.group5box.StartDrag();
Links.x.formation.group6box.StartDrag();
Links.x.formation.group7box.StartDrag();
Links.x.formation.group8box.StartDrag();
Links.x.formation.group9box.StartDrag();
this.offset = this.tr.position - Links.x.menuCamera.ScreenToWorldPoint(Input.mousePosition);
Links.x.formation.StartDrag(this, component);
this.SetIcons();
this.SetButton(true);
this.SetControllerIcons(false);
this.waitForDrag = false;
if (Links.x.joy)
{
Links.x.hudControl.JoyBox(false);
}
}
// Token: 0x06000E9E RID: 3742 RVA: 0x00116FCC File Offset: 0x001151CC
private void SetIcons()
{
this.useItemsRT.anchoredPosition3D = this.rt.anchoredPosition3D - this.useItemOffset;
this.autoCastRT.anchoredPosition3D = this.rt.anchoredPosition3D - this.autoCastOffset;
this.leaderRT.anchoredPosition3D = this.rt.anchoredPosition3D - this.leaderOffset;
if (this.useItemTr.parent != this.tr.parent)
{
this.useItemTr.SetParent(this.tr.parent);
this.autoCastTr.SetParent(this.tr.parent);
this.leaderTr.SetParent(this.tr.parent);
this.autoCastTr.SetAsLastSibling();
this.useItemTr.SetAsLastSibling();
this.leaderTr.SetAsLastSibling();
this.useItemTr.localScale = Vector3.one;
this.autoCastTr.localScale = Vector3.one;
}
}
// Token: 0x06000E9F RID: 3743 RVA: 0x001170DF File Offset: 0x001152DF
public void PointerUpFromTrigger()
{
if (this.dragging)
{
this.OnPointerUp(null);
return;
}
this.OnPointerDown(null);
}
// Token: 0x06000EA0 RID: 3744 RVA: 0x001170F8 File Offset: 0x001152F8
public void OnPointerDown(PointerEventData eventData)
{
if (Links.x.formation.selectedCharacter)
{
CompanionIcon selectedIcon = Links.x.formation.GetSelectedIcon();
if (selectedIcon)
{
selectedIcon.selected.enabled = false;
}
}
Links.x.formation.UpdateSelectedCharacter(this.character);
this.selected.enabled = true;
if (!this.dragging)
{
if (Links.x.joy)
{
this.Drag();
return;
}
if (!this.waitForDrag)
{
this.waitForDrag = true;
this.waitForDragTime = Time.realtimeSinceStartup;
this.waitForDragPos = Input.mousePosition;
}
}
}
// Token: 0x06000EA1 RID: 3745 RVA: 0x001171A0 File Offset: 0x001153A0
public void SetButton(bool state)
{
if (state)
{
this.normal * 1.5f;
Button button = this.btn;
ColorBlock colors = button.colors;
colors.disabledColor = colors.highlightedColor;
button.colors = colors;
return;
}
Button button2 = this.btn;
ColorBlock colors2 = button2.colors;
colors2.disabledColor = this.normal;
button2.colors = colors2;
}
// Token: 0x06000EA2 RID: 3746 RVA: 0x00117203 File Offset: 0x00115403
public void OnPointerUp(PointerEventData eventData)
{
if (this.dragging)
{
this.EndDrag();
}
this.waitToEndDrag = true;
if (Links.x.joy)
{
this.dragging = false;
this.waitToEndDrag = false;
}
}
// Token: 0x06000EA3 RID: 3747 RVA: 0x00117234 File Offset: 0x00115434
public void EndDrag()
{
this.SetButton(false);
this.dragging = false;
this.useItems.interactable = true;
this.autoCast.interactable = true;
this.useItems.targetGraphic.raycastTarget = true;
this.autoCast.targetGraphic.raycastTarget = true;
this.useItems.graphic.raycastTarget = true;
this.autoCast.graphic.raycastTarget = true;
if (Links.x.formation.hoverBox != null)
{
this.character.stats.formationGroup = Links.x.formation.hoverBox.dropNum;
Links.x.formation.SetPortraitParent(this.index, true);
Links.x.formation.group1box.EndDrag();
Links.x.formation.group2box.EndDrag();
Links.x.formation.group3box.EndDrag();
Links.x.formation.group4box.EndDrag();
Links.x.formation.group5box.EndDrag();
Links.x.formation.group6box.EndDrag();
Links.x.formation.group7box.EndDrag();
Links.x.formation.group8box.EndDrag();
Links.x.formation.group9box.EndDrag();
}
else
{
this.tr.position = this.savedPos;
Links.x.formation.SetPortraitParent(this.index, true);
Links.x.formation.group1box.EndDrag();
Links.x.formation.group2box.EndDrag();
Links.x.formation.group3box.EndDrag();
Links.x.formation.group4box.EndDrag();
Links.x.formation.group5box.EndDrag();
Links.x.formation.group6box.EndDrag();
Links.x.formation.group7box.EndDrag();
Links.x.formation.group8box.EndDrag();
Links.x.formation.group9box.EndDrag();
}
for (int i = 0; i < this.allCompanionIcons.Count; i++)
{
if (this.allCompanionIcons[i].character)
{
this.allCompanionIcons[i].border.raycastTarget = true;
this.allCompanionIcons[i].btn.interactable = true;
}
}
if (this.prevBox)
{
this.prevBox.OnPointerExit(null);
this.prevBox.img.material = Links.x.sceneMap.normalMaterial;
}
CompanionDrop component = this.tr.parent.gameObject.GetComponent<CompanionDrop>();
Links.x.SetFormationParty();
Links.x.formation.EndDrag(component);
this.SetIcons();
this.SetControllerIcons(true);
if (Links.x.joy)
{
EventSystem.current.SetSelectedGameObject(base.gameObject);
this.OnPointerEnter(null);
Links.x.hudControl.SetJoyBox(base.gameObject.GetComponent<UITriggerButton>());
}
}
// Token: 0x06000EA4 RID: 3748 RVA: 0x001175A4 File Offset: 0x001157A4
public void OnPointerEnter(PointerEventData eventData)
{
this.hovering = true;
if (!this.character)
{
return;
}
if (!Input.GetMouseButton(0))
{
bool flag = this.dragging;
}
bool joy = Links.x.joy;
CompanionDrop component = this.tr.parent.gameObject.GetComponent<CompanionDrop>();
if (component)
{
component.SetButton(true);
}
if (Links.x.formation && component)
{
Links.x.formation.GetDescription(this, component);
Links.x.formation.UpdateSliderValues(this.character);
}
if (this.waitToEndDrag)
{
this.dragging = false;
this.waitToEndDrag = false;
}
}
// Token: 0x06000EA5 RID: 3749 RVA: 0x0011765A File Offset: 0x0011585A
public CompanionDrop GetDrop()
{
return this.tr.parent.gameObject.GetComponent<CompanionDrop>();
}
// Token: 0x06000EA6 RID: 3750 RVA: 0x00117674 File Offset: 0x00115874
public void OnPointerExit(PointerEventData eventData)
{
CompanionDrop component = this.tr.parent.gameObject.GetComponent<CompanionDrop>();
if (component)
{
component.SetButton(false);
}
this.hovering = false;
if (!Links.x.formation.selectedCharacter)
{
Links.x.formation.formationDescription = Links.x.formation.defaultText;
Links.x.formation.EmptySliders();
}
else if (Links.x.mk)
{
Links.x.formation.GetDescription(null, null);
Links.x.formation.UpdateSliderValues(Links.x.formation.selectedCharacter);
}
this.waitForDragTime = 0f;
this.waitForDrag = false;
}
// Token: 0x06000EA7 RID: 3751 RVA: 0x00117740 File Offset: 0x00115940
public void SetControllerIcons(bool state)
{
if (this.dragging)
{
state = false;
}
if (!this.character)
{
state = false;
this.leaderJoy.gameObject.SetActive(false);
this.autoCastJoy.gameObject.SetActive(false);
return;
}
this.autoCastJoy.gameObject.SetActive(false);
if (this.character.stats.defendMainInCombat && Links.x.joy)
{
this.leaderJoy.gameObject.SetActive(state);
return;
}
this.leaderJoy.gameObject.SetActive(false);
}
// Token: 0x04001717 RID: 5911
public int index;
// Token: 0x04001718 RID: 5912
public Character character;
// Token: 0x04001719 RID: 5913
public bool dragging;
// Token: 0x0400171A RID: 5914
public RawImage companionPortrait;
// Token: 0x0400171B RID: 5915
public Image border;
// Token: 0x0400171C RID: 5916
public Button btn;
// Token: 0x0400171D RID: 5917
public RenderTexture texturesIdle;
// Token: 0x0400171E RID: 5918
public bool hovering;
// Token: 0x0400171F RID: 5919
private Transform tr;
// Token: 0x04001720 RID: 5920
private Vector3 offset;
// Token: 0x04001721 RID: 5921
private List<CompanionIcon> allCompanionIcons;
// Token: 0x04001722 RID: 5922
private Vector3 savedPos;
// Token: 0x04001723 RID: 5923
private float updateTime;
// Token: 0x04001724 RID: 5924
private bool waitToEndDrag;
// Token: 0x04001725 RID: 5925
private CompanionDrop prevBox;
// Token: 0x04001726 RID: 5926
public RectTransform rt;
// Token: 0x04001727 RID: 5927
private Color normal;
// Token: 0x04001728 RID: 5928
public Toggle useItems;
// Token: 0x04001729 RID: 5929
public Toggle autoCast;
// Token: 0x0400172A RID: 5930
public Toggle leader;
// Token: 0x0400172B RID: 5931
public Toggle useItemsJoy;
// Token: 0x0400172C RID: 5932
public Toggle autoCastJoy;
// Token: 0x0400172D RID: 5933
public Toggle leaderJoy;
// Token: 0x0400172E RID: 5934
private Vector3 useItemOffset;
// Token: 0x0400172F RID: 5935
private Vector3 autoCastOffset;
// Token: 0x04001730 RID: 5936
private Vector3 leaderOffset;
// Token: 0x04001731 RID: 5937
public RectTransform useItemsRT;
// Token: 0x04001732 RID: 5938
public RectTransform autoCastRT;
// Token: 0x04001733 RID: 5939
public RectTransform leaderRT;
// Token: 0x04001734 RID: 5940
public Transform useItemTr;
// Token: 0x04001735 RID: 5941
public Transform autoCastTr;
// Token: 0x04001736 RID: 5942
public Transform leaderTr;
// Token: 0x04001737 RID: 5943
public bool waitForDrag;
// Token: 0x04001738 RID: 5944
public float waitForDragTime;
// Token: 0x04001739 RID: 5945
public Vector3 waitForDragPos;
// Token: 0x0400173A RID: 5946
public Image selected;
}

View File

@@ -0,0 +1,33 @@
using System;
using UnityEngine;
using UnityEngine.UI;
// Token: 0x0200009D RID: 157
public class ContentSizeFitterEx : ContentSizeFitter
{
// Token: 0x06000EA9 RID: 3753 RVA: 0x001177E8 File Offset: 0x001159E8
public override void SetLayoutHorizontal()
{
base.SetLayoutHorizontal();
RectTransform rectTransform = base.transform as RectTransform;
Vector2 sizeDelta = rectTransform.sizeDelta;
sizeDelta.x = Mathf.Clamp(sizeDelta.x, this.sizeMin.x, this.sizeMax.x);
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, sizeDelta.x);
}
// Token: 0x06000EAA RID: 3754 RVA: 0x00117844 File Offset: 0x00115A44
public override void SetLayoutVertical()
{
base.SetLayoutVertical();
RectTransform rectTransform = base.transform as RectTransform;
Vector2 sizeDelta = rectTransform.sizeDelta;
sizeDelta.y = Mathf.Clamp(sizeDelta.y, this.sizeMin.y, this.sizeMax.y);
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, sizeDelta.y);
}
// Token: 0x0400173B RID: 5947
public Vector2 sizeMin = new Vector2(0f, 0f);
// Token: 0x0400173C RID: 5948
public Vector2 sizeMax = new Vector2(350f, 1080f);
}

View File

@@ -0,0 +1,52 @@
using System;
using UnityEngine;
// Token: 0x02000061 RID: 97
public class CoolAudioSource : MonoBehaviour
{
// Token: 0x06000B52 RID: 2898 RVA: 0x000DD8A8 File Offset: 0x000DBAA8
private void Awake()
{
this.audioSource = base.gameObject.GetComponent<AudioSource>();
this.audioSource.loop = this.loopIt;
if (this.is2D)
{
this.audioSource.spatialBlend = 0f;
}
else
{
this.audioSource.spatialBlend = 1f;
}
if (this.playOnAwake)
{
this.audioSource.playOnAwake = true;
}
else
{
this.audioSource.playOnAwake = false;
}
this.audioSource.volume = 0f;
this.audioSource.priority = 1;
base.enabled = false;
}
// Token: 0x0400108C RID: 4236
[Header("FOR JOSEPH")]
public bool playOnAwake;
// Token: 0x0400108D RID: 4237
public bool loopIt;
// Token: 0x0400108E RID: 4238
public bool is2D;
// Token: 0x0400108F RID: 4239
public bool playOnceThenWaitForCharacterToReturn;
// Token: 0x04001090 RID: 4240
public bool playEveryTimePlayerIsNear;
// Token: 0x04001091 RID: 4241
[Header("FOR HANNAH")]
public AudioSource audioSource;
}

View File

@@ -0,0 +1,109 @@
using System;
using UnityEngine;
using UnityEngine.Rendering;
// Token: 0x02000074 RID: 116
[ExecuteInEditMode]
[RequireComponent(typeof(Light))]
public class CopyShadows : MonoBehaviour
{
// Token: 0x06000B8A RID: 2954 RVA: 0x000DFDDA File Offset: 0x000DDFDA
private void OnEnable()
{
this.lightComponent = base.GetComponent<Light>();
this.SetupCommandBuffer();
}
// Token: 0x06000B8B RID: 2955 RVA: 0x000DFDEE File Offset: 0x000DDFEE
private void OnDisable()
{
this.lightComponent.RemoveCommandBuffer(LightEvent.AfterShadowMap, this.commandBuffer);
this.lightComponent.RemoveCommandBuffer(LightEvent.AfterScreenspaceMask, this.commandBuffer2);
this.ReleaseCommandBuffer();
}
// Token: 0x06000B8C RID: 2956 RVA: 0x000DFE1C File Offset: 0x000DE01C
private void Update()
{
if (this.tex == null || this.w != (float)Screen.width || this.h != (float)Screen.height)
{
if (this.tex != null)
{
this.tex.Release();
}
this.w = (float)Screen.width;
this.h = (float)Screen.height;
this.tex = new RenderTexture(Screen.width, Screen.height, 24, RenderTextureFormat.ARGB32);
this.reset = true;
}
if (this.reset)
{
this.OnDisable();
this.OnEnable();
this.reset = false;
}
float num = 0f;
if (Links.x && Links.x.diorama && Links.x.cameraEffects.indoors)
{
num = 1f;
}
Shader.SetGlobalFloat("_UsePointLight", num);
}
// Token: 0x06000B8D RID: 2957 RVA: 0x000DFF04 File Offset: 0x000DE104
private void SetupCommandBuffer()
{
this.commandBuffer = new CommandBuffer();
RenderTargetIdentifier renderTargetIdentifier = BuiltinRenderTextureType.CurrentActive;
this.commandBuffer.SetGlobalTexture(this.textureSemanticName, renderTargetIdentifier);
this.lightComponent.AddCommandBuffer(LightEvent.AfterShadowMap, this.commandBuffer);
this.commandBuffer2 = new CommandBuffer();
RenderTargetIdentifier renderTargetIdentifier2 = BuiltinRenderTextureType.CurrentActive;
this.commandBuffer2.Blit(renderTargetIdentifier2, this.tex, this.material);
this.commandBuffer2.SetGlobalTexture(this.textureSemanticName2, this.tex);
this.lightComponent.AddCommandBuffer(LightEvent.AfterScreenspaceMask, this.commandBuffer2);
}
// Token: 0x06000B8E RID: 2958 RVA: 0x000DFFA4 File Offset: 0x000DE1A4
private void ReleaseCommandBuffer()
{
this.commandBuffer2.Clear();
this.commandBuffer.Clear();
}
// Token: 0x0400119D RID: 4509
public string textureSemanticName = "_EnvironmentShadows";
// Token: 0x0400119E RID: 4510
public string textureSemanticName2 = "_EnvironmentShadowsScreenSpace";
// Token: 0x0400119F RID: 4511
public bool reset;
// Token: 0x040011A0 RID: 4512
private CommandBuffer commandBuffer;
// Token: 0x040011A1 RID: 4513
private CommandBuffer commandBuffer2;
// Token: 0x040011A2 RID: 4514
private Light lightComponent;
// Token: 0x040011A3 RID: 4515
public RenderTexture tex;
// Token: 0x040011A4 RID: 4516
public RenderTexture pointLightTexture;
// Token: 0x040011A5 RID: 4517
public Material material;
// Token: 0x040011A6 RID: 4518
private float w;
// Token: 0x040011A7 RID: 4519
private float h;
// Token: 0x040011A8 RID: 4520
public Transform pointLight;
}

View File

@@ -0,0 +1,96 @@
using System;
using UnityEngine;
using UnityEngine.Rendering;
// Token: 0x02000075 RID: 117
[ExecuteInEditMode]
[RequireComponent(typeof(Light))]
public class CopyShadowsBaker : MonoBehaviour
{
// Token: 0x06000B90 RID: 2960 RVA: 0x000DFFDA File Offset: 0x000DE1DA
private void OnEnable()
{
this.lightComponent = base.GetComponent<Light>();
this.SetupCommandBuffer();
}
// Token: 0x06000B91 RID: 2961 RVA: 0x000DFFEE File Offset: 0x000DE1EE
private void OnDisable()
{
this.lightComponent.RemoveCommandBuffer(LightEvent.AfterScreenspaceMask, this.commandBuffer2);
this.ReleaseCommandBuffer();
}
// Token: 0x06000B92 RID: 2962 RVA: 0x000E0008 File Offset: 0x000DE208
private void Update()
{
if (this.reset)
{
this.OnDisable();
this.OnEnable();
this.reset = false;
}
if (this.tex == null || this.w != (float)Screen.width || this.h != (float)Screen.height)
{
if (this.tex != null)
{
this.tex.Release();
}
this.w = (float)Screen.width;
this.h = (float)Screen.height;
this.tex = new RenderTexture(Screen.width, Screen.height, 24, RenderTextureFormat.ARGB32);
}
}
// Token: 0x06000B93 RID: 2963 RVA: 0x000E00A4 File Offset: 0x000DE2A4
private void SetupCommandBuffer()
{
this.commandBuffer2 = new CommandBuffer();
RenderTargetIdentifier renderTargetIdentifier = BuiltinRenderTextureType.CurrentActive;
this.commandBuffer2.Blit(renderTargetIdentifier, this.tex, this.material);
this.commandBuffer2.SetGlobalTexture(this.textureSemanticName2, this.tex);
this.lightComponent.AddCommandBuffer(LightEvent.AfterScreenspaceMask, this.commandBuffer2);
}
// Token: 0x06000B94 RID: 2964 RVA: 0x000E010E File Offset: 0x000DE30E
private void ReleaseCommandBuffer()
{
this.commandBuffer2.Clear();
}
// Token: 0x040011A9 RID: 4521
public string textureSemanticName = "_EnvironmentShadows";
// Token: 0x040011AA RID: 4522
public string textureSemanticName2 = "_EnvironmentShadowsScreenSpace";
// Token: 0x040011AB RID: 4523
public bool reset;
// Token: 0x040011AC RID: 4524
private CommandBuffer commandBuffer;
// Token: 0x040011AD RID: 4525
private CommandBuffer commandBuffer2;
// Token: 0x040011AE RID: 4526
private Light lightComponent;
// Token: 0x040011AF RID: 4527
public RenderTexture tex;
// Token: 0x040011B0 RID: 4528
public RenderTexture pointLightTexture;
// Token: 0x040011B1 RID: 4529
public Material material;
// Token: 0x040011B2 RID: 4530
private float w;
// Token: 0x040011B3 RID: 4531
private float h;
// Token: 0x040011B4 RID: 4532
public Transform pointLight;
}

View File

@@ -0,0 +1,44 @@
using System;
using UnityEngine;
// Token: 0x0200009E RID: 158
public class CreateCircle : MonoBehaviour
{
// Token: 0x06000EAC RID: 3756 RVA: 0x001178D0 File Offset: 0x00115AD0
public GameObject CreateSphere(Vector3 position, float size)
{
GameObject gameObject = GameObject.CreatePrimitive(PrimitiveType.Capsule);
gameObject.transform.parent = Links.x.gameplay.transform;
gameObject.transform.position = position;
gameObject.transform.localScale = new Vector3(size, size, size);
Object.Destroy(gameObject.GetComponent<SphereCollider>());
gameObject.layer = 2;
return gameObject;
}
// Token: 0x06000EAD RID: 3757 RVA: 0x00117930 File Offset: 0x00115B30
private void Start()
{
for (int i = 0; i < this.numberOfObjects; i++)
{
float num = (float)i * 3.1415927f * 2f / (float)this.numberOfObjects;
Vector3 vector = base.gameObject.transform.position + new Vector3(Mathf.Cos(num), 0f, Mathf.Sin(num)) * this.radius;
if (Physics.Raycast(vector + new Vector3(0f, 10f, 0f), Vector3.up * -1f, out this.hit, 20f, 8))
{
vector = this.hit.point;
GameObject gameObject = this.CreateSphere(vector, 0.5f);
gameObject.transform.rotation = Quaternion.LookRotation(vector - base.gameObject.transform.position);
gameObject.transform.Rotate(new Vector3(0f, 0f, 90f));
}
}
}
// Token: 0x0400173D RID: 5949
public int numberOfObjects = 30;
// Token: 0x0400173E RID: 5950
public float radius = 6f;
// Token: 0x0400173F RID: 5951
private RaycastHit hit;
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More