├── .gitattributes
├── .github
└── workflows
│ └── release.yml
├── .gitignore
├── LICENSE
├── README.md
├── dist
├── 1.0
│ ├── Assemblies
│ │ ├── 0MultiplayerAPI.dll
│ │ ├── 1Harmony.dll
│ │ ├── 2SettingsHelper.dll
│ │ └── SnapOut.dll
│ ├── Defs
│ │ ├── InteractionDefs
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDefs
│ │ │ └── Jobs_SnapOut.xml
│ │ └── ThoughtDefs
│ │ │ └── Thoughts_SnapOut.xml
│ └── Patches
│ │ └── CalmDownPatches.xml
├── 1.1
│ ├── Assemblies
│ │ ├── 0MultiplayerAPI.dll
│ │ └── SnapOut.dll
│ ├── Defs
│ │ ├── InteractionDefs
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDefs
│ │ │ └── Jobs_SnapOut.xml
│ │ └── ThoughtDefs
│ │ │ └── Thoughts_SnapOut.xml
│ └── Patches
│ │ └── CalmDownPatches.xml
├── 1.2
│ ├── Assemblies
│ │ ├── 0MultiplayerAPI.dll
│ │ └── SnapOut.dll
│ ├── Defs
│ │ ├── InteractionDefs
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDefs
│ │ │ └── Jobs_SnapOut.xml
│ │ └── ThoughtDefs
│ │ │ └── Thoughts_SnapOut.xml
│ └── Patches
│ │ └── CalmDownPatches.xml
├── 1.3
│ ├── Assemblies
│ │ ├── 0Harmony.dll
│ │ ├── 0MultiplayerAPI.dll
│ │ └── SnapOut.dll
│ ├── Defs
│ │ ├── InteractionDefs
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDefs
│ │ │ └── Jobs_SnapOut.xml
│ │ └── ThoughtDefs
│ │ │ └── Thoughts_SnapOut.xml
│ └── Patches
│ │ └── CalmDownPatches.xml
├── 1.4
│ ├── Assemblies
│ │ ├── 0MultiplayerAPI.dll
│ │ └── SnapOut.dll
│ ├── Defs
│ │ ├── InteractionDefs
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDefs
│ │ │ └── Jobs_SnapOut.xml
│ │ ├── ThoughtDefs
│ │ │ └── Thoughts_SnapOut.xml
│ │ └── WorkGiverDefs
│ │ │ └── WorkGivers_SnapOut.xml
│ └── Patches
│ │ └── CalmDownPatches.xml
├── About
│ ├── About.xml
│ ├── LoadFolders.xml
│ ├── Preview.png
│ └── PublishedFileId.txt
└── Languages
│ ├── ChineseSimplified
│ ├── DefInjected
│ │ ├── InteractionDef
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDef
│ │ │ └── Jobs_SnapOut.xml
│ │ ├── ThoughtDef
│ │ │ └── Thoughts_SnapOut.xml
│ │ └── WorkGiverDef
│ │ │ └── Jobs_SnapOut.xml
│ └── Keyed
│ │ └── CalmDown.xml
│ ├── Czech
│ ├── DefInjected
│ │ ├── InteractionDef
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDef
│ │ │ └── Jobs_SnapOut.xml
│ │ ├── ThoughtDef
│ │ │ └── Thoughts_SnapOut.xml
│ │ └── WorkGiverDef
│ │ │ └── Jobs_CalmDown.xml
│ └── Keyed
│ │ └── CalmDown.xml
│ ├── English
│ └── Keyed
│ │ └── CalmDown.xml
│ ├── French
│ ├── DefInjected
│ │ ├── InteractionDef
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDef
│ │ │ └── Jobs_SnapOut.xml
│ │ ├── ThoughtDef
│ │ │ └── Thoughts_SnapOut.xml
│ │ └── WorkGiverDef
│ │ │ └── Jobs_SnapOut.xml
│ └── Keyed
│ │ └── CalmDown.xml
│ ├── German
│ ├── DefInjected
│ │ ├── InteractionDef
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDef
│ │ │ └── Jobs_SnapOut.xml
│ │ ├── ThoughtDef
│ │ │ └── Thoughts_SnapOut.xml
│ │ └── WorkGiverDef
│ │ │ └── Jobs_CalmDown.xml
│ └── Keyed
│ │ └── CalmDown.xml
│ ├── Italian
│ ├── DefInjected
│ │ ├── InteractionDef
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDef
│ │ │ └── Jobs_SnapOut.xml
│ │ ├── ThoughtDef
│ │ │ └── Thoughts_SnapOut.xml
│ │ └── WorkGiverDef
│ │ │ └── Jobs_SnapOut.xml
│ └── Keyed
│ │ └── CalmDown.xml
│ ├── Polish
│ └── Keyed
│ │ └── CalmDown.xml
│ ├── Portuguese
│ └── Keyed
│ │ └── CalmDown.xml
│ ├── PortugueseBrazilian
│ ├── DefInjected
│ │ ├── InteractionDef
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDef
│ │ │ └── Jobs_SnapOut.xml
│ │ ├── ThoughtDef
│ │ │ └── Thoughts_SnapOut.xml
│ │ └── WorkGiverDef
│ │ │ └── Jobs_SnapOut.xml
│ └── Keyed
│ │ └── CalmDown.xml
│ ├── Russian
│ ├── DefInjected
│ │ ├── InteractionDef
│ │ │ └── Interactions_SnapOut.xml
│ │ ├── JobDef
│ │ │ └── Jobs_SnapOut.xml
│ │ ├── ThoughtDef
│ │ │ └── Thoughts_SnapOut.xml
│ │ └── WorkGiverDef
│ │ │ └── Jobs_CalmDown.xml
│ └── Keyed
│ │ └── CalmDown.xml
│ └── Spanish
│ ├── DefInjected
│ ├── InteractionDef
│ │ └── Interactions_SnapOut.xml
│ ├── JobDef
│ │ └── Jobs_SnapOut.xml
│ ├── ThoughtDef
│ │ └── Thoughts_SnapOut.xml
│ └── WorkGiverDef
│ │ └── Jobs_SnapOut.xml
│ └── Keyed
│ └── CalmDown.xml
└── src
├── JobDriver_ActuallyRecover.cs
├── JobDriver_CalmDown.cs
├── JobDriver_GoToSafety.cs
├── JobDriver_SnappingOut.cs
├── ModSettings.cs
├── Properties
└── AssemblyInfo.cs
├── SnapCheck.cs
├── SnapDefOf.cs
├── SnapOut.cs
├── SnapOut.csproj
├── SnapOut.sln
├── SnapUtils.cs
└── WorkGiver_CalmPawnDown.cs
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | on:
4 | release:
5 | types: [published]
6 |
7 | jobs:
8 | upload:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v2
12 | - name: Upload to Steam Workshop
13 | uses: weilbyte/steam-workshop-upload@v1
14 | with:
15 | appid: 294100
16 | itemid: 1319782555
17 | path: 'dist'
18 | env:
19 | STEAM_USERNAME: ${{ secrets.STEAM_USERNAME }}
20 | STEAM_PASSWORD: ${{ secrets.STEAM_PASSWORD }}
21 | STEAM_TFASEED: ${{ secrets.STEAM_TFASEED }}
22 | - name: Rename folder
23 | run: mv dist SnapOut
24 | - name: Package folder
25 | uses: montudor/action-zip@v0.1.0
26 | with:
27 | args: zip -qq -r out.zip SnapOut
28 | - name: Upload to release
29 | uses: actions/upload-release-asset@v1
30 | env:
31 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32 | with:
33 | upload_url: ${{ github.event.release.upload_url }}
34 | asset_path: ./out.zip
35 | asset_name: SnapOut.zip
36 | asset_content_type: application/zip
37 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Aa][Rr][Mm]/
27 | [Aa][Rr][Mm]64/
28 | bld/
29 | [Bb]in/
30 | [Oo]bj/
31 | [Ll]og/
32 | [Ll]ogs/
33 |
34 | # Visual Studio 2015/2017 cache/options directory
35 | .vs/
36 | # Uncomment if you have tasks that create the project's static files in wwwroot
37 | #wwwroot/
38 |
39 | # Visual Studio 2017 auto generated files
40 | Generated\ Files/
41 |
42 | # MSTest test Results
43 | [Tt]est[Rr]esult*/
44 | [Bb]uild[Ll]og.*
45 |
46 | # NUnit
47 | *.VisualState.xml
48 | TestResult.xml
49 | nunit-*.xml
50 |
51 | # Build Results of an ATL Project
52 | [Dd]ebugPS/
53 | [Rr]eleasePS/
54 | dlldata.c
55 |
56 | # Benchmark Results
57 | BenchmarkDotNet.Artifacts/
58 |
59 | # .NET Core
60 | project.lock.json
61 | project.fragment.lock.json
62 | artifacts/
63 |
64 | # StyleCop
65 | StyleCopReport.xml
66 |
67 | # Files built by Visual Studio
68 | *_i.c
69 | *_p.c
70 | *_h.h
71 | *.ilk
72 | *.meta
73 | *.obj
74 | *.iobj
75 | *.pch
76 | *.pdb
77 | *.ipdb
78 | *.pgc
79 | *.pgd
80 | *.rsp
81 | *.sbr
82 | *.tlb
83 | *.tli
84 | *.tlh
85 | *.tmp
86 | *.tmp_proj
87 | *_wpftmp.csproj
88 | *.log
89 | *.vspscc
90 | *.vssscc
91 | .builds
92 | *.pidb
93 | *.svclog
94 | *.scc
95 |
96 | # Chutzpah Test files
97 | _Chutzpah*
98 |
99 | # Visual C++ cache files
100 | ipch/
101 | *.aps
102 | *.ncb
103 | *.opendb
104 | *.opensdf
105 | *.sdf
106 | *.cachefile
107 | *.VC.db
108 | *.VC.VC.opendb
109 |
110 | # Visual Studio profiler
111 | *.psess
112 | *.vsp
113 | *.vspx
114 | *.sap
115 |
116 | # Visual Studio Trace Files
117 | *.e2e
118 |
119 | # TFS 2012 Local Workspace
120 | $tf/
121 |
122 | # Guidance Automation Toolkit
123 | *.gpState
124 |
125 | # ReSharper is a .NET coding add-in
126 | _ReSharper*/
127 | *.[Rr]e[Ss]harper
128 | *.DotSettings.user
129 |
130 | # JustCode is a .NET coding add-in
131 | .JustCode
132 |
133 | # TeamCity is a build add-in
134 | _TeamCity*
135 |
136 | # DotCover is a Code Coverage Tool
137 | *.dotCover
138 |
139 | # AxoCover is a Code Coverage Tool
140 | .axoCover/*
141 | !.axoCover/settings.json
142 |
143 | # Visual Studio code coverage results
144 | *.coverage
145 | *.coveragexml
146 |
147 | # NCrunch
148 | _NCrunch_*
149 | .*crunch*.local.xml
150 | nCrunchTemp_*
151 |
152 | # MightyMoose
153 | *.mm.*
154 | AutoTest.Net/
155 |
156 | # Web workbench (sass)
157 | .sass-cache/
158 |
159 | # Installshield output folder
160 | [Ee]xpress/
161 |
162 | # DocProject is a documentation generator add-in
163 | DocProject/buildhelp/
164 | DocProject/Help/*.HxT
165 | DocProject/Help/*.HxC
166 | DocProject/Help/*.hhc
167 | DocProject/Help/*.hhk
168 | DocProject/Help/*.hhp
169 | DocProject/Help/Html2
170 | DocProject/Help/html
171 |
172 | # Click-Once directory
173 | publish/
174 |
175 | # Publish Web Output
176 | *.[Pp]ublish.xml
177 | *.azurePubxml
178 | # Note: Comment the next line if you want to checkin your web deploy settings,
179 | # but database connection strings (with potential passwords) will be unencrypted
180 | *.pubxml
181 | *.publishproj
182 |
183 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
184 | # checkin your Azure Web App publish settings, but sensitive information contained
185 | # in these scripts will be unencrypted
186 | PublishScripts/
187 |
188 | # NuGet Packages
189 | *.nupkg
190 | # NuGet Symbol Packages
191 | *.snupkg
192 | # The packages folder can be ignored because of Package Restore
193 | **/[Pp]ackages/*
194 | # except build/, which is used as an MSBuild target.
195 | !**/[Pp]ackages/build/
196 | # Uncomment if necessary however generally it will be regenerated when needed
197 | #!**/[Pp]ackages/repositories.config
198 | # NuGet v3's project.json files produces more ignorable files
199 | *.nuget.props
200 | *.nuget.targets
201 |
202 | # Microsoft Azure Build Output
203 | csx/
204 | *.build.csdef
205 |
206 | # Microsoft Azure Emulator
207 | ecf/
208 | rcf/
209 |
210 | # Windows Store app package directories and files
211 | AppPackages/
212 | BundleArtifacts/
213 | Package.StoreAssociation.xml
214 | _pkginfo.txt
215 | *.appx
216 | *.appxbundle
217 | *.appxupload
218 |
219 | # Visual Studio cache files
220 | # files ending in .cache can be ignored
221 | *.[Cc]ache
222 | # but keep track of directories ending in .cache
223 | !?*.[Cc]ache/
224 |
225 | # Others
226 | ClientBin/
227 | ~$*
228 | *~
229 | *.dbmdl
230 | *.dbproj.schemaview
231 | *.jfm
232 | *.pfx
233 | *.publishsettings
234 | orleans.codegen.cs
235 |
236 | # Including strong name files can present a security risk
237 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
238 | #*.snk
239 |
240 | # Since there are multiple workflows, uncomment next line to ignore bower_components
241 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
242 | #bower_components/
243 |
244 | # RIA/Silverlight projects
245 | Generated_Code/
246 |
247 | # Backup & report files from converting an old project file
248 | # to a newer Visual Studio version. Backup files are not needed,
249 | # because we have git ;-)
250 | _UpgradeReport_Files/
251 | Backup*/
252 | UpgradeLog*.XML
253 | UpgradeLog*.htm
254 | ServiceFabricBackup/
255 | *.rptproj.bak
256 |
257 | # SQL Server files
258 | *.mdf
259 | *.ldf
260 | *.ndf
261 |
262 | # Business Intelligence projects
263 | *.rdl.data
264 | *.bim.layout
265 | *.bim_*.settings
266 | *.rptproj.rsuser
267 | *- [Bb]ackup.rdl
268 | *- [Bb]ackup ([0-9]).rdl
269 | *- [Bb]ackup ([0-9][0-9]).rdl
270 |
271 | # Microsoft Fakes
272 | FakesAssemblies/
273 |
274 | # GhostDoc plugin setting file
275 | *.GhostDoc.xml
276 |
277 | # Node.js Tools for Visual Studio
278 | .ntvs_analysis.dat
279 | node_modules/
280 |
281 | # Visual Studio 6 build log
282 | *.plg
283 |
284 | # Visual Studio 6 workspace options file
285 | *.opt
286 |
287 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
288 | *.vbw
289 |
290 | # Visual Studio LightSwitch build output
291 | **/*.HTMLClient/GeneratedArtifacts
292 | **/*.DesktopClient/GeneratedArtifacts
293 | **/*.DesktopClient/ModelManifest.xml
294 | **/*.Server/GeneratedArtifacts
295 | **/*.Server/ModelManifest.xml
296 | _Pvt_Extensions
297 |
298 | # Paket dependency manager
299 | .paket/paket.exe
300 | paket-files/
301 |
302 | # FAKE - F# Make
303 | .fake/
304 |
305 | # CodeRush personal settings
306 | .cr/personal
307 |
308 | # Python Tools for Visual Studio (PTVS)
309 | __pycache__/
310 | *.pyc
311 |
312 | # Cake - Uncomment if you are using it
313 | # tools/**
314 | # !tools/packages.config
315 |
316 | # Tabs Studio
317 | *.tss
318 |
319 | # Telerik's JustMock configuration file
320 | *.jmconfig
321 |
322 | # BizTalk build output
323 | *.btp.cs
324 | *.btm.cs
325 | *.odx.cs
326 | *.xsd.cs
327 |
328 | # OpenCover UI analysis results
329 | OpenCover/
330 |
331 | # Azure Stream Analytics local run output
332 | ASALocalRun/
333 |
334 | # MSBuild Binary and Structured Log
335 | *.binlog
336 |
337 | # NVidia Nsight GPU debugger configuration file
338 | *.nvuser
339 |
340 | # MFractors (Xamarin productivity tool) working folder
341 | .mfractor/
342 |
343 | # Local History for Visual Studio
344 | .localhistory/
345 |
346 | # BeatPulse healthcheck temp database
347 | healthchecksdb
348 |
349 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
350 | MigrationBackup/
351 |
352 | # Ionide (cross platform F# VS Code tools) working folder
353 | .ionide/
354 |
355 | # Rimworld Libraries
356 | Assembly-CSharp.dll
357 | UnityEngine.CoreModule.dll
358 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 DustyTB
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SnapOut - Calm down your pawns
2 |
3 | SnapOut is a mod for RimWorld that lets you calm down your colonists/prisoners/etc from their mental breaks.
4 | More info below.
5 |
6 | ## Workshop page
7 | [](http://steamcommunity.com/sharedfiles/filedetails/?id=1319782555)
8 |
9 | 
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/dist/1.0/Assemblies/0MultiplayerAPI.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.0/Assemblies/0MultiplayerAPI.dll
--------------------------------------------------------------------------------
/dist/1.0/Assemblies/1Harmony.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.0/Assemblies/1Harmony.dll
--------------------------------------------------------------------------------
/dist/1.0/Assemblies/2SettingsHelper.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.0/Assemblies/2SettingsHelper.dll
--------------------------------------------------------------------------------
/dist/1.0/Assemblies/SnapOut.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.0/Assemblies/SnapOut.dll
--------------------------------------------------------------------------------
/dist/1.0/Defs/InteractionDefs/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_CalmDownInteraction
5 | calm down
6 | Things/Mote/SpeechSymbols/DeepTalk
7 | Social
8 | 30
9 |
10 |
11 | r_logentry->Tried to calm [RECIPIENT_nameDef] down.
12 |
13 |
14 |
15 |
16 | r_logentry->[INITIATOR_nameDef] tried to calm me down.
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/dist/1.0/Defs/JobDefs/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SnapOut_CalmPawnDownWorkgiver
6 | calm down another pawn
7 | SnapOut.WorkGiver_CalmPawnDown
8 | Warden
9 | calm
10 | calming
11 | 18
12 |
13 | Manipulation
14 | Talking
15 |
16 |
17 |
18 |
19 | SnapOut_CalmDownJob
20 | SnapOut.JobDriver_CalmDown
21 | calming TargetA down.
22 | true
23 |
24 |
25 |
26 | SnapOut_SnappingOutJob
27 | SnapOut.JobDriver_SnappingOut
28 | spending time alone.
29 | false
30 |
31 |
32 |
33 | SnapOut_GoToSafetyJob
34 | SnapOut.JobDriver_GoToSafety
35 | trying to relax.
36 | true
37 |
38 |
39 |
40 | SnapOut_ActuallyRecoverJob
41 | SnapOut.JobDriver_ActuallyRecover
42 | spending time alone.
43 | false
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/dist/1.0/Defs/ThoughtDefs/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_HelpedSomeoneThought
5 | 0.5
6 | 0.4
7 | 1
8 |
9 | Psychopath
10 |
11 |
12 |
13 | Helped someone
14 | I've helped someone overcome their worries.
15 | 3
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/dist/1.0/Patches/CalmDownPatches.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | */MentalStateDef[defName = "Wander_Sad"]/colonistsOnly
6 |
7 | False
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/dist/1.1/Assemblies/0MultiplayerAPI.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.1/Assemblies/0MultiplayerAPI.dll
--------------------------------------------------------------------------------
/dist/1.1/Assemblies/SnapOut.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.1/Assemblies/SnapOut.dll
--------------------------------------------------------------------------------
/dist/1.1/Defs/InteractionDefs/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_CalmDownInteraction
5 | calm down
6 | Things/Mote/SpeechSymbols/DeepTalk
7 | Social
8 | 30
9 |
10 |
11 | r_logentry->Tried to calm [RECIPIENT_nameDef] down.
12 |
13 |
14 |
15 |
16 | r_logentry->[INITIATOR_nameDef] tried to calm me down.
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/dist/1.1/Defs/JobDefs/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SnapOut_CalmPawnDownWorkgiver
6 | calm down another pawn
7 | SnapOut.WorkGiver_CalmPawnDown
8 | Warden
9 | calm
10 | calming
11 | 18
12 |
13 | Manipulation
14 | Talking
15 |
16 |
17 |
18 |
19 | SnapOut_CalmDownJob
20 | SnapOut.JobDriver_CalmDown
21 | calming TargetA down.
22 | true
23 |
24 |
25 |
26 | SnapOut_SnappingOutJob
27 | SnapOut.JobDriver_SnappingOut
28 | spending time alone.
29 | false
30 |
31 |
32 |
33 | SnapOut_GoToSafetyJob
34 | SnapOut.JobDriver_GoToSafety
35 | trying to relax.
36 | true
37 |
38 |
39 |
40 | SnapOut_ActuallyRecoverJob
41 | SnapOut.JobDriver_ActuallyRecover
42 | spending time alone.
43 | false
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/dist/1.1/Defs/ThoughtDefs/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_HelpedSomeoneThought
5 | 0.5
6 | 0.4
7 | 1
8 |
9 | Psychopath
10 |
11 |
12 |
13 | Helped someone
14 | I've helped someone overcome their worries.
15 | 3
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/dist/1.1/Patches/CalmDownPatches.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | */MentalStateDef[defName = "Wander_Sad"]/colonistsOnly
6 |
7 | False
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/dist/1.2/Assemblies/0MultiplayerAPI.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.2/Assemblies/0MultiplayerAPI.dll
--------------------------------------------------------------------------------
/dist/1.2/Assemblies/SnapOut.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.2/Assemblies/SnapOut.dll
--------------------------------------------------------------------------------
/dist/1.2/Defs/InteractionDefs/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_CalmDownInteraction
5 | calm down
6 | Things/Mote/SpeechSymbols/DeepTalk
7 | Social
8 | 30
9 |
10 |
11 | r_logentry->Tried to calm [RECIPIENT_nameDef] down.
12 |
13 |
14 |
15 |
16 | r_logentry->[INITIATOR_nameDef] tried to calm me down.
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/dist/1.2/Defs/JobDefs/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SnapOut_CalmPawnDownWorkgiver
6 | calm down another pawn
7 | SnapOut.WorkGiver_CalmPawnDown
8 | Warden
9 | calm
10 | calming
11 | 18
12 |
13 | Manipulation
14 | Talking
15 |
16 |
17 |
18 |
19 | SnapOut_CalmDownJob
20 | SnapOut.JobDriver_CalmDown
21 | calming TargetA down.
22 | true
23 |
24 |
25 |
26 | SnapOut_SnappingOutJob
27 | SnapOut.JobDriver_SnappingOut
28 | spending time alone.
29 | false
30 |
31 |
32 |
33 | SnapOut_GoToSafetyJob
34 | SnapOut.JobDriver_GoToSafety
35 | trying to relax.
36 | true
37 |
38 |
39 |
40 | SnapOut_ActuallyRecoverJob
41 | SnapOut.JobDriver_ActuallyRecover
42 | spending time alone.
43 | false
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/dist/1.2/Defs/ThoughtDefs/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_HelpedSomeoneThought
5 | 0.5
6 | 0.4
7 | 1
8 |
9 | Psychopath
10 |
11 |
12 |
13 | Helped someone
14 | I've helped someone overcome their worries.
15 | 3
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/dist/1.2/Patches/CalmDownPatches.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | */MentalStateDef[defName = "Wander_Sad"]/colonistsOnly
6 |
7 | False
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/dist/1.3/Assemblies/0Harmony.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.3/Assemblies/0Harmony.dll
--------------------------------------------------------------------------------
/dist/1.3/Assemblies/0MultiplayerAPI.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.3/Assemblies/0MultiplayerAPI.dll
--------------------------------------------------------------------------------
/dist/1.3/Assemblies/SnapOut.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.3/Assemblies/SnapOut.dll
--------------------------------------------------------------------------------
/dist/1.3/Defs/InteractionDefs/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_CalmDownInteraction
5 | calm down
6 | Things/Mote/SpeechSymbols/DeepTalk
7 | Social
8 | 30
9 |
10 |
11 | r_logentry->Tried to calm [RECIPIENT_nameDef] down.
12 |
13 |
14 |
15 |
16 | r_logentry->[INITIATOR_nameDef] tried to calm me down.
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/dist/1.3/Defs/JobDefs/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SnapOut_CalmPawnDownWorkgiver
6 | calm down another pawn
7 | SnapOut.WorkGiver_CalmPawnDown
8 | Warden
9 | calm
10 | calming
11 | 18
12 |
13 | Manipulation
14 | Talking
15 |
16 |
17 |
18 |
19 | SnapOut_CalmDownJob
20 | SnapOut.JobDriver_CalmDown
21 | calming TargetA down.
22 | true
23 |
24 |
25 |
26 | SnapOut_SnappingOutJob
27 | SnapOut.JobDriver_SnappingOut
28 | spending time alone.
29 | false
30 |
31 |
32 |
33 | SnapOut_GoToSafetyJob
34 | SnapOut.JobDriver_GoToSafety
35 | trying to relax.
36 | true
37 |
38 |
39 |
40 | SnapOut_ActuallyRecoverJob
41 | SnapOut.JobDriver_ActuallyRecover
42 | spending time alone.
43 | false
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/dist/1.3/Defs/ThoughtDefs/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_HelpedSomeoneThought
5 | 0.5
6 | 0.4
7 | 1
8 |
9 | Psychopath
10 |
11 |
12 |
13 | Helped someone
14 | I've helped someone overcome their worries.
15 | 3
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/dist/1.3/Patches/CalmDownPatches.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | */MentalStateDef[defName = "Wander_Sad"]/colonistsOnly
6 |
7 | False
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/dist/1.4/Assemblies/0MultiplayerAPI.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.4/Assemblies/0MultiplayerAPI.dll
--------------------------------------------------------------------------------
/dist/1.4/Assemblies/SnapOut.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.4/Assemblies/SnapOut.dll
--------------------------------------------------------------------------------
/dist/1.4/Defs/InteractionDefs/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_CalmDownInteraction
5 | calm down
6 | Things/Mote/SpeechSymbols/DeepTalk
7 | Social
8 | 30
9 |
10 |
11 | r_logentry->Tried to calm [RECIPIENT_nameDef] down.
12 |
13 |
14 |
15 |
16 | r_logentry->[INITIATOR_nameDef] tried to calm me down.
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/dist/1.4/Defs/JobDefs/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_CalmDownJob
5 | SnapOut.JobDriver_CalmDown
6 | calming TargetA down.
7 | true
8 |
9 |
10 |
11 | SnapOut_SnappingOutJob
12 | SnapOut.JobDriver_SnappingOut
13 | spending time alone.
14 | false
15 |
16 |
17 |
18 | SnapOut_GoToSafetyJob
19 | SnapOut.JobDriver_GoToSafety
20 | trying to relax.
21 | true
22 |
23 |
24 |
25 | SnapOut_ActuallyRecoverJob
26 | SnapOut.JobDriver_ActuallyRecover
27 | spending time alone.
28 | false
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/dist/1.4/Defs/ThoughtDefs/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_HelpedSomeoneThought
5 | 0.5
6 | 0.4
7 | 1
8 |
9 | Psychopath
10 |
11 |
12 |
13 | Helped someone
14 | I've helped someone overcome their worries.
15 | 3
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/dist/1.4/Defs/WorkGiverDefs/WorkGivers_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SnapOut_CalmPawnDownWorkgiver
5 | calm down another pawn
6 | SnapOut.WorkGiver_CalmPawnDown
7 | Warden
8 | calm
9 | calming
10 | 18
11 |
12 | Manipulation
13 | Talking
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/dist/1.4/Patches/CalmDownPatches.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | */MentalStateDef[defName = "Wander_Sad"]/colonistsOnly
6 |
7 | False
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/dist/About/About.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Snap Out!
4 | Weilbyte
5 | weilbyte.snapout
6 |
7 | 1.1
8 | 1.0
9 | 1.2
10 | 1.3
11 | 1.4
12 |
13 | Gives your pawns the ability to try calm down a pawn in a mental break.
14 | https://steamcommunity.com/sharedfiles/filedetails/?id=1319782555
15 |
--------------------------------------------------------------------------------
/dist/About/LoadFolders.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 1.1
4 |
5 |
6 | 1.2
7 |
8 |
9 | 1.3
10 |
11 |
12 | 1.4
13 |
14 |
--------------------------------------------------------------------------------
/dist/About/Preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/About/Preview.png
--------------------------------------------------------------------------------
/dist/About/PublishedFileId.txt:
--------------------------------------------------------------------------------
1 | 1319782555
--------------------------------------------------------------------------------
/dist/Languages/ChineseSimplified/DefInjected/InteractionDef/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 冷静
4 | r_logentry->尝试让[RECIPIENT_nameDef]冷静下来。
5 | r_logentry->[INITIATOR_nameDef]试图让我冷静下来。
6 |
--------------------------------------------------------------------------------
/dist/Languages/ChineseSimplified/DefInjected/JobDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 想要自己一个人冷静一下。
4 | 正在安抚 TargetA 冷静下来
5 | 试着放松情绪。
6 | 需要一些时间来自我冷静。
7 |
--------------------------------------------------------------------------------
/dist/Languages/ChineseSimplified/DefInjected/ThoughtDef/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 帮助了别人
4 | 我帮助了别人,解决了他/她眼前的烦恼。
5 |
--------------------------------------------------------------------------------
/dist/Languages/ChineseSimplified/DefInjected/WorkGiverDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 安抚伙伴
4 | 安抚中
5 | 安抚
6 |
--------------------------------------------------------------------------------
/dist/Languages/ChineseSimplified/Keyed/CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | {0}未能成功让{1}冷静下来。
4 | {1}被{0}成功安抚下来。
5 | {0}安抚失败并遭到{1}的攻击。
6 | 振作起来!
7 | 启用消息提示
8 | 启用安抚处于攻击状态的角色
9 | 仅有意见更重要
10 | 使囚犯平静下来
11 | 使贸易商人平静下来
12 | 高级选项
13 | 交谈乘数
14 | 意见增加
15 | 交谈上限
16 | 仅意见乘数
17 | 失控的小人能制服的倍率
18 | 平静持续时间
19 | 控制台中的输出调试和机会消息
20 | 禁用宣泄情绪增益
21 | 没能成功的让对方冷静下来。(ticks)
22 | 启动计数器
23 | 不会失败(debug)
24 | 将高级选项恢复为默认值
25 | 一切都会好起来的。
26 | 别担心,我会支持你的。
27 | 坚持住,我会一直陪着你。
28 | 只是一张桌子,我们会没事的。
29 | 我们会和你在一起。
30 | 我就在这里陪着你,告诉我是什么困扰着你——我在听。
31 | 我们可以一起解决这个问题。
32 | 深呼吸,你能做到的。放松.....
33 | 我知道你在经历什么,我真的很想帮你...
34 | 你在担心什么?
35 | 别再这样了,拜托...
36 | 告诉我你的顾虑。
37 | 这一切都会过去。
38 | 就像一场风暴,只是暂时的。
39 | 让我们一起解决这个问题。
40 | 你很安全,我在这里等你。
41 | 我很抱歉对于你经历的这些。
42 | 你不是一个人,我们都在你身边。
43 | 这不是你的错。
44 | 你可以跟我发泄,我会听的。
45 | 我们有一个很大的娱乐室,我们一起下棋怎么样?
46 |
--------------------------------------------------------------------------------
/dist/Languages/Czech/DefInjected/InteractionDef/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | uklidni se
5 | r_logentry->Se pokoušel uklidnit [RECIPIENT_nameDef] .
6 | r_logentry->[INITIATOR_nameDef] se mě pokoušel uklidnit.
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/Czech/DefInjected/JobDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | uklidňuje osobu.
5 | tráví čas o samotě.
6 | pokouší se uklidnit.
7 | tráví čas o samotě.
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dist/Languages/Czech/DefInjected/ThoughtDef/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Někomu pomohl
5 | Pomohl jsem někomu překonat jeho starosti.
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/Czech/DefInjected/WorkGiverDef/Jobs_CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | uklidnit lidi
5 | uklidnit
6 | uklidnit osobu
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dist/Languages/Czech/Keyed/CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {0} se nepodařilo dosáhnout úspěchu při pokusu o uklidnění {1}.
5 | {1} osoba byla uklidněna {0}.
6 | {0} byl napadnut {1} poté co probíhal pokus o uklidnění
7 | Domluv jim!
8 | Povolit zprávy u kolonistů
9 | Povolit uklidňování agresivních kolonistů
10 | Pouze na názoru záleží
11 | Povolit uklidňování vězňů
12 | Povolit uklidňování obchodníků
13 | Pokročilé možnosti
14 | Vyjednávací násobitel
15 | Názorový násobitel
16 | Vyjednávací limit
17 | Pouze názorový násobič
18 | Násobitel omráčení na agresivní kolonisty
19 | Délka uklidnění
20 | Debug mód
21 | Zakázat zisk katarze
22 | Časové omezení na neúspěšné pokusy
23 | Spustit počítadlo
24 | Bez neúspěchu (debug)
25 | Vrátit pokročilá nastavení na výchozí hodnoty
26 |
27 |
28 | Vše bude v pořádku.
29 | Neboj se, kryju ti záda.
30 | Jen se mnou chvíli vydrž, budu tu s tebou po celou dobu.
31 | Je to jen stůl, to bude v pohodě.
32 | Jsme tu pro tebe.
33 | Jsem tu pro tebe, řekni mi co tě trápí - A vždy tu pro tebe budu.
34 | Vyřešíme to spolu.
35 | Zhluboka se nadechni, to dokážeš. Uvolni se...
36 | Vím čím si procházíš, chci ti opravdu pomoct...
37 | Čeho se tak bojíš?
38 | Ale noták, tímhle už jsme si prošli...
39 | Řekni mi co tě tíží.
40 | To přejde.
41 | Po každé bouřce vyjde sluníčko.
42 | Pojďme to spolu vyřešit.
43 | Jsi v bezpečí, jsem tu pro tebe.
44 | Mrzí mě, že jsi tím procházíš.
45 | Nejsi na to sám, jsem tu všichni pro to aby jsme ti pomohli.
46 | Není to tvoje vina.
47 | Klidně si vylej srdíčko, já budu poslouchat.
48 | Máme skvělou rekreační místnost, co takhle si jít spolu zahrát šachy?
49 |
50 |
51 |
--------------------------------------------------------------------------------
/dist/Languages/English/Keyed/CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {0} failed to calm {1} down.
5 | {1} has been successfully calmed down by {0}.
6 | {0} is being attacked after failing to calm {1} down
7 | Snap Out!
8 | Enable character messages
9 | Enable calming of aggressive pawns
10 | Only opinion matters
11 | Enable calming prisoners
12 | Enable calming traders
13 | Advanced options
14 | Negotiation multiplier
15 | Opinion multiplier
16 | Negotiation cap
17 | Opinion only multiplier
18 | Aggressive pawn stun chance multiplier
19 | Duration of the calm
20 | Debug mode
21 | Disable catharsis gain
22 | Cool down on failed attempt
23 | Launch Counter
24 | No fail (debug)
25 | Revert advanced settings to default
26 |
27 |
28 | It will be all fine.
29 | Don't worry, I've got your back.
30 | Just hold on with me, I'll be with you all the way.
31 | It's just a table, we will be fine.
32 | We will be with you.
33 | I'm here for you, tell me what's bothering you - I'm listening.
34 | We can solve this together.
35 | Take deep breaths, you can do it. Relax...
36 | I know what you're going through, I'd really like to help...
37 | What are you worried about?
38 | Not this again, come on...
39 | Tell me your concerns.
40 | This too will pass.
41 | It's like a storm, it's just temporary.
42 | Let's solve this together.
43 | You're safe, I'm here for you.
44 | I'm sorry you're going through that.
45 | You're not on your own, we are all here for you.
46 | It's not your fault.
47 | You can vent to me, I'll listen.
48 | We have a great recreation room, how about we play some chess together?
49 |
50 |
51 |
--------------------------------------------------------------------------------
/dist/Languages/French/DefInjected/InteractionDef/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | calmer
5 | r_logentry->A essayé de calmer [RECIPIENT_nameDef].
6 | r_logentry->[INITIATOR_nameDef] a essayé de me calmer.
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/French/DefInjected/JobDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | calme TargetA.
5 | passer du temps seul.
6 | essaie de se détendre.
7 | passer du temps seul.
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dist/Languages/French/DefInjected/ThoughtDef/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | J'ai aidé quelqu'un
5 | J'ai aidé quelqu'un à surmonter ses inquiétudes.
6 |
7 |
8 |
--------------------------------------------------------------------------------
/dist/Languages/French/DefInjected/WorkGiverDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | calmer un colon
5 | calmer
6 | calme
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/French/Keyed/CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {0} n'a pas réussi à calmer {1}.
5 | {1} a été calmé avec succès par {0}.
6 | {0} est attaqué après avoir échoué à calmer {1}.
7 | Snap Out !
8 | Activer l'affichage des dialogues
9 | Permettre de calmer les pions agressifs
10 | Seule l'opinion compte
11 | Activer l'apaisement pour les prisonniers
12 | Activer l'apaisement pour les commerçants
13 | Options avancées
14 | Multiplicateur de négociation
15 | Multiplicateur d'opinion
16 | Limite de négociation
17 | Multiplicateur utilise seulement l'opinion
18 | Multiplicateur de chance d'étourdissement d'un pion agressif
19 | Durée de l'accalmie
20 | Mode débogage
21 | Désactiver le gain de catharsis
22 | Temps d'attente en cas de tentative ratée
23 | Compteur de lancement
24 | Pas d'échec (débogage)
25 | Rétablir les paramètres par défaut
26 |
27 |
28 | Tout ira bien.
29 | Ne t'inquiète pas, je te couvre.
30 | Tiens bon, je serai avec toi tout le long du chemin.
31 | C'est juste une table, tout ira bien.
32 | Nous sommes avec toi.
33 | Je suis là pour toi, dis-moi ce qui te tracasse, je t'écoute.
34 | Nous pouvons résoudre ce problème ensemble.
35 | Respire profondément, tu peux le faire. Détend-toi...
36 | Je sais ce que tu traverse, j'aimerais vraiment t'aider...
37 | Qu'est-ce qui t'inquiète ?
38 | Pas encore ça, allez...
39 | Dites-moi ce qui te préoccupe.
40 | Cela aussi passera.
41 | C'est comme une tempête, c'est juste temporaire.
42 | Résolvons cela ensemble.
43 | Tu est en sécurité, je suis là pour toi.
44 | Je suis désolé que tu traverse cette épreuve.
45 | Tu n'est pas seul, nous sommes tous là pour toi.
46 | Ce n'est pas ta faute.
47 | Tu peux te défouler sur moi, je t'écouterai.
48 | Que dirais-tu de jouer aux échecs ensemble ?
49 |
50 |
51 |
--------------------------------------------------------------------------------
/dist/Languages/German/DefInjected/InteractionDef/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | beruhigen
5 | r_logentry->Habe versucht, [RECIPIENT_nameDef] zu beruhigen.
6 | r_logentry->[INITIATOR_nameDef] hat versucht, mich zu beruhigen.
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/German/DefInjected/JobDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | versucht, TargetA zu beruhigen.
5 | verbringt Zeit alleine.
6 | versucht zu entspannen.
7 | verbringt Zeit alleine.
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dist/Languages/German/DefInjected/ThoughtDef/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Jemandem geholfen
5 | Ich habe jemandem über schlimme Sorgen hinweggeholfen.
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/German/DefInjected/WorkGiverDef/Jobs_CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Personen beruhigen
5 | beruhigen
6 | Beruhigen von
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dist/Languages/German/Keyed/CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {0} hat es nicht geschafft, {1} zu beruhigen.
5 | {1} wurde von {0} beruhigt.
6 | {0} wird angegriffen nach dem Versuch, {1} zu beruhigen.
7 | Snap Out!
8 | Aktiviere Charakternachrichten
9 | Aktiviere Beruhigung von aggressiven Personen
10 | Nur die Meinung beeinflusst das Beruhigen
11 | Aktiviere Beruhigung von Gefangenen
12 | Aktiviere Beruhigung von Händlern
13 | Erweiterte Optionen
14 | Multiplikator für Diplomatie
15 | Multiplikator für Meinung
16 | Multiplikator für Nur-Meinung
17 | Multiplikator für die Chance, aggressive Personen zu betäuben
18 | Dauer des Beruhigungsversuchs
19 | Debug-Ausgabe in der Konsole
20 | Katharsis deaktivieren
21 | Abklingzeit bei fehlgeschlagenem Versuch
22 |
23 | Alles wird gut.
24 | Mach dir keine Sorgen, ich pass auf dich auf.
25 | Wir stehen das durch, ich bleib die ganze Zeit bei dir.
26 | Es ist doch nur ein Tisch, das wird schon wieder.
27 | Wir sind bei dir.
28 | Ich bin für dich da, was hast du denn - ich hör dir zu.
29 | Zusammen kriegen wir das schon geregelt.
30 | Tief durchatmen, du schaffst das. Entspann dich...
31 | Ich weiß, was du durchmachst, ich möchte dir gerne helfen...
32 | Was ist denn so schlimm?
33 | Nicht schon wieder, nun komm schon...
34 | Sag mir doch einfach, was das Problem ist.
35 | Das geht vorüber, so wie immer.
36 | Das ist wie ein Gewitter, das geht vorbei.
37 | Gemeinsam schaffen wir das.
38 | Du bist in Sicherheit, ich bin bei dir.
39 | Es tut mir so leid, was du durchmachen musst.
40 | Du bist nicht allein, wir sind alle für dich da.
41 | Es ist nicht deine Schuld.
42 | Lass alles raus, ich werde zuhören.
43 | Wir haben einen tollen Aufenthaltsraum, wie wäre es, wenn wir eine Partie Schach spielen?
44 |
45 |
46 |
--------------------------------------------------------------------------------
/dist/Languages/Italian/DefInjected/InteractionDef/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | calma
5 | r_logentry->Ha provato a calmare [RECIPIENT_nameDef].
6 | r_logentry->[INITIATOR_nameDef] ha provato a calmarmi.
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/Italian/DefInjected/JobDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | sta calmando TargetA.
5 | passa il tempo in solitudine.
6 | sta provando a rilassarsi.
7 | sta passando il tempo in solitudine.
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dist/Languages/Italian/DefInjected/ThoughtDef/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Ha aiutato qualcuno
5 | Ho aiutato qualcuno a liberarsi delle proprie preoccupazioni.
6 |
7 |
8 |
--------------------------------------------------------------------------------
/dist/Languages/Italian/DefInjected/WorkGiverDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | calma un altro colono
5 | calma
6 | sta calmando
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/Italian/Keyed/CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {0} non ha avuto successo nel calmare {1}.
5 | {0} ha calmato {1}.
6 | {1} sta colpendo {0}, che ha fallito nel calmarl{0_gender ? o : a}
7 | Intervieni!
8 | Consenti i messaggi dei coloni
9 | Consenti di calmare i coloni aggressivi
10 | Only opinion matters
11 | Consenti di calmare i prigionieri
12 | Consenti di calmare i mercanti
13 | Opzioni avanzate
14 | Rilevanza abilità diplomatiche
15 | Rilevanza livello di opinione
16 | Limite della diplomazia
17 | Opinion only multiplier
18 | Probabilità di stordimento del colono aggressivo
19 | Durata del tentativo di calmare
20 | Modalità debug
21 | Disabilita catarsi
22 | Intervallo prima di un nuovo tentativo in caso di fallimento
23 | Conto alla rovescia
24 | Forza successo garantito (debug)
25 | Ripristina le impostazioni ai valori predefiniti
26 |
27 |
28 | Andrà tutto bene.
29 | Tranquill{1_gender ? o : a}, sono qui per te.
30 | Tieni duro, ti starò vicin{0_gender ? o : a}.
31 | Non è niente, è solo un tavolo.
32 | Ti staremo vicini.
33 | Sono qui per te, dimmi cosa ti affligge, ti ascolto.
34 | Possiamo risolverlo insieme.
35 | Fai un bel respiro e rilassati...
36 | So cosa stai passando e voglio aiutarti...
37 | Cosa ti affligge?
38 | Non ricominciare, su...
39 | Dimmi cosa ti preoccupa.
40 | Passerà anche questa.
41 | Non durerà per sempre, è momentaneo come un acquazzone.
42 | Risolviamolo insieme.
43 | Sei al sicuro, sono qui per te.
44 | Mi spiace che tu stia passando tutto questo.
45 | Siamo qui per te e non ti abbandoniamo.
46 | Non è colpa tua.
47 | Puoi sfogatrti con me, ti ascolto.
48 | Abbiamo una splendida stanza dei giochi, che ne dici di una partita a scacchi?
49 |
50 |
51 |
--------------------------------------------------------------------------------
/dist/Languages/Polish/Keyed/CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {0} nie udało się uspokoić {1}.
5 | {1} uspokoił się dzięki {0}.
6 | {0} jest atakowany po nieudanej próbie uspokojenia {1}.
7 | Snap Out!
8 | Zezwól na wiadomości postaci
9 | Zezwól na uspokajanie agresywnych postaci
10 | Tylko opinia ma znaczenie
11 | Zezwól na uspokajanie więźniów
12 | Zezwól na uspokajanie kupców
13 | Opcje zaawansowane
14 | Mnożnik dyplomacji
15 | Mnożnik opinii
16 | Mnożnik jedynie opinii
17 | Mnożnik szansy na unieruchomienie agresywnej postaci
18 | Czas trwania uspokojenia
19 | Debug mode
20 | Disable Catharsis
21 | Czas oczekiwania po nieudanej próbie
22 | Licznik uruchomienia
23 | Bez porażki (debug)
24 |
25 | Wszystko będzie w porządku.
26 | Nie martw się, jestem z Tobą.
27 | Trzymaj się, będę z Tobą przez cały czas.
28 | To tylko stół, nic nam nie będzie.
29 | Będziemy z Tobą.
30 | Jestem przy Tobie, powiedz mi co Cię dręczy - słucham.
31 | Rozwiążemy to razem.
32 | Weź głęboki oddech, damy radę. Wyluzuj...
33 | Wiem przez co przechodzisz, bardo chciałbym pomóc...
34 | Czym się martwisz?
35 | Znowu to samo, no weź...
36 | Powiedz mi swoje obawy.
37 | To też przeminie.
38 | To przeminie, niczym burza.
39 | Rozwiążmy to razem.
40 | Jesteś bezpieczny, jestem przy Tobie.
41 | Przykro mi że przez to przechodzisz.
42 | Nie jesteś sam, jesteśmy tu dla Ciebie.
43 | To nie Twoja wina.
44 | Możesz mi się wygadać, słucham.
45 | Mamy świetny pokój rekreacyjny, co powiesz na to żebyśmy zagrali razem w szachy?
46 |
47 |
48 |
--------------------------------------------------------------------------------
/dist/Languages/Portuguese/Keyed/CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {0} não conseguiu acalmar {1}.
5 | {1} foi acalmado com sucesso por {0}.
6 | {0} está a ser atacado depois de não conseguir acalmar {1}
7 | Snap Out!
8 | Ativar mensagens de personagens
9 | Ativar acalmar colonos agressivos
10 | Só opinião importa
11 | Ativar acalmar prisioneiros
12 | Ativar acalmar mercadores
13 | Opções avançadas
14 | Multiplicador de Diplomacia
15 | Multiplicador de Opinião
16 | Multiplicador de só Opinião
17 | Multiplicador de chance de atordoar colonos agressivos
18 | Duração da calma
19 | Enviar mensagens de debug e probabilidades para a consola
20 | Desativar catarse
21 | Tempo de espera de tentativas falhadas
22 |
23 | Vai tudo estar bem.
24 | Não te preocupes, eu ajudo-te.
25 | Aguenta comigo, eu irei sempre estar contigo.
26 | É só uma mesa, vai tudo correr bem.
27 | Nós vamos estar contigo.
28 | Estou aqui para ti, diz-me o que te incomoda - estou a ouvir.
29 | Podemos resolver isto juntos.
30 | Respira profundamente, tu consegues. Relaxa..
31 | Eu sei pelo que estás a passar, eu realmente gostaria de ajudar..
32 | Estás preocupado com o quê?
33 | Outra vez isto não, vá lá..
34 | Diz-me as tuas preocupações.
35 | Isto também vai passar.
36 | É como uma tempestade, é só temporária.
37 | Vamos resolver isto juntos
38 | Estás seguro, eu estou aqui para ti.
39 | Sinto muito pelo que estás a passar.
40 | Não estás sozinho, estamos todos aqui.
41 | A culpa não é tua.
42 | Podes desabafar comigo, eu vou ouvir.
43 | Nós temos uma grande sala de recreação, e que tal jogarmos xadrez juntos?
44 |
45 |
46 |
--------------------------------------------------------------------------------
/dist/Languages/PortugueseBrazilian/DefInjected/InteractionDef/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | acalmar
5 | r_logentry->Tentou acalmar[RECIPIENT_nameDef].
6 | r_logentry->[INITIATOR_nameDef] tentou me acalmar.
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/PortugueseBrazilian/DefInjected/JobDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | acalmando TargetA.
5 | passar o tempo sozinho.
6 | tentando relaxar.
7 | passar o tempo sozinho.
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dist/Languages/PortugueseBrazilian/DefInjected/ThoughtDef/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Ajudou alguém
5 | Eu ajudei alguém a superar suas preocupações.
6 |
7 |
8 |
--------------------------------------------------------------------------------
/dist/Languages/PortugueseBrazilian/DefInjected/WorkGiverDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | acalme outro coloco
5 | calma
6 | acalmando
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/PortugueseBrazilian/Keyed/CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {0} não conseguiu acalmar {1}.
5 | {1} foi acalmado com sucesso por {0}.
6 | {0} está a ser atacado depois de não conseguir acalmar {1}
7 | Snap Out!
8 | Ativar mensagens de personagens
9 | Ativar acalmar colonos agressivos
10 | Só opinião importa
11 | Ativar acalmar prisioneiros
12 | Ativar acalmar mercadores
13 | Opções avançadas
14 | Multiplicador de Diplomacia
15 | Multiplicador de Opinião
16 | Multiplicador de só Opinião
17 | Multiplicador de chance de atordoar colonos agressivos
18 | Duração da calma
19 | Enviar mensagens de debug e probabilidades para a consola
20 | Desativar catarse
21 | Tempo de espera de tentativas falhadas
22 |
23 | Vai tudo estar bem.
24 | Não te preocupes, eu ajudo-te.
25 | Aguenta comigo, eu irei sempre estar contigo.
26 | É só uma mesa, vai tudo correr bem.
27 | Nós vamos estar contigo.
28 | Estou aqui para ti, diz-me o que te incomoda - estou a ouvir.
29 | Podemos resolver isto juntos.
30 | Respira profundamente, tu consegues. Relaxa..
31 | Eu sei pelo que estás a passar, eu realmente gostaria de ajudar..
32 | Estás preocupado com o quê?
33 | Outra vez isto não, vá lá..
34 | Diz-me as tuas preocupações.
35 | Isto também vai passar.
36 | É como uma tempestade, é só temporária.
37 | Vamos resolver isto juntos
38 | Estás seguro, eu estou aqui para ti.
39 | Sinto muito pelo que estás a passar.
40 | Não estás sozinho, estamos todos aqui.
41 | A culpa não é tua.
42 | Podes desabafar comigo, eu vou ouvir.
43 | Nós temos uma grande sala de recreação, e que tal jogarmos xadrez juntos?
44 |
45 |
46 |
--------------------------------------------------------------------------------
/dist/Languages/Russian/DefInjected/InteractionDef/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | успокоить
5 | r_logentry->Пытается успокоить [RECIPIENT_nameDef].
6 | r_logentry->[INITIATOR_nameDef] пытается меня успокоить.
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/Russian/DefInjected/JobDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | успокаивает человека.
5 | проводит время наедине.
6 | пробует расслабиться.
7 | пробует расслабиться.
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/Russian/DefInjected/ThoughtDef/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Помощь другу
5 | Я помог(ла) кому-то преодолеть их проблемы.
6 |
7 |
8 |
--------------------------------------------------------------------------------
/dist/Languages/Russian/DefInjected/WorkGiverDef/Jobs_CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | успокоить другого человека
5 | успокоить
6 | успокаивает
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/Russian/Keyed/CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {0} не удалось успокоить {1}.
5 | {1} был(а) успешно успокоен(а), благодаря {0}.
6 | {0} атакован(а) после неудачной попытки успокоить {1}
7 | Snap Out!
8 | Включить сообщения персонажей
9 | Включить успокаивание агрессивных поселенцев
10 | Только мнение имеет значение
11 | Включить успокаивание заключенных
12 | Включить успокаивание торговцев
13 | Расширенные опции
14 | Множитель дипломатии
15 | Множитель мнений
16 | Множитель личных мнений
17 | Шанс оглушения агрессивного поселенца
18 | Продолжительность спокойствия
19 | Вывод отладочных и случайных сообщений в консоли
20 | Отключить катарсис
21 | Перезарядка при неудачной попытке
22 |
23 | Все будет хорошо.
24 | Не волнуйся, я тебе помогу.
25 | Просто держись за меня, я буду с тобой до конца.
26 | Это всего лишь маленькая проблема, мы будем в порядке.
27 | Мы будем с тобой.
28 | Я здесь ради тебя, расскажи мне, что тебя беспокоит - я слушаю.
29 | Мы можем решить это вместе.
30 | Сделай глубокий вдох, ты сможешь это сделать. Расслабься.
31 | Я знаю, что ты переживаешь, я бы очень хотел помочь.
32 | Что тебя беспокоит?
33 | Только не опять, прекрати.
34 | Расскажите мне о своих проблемах.
35 | Это все пройдёт.
36 | Это как шторм, это всё временно.
37 | Давай решим это вместе.
38 | Ты в безопасности, я с тобой.
39 | Мне жаль, что ты переживаешь это.
40 | Ты здесь не один, мы тебе помодем.
41 | Это не твоя вина.
42 | Вы можете выпустить меня, я буду слушать.
43 | У нас отличная комната для отдыха, как насчет того, чтобы поиграть в шахматы вместе?
44 |
45 |
--------------------------------------------------------------------------------
/dist/Languages/Spanish/DefInjected/InteractionDef/Interactions_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | calmar
5 | r_logentry->Intentó calmar a [RECIPIENT_nameDef].
6 | r_logentry->[INITIATOR_nameDef] intentó calmarme.
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dist/Languages/Spanish/DefInjected/JobDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | calmando a TargetA.
5 | pasar tiempo a solas.
6 | tratando de relajarse.
7 | pasar tiempo a solas.
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/dist/Languages/Spanish/DefInjected/ThoughtDef/Thoughts_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Ayudé a alguien.
5 | Ayudé a alguien con sus preocupaciones.
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dist/Languages/Spanish/DefInjected/WorkGiverDef/Jobs_SnapOut.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | calmar otro colono
5 | calma
6 | calmando
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dist/Languages/Spanish/Keyed/CalmDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {0} no logró calmar a {1}.
5 | {1} ha sido calmado con éxito por {0}.
6 | {0} está siendo atacado por no poder calmar a {1}
7 | Snap Out!
8 | Activar mensajes de personaje
9 | Permitir calmar a colonos agresivos
10 | Solo importa la opinión
11 | Permitir calmar prisioneros
12 | Permitir calmar comerciantes
13 | Opciones avanzadas
14 | Multiplicador de diplomacia
15 | Mutliplicador de opinión
16 | Multiplicador de solo opinión
17 | Multiplicador de chance de aturdimiento a colonos agresivos
18 | Duración de calma
19 | Modo debug
20 | Inhabilitar catarsis
21 | Tiempo de espera entre intentos fallidos
22 | Launch Counter
23 | No intentos fallidos (debug)
24 |
25 | Todo estará bien.
26 | No te preocupes, cuenta conmigo.
27 | Aguanta, siempre estaré contigo.
28 | Es solo una mesa, estaremos bien.
29 | Te acompañaremos.
30 | Estoy para ti, dime qué te molesta - Te escucho.
31 | Podemos resolverlo juntos.
32 | Respira hondo, tú puedes. Relájate...
33 | Sé por lo que estás pasando, me gustaría ayudarte...
34 | ¿Qué es lo que te preocupa?
35 | Vamos... no otra vez.
36 | Cuéntame lo que te preocupa.
37 | Ya pasará.
38 | Como una tormenta, esto es temporal.
39 | Resolvamos esto juntos.
40 | Estás seguro, estoy aquí para ti.
41 | Lamento que estés pasando por esto.
42 | No estás solo, estamos todos para ti.
43 | No es tu culpa.
44 | Puedes desahogarte conmigo, te escucho.
45 | Tenemos una gran sala de recreación. ¿Jugamos ajedrez juntos?
46 |
47 |
48 |
--------------------------------------------------------------------------------
/src/JobDriver_ActuallyRecover.cs:
--------------------------------------------------------------------------------
1 | namespace SnapOut
2 | {
3 | using RimWorld;
4 | using System.Collections.Generic;
5 | using Verse;
6 | using Verse.AI;
7 |
8 | ///
9 | /// Job driver. Calls RecoverFromState on the pawn - recovering it from its mental breakdown.
10 | ///
11 | public class JobDriver_ActuallyRecover : JobDriver
12 | {
13 | public override bool TryMakePreToilReservations(bool errorOnFailed)
14 | {
15 | return true;
16 | }
17 |
18 | protected override IEnumerable MakeNewToils()
19 | {
20 | yield return Toils_General.Wait(1);
21 | this.pawn.MentalState.RecoverFromState();
22 | if (SOMod.Settings.DisableCath) this.pawn.needs.mood.thoughts.memories.RemoveMemoriesOfDef(ThoughtDefOf.Catharsis);
23 | this.pawn.jobs.ClearQueuedJobs();
24 | this.pawn.jobs.EndCurrentJob(JobCondition.InterruptForced);
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/src/JobDriver_CalmDown.cs:
--------------------------------------------------------------------------------
1 | namespace SnapOut
2 | {
3 | using System.Collections.Generic;
4 | using RimWorld;
5 | using UnityEngine;
6 | using Verse;
7 | using Verse.AI;
8 | using Multiplayer.API;
9 |
10 | ///
11 | /// Job driver. This is the first job assigned when calming down a pawn.
12 | ///
13 | public class JobDriver_CalmDown : JobDriver
14 | {
15 | private const TargetIndex subjecteeTargetIndex = TargetIndex.A;
16 | private Job recoverjob = new Job(SnapDefOf.SnappingOutJob);
17 |
18 | [SyncMethod]
19 | protected Toil AttemptCalm(TargetIndex ctrg)
20 | {
21 | Pawn subjectee = (Pawn)this.pawn.CurJob.targetA.Thing;
22 | var toil = new Toil
23 | {
24 | initAction = () =>
25 | {
26 | if (subjectee == null) return;
27 |
28 | subjectee.jobs.EndCurrentJob(JobCondition.InterruptForced);
29 | this.TargetThingB = this.pawn; // Defining our initiator pawn
30 | float rand = Rand.RangeSeeded(0f, 0.70f, Find.TickManager.TicksAbs);
31 | pawn.interactions.TryInteractWith(subjectee, SnapDefOf.CalmDownInteraction);
32 | float num = SnapUtils.DoFormula(pawn, subjectee);
33 |
34 | if (SOMod.Settings.AlwaysSucceed) rand = 0f;
35 |
36 | SnapUtils.DebugLog(string.Format("Success chance of {0} opposed to failure chance of {1}", num.ToString(), rand.ToString()));
37 | if (rand > num)
38 | {
39 | if (SOMod.Settings.MessagesEnabled) SnapUtils.CalmText(this.pawn, Color.red);
40 |
41 | if (subjectee.InAggroMentalState)
42 | {
43 | subjectee.TryStartAttack(pawn);
44 | SnapUtils.DoStatusMessage(3, pawn, subjectee);
45 | subjectee.mindState.lastAssignedInteractTime = Find.TickManager.TicksGame;
46 | return;
47 | }
48 |
49 | SnapUtils.DoStatusMessage(2, pawn, subjectee);
50 | subjectee.mindState.lastAssignedInteractTime = Find.TickManager.TicksGame;
51 | SnapUtils.AttemptSendSafety(subjectee);
52 | return;
53 | }
54 |
55 | if (SOMod.Settings.MessagesEnabled) SnapUtils.CalmText(this.pawn, Color.green);
56 |
57 | if (subjectee.InAggroMentalState)
58 | {
59 | subjectee.MentalState.RecoverFromState();
60 | if (SOMod.Settings.DisableCath) subjectee.needs.mood.thoughts.memories.RemoveMemoriesOfDef(ThoughtDefOf.Catharsis);
61 | subjectee.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.Wander_Sad);
62 | }
63 |
64 | SnapUtils.DoStatusMessage(1, pawn, subjectee);
65 |
66 | pawn.needs.mood.thoughts.memories.TryGainMemory(SnapDefOf.HelpedThought, null);
67 | pawn.skills.Learn(SkillDefOf.Social, Rand.RangeSeeded(50, 125, Find.TickManager.TicksAbs));
68 | subjectee.jobs.EndCurrentJob(JobCondition.Succeeded);
69 | recoverjob.playerForced = true;
70 | subjectee.jobs.StartJob(recoverjob, JobCondition.Succeeded);
71 | subjectee.mindState.lastAssignedInteractTime = Find.TickManager.TicksGame;
72 | },
73 | socialMode = RandomSocialMode.Off,
74 | defaultCompleteMode = ToilCompleteMode.Instant,
75 | defaultDuration = SOMod.Settings.CalmDuration
76 | };
77 | return toil.WithProgressBarToilDelay(TargetIndex.B);
78 | }
79 |
80 | [SyncMethod]
81 | public override bool TryMakePreToilReservations(bool erroronfailed = false)
82 | {
83 | return this.pawn.Reserve(this.job.GetTarget(subjecteeTargetIndex), this.job, 1, -1, null);
84 | }
85 |
86 | [SyncMethod]
87 | protected override IEnumerable MakeNewToils()
88 | {
89 | Pawn subjectee = (Pawn)this.pawn.CurJob.targetA.Thing;
90 | var attemptCalmJob = AttemptCalm(subjecteeTargetIndex);
91 |
92 | this.FailOnDowned(subjecteeTargetIndex);
93 | this.FailOnDespawnedOrNull(subjecteeTargetIndex);
94 | this.FailOnNotAwake(subjecteeTargetIndex);
95 |
96 | yield return Toils_Goto.GotoThing(subjecteeTargetIndex, PathEndMode.Touch);
97 | yield return Toils_Interpersonal.WaitToBeAbleToInteract(this.pawn);
98 | yield return Toils_Interpersonal.GotoInteractablePosition(subjecteeTargetIndex);
99 | yield return Toils_General.Do(delegate
100 | {
101 | subjectee.rotationTracker.FaceCell(pawn.PositionHeld);
102 | if (subjectee.InAggroMentalState)
103 | {
104 | float rand = Rand.RangeSeeded(0f, 0.85f, Find.TickManager.TicksAbs);
105 | float socialImpact = pawn.GetStatValue(StatDefOf.SocialImpact, true);
106 | socialImpact *= SOMod.Settings.StunWeight;
107 | SnapUtils.DebugLog(string.Format("Aggressive stun success chance was {0} opposed to a failure chance of {1}", socialImpact.ToString(), rand.ToString()));
108 | if (rand > socialImpact)
109 | {
110 | SnapUtils.DoStatusMessage(3, pawn, subjectee);
111 | subjectee.TryStartAttack(pawn);
112 | subjectee.mindState.lastAssignedInteractTime = Find.TickManager.TicksGame;
113 | EndJobWith(JobCondition.Incompletable);
114 | } else {
115 | subjectee.stances.stunner.StunFor(SOMod.Settings.CalmDuration, pawn);
116 | }
117 | }
118 | });
119 | yield return Toils_Interpersonal.GotoInteractablePosition(subjecteeTargetIndex);
120 | yield return Toils_General.WaitWith(subjecteeTargetIndex, SOMod.Settings.CalmDuration, true, true);
121 | yield return attemptCalmJob;
122 | yield return Toils_Interpersonal.SetLastInteractTime(subjecteeTargetIndex);
123 | }
124 | }
125 | }
--------------------------------------------------------------------------------
/src/JobDriver_GoToSafety.cs:
--------------------------------------------------------------------------------
1 | namespace SnapOut
2 | {
3 | using System.Collections.Generic;
4 | using Multiplayer.API;
5 | using RimWorld;
6 | using Verse;
7 | using Verse.AI;
8 |
9 | ///
10 | /// Job driver. Makes the pawn go their bedroom for safety.
11 | ///
12 | public class JobDriver_GoToSafety : JobDriver
13 | {
14 | public override bool TryMakePreToilReservations(bool errorOnFailed)
15 | {
16 | return true;
17 | }
18 |
19 | [SyncMethod]
20 | protected override IEnumerable MakeNewToils()
21 | {
22 | Pawn tpawn = this.pawn;
23 | this.TargetThingB = this.pawn;
24 | Room bedroom = tpawn.ownership.OwnedRoom;
25 | bedroom.Cells.TryRandomElement(out IntVec3 c);
26 | yield return Toils_Goto.GotoCell(c, PathEndMode.ClosestTouch);
27 | int wticks = Rand.RangeSeeded(1750, 3500, Find.TickManager.TicksAbs);
28 | Toil relax = Toils_General.Wait(wticks);
29 | relax.socialMode = RandomSocialMode.Off;
30 | yield return relax;
31 | }
32 | }
33 | }
--------------------------------------------------------------------------------
/src/JobDriver_SnappingOut.cs:
--------------------------------------------------------------------------------
1 | namespace SnapOut
2 | {
3 | using System.Collections.Generic;
4 | using RimWorld;
5 | using Verse;
6 | using Verse.AI;
7 | using Multiplayer.API;
8 |
9 | ///
10 | /// Job driver. Makes the pawn go to their bed (if not present, a random spot nearby) where they are given a job that snaps them out.
11 | ///
12 | public class JobDriver_SnappingOut : JobDriver
13 | {
14 | public override bool TryMakePreToilReservations(bool errorOnFailed)
15 | {
16 | return true;
17 | }
18 |
19 | [SyncMethod]
20 | protected override IEnumerable MakeNewToils()
21 | {
22 | Pawn rpawn = this.pawn;
23 | this.TargetThingB = this.pawn;
24 | Building ownedbed = this.pawn.ownership.OwnedBed;
25 | Job actuallyrecoverjob = new Job(SnapDefOf.ActuallyRecoverJob);
26 | if (ownedbed != null)
27 | {
28 | if (pawn.guest.IsPrisoner)
29 | {
30 | IntVec3 c = RCellFinder.RandomWanderDestFor(rpawn, rpawn.Position, 0.3f, null, Danger.None);
31 | yield return Toils_Goto.GotoCell(c, PathEndMode.OnCell);
32 | }
33 |
34 | yield return Toils_Goto.GotoCell(ownedbed.Position, PathEndMode.OnCell);
35 | }
36 | else
37 | {
38 | IntVec3 c = RCellFinder.RandomWanderDestFor(rpawn, rpawn.Position, 2f, null, Danger.None);
39 | yield return Toils_Goto.GotoCell(c, PathEndMode.OnCell);
40 | }
41 |
42 | Toil waitonspot = Toils_General.Wait(500);
43 |
44 | waitonspot.socialMode = RandomSocialMode.Off;
45 | yield return waitonspot;
46 | Toil snappingout = Toils_General.Do(delegate
47 | {
48 | rpawn.jobs.EndCurrentJob(JobCondition.Succeeded);
49 | actuallyrecoverjob.playerForced = true;
50 | rpawn.jobs.StartJob(actuallyrecoverjob, JobCondition.Succeeded);
51 | });
52 | snappingout.socialMode = RandomSocialMode.Off;
53 | yield return snappingout;
54 | }
55 | }
56 | }
--------------------------------------------------------------------------------
/src/ModSettings.cs:
--------------------------------------------------------------------------------
1 | namespace SnapOut
2 | {
3 | using UnityEngine;
4 | using Verse;
5 |
6 | public class SOSettings : ModSettings
7 | {
8 | public bool MessagesEnabled = true;
9 | public bool AggroCalmEnabled = false;
10 | public bool NonFaction = true;
11 | public bool TraderCalm = true;
12 | public bool AdvancedMenu = false;
13 | public bool Debug = false;
14 | public bool AlwaysSucceed = false;
15 | public bool DisableCath = false;
16 | public float BaseValue = -25f;
17 | public float NegMult = 50f;
18 | public float OpnMult = 30f;
19 | public float StunWeight = 0.55f;
20 | public float NegotiationCap = 165f;
21 | public int CalmDuration = 1250;
22 | public int Cooldown = 15000;
23 |
24 | public override void ExposeData()
25 | {
26 | base.ExposeData();
27 | Scribe_Values.Look(ref this.MessagesEnabled, "MessagesEnabled", true);
28 | Scribe_Values.Look(ref this.AggroCalmEnabled, "AggroCalmEnabled", false);
29 | Scribe_Values.Look(ref this.NonFaction, "NonFaction", true);
30 | Scribe_Values.Look(ref this.TraderCalm, "TraderCalm", true);
31 | Scribe_Values.Look(ref this.AdvancedMenu, "AdvancedMenu", false);
32 | Scribe_Values.Look(ref this.Debug, "Debug", false);
33 | Scribe_Values.Look(ref this.AlwaysSucceed, "AlwaysSucceed", false);
34 | Scribe_Values.Look(ref this.DisableCath, "DisableCath", false);
35 | Scribe_Values.Look(ref this.NegotiationCap, "NegotiationCap", 165f);
36 | Scribe_Values.Look(ref this.BaseValue, "BaseValue", -25f);
37 | Scribe_Values.Look(ref this.StunWeight, "StunWeight", 0.45f);
38 | Scribe_Values.Look(ref this.NegMult, "NegMult", 50f);
39 | Scribe_Values.Look(ref this.OpnMult, "OpnMult", 30f);
40 | Scribe_Values.Look(ref this.CalmDuration, "SOCalmDuration", 1250);
41 | Scribe_Values.Look(ref this.Cooldown, "CoolDown", 15000);
42 | }
43 | }
44 |
45 | public class SOMod : Mod
46 | {
47 | #region SOsettings
48 |
49 | public static SOSettings Settings;
50 |
51 | public SOMod(ModContentPack content) : base(content)
52 | {
53 | Settings = GetSettings();
54 | }
55 |
56 | public override string SettingsCategory() => "SettingsCategoryLabel".Translate();
57 |
58 | #endregion SOsettings
59 |
60 | public override void DoSettingsWindowContents(Rect inRect)
61 | {
62 | Listing_Standard listing_Standard = new Listing_Standard();
63 | listing_Standard.Begin(inRect);
64 | listing_Standard.Gap(6);
65 | listing_Standard.CheckboxLabeled($"{"MessagesEnabledLabel".Translate()} ", ref Settings.MessagesEnabled);
66 | listing_Standard.CheckboxLabeled($"{"NoCathEnabledLabel".Translate()} ", ref Settings.DisableCath);
67 | listing_Standard.Gap(6);
68 | listing_Standard.CheckboxLabeled($"{"AggroCalmEnabledLabel".Translate()} ", ref Settings.AggroCalmEnabled);
69 | listing_Standard.CheckboxLabeled($"{"NonFactionEnabledLabel".Translate()} ", ref Settings.NonFaction);
70 | listing_Standard.CheckboxLabeled($"{"TraderCalmEnabledLabel".Translate()} ", ref Settings.TraderCalm);
71 | listing_Standard.Gap(6);
72 | listing_Standard.CheckboxLabeled($"{"AdvancedMenu".Translate()} ", ref Settings.AdvancedMenu);
73 | listing_Standard.Gap(6);
74 | if (SOMod.Settings.AdvancedMenu)
75 | {
76 |
77 | listing_Standard.Label($"{"SMultLabel".Translate()}: {Mathf.Round(Settings.NegMult)}%");
78 | Settings.NegMult = listing_Standard.Slider(Settings.NegMult, 0, 100);
79 | listing_Standard.Gap(2);
80 | listing_Standard.Label($"{"OMultLabel".Translate()}: {Mathf.Round(Settings.OpnMult)}%");
81 | Settings.OpnMult = listing_Standard.Slider(Settings.OpnMult, 0, 100);
82 | listing_Standard.Gap(2);
83 | listing_Standard.Label($"{"CapLabel".Translate()}: {Mathf.Round(Settings.NegotiationCap)}");
84 | Settings.NegotiationCap = listing_Standard.Slider(Settings.NegotiationCap, 40, 190);
85 | listing_Standard.Gap(6);
86 |
87 | listing_Standard.Label($"{"StunWeight".Translate()}: {Mathf.Round(Settings.StunWeight * 100)}%");
88 | Settings.StunWeight = listing_Standard.Slider(Settings.StunWeight, 0, 1);
89 | listing_Standard.Gap(2);
90 | listing_Standard.Label($"{"CalmDuration".Translate()}: {(float)Settings.CalmDuration / 2500:F1}h");
91 | Settings.CalmDuration = (int)listing_Standard.Slider(Settings.CalmDuration, 500, 15000);
92 | listing_Standard.Gap(2);
93 | listing_Standard.Label($"{"SOCooldown".Translate()}: {(float)Settings.Cooldown / 2500:F1}h");
94 | Settings.Cooldown = (int)listing_Standard.Slider(Settings.Cooldown, 2500, 60000);
95 | listing_Standard.Gap();
96 | listing_Standard.CheckboxLabeled($"{"DebugChanceSetting".Translate()} ", ref Settings.Debug);
97 | listing_Standard.CheckboxLabeled($"{"AlwaysSucceedSetting".Translate()} ", ref Settings.AlwaysSucceed);
98 | if (listing_Standard.ButtonText("Default", "DefaultButton".Translate())) {
99 | Settings.NegMult = 50f;
100 | Settings.OpnMult = 30f;
101 | Settings.NegotiationCap = 165f;
102 | Settings.StunWeight = 0.55f;
103 | Settings.CalmDuration = 1250;
104 | Settings.Debug = false;
105 | Settings.Cooldown = 15000;
106 | }
107 | }
108 |
109 | listing_Standard.End();
110 | Settings.Write();
111 | }
112 | }
113 | }
--------------------------------------------------------------------------------
/src/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | [assembly: AssemblyTitle("SnapOut")]
6 | [assembly: AssemblyDescription("A mod for Rimworld.")]
7 | [assembly: AssemblyConfiguration("")]
8 | [assembly: AssemblyCompany("Weilbyte")]
9 | [assembly: AssemblyProduct("SnapOut")]
10 | [assembly: AssemblyCopyright("Copyright Weilbyte © 2024")]
11 | [assembly: AssemblyTrademark("")]
12 | [assembly: AssemblyCulture("")]
13 |
14 | [assembly: ComVisible(false)]
15 |
16 | [assembly: Guid("d7d21b4a-1da7-41d8-b202-c58ca8fa62aa")]
17 |
18 | [assembly: AssemblyVersion("0.8.2")]
19 | [assembly: AssemblyFileVersion("0.8.2")]
--------------------------------------------------------------------------------
/src/SnapCheck.cs:
--------------------------------------------------------------------------------
1 |
2 |
3 | namespace SnapOut
4 | {
5 | using System;
6 | using System.Collections.Generic;
7 | using System.Linq;
8 | using System.Text;
9 | using Verse;
10 | using RimWorld;
11 |
12 | ///
13 | /// SnapCheck contains the methods for checking certain conditions related to pawns
14 | ///
15 | class SnapCheck
16 | {
17 |
18 | private static readonly List incompatDef = new List(new string[] { "RunWild", "PanicFlee", "HuntingTrip", "SocialFighting", "Fighter", "Giggling", "Crying" }); // Def names of incompatible mental states
19 |
20 |
21 | ///
22 | /// Checks whether a pawn is a prisoner or not
23 | ///
24 | ///
25 | /// True or False
26 | public static bool isPrisoner(Pawn pawn) {
27 | if (pawn.guest.IsPrisoner) {
28 | return true;
29 | }
30 | return false;
31 | }
32 |
33 | ///
34 | /// Checks whether a pawn is a trader or not
35 | ///
36 | ///
37 | /// True or False
38 | public static bool isTrader(Pawn pawn)
39 | {
40 | if (!pawn.Faction.IsPlayer) {
41 | if (!(pawn.Faction.RelationKindWith(Faction.OfPlayer) == FactionRelationKind.Hostile))
42 | {
43 | return true;
44 | }
45 | }
46 | return false;
47 | }
48 |
49 | ///
50 | /// Checks whether a pawn should be calmed or not, depending on the severity of their mental state and mod settings
51 | ///
52 | ///
53 | /// True or False
54 | public static bool aggroPass(Pawn pawn) {
55 | if (pawn.InAggroMentalState) {
56 | if (SOMod.Settings.AggroCalmEnabled) {
57 | return true;
58 | }
59 | return false;
60 | }
61 | return true;
62 | }
63 |
64 | ///
65 | /// Returns true if the pawn has a null faction or is null by itself
66 | ///
67 | ///
68 | /// True or False
69 | public static bool isNull(Pawn pawn)
70 | {
71 | if (pawn == null)
72 | {
73 | return true;
74 | }
75 | else if (pawn.Faction == null)
76 | {
77 | return true;
78 | }
79 | return false;
80 | }
81 |
82 | ///
83 | /// Checks to see if target pawn meets conditions to be calmed
84 | ///
85 | /// Target pawn
86 | /// True or False
87 | public static bool CanDo(Pawn pawn)
88 | {
89 | if (isNull(pawn)) {
90 | return false;
91 | } else {
92 | if (RestUtility.Awake(pawn)) {
93 | if (isPrisoner(pawn)) {
94 | if (!SOMod.Settings.NonFaction) {
95 | return false;
96 | }
97 | } else if (isTrader(pawn)) {
98 | if (!SOMod.Settings.TraderCalm) {
99 | return false;
100 | }
101 | }
102 |
103 | return aggroPass(pawn);
104 | }
105 | return false;
106 | }
107 | }
108 |
109 | ///
110 | /// Checks if pawn is capable of calming others down
111 | ///
112 | /// The Pawn to Check
113 | /// True or False
114 | public static bool IsCapable(Pawn pawn)
115 | {
116 | if (pawn.health.capacities.CapableOf(PawnCapacityDefOf.Talking) && pawn.health.capacities.CapableOf(PawnCapacityDefOf.Hearing) && pawn.health.capacities.CapableOf(PawnCapacityDefOf.Moving))
117 | {
118 | return true;
119 | }
120 |
121 | return false;
122 | }
123 |
124 | ///
125 | /// Checks if provided mental state def name is listed as incompatible
126 | ///
127 | /// Def Name
128 | /// True or False
129 | public static bool CompatCheck(string defname)
130 | {
131 | if (incompatDef.Any(s => defname.Contains(s)))
132 | {
133 | return false;
134 | }
135 |
136 | return true;
137 | }
138 | }
139 | }
140 |
--------------------------------------------------------------------------------
/src/SnapDefOf.cs:
--------------------------------------------------------------------------------
1 | namespace SnapOut
2 | {
3 | using RimWorld;
4 | using Verse;
5 |
6 | public static class SnapDefOf
7 | {
8 | public static JobDef CalmDownJob = DefDatabase.GetNamed("SnapOut_CalmDownJob");
9 | public static JobDef SnappingOutJob = DefDatabase.GetNamed("SnapOut_SnappingOutJob");
10 | public static JobDef GoToSafetyJob = DefDatabase.GetNamed("SnapOut_GoToSafetyJob");
11 | public static JobDef ActuallyRecoverJob = DefDatabase.GetNamed("SnapOut_ActuallyRecoverJob");
12 | public static InteractionDef CalmDownInteraction = DefDatabase.GetNamed("SnapOut_CalmDownInteraction");
13 | public static ThoughtDef HelpedThought = DefDatabase.GetNamed("SnapOut_HelpedSomeoneThought");
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/SnapOut.cs:
--------------------------------------------------------------------------------
1 | namespace SnapOut
2 | {
3 | using Verse;
4 | using Multiplayer.API;
5 |
6 | [StaticConstructorOnStartup]
7 | public static class SnapOutMultiplayer
8 | {
9 | static SnapOutMultiplayer()
10 | {
11 | if (!MP.enabled) return;
12 | MP.RegisterAll();
13 | }
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/SnapOut.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}
8 | Library
9 | Properties
10 | SnapOut
11 | SnapOut
12 | 512
13 | v4.7.2
14 |
15 |
16 |
17 |
18 |
19 | true
20 | ..\dist\1.4\Assemblies\
21 |
22 |
23 | prompt
24 | 4
25 | false
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | False
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | 1.4.3520-beta
57 |
58 |
59 | 0.3.0
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/src/SnapOut.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SnapOut", "SnapOut.csproj", "{D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}"
4 | EndProject
5 | Global
6 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
7 | Release|Any CPU = Release|Any CPU
8 | EndGlobalSection
9 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
10 | {D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
11 | {D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}.Release|Any CPU.Build.0 = Release|Any CPU
12 | EndGlobalSection
13 | EndGlobal
14 |
--------------------------------------------------------------------------------
/src/SnapUtils.cs:
--------------------------------------------------------------------------------
1 | namespace SnapOut
2 | {
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using RimWorld;
6 | using Verse.AI;
7 | using UnityEngine;
8 | using Verse;
9 | using Multiplayer.API;
10 |
11 | internal class SnapUtils
12 | {
13 | ///
14 | /// Gets a random calming message from the translation files. Picks random message with ID between 1-21.
15 | ///
16 | [SyncMethod]
17 | public static string GetCalmingMessage()
18 | {
19 | int rand = Rand.RangeSeeded(1, 21, Find.TickManager.TicksAbs);
20 | string cmrand = "CM" + rand;
21 | DebugLog(string.Format("Calming message ID is {0}", cmrand));
22 | return cmrand.Translate();
23 | }
24 |
25 | ///
26 | /// Logs debug message to the game's console
27 | ///
28 | /// Message
29 | public static void DebugLog(string message)
30 | {
31 | if (SOMod.Settings.Debug)
32 | {
33 | Log.Message("SnapOut :: " + message);
34 | }
35 | }
36 |
37 | ///
38 | /// Creates comforting text above the pawn
39 | ///
40 | /// Pawn to create text above
41 | /// Color of the text
42 | public static void CalmText(Pawn pawn, Color color)
43 | {
44 | MoteMaker.ThrowText(pawn.DrawPos + pawn.Drawer.renderer.BaseHeadOffsetAt(pawn.Rotation), pawn.Map, GetCalmingMessage(), color, 3.85f);
45 | }
46 |
47 | ///
48 | /// Attempt to send pawn to safety
49 | ///
50 | /// Pawn to send to safety
51 | [SyncMethod]
52 | public static void AttemptSendSafety(Pawn subjectee)
53 | {
54 | Job goToSafetyJob = new Job(SnapDefOf.GoToSafetyJob);
55 | if (subjectee.ownership.OwnedRoom != null)
56 | {
57 | int srand = Rand.RangeSeeded(0, 100, Find.TickManager.TicksAbs);
58 | SnapUtils.DebugLog(subjectee.Name.ToStringShort + " has a bedroom. Chance to get sent to safety.. " + srand);
59 | if (srand <= 65) // 65% chance
60 | {
61 | SnapUtils.DebugLog(subjectee.Name.ToStringShort + " has been sent to safety!");
62 | goToSafetyJob.playerForced = true;
63 | goToSafetyJob.locomotionUrgency = LocomotionUrgency.Jog;
64 | subjectee.jobs.EndCurrentJob(JobCondition.Succeeded);
65 | subjectee.jobs.StartJob(goToSafetyJob, JobCondition.Succeeded);
66 | }
67 | else
68 | {
69 | SnapUtils.DebugLog(subjectee.Name.ToStringShort + " has not been sent to safety!");
70 | }
71 | }
72 | }
73 |
74 | ///
75 | /// Runs the chance formula
76 | ///
77 | /// Pawn
78 | /// Target pawn
79 | /// Chance of Success
80 | [SyncMethod]
81 | public static float DoFormula(Pawn doer, Pawn subjectee)
82 | {
83 | float baseValue = SOMod.Settings.BaseValue;
84 | float negotiationCap = SOMod.Settings.NegotiationCap;
85 |
86 | float negotiationSkill = doer.GetStatValue(StatDefOf.NegotiationAbility, true) * 100;
87 | if (negotiationSkill > negotiationCap) negotiationSkill = negotiationCap;
88 |
89 | float opinion = (float)subjectee.relations.OpinionOf(doer);
90 |
91 | float dipWeight = SOMod.Settings.NegMult / 100;
92 | float opnWeight = SOMod.Settings.OpnMult / 100;
93 |
94 | float badOpnPenalty = 0f;
95 | float opinionCopy = opinion;
96 |
97 | while (opinionCopy < 0) {
98 | badOpnPenalty -= 0.25f;
99 | opinionCopy++;
100 | }
101 |
102 | float chance = (baseValue + badOpnPenalty) + (negotiationSkill * dipWeight) + (opinion * opnWeight);
103 |
104 | SnapUtils.DebugLog($"({baseValue} + {badOpnPenalty}) + ({negotiationSkill} * {dipWeight}) + ({opinion} * {opnWeight}) = {chance / 100}");
105 |
106 | return chance / 100;
107 | }
108 |
109 | ///
110 | /// Summons a status message
111 | ///
112 | /// The type of message:
113 | /// 1 - Success;
114 | /// 2 - Failure;
115 | /// 3 - Critical Failure
116 | /// Pawn
117 | /// Target Pawn
118 | public static void DoStatusMessage(int type, Pawn doer, Pawn subjectee)
119 | {
120 | switch (type)
121 | {
122 | case 1: // Success
123 | Messages.Message(
124 | "SuccessCalm".Translate(doer.Name.ToStringShort, subjectee.Name.ToStringShort),
125 | MessageTypeDefOf.TaskCompletion);
126 | break;
127 |
128 | case 2: // Failure
129 | Messages.Message(
130 | "FailCalm".Translate(doer.Name.ToStringShort, subjectee.Name.ToStringShort),
131 | MessageTypeDefOf.TaskCompletion);
132 | break;
133 |
134 | case 3: // Critical Failure
135 | Messages.Message(
136 | "AggroFailCalm".Translate(doer.Name.ToStringShort, subjectee.Name.ToStringShort),
137 | MessageTypeDefOf.TaskCompletion);
138 | break;
139 | }
140 | }
141 | }
142 | }
--------------------------------------------------------------------------------
/src/WorkGiver_CalmPawnDown.cs:
--------------------------------------------------------------------------------
1 | namespace SnapOut
2 | {
3 | using RimWorld;
4 | using Verse;
5 | using Verse.AI;
6 |
7 | public class WorkGiver_CalmPawnDown : WorkGiver_Warden
8 | {
9 | public override bool ShouldSkip(Pawn pawn, bool forced = false)
10 | {
11 | return base.ShouldSkip(pawn) && (pawn.Faction != Faction.OfPlayer) && (!pawn.RaceProps.Humanlike);
12 | }
13 |
14 | public override Job JobOnThing(Pawn pawn, Thing targetThing, bool forced = true)
15 | {
16 | if ((targetThing == null) || (pawn == targetThing))
17 | {
18 | return null;
19 | } else {
20 | Pawn targetPawn = (Pawn)targetThing;
21 | if (targetPawn.RaceProps.Humanlike && targetPawn.InMentalState)
22 | {
23 | if (SnapCheck.CompatCheck(targetPawn.MentalState.def.ToString()))
24 | {
25 | bool recent = Find.TickManager.TicksGame < targetPawn.mindState.lastAssignedInteractTime + SOMod.Settings.Cooldown;
26 | if (pawn.CurJobDef != SnapDefOf.CalmDownJob)
27 | {
28 | if (SnapCheck.CanDo(targetPawn) && SnapCheck.IsCapable(pawn) && !recent && pawn.CanReserve(targetPawn))
29 | {
30 | SnapUtils.DebugLog(string.Format("{0} given calm job with {1} as target", pawn.Name.ToStringShort, targetPawn.Name.ToStringShort));
31 | return new Job(SnapDefOf.CalmDownJob, targetPawn);
32 | }
33 | }
34 | SnapUtils.DebugLog(string.Format("{0} has been considered but conditions were not fulfilled", targetPawn.Name.ToStringShort));
35 | return null;
36 | }
37 | else
38 | {
39 | SnapUtils.DebugLog(string.Format("{0} mental state def has failed compatability check", targetPawn.MentalState.def.ToString()));
40 | return null;
41 | }
42 | }
43 | }
44 | return null;
45 | }
46 | }
47 | }
--------------------------------------------------------------------------------