更新宝箱定义与音效配置,优化掉落机制并扩展角色奖励池
```
This commit is contained in:
ProjectKoi-Kalo\Kalo 2025-05-09 13:57:49 +08:00
parent 7ab4a5d95e
commit 7ad6f7c8d7
79 changed files with 1379 additions and 668 deletions

BIN
1.5/Assemblies/0Harmony.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
1.5/Assemblies/NAudio.dll Normal file

Binary file not shown.

BIN
1.5/Assemblies/NVorbis.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<GameComponent><!-- This is used for spawning the lootbox every daysBetweenLootBoxSpawns-->
<li Class="SimpleLootBox.GameComponent_SpawnLootBox" />
</GameComponent>
</Defs>

View File

@ -1,188 +0,0 @@
<Defs>
<ThingDef ParentName="SimpleLootBoxBase">
<defName>SimpleLootBoxExampleB</defName>
<label>边缘世界一号箱</label>
<thingClass>ThingWithComps</thingClass>
<description>Example B.</description>
<graphicData>
<texPath>SimpleLootBox/ExampleB</texPath>
<graphicClass>Graphic_Single</graphicClass>
</graphicData>
<statBases>
<Mass>1.0</Mass>
<MarketValue>10</MarketValue>
</statBases>
<tradeability>Sellable</tradeability>
<comps>
<li Class="CompProperties_Usable">
<useJob>UseArtifact</useJob>
<useLabel>Activate {0_label}</useLabel>
<showUseGizmo>true</showUseGizmo>
<useDuration>100</useDuration>
</li>
<li Class="SimpleLootBox.CompProperties_SpawnLootBox">
<lootBoxList>
<li>
<thingDef>SimpleLootBoxExampleB</thingDef>
<chance>0.1</chance>
</li>
</lootBoxList>
</li>
<li Class="SimpleLootBox.CompProperties_LootBox">
<lootBoxOpenSound>lootBoxOpenSound</lootBoxOpenSound>
<lootBoxSpinningSound>lootBoxSpinningSound</lootBoxSpinningSound>
<lootBoxBackgroundMusicSound></lootBoxBackgroundMusicSound>
<lootBoxPawnKindDef>
<li MayRequire="rooandgloomy.dragonianracemod">
<pawnKindDef>Dragonian_Boxed</pawnKindDef><!-- 龙娘 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.harchaoura">
<pawnKindDef>HAR_Chaoura_Player_kami</pawnKindDef><!-- 混沌 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.harneclose">
<pawnKindDef>HAR_Neclose_Player_kami</pawnKindDef><!-- 细菌 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.harsilkiera">
<pawnKindDef>HAR_Silkiera_Player_kami</pawnKindDef><!-- 兽娘 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.hareveliet">
<pawnKindDef>HAR_Eveliet_Player_kami</pawnKindDef><!-- 伊娃 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.haridhale">
<pawnKindDef>HAR_Idhale_Player_kami</pawnKindDef><!-- 幽灵 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.harxenoorca">
<pawnKindDef>HAR_Xenoorca_Player_kami</pawnKindDef><!-- 鱼人 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.harnexaga">
<pawnKindDef>HAR_Nexaga_Player_kami</pawnKindDef><!-- 混血 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="miho.fortifiedoutremer">
<pawnKindDef>Miho_PlayerColonist_kami</pawnKindDef><!-- 美狐 -->
<count>1</count>
<weight>1</weight>
<rarity>4</rarity>
<effecterDef>ExtinguisherExplosion</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
<li>
<pawnKindDef>Megascarab</pawnKindDef><!-- 虫子 -->
<count>1</count>
<weight>8</weight>
<rarity>1</rarity>
<effecterDef>ExtinguisherExplosion</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
<li MayRequire="verniy709.racenhux">
<pawnKindDef>NHUX_PlayerA</pawnKindDef><!-- ux -->
<count>1</count>
<weight>8</weight>
<rarity>1</rarity>
<effecterDef>ExtinguisherExplosion</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
<li MayRequire="ayameduki.harnearmare">
<pawnKindDef>HAR_Nearmaere_Player_kami</pawnKindDef><!-- 魅魔 -->
<count>1</count>
<weight>18</weight>
<rarity>2</rarity>
<effecterDef>ExtinguisherExplosion</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
<li MayRequire="ayameduki.harlittluna">
<pawnKindDef>HAR_Littluna_Player_kami</pawnKindDef><!-- 伪神 -->
<count>1</count>
<weight>18</weight>
<rarity>2</rarity>
<effecterDef>ExtinguisherExplosion</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
</lootBoxPawnKindDef>
<lootBoxThingDef>
<li>
<thingDef>Wastepack</thingDef>
<count>5</count>
<weight>8</weight>
<rarity>1</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
</li>
<li>
<thingDef>Meat_Human</thingDef>
<count>5</count>
<weight>8</weight>
<rarity>1</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
</li>
<li>
<thingDef>Leather_Human</thingDef>
<count>5</count>
<weight>8</weight>
<rarity>1</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
</li>
<li>
<thingDef>Silver</thingDef>
<count>1</count>
<weight>8</weight>
<rarity>1</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
</li>
<li MayRequire="verniy709.racenhux">
<thingDef>Meat_NHUX</thingDef>
<count>10</count>
<weight>8</weight>
<rarity>1</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
</li>
</lootBoxThingDef>
</li>
</comps>
</ThingDef>
</Defs>

View File

@ -1,28 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<ThingDef Name="SimpleLootBoxBase" ParentName="ResourceBase" Abstract="True">
<thingClass>ThingWithComps</thingClass>
<techLevel>Medieval</techLevel>
<thingCategories>
<graphicData>
<graphicClass>Graphic_Single</graphicClass><!-- Using Graphic_StackCount, the item's texture will reflect its stack count -->
</graphicData>
<stackLimit>10</stackLimit><!-- Stack count of the item -->
<techLevel>Medieval</techLevel><!-- The item's tech level; it does not affect any functionality and is purely a special tag -->
<thingCategories><!-- Item category -->
<li>Artifacts</li>
</thingCategories>
<tradeTags>
<tradeTags><!-- Item trade tags -->
<li>Artifacts</li>
</tradeTags>
</ThingDef>
<ThingDef ParentName="SimpleLootBoxBase">
<defName>SimpleLootBoxExampleA</defName><!-- 箱子的定义名 -->
<label>白银武器箱</label><!-- 箱子的名字,可以进行本地化翻译 -->
<description>Example A.</description><!-- 箱子的描述,可以进行本地化翻译 -->
<defName>SimpleLootBoxExampleA</defName><!-- Definition name of the loot box -->
<label>白银大行动武器箱</label><!-- The name of the loot box, which can be localized for translation -->
<description>每周掉落或者击杀掉落的常住武器箱</description><!-- The description of the loot box, which can be localized for translation -->
<graphicData>
<texPath>SimpleLootBox/ExampleA</texPath><!-- 箱子的贴图路径 -->
<texPath>SimpleLootBox/ExampleA</texPath><!-- The texture path of the loot box -->
<graphicClass>Graphic_Single</graphicClass>
</graphicData>
<statBases>
<Mass>1.0</Mass><!-- 箱子的重量 -->
<MarketValue>10</MarketValue><!-- 箱子本身的价值 -->
<Mass>1.0</Mass><!-- The mass of the loot box -->
<MarketValue>100</MarketValue><!-- The market value of the loot box itself -->
</statBases>
<tradeability>Sellable</tradeability><!-- 箱子是否可以交易,有几个字面意思可以理解的值 None Sellable Buyable All -->
<tradeability>Sellable</tradeability><!-- Whether the loot box can be traded. Some literal values are available for this setting None Sellable Buyable All -->
<comps>
<li Class="CompProperties_Usable">
<useJob>UseArtifact</useJob>
@ -33,20 +39,24 @@
<li Class="SimpleLootBox.CompProperties_SpawnLootBox">
<lootBoxList>
<li>
<thingDef>SimpleLootBoxExampleA</thingDef><!-- 箱子的定义名,加入到击杀生物后的掉落列表 -->
<chance>0.1</chance><!-- 这个箱子的掉落概率 -->
<thingDef>SimpleLootBoxExampleA</thingDef><!-- The loot box's defName, added to the global drop list for killing creatures; if you have a custom key item, consider adding it here as well -->
<chance>0.05</chance><!-- The drop chance of this loot box; defaults to 0.05 (5%) if not specified -->
<daysBetweenLootBoxSpawns>0.2</daysBetweenLootBoxSpawns><!-- The frequency of spawning the loot box. daysBetweenLootBoxSpawns = 7, meaning spawn of a such a lootbox every 7 days in the game. No default loot box spawn -->
</li>
</lootBoxList>
</li>
<li Class="SimpleLootBox.CompProperties_LootBox">
<lootBoxOpenSound>lootBoxOpenSound</lootBoxOpenSound><!-- 进入开箱界面的音效 -->
<lootBoxSpinningSound>lootBoxSpinningSound</lootBoxSpinningSound><!-- 选取物品时的音效 -->
<lootBoxBackgroundMusicSound></lootBoxBackgroundMusicSound><!-- 开箱界面的背景音乐,单曲循环 -->
<lootBoxOpenSound>lootBoxOpenSound</lootBoxOpenSound><!-- The sound effect played when entering the loot box opening screen; if not set, no sound will be played -->
<lootBoxSpinningSound>lootBoxSpinningSound</lootBoxSpinningSound><!-- The sound effect played during the spinning; it's a looping Sustainer that plays a single audio clip -->
<lootBoxBackgroundMusicSound>lootBoxBackgroundMusicSoundA</lootBoxBackgroundMusicSound><!-- Background music for the loot box opening window; it's a single-loop Sustainer -->
<lootBoxBackgroundTexturePath>SimpleLootBox/LootBoxBackgroundA</lootBoxBackgroundTexturePath><!-- Background image for the loot box window; the UI resolution is:700*800 -->
<lootBoxOpenCost>Silver</lootBoxOpenCost><!-- The item required to open the loot box. It can be silver, a custom key, or any other item. If not specified, no item is required by default -->
<lootBoxOpenCostCount>128</lootBoxOpenCostCount><!-- The number of items required to open the loot box. Defaults to 0 if not specified -->
<lootBoxThingDef>
<li>
<li>
<thingDef>Silver</thingDef><!-- 箱子可以开出的物品的定义名 -->
<count>1</count><!-- 该物品生成的数量 -->
<weight>9</weight><!-- 这项奖励的生成权重 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>1</rarity><!-- 这项奖励的稀有度(使用的颜色与文本)可用选项 0 1 2 3 4 5 不填默认为0数字越大稀有度越高-->
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
@ -54,7 +64,7 @@
<li>
<thingDef>Silver</thingDef><!-- 箱子可以开出的物品的定义名 -->
<count>10</count><!-- 该物品生成的数量 -->
<weight>8</weight><!-- 这项奖励的生成权重 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>1</rarity><!-- 这项奖励的稀有度(使用的颜色与文本)可用选项 0 1 2 3 4 5 不填默认为0数字越大稀有度越高-->
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
@ -62,7 +72,7 @@
<li>
<thingDef>Silver</thingDef><!-- 箱子可以开出的物品的定义名 -->
<count>20</count><!-- 该物品生成的数量 -->
<weight>8</weight><!-- 这项奖励的生成权重 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>1</rarity><!-- 这项奖励的稀有度(使用的颜色与文本)可用选项 0 1 2 3 4 5 不填默认为0数字越大稀有度越高-->
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
@ -70,7 +80,7 @@
<li>
<thingDef>Silver</thingDef><!-- 箱子可以开出的物品的定义名 -->
<count>30</count><!-- 该物品生成的数量 -->
<weight>8</weight><!-- 这项奖励的生成权重 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>1</rarity><!-- 这项奖励的稀有度(使用的颜色与文本)可用选项 0 1 2 3 4 5 不填默认为0数字越大稀有度越高-->
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
@ -78,7 +88,7 @@
<li>
<thingDef>Silver</thingDef><!-- 箱子可以开出的物品的定义名 -->
<count>50</count><!-- 该物品生成的数量 -->
<weight>8</weight><!-- 这项奖励的生成权重 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>1</rarity><!-- 这项奖励的稀有度(使用的颜色与文本)可用选项 0 1 2 3 4 5 不填默认为0数字越大稀有度越高-->
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
@ -120,7 +130,7 @@
<stuff>WoodLog</stuff><!-- 如果这个物品是stuffable会使用这里设置的stuff -->
<quality>Masterwork</quality><!-- 如果这个物品有品质,会使用这里设置的品质,可用的品质为 Awful Poor Normal Good Excellent Masterwork Legendary-->
<count>5000</count>
<weight>1</weight>
<weight>0.8</weight>
<rarity>3</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
@ -130,7 +140,7 @@
<stuff>WoodLog</stuff><!-- 如果这个物品是stuffable会使用这里设置的stuff -->
<quality>Masterwork</quality><!-- 如果这个物品有品质,会使用这里设置的品质,可用的品质为 Awful Poor Normal Good Excellent Masterwork Legendary-->
<count>6000</count>
<weight>1</weight>
<weight>0.8</weight>
<rarity>3</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
@ -140,7 +150,7 @@
<stuff>WoodLog</stuff><!-- 如果这个物品是stuffable会使用这里设置的stuff -->
<quality>Masterwork</quality><!-- 如果这个物品有品质,会使用这里设置的品质,可用的品质为 Awful Poor Normal Good Excellent Masterwork Legendary-->
<count>8000</count>
<weight>1</weight>
<weight>0.8</weight>
<rarity>3</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
@ -150,7 +160,7 @@
<stuff>WoodLog</stuff><!-- 如果这个物品是stuffable会使用这里设置的stuff -->
<quality>Masterwork</quality><!-- 如果这个物品有品质,会使用这里设置的品质,可用的品质为 Awful Poor Normal Good Excellent Masterwork Legendary-->
<count>9999</count>
<weight>1</weight>
<weight>0.8</weight>
<rarity>3</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
@ -196,19 +206,19 @@
</ThingDef>
<ThingDef ParentName="SimpleLootBoxBase">
<defName>SimpleLootBoxExampleC</defName>
<label>simple loot box example C</label>
<defName>SimpleLootBoxExampleB</defName>
<label>边缘世界一号武器箱</label>
<thingClass>ThingWithComps</thingClass>
<description>Example C.</description>
<description>每周掉落或者击杀掉落的常住武器箱</description>
<graphicData>
<texPath>SimpleLootBox/ExampleC</texPath>
<texPath>SimpleLootBox/ExampleB</texPath>
<graphicClass>Graphic_Single</graphicClass>
</graphicData>
<statBases>
<Mass>1.0</Mass>
<MarketValue>100</MarketValue>
<MarketValue>10</MarketValue>
</statBases>
<tradeability>Buyable</tradeability>
<tradeability>Sellable</tradeability>
<comps>
<li Class="CompProperties_Usable">
<useJob>UseArtifact</useJob>
@ -219,32 +229,178 @@
<li Class="SimpleLootBox.CompProperties_SpawnLootBox">
<lootBoxList>
<li>
<thingDef>SimpleLootBoxExampleC</thingDef>
<chance>0.5</chance>
<thingDef>SimpleLootBoxExampleB</thingDef>
<chance>0.05</chance>
</li>
</lootBoxList>
</li>
<li Class="SimpleLootBox.CompProperties_LootBox">
<lootBoxOpenSound>lootBoxOpenSound</lootBoxOpenSound>
<lootBoxSpinningSound>lootBoxSpinningSound</lootBoxSpinningSound>
<lootBoxBackgroundMusicSound>lootBoxBackgroundMusicSound</lootBoxBackgroundMusicSound>
<lootBoxPawnKindDef><!-- 箱子开出的奖励可以混合人物和物品 -->
<lootBoxBackgroundMusicSound>lootBoxBackgroundMusicSoundB</lootBoxBackgroundMusicSound>
<lootBoxBackgroundTexturePath>SimpleLootBox/LootBoxBackgroundB</lootBoxBackgroundTexturePath>
<lootBoxOpenCost>Silver</lootBoxOpenCost>
<lootBoxOpenCostCount>128</lootBoxOpenCostCount>
<lootBoxPawnKindDef>
<li>
<pawnKindDef>Mercenary_Gunner</pawnKindDef>
<count>2</count>
<pawnKindDef>Baby_Example</pawnKindDef>
<count>1</count>
<weight>5</weight>
</li>
</lootBoxPawnKindDef>
<lootBoxThingDef><!-- 箱子开出的奖励可以混合人物和物品 -->
<li>
<thingDef>Silver</thingDef>
<count>1000</count>
<weight>5</weight>
<rarity>2</rarity>
<rarity>1</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
<li MayRequire="rooandgloomy.dragonianracemod">
<pawnKindDef>Dragonian_Boxed</pawnKindDef><!-- 龙娘 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>4</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.harchaoura">
<pawnKindDef>HAR_Chaoura_Player_kami</pawnKindDef><!-- 混沌 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.harneclose">
<pawnKindDef>HAR_Neclose_Player_kami</pawnKindDef><!-- 细菌 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.harsilkiera">
<pawnKindDef>HAR_Silkiera_Player_kami</pawnKindDef><!-- 兽娘 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.hareveliet">
<pawnKindDef>HAR_Eveliet_Player_kami</pawnKindDef><!-- 伊娃 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.haridhale">
<pawnKindDef>HAR_Idhale_Player_kami</pawnKindDef><!-- 幽灵 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.harxenoorca">
<pawnKindDef>HAR_Xenoorca_Player_kami</pawnKindDef><!-- 鱼人 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="ayameduki.harnexaga">
<pawnKindDef>HAR_Nexaga_Player_kami</pawnKindDef><!-- 混血 -->
<count>1</count><!-- 该人物生成的数量 -->
<weight>10</weight><!-- 这项奖励的生成权重 -->
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效 -->
</li>
<li MayRequire="miho.fortifiedoutremer">
<pawnKindDef>Miho_PlayerColonist_kami</pawnKindDef><!-- 美狐 -->
<count>1</count>
<weight>1</weight>
<rarity>4</rarity>
<effecterDef>ExtinguisherExplosion</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
</lootBoxThingDef>
<li>
<pawnKindDef>Megascarab</pawnKindDef><!-- 虫子 -->
<count>1</count>
<weight>8</weight>
<rarity>1</rarity>
<isHostile>true</isHostile>
<effecterDef>ExtinguisherExplosion</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
<li MayRequire="verniy709.racenhux">
<pawnKindDef>NHUX_PlayerA</pawnKindDef><!-- ux -->
<count>1</count>
<weight>8</weight>
<rarity>2</rarity>
<effecterDef>ExtinguisherExplosion</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
<li MayRequire="ayameduki.harnearmare">
<pawnKindDef>HAR_Nearmaere_Player_kami</pawnKindDef><!-- 魅魔 -->
<count>1</count>
<weight>18</weight>
<rarity>2</rarity>
<effecterDef>ExtinguisherExplosion</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
<li MayRequire="ayameduki.harlittluna">
<pawnKindDef>HAR_Littluna_Player_kami</pawnKindDef><!-- 伪神 -->
<count>1</count>
<weight>18</weight>
<rarity>2</rarity>
<effecterDef>ExtinguisherExplosion</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
</lootBoxPawnKindDef>
<lootBoxThingDef>
<li>
<thingDef>Wastepack</thingDef>
<count>5</count>
<weight>8</weight>
<rarity>1</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
</li>
<li>
<thingDef>GoldenCube</thingDef>
<count>1</count>
<weight>8</weight>
<rarity>5</rarity>
<isHidden>true</isHidden>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
</li>
<li>
<thingDef>Leather_Human</thingDef>
<count>5</count>
<weight>8</weight>
<rarity>1</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
</li>
<li>
<thingDef>Silver</thingDef>
<count>1</count>
<weight>8</weight>
<rarity>1</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
</li>
<li MayRequire="verniy709.racenhux">
<thingDef>Meat_NHUX</thingDef>
<count>10</count>
<weight>8</weight>
<rarity>1</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
</li>
</lootBoxThingDef>
</li>
</comps>
</ThingDef>

View File

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?><Defs>
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SoundDef>
<defName>lootBoxOpenSound</defName>
<defName>lootBoxOpenSound</defName><!-- Sound defName-->
<maxVoices>1</maxVoices>
<maxSimultaneous>1</maxSimultaneous>
<subSounds>
@ -9,15 +10,15 @@
<onCamera>True</onCamera>
<grains>
<li Class="AudioGrain_Clip">
<clipPath>SimpleLootBox/lootBoxOpenSound</clipPath><!-- 音频路径-->
<clipPath>SimpleLootBox/lootBoxOpenSound</clipPath><!-- Sound path-->
</li>
</grains>
<volumeRange>50~50</volumeRange><!-- 音量-->
<volumeRange>50~50</volumeRange><!-- Volume-->
</li>
</subSounds>
</SoundDef>
<!-- Sustainer 如果该音频需要持续播放需要设置为sustainer-->
<!-- If the sound needs to be played continuously, it should be set as a Sustainer-->
<SoundDef>
<defName>lootBoxSpinningSound</defName>
<maxVoices>1</maxVoices>
@ -41,7 +42,7 @@
<!-- Sustainer-->
<SoundDef>
<defName>lootBoxBackgroundMusicSound</defName>
<defName>lootBoxBackgroundMusicSoundA</defName>
<maxVoices>1</maxVoices>
<maxSimultaneous>1</maxSimultaneous>
<sustain>True</sustain>
@ -53,7 +54,29 @@
<onCamera>True</onCamera>
<grains>
<li Class="AudioGrain_Clip">
<clipPath>SimpleLootBox/lootBoxBackgroundMusicSound</clipPath>
<clipPath>SimpleLootBox/lootBoxBackgroundMusicSoundA</clipPath>
</li>
</grains>
<volumeRange>35~35</volumeRange>
</li>
</subSounds>
</SoundDef>
<!-- Sustainer-->
<SoundDef>
<defName>lootBoxBackgroundMusicSoundB</defName>
<maxVoices>1</maxVoices>
<maxSimultaneous>1</maxSimultaneous>
<sustain>True</sustain>
<priorityMode>PrioritizeNearest</priorityMode>
<subSounds>
<li>
<muteWhenPaused>False</muteWhenPaused>
<sustainLoop>False</sustainLoop>
<onCamera>True</onCamera>
<grains>
<li Class="AudioGrain_Clip">
<clipPath>SimpleLootBox/lootBoxBackgroundMusicSoundB</clipPath>
</li>
</grains>
<volumeRange>35~35</volumeRange>

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<PawnKindDef ParentName="GrenadierBase"><!-- Character inherits from the 'parent' GrenadierBase. If any entries below share the same fields as the parent, they will override the parent's values. -->
<defName>Baby_Example</defName><!-- Character definition name -->
<label>婴儿</label><!-- Character's name can be localized for translation. -->
<race>Human</race><!-- Definition name of the character's race -->
<defaultFactionType>OutlanderCivil</defaultFactionType><!-- Default faction. -->
<combatPower>10</combatPower><!-- Raid point cost -->
<initialWillRange>1~10</initialWillRange><!-- Slavery difficulty -->
<initialResistanceRange>10~20</initialResistanceRange><!-- Recruitment difficulty -->
<minGenerationAge>0.01</minGenerationAge><!-- Minimum biological age for pawn generation -->
<maxGenerationAge>30</maxGenerationAge><!-- Maximum biological age for pawn generation -->
<techHediffsMoney>0</techHediffsMoney><!-- Bionic value -->
<apparelMoney>0</apparelMoney><!-- Apparel value -->
<weaponMoney>0</weaponMoney><!-- Weapon value -->
<techHediffsTags Inherit="False"><!-- Inherit="False" is used to remove such tags that might be inherited from the parentName, and defines which bionic tags will be used instead. -->
</techHediffsTags>
<weaponTags Inherit="False"><!-- Defines the tags used to determine which weapons this pawn can equip. -->
</weaponTags>
<apparelTags Inherit="False"><!-- Defines the tags used to determine which apparel this pawn can wear. -->
</apparelTags>
<inventoryOptions Inherit="False"><!-- Determines which items this pawn carries in their inventory. -->
</inventoryOptions>
<disallowedTraits><!-- Traits that are not allowed for this pawn -->
<li>Brawler</li>
</disallowedTraits>
<disallowedTraitsWithDegree><!-- Traits that are forbidden for this pawn kind, including specific degrees -->
<PsychicSensitivity>-2</PsychicSensitivity>
</disallowedTraitsWithDegree>
<forcedTraits><!-- Traits that are forcibly assigned to the pawn upon generation, along with their degrees. Most modded traits typically do not define degrees. -->
<Recluse>0</Recluse>
</forcedTraits>
<useFactionXenotypes>false</useFactionXenotypes><!-- Removes xenotype generation chances defined by the faction -->
<xenotypeSet>
<xenotypeChances>
<Neanderthal MayRequire="Ludeon.RimWorld.Biotech">1</Neanderthal><!-- Generation chance for a specific xenotype -->
</xenotypeChances>
</xenotypeSet>
<pawnGroupDevelopmentStage>Baby</pawnGroupDevelopmentStage><!-- Specifies the developmental stage of the generated pawn. Valid options are Newborn Baby Child Adult-->
</PawnKindDef>
</Defs>

View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<PawnKindDef ParentName="GrenadierBase"><!-- 人物的基本数据继承自GrenadierBase下面的数据中如果有和parent相同的条目会覆盖parent的数值 -->
<defName>Baby_Example</defName><!-- 人物的定义名 -->
<label>baby example</label><!-- 人物的名字,可以进行本地化翻译 -->
<race>Human</race><!-- 人物的种族的定义名 -->
<defaultFactionType>OutlanderCivil</defaultFactionType><!-- 初始的派系类型 -->
<combatPower>10</combatPower><!-- 袭击占用分数 -->
<initialWillRange>1~10</initialWillRange><!-- 奴役难度 -->
<initialResistanceRange>10~20</initialResistanceRange><!-- 招募难度 -->
<minGenerationAge>0.01</minGenerationAge><!-- 生成人物的最小生物年龄 -->
<maxGenerationAge>30</maxGenerationAge><!-- 生成人物的最大生物年龄 -->
<techHediffsMoney>0</techHediffsMoney><!-- 仿生体价值 -->
<apparelMoney>0</apparelMoney><!-- 服装价值 -->
<weaponMoney>0</weaponMoney><!-- 武器价值 -->
<techHediffsTags Inherit="False"><!-- Inherit="False"用来去除可能从parentName里继承的仿生体tag决定了使用的仿生体的标签 -->
</techHediffsTags>
<weaponTags Inherit="False"><!-- 决定了使用的武器的标签 -->
</weaponTags>
<apparelTags Inherit="False"><!-- 决定了使用的服装的标签 -->
</apparelTags>
<inventoryOptions Inherit="False"><!-- 决定了随身携带物品 -->
</inventoryOptions>
<skills><!-- 生成人物的某项技能的范围,比如 Shooting Melee Construction Mining Cooking Plants Animals Crafting Artistic Medicine Social Intellectual -->
<li>
<skill>Shooting</skill>
<range>15~20</range>
</li>
</skills>
<disallowedTraits><!-- 不被允许使用的特性 -->
<li>Brawler</li>
</disallowedTraits>
<disallowedTraitsWithDegree><!-- 不被允许使用的特性以及对应的程度 -->
<PsychicSensitivity>-2</PsychicSensitivity>
</disallowedTraitsWithDegree>
<forcedTraits><!-- 强制生成的特性以及程度通常来讲大部分mod特性不会设置程度 -->
<Recluse>0</Recluse>
</forcedTraits>
<useFactionXenotypes>false</useFactionXenotypes><!-- 去除派系设置的异种生成概率 -->
<xenotypeSet>
<xenotypeChances>
<Neanderthal MayRequire="Ludeon.RimWorld.Biotech">1</Neanderthal><!-- 某个特定异种的生成概率 -->
</xenotypeChances>
</xenotypeSet>
<pawnGroupDevelopmentStage>Baby</pawnGroupDevelopmentStage><!-- 生成特定生长状态的人物,可用参数为 Newborn Baby Child Adult-->
</PawnKindDef>
</Defs>

View File

@ -0,0 +1,213 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<ThingDef Name="SimpleLootBoxBase" ParentName="ResourceBase" Abstract="True">
<thingClass>ThingWithComps</thingClass>
<graphicData>
<graphicClass>Graphic_Single</graphicClass><!-- 用 Graphic_StackCount 物品的贴图会反应物品的堆叠数量 -->
</graphicData>
<stackLimit>10</stackLimit><!-- 物品的堆叠数量 -->
<techLevel>Medieval</techLevel><!-- 物品的科技等级,并不影响任何功能,只是个标签 -->
<thingCategories><!-- 物品的分类 -->
<li>Artifacts</li>
</thingCategories>
<tradeTags><!-- 物品的交易标签 -->
<li>Artifacts</li>
</tradeTags>
</ThingDef>
<ThingDef ParentName="SimpleLootBoxBase">
<defName>SimpleLootBoxExampleA</defName><!-- 箱子的定义名 -->
<label>simple loot box example A</label><!-- 箱子的名字,可以进行本地化翻译 -->
<description>Example A.</description><!-- 箱子的描述,可以进行本地化翻译 -->
<graphicData>
<texPath>SimpleLootBox/ExampleA</texPath><!-- 箱子的贴图路径 -->
<graphicClass>Graphic_Single</graphicClass>
</graphicData>
<statBases>
<Mass>1.0</Mass><!-- 箱子的重量 -->
<MarketValue>100</MarketValue><!-- 箱子本身的价值 -->
</statBases>
<tradeability>Buyable</tradeability><!-- 箱子是否可以交易,有几个字面意思可以理解的值 None Sellable Buyable All -->
<comps>
<li Class="CompProperties_Usable">
<useJob>UseArtifact</useJob>
<useLabel>Activate {0_label}</useLabel>
<showUseGizmo>true</showUseGizmo>
<useDuration>150</useDuration>
</li>
<li Class="SimpleLootBox.CompProperties_SpawnLootBox">
<lootBoxList>
<li>
<thingDef>SimpleLootBoxExampleA</thingDef><!-- 箱子的定义名,加入到全局击杀生物后的掉落列表;如果有自定义的钥匙,也可以考虑加到这里来 -->
<chance>0.01</chance><!-- 这个箱子的掉落概率不填默认为0.05也就是5%的击杀掉率 -->
</li>
</lootBoxList>
</li>
<li Class="SimpleLootBox.CompProperties_LootBox">
<lootBoxOpenSound>lootBoxOpenSound</lootBoxOpenSound><!-- 进入开箱界面的音效,不填就没音效 -->
<lootBoxSpinningSound>lootBoxSpinningSound</lootBoxSpinningSound><!-- 选取物品时的音效单曲循环sustainer -->
<lootBoxBackgroundMusicSound>lootBoxBackgroundMusicSoundA</lootBoxBackgroundMusicSound><!-- 开箱界面的背景音乐单曲循环sustainer -->
<lootBoxBackgroundTexturePath>SimpleLootBox/LootBoxBackgroundA</lootBoxBackgroundTexturePath><!-- 开箱界面的背景图界面的分辨率为700*800 -->
<lootBoxOpenCost>Silver</lootBoxOpenCost><!-- 开箱子所需要的物品,可以是白银,自定义的钥匙,或者任何物品,不填就默认为无 -->
<lootBoxOpenCostCount>100</lootBoxOpenCostCount><!-- 开箱子所需要的物品的数量不填默认为0 -->
<lootBoxThingDef>
<li>
<thingDef>Silver</thingDef><!-- 箱子可以开出的物品的定义名,必填 -->
<count>1000</count><!-- 该物品生成的数量,必填 -->
<weight>5</weight><!-- 这项奖励的生成权重,必填 -->
<rarity>2</rarity><!-- 这项奖励的稀有度(使用的颜色与文本)可用选项 0 1 2 3 4 5 不填默认为0数字越大稀有度越高-->
<effecterDef>Skip_ExitNoDelay</effecterDef><!-- 生成奖励时可以播放的特效,不设置就没特效 -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound><!-- 该奖励被选中时的音效,不设置就没音效 -->
<isHidden>false</isHidden><!-- 该物品是否会在可用的奖励列表里隐藏如果你想给开箱的人一个惊喜可以把他设置成true默认为false -->
</li>
<li>
<thingDef>Gold</thingDef>
<count>500</count>
<weight>1</weight>
<rarity>4</rarity>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
<li>
<thingDef>Bed</thingDef>
<stuff>WoodLog</stuff><!-- 如果这个物品是stuffable会使用这里设置的stuff但如果没设置会自动套用默认stuff -->
<quality>Masterwork</quality><!-- 如果这个物品有品质会使用这里设置的品质不设置默认Normal可用的品质为 Awful Poor Normal Good Excellent Masterwork Legendary-->
<count>1</count>
<weight>2</weight>
<rarity>2</rarity>
<isHidden>true</isHidden><!-- 该奖励在列表里被隐藏了 -->
</li>
<li>
<thingDef>MeleeWeapon_MonoSword</thingDef>
<quality>Legendary</quality>
<count>1</count>
<weight>1</weight>
<rarity>5</rarity>
<effecterDef>GiantExplosion</effecterDef>
</li>
</lootBoxThingDef>
</li>
</comps>
</ThingDef>
<ThingDef ParentName="SimpleLootBoxBase">
<defName>SimpleLootBoxExampleB</defName>
<label>simple loot box example B</label>
<thingClass>ThingWithComps</thingClass>
<description>Example B.</description>
<graphicData>
<texPath>SimpleLootBox/ExampleB</texPath>
<graphicClass>Graphic_Single</graphicClass>
</graphicData>
<statBases>
<Mass>1.0</Mass>
<MarketValue>100</MarketValue>
</statBases>
<tradeability>Buyable</tradeability>
<comps>
<li Class="CompProperties_Usable">
<useJob>UseArtifact</useJob>
<useLabel>Activate {0_label}</useLabel>
<showUseGizmo>true</showUseGizmo>
<useDuration>100</useDuration>
</li>
<li Class="SimpleLootBox.CompProperties_SpawnLootBox">
<lootBoxList>
<li>
<thingDef>SimpleLootBoxExampleB</thingDef>
<chance>0.5</chance>
</li>
</lootBoxList>
</li>
<li Class="SimpleLootBox.CompProperties_LootBox">
<lootBoxOpenSound>lootBoxOpenSound</lootBoxOpenSound>
<lootBoxSpinningSound>lootBoxSpinningSound</lootBoxSpinningSound>
<lootBoxBackgroundMusicSound>lootBoxBackgroundMusicSoundB</lootBoxBackgroundMusicSound>
<lootBoxBackgroundTexturePath>SimpleLootBox/LootBoxBackgroundB</lootBoxBackgroundTexturePath>
<lootBoxPawnKindDef>
<li>
<pawnKindDef>Mercenary_Gunner</pawnKindDef><!-- 箱子可以开出的人物的定义名 -->
<count>2</count><!-- 该人物生成的数量 -->
<weight>5</weight><!-- 这项奖励的生成权重 -->
<isHostile>false</isHostile><!-- 生成的人物是否和玩家敌对默认为false -->
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
<li>
<pawnKindDef>Baby_Example</pawnKindDef>
<count>1</count>
<weight>5</weight>
<rarity>3</rarity>
</li>
<li>
<pawnKindDef>Mech_Centurion</pawnKindDef>
<count>1</count>
<weight>5</weight>
<rarity>4</rarity>
<effecterDef>ExtinguisherExplosion</effecterDef>
</li>
<li>
<pawnKindDef>Cat</pawnKindDef>
<count>5</count>
<weight>5</weight>
<rarity>5</rarity>
<isHostile>true</isHostile><!-- 生成的人物和玩家敌对 -->
</li>
</lootBoxPawnKindDef>
</li>
</comps>
</ThingDef>
<ThingDef ParentName="SimpleLootBoxBase">
<defName>SimpleLootBoxExampleC</defName>
<label>simple loot box example C</label>
<thingClass>ThingWithComps</thingClass>
<description>Example C.</description>
<graphicData>
<texPath>SimpleLootBox/ExampleC</texPath>
<graphicClass>Graphic_Single</graphicClass>
</graphicData>
<statBases>
<Mass>1.0</Mass>
<MarketValue>100</MarketValue>
</statBases>
<tradeability>Buyable</tradeability>
<comps>
<li Class="CompProperties_Usable">
<useJob>UseArtifact</useJob>
<useLabel>Activate {0_label}</useLabel>
<showUseGizmo>true</showUseGizmo>
<useDuration>100</useDuration>
</li>
<li Class="SimpleLootBox.CompProperties_SpawnLootBox">
<lootBoxList>
<li>
<thingDef>SimpleLootBoxExampleC</thingDef>
<chance>0.5</chance>
</li>
</lootBoxList>
</li>
<li Class="SimpleLootBox.CompProperties_LootBox">
<lootBoxOpenSound>lootBoxOpenSound</lootBoxOpenSound>
<lootBoxSpinningSound>lootBoxSpinningSound</lootBoxSpinningSound>
<lootBoxPawnKindDef><!-- 箱子开出的奖励可以混合人物和物品 -->
<li>
<pawnKindDef>Mercenary_Gunner</pawnKindDef>
<count>2</count>
<weight>5</weight>
</li>
</lootBoxPawnKindDef>
<lootBoxThingDef><!-- 箱子开出的奖励可以混合人物和物品 -->
<li>
<thingDef>Silver</thingDef>
<count>1000</count>
<weight>5</weight>
<rarity>2</rarity>
<effecterDef>Skip_ExitNoDelay</effecterDef>
<lootBoxFinalizingRewardSound>lootBoxFinalizingRewardSound</lootBoxFinalizingRewardSound>
</li>
</lootBoxThingDef>
</li>
</comps>
</ThingDef>
</Defs>

View File

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SoundDef>
<defName>lootBoxOpenSound</defName><!-- 音频定义名-->
<maxVoices>1</maxVoices>
<maxSimultaneous>1</maxSimultaneous>
<subSounds>
<li>
<onCamera>True</onCamera>
<grains>
<li Class="AudioGrain_Clip">
<clipPath>SimpleLootBox/lootBoxOpenSound</clipPath><!-- 音频路径-->
</li>
</grains>
<volumeRange>50~50</volumeRange><!-- 音量-->
</li>
</subSounds>
</SoundDef>
<!-- Sustainer 如果该音频需要持续播放需要设置为sustainer-->
<SoundDef>
<defName>lootBoxSpinningSound</defName>
<maxVoices>1</maxVoices>
<maxSimultaneous>1</maxSimultaneous>
<sustain>True</sustain>
<priorityMode>PrioritizeNearest</priorityMode>
<subSounds>
<li>
<muteWhenPaused>False</muteWhenPaused>
<sustainLoop>False</sustainLoop>
<onCamera>True</onCamera>
<grains>
<li Class="AudioGrain_Clip">
<clipPath>SimpleLootBox/lootBoxSpinningSound</clipPath>
</li>
</grains>
<volumeRange>50~50</volumeRange>
</li>
</subSounds>
</SoundDef>
<!-- Sustainer-->
<SoundDef>
<defName>lootBoxBackgroundMusicSoundA</defName>
<maxVoices>1</maxVoices>
<maxSimultaneous>1</maxSimultaneous>
<sustain>True</sustain>
<priorityMode>PrioritizeNearest</priorityMode>
<subSounds>
<li>
<muteWhenPaused>False</muteWhenPaused>
<sustainLoop>False</sustainLoop>
<onCamera>True</onCamera>
<grains>
<li Class="AudioGrain_Clip">
<clipPath>SimpleLootBox/lootBoxBackgroundMusicSoundA</clipPath>
</li>
</grains>
<volumeRange>35~35</volumeRange>
</li>
</subSounds>
</SoundDef>
<!-- Sustainer-->
<SoundDef>
<defName>lootBoxBackgroundMusicSoundB</defName>
<maxVoices>1</maxVoices>
<maxSimultaneous>1</maxSimultaneous>
<sustain>True</sustain>
<priorityMode>PrioritizeNearest</priorityMode>
<subSounds>
<li>
<muteWhenPaused>False</muteWhenPaused>
<sustainLoop>False</sustainLoop>
<onCamera>True</onCamera>
<grains>
<li Class="AudioGrain_Clip">
<clipPath>SimpleLootBox/lootBoxBackgroundMusicSoundB</clipPath>
</li>
</grains>
<volumeRange>35~35</volumeRange>
</li>
</subSounds>
</SoundDef>
<SoundDef>
<defName>lootBoxFinalizingRewardSound</defName>
<maxVoices>1</maxVoices>
<maxSimultaneous>1</maxSimultaneous>
<subSounds>
<li>
<onCamera>True</onCamera>
<grains>
<li Class="AudioGrain_Clip">
<clipPath>SimpleLootBox/lootBoxFinalizingRewardSound</clipPath>
</li>
</grains>
<volumeRange>70~70</volumeRange>
</li>
</subSounds>
</SoundDef>
</Defs>

View File

@ -2,6 +2,18 @@
"Version": 1,
"WorkspaceRootPath": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|d:\\steam\\steamapps\\common\\rimworld\\mods\\simplelootbox\\1.5\\source\\simplelootbox\\gamecomponent_spawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:gamecomponent_spawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\compspawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:compspawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\compproperties_lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:compproperties_lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
@ -10,45 +22,6 @@
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\compproperties_spawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:compproperties_spawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\compspawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:compspawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxdatabase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxdatabase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxopeningwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxopeningwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxpawnkinddef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxpawnkinddef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\rarity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:rarity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxthingdef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxthingdef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxspinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxspinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\complootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:complootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Verniy\\Downloads\\LootBoxSpinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\harmonypatches\\pawn_kill.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:harmonypatches\\pawn_kill.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
@ -57,6 +30,41 @@
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\PatchMain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:HarmonyPatches\\PatchMain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|d:\\steam\\steamapps\\common\\rimworld\\mods\\simplelootbox\\1.5\\source\\simplelootbox\\lootboxopeningwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxopeningwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\complootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:complootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxspinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxspinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxthingdef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxthingdef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxdatabase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxdatabase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\raritycolor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:raritycolor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\rarity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:rarity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxpawnkinddef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxpawnkinddef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Verniy\\Downloads\\LootBoxSpinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00000000-0000-0000-0000-000000000000}|\u003CSolution\u003E|SimpleLootBox||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
},
@ -76,67 +84,41 @@
"Children": [
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "LootBoxOpeningWindow.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxOpeningWindow.cs",
"RelativeDocumentMoniker": "LootBoxOpeningWindow.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxOpeningWindow.cs",
"RelativeToolTip": "LootBoxOpeningWindow.cs",
"ViewState": "AgIAAFYAAAAAAAAAAAAqwGkAAABKAAAAAAAAAA==",
"DocumentIndex": 1,
"Title": "GameComponent_SpawnLootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\GameComponent_SpawnLootBox.cs",
"RelativeDocumentMoniker": "GameComponent_SpawnLootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\GameComponent_SpawnLootBox.cs",
"RelativeToolTip": "GameComponent_SpawnLootBox.cs",
"ViewState": "AgIAADMAAAAAAAAAAAAowBgAAABMAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T20:18:46.529Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "LootBoxPawnKindDef.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxPawnKindDef.cs",
"RelativeDocumentMoniker": "LootBoxPawnKindDef.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxPawnKindDef.cs",
"RelativeToolTip": "LootBoxPawnKindDef.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAEAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:37:54.85Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "Rarity.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Rarity.cs",
"RelativeDocumentMoniker": "Rarity.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Rarity.cs",
"RelativeToolTip": "Rarity.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T12:47:11.303Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "LootBoxDatabase.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxDatabase.cs",
"RelativeDocumentMoniker": "LootBoxDatabase.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxDatabase.cs",
"RelativeToolTip": "LootBoxDatabase.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAyAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T02:24:30.5Z",
"WhenOpened": "2025-05-09T02:40:24.696Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "LootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBox.cs",
"RelativeDocumentMoniker": "LootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBox.cs",
"RelativeToolTip": "LootBox.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAYAAAAAAAAAA==",
"Title": "CompProperties_LootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_LootBox.cs",
"RelativeDocumentMoniker": "CompProperties_LootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_LootBox.cs",
"RelativeToolTip": "CompProperties_LootBox.cs",
"ViewState": "AgIAAAkAAAAAAAAAAAAAAB4AAAA0AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T01:23:17.893Z",
"WhenOpened": "2025-05-06T21:54:49.755Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "LootBoxOpeningWindow.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxOpeningWindow.cs",
"RelativeDocumentMoniker": "LootBoxOpeningWindow.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxOpeningWindow.cs",
"RelativeToolTip": "LootBoxOpeningWindow.cs",
"ViewState": "AgIAADcAAAAAAAAAAAAewE0AAAA5AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T20:18:46.529Z",
"EditorCaption": ""
},
{
@ -147,114 +129,160 @@
"RelativeDocumentMoniker": "CompSpawnLootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompSpawnLootBox.cs",
"RelativeToolTip": "CompSpawnLootBox.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA==",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAJAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T01:26:54.137Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"DocumentIndex": 4,
"Title": "CompProperties_SpawnLootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_SpawnLootBox.cs",
"RelativeDocumentMoniker": "CompProperties_SpawnLootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_SpawnLootBox.cs",
"RelativeToolTip": "CompProperties_SpawnLootBox.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABMAAAABAAAAAAAAAA==",
"ViewState": "AgIAAAIAAAAAAAAAAAAYwBQAAAABAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T01:22:11.223Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "CompProperties_LootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_LootBox.cs",
"RelativeDocumentMoniker": "CompProperties_LootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_LootBox.cs",
"RelativeToolTip": "CompProperties_LootBox.cs",
"ViewState": "AgIAAAMAAAAAAAAAAAAcwBMAAAAAAAAAAAAAAA==",
"DocumentIndex": 6,
"Title": "PatchMain.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\PatchMain.cs",
"RelativeDocumentMoniker": "HarmonyPatches\\PatchMain.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\PatchMain.cs",
"RelativeToolTip": "HarmonyPatches\\PatchMain.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T21:54:49.755Z",
"WhenOpened": "2025-05-06T21:58:33.185Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "LootBoxThingDef.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxThingDef.cs",
"RelativeDocumentMoniker": "LootBoxThingDef.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxThingDef.cs",
"RelativeToolTip": "LootBoxThingDef.cs",
"ViewState": "AgIAAAYAAAAAAAAAAAAAAAsAAAAEAAAAAAAAAA==",
"DocumentIndex": 5,
"Title": "Pawn_Kill.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\Pawn_Kill.cs",
"RelativeDocumentMoniker": "HarmonyPatches\\Pawn_Kill.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\Pawn_Kill.cs",
"RelativeToolTip": "HarmonyPatches\\Pawn_Kill.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:36:06.172Z",
"WhenOpened": "2025-05-06T21:58:18.923Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "LootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBox.cs",
"RelativeDocumentMoniker": "LootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBox.cs",
"RelativeToolTip": "LootBox.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T01:23:17.893Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 11,
"Title": "LootBoxDatabase.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxDatabase.cs",
"RelativeDocumentMoniker": "LootBoxDatabase.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxDatabase.cs",
"RelativeToolTip": "LootBoxDatabase.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T02:24:30.5Z"
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "LootBoxSpinner.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxSpinner.cs",
"RelativeDocumentMoniker": "LootBoxSpinner.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxSpinner.cs*",
"RelativeToolTip": "LootBoxSpinner.cs*",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABMAAABNAAAAAAAAAA==",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxSpinner.cs",
"RelativeToolTip": "LootBoxSpinner.cs",
"ViewState": "AQIAAGQAAAAAAAAAAAAYwH0AAAAaAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T20:22:09.628Z",
"EditorCaption": ""
"WhenOpened": "2025-05-07T20:22:09.628Z"
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "LootBoxThingDef.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxThingDef.cs",
"RelativeDocumentMoniker": "LootBoxThingDef.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxThingDef.cs",
"RelativeToolTip": "LootBoxThingDef.cs",
"ViewState": "AQIAAAYAAAAAAAAAAAAAAB8AAAAlAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:36:06.172Z"
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "CompLootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompLootBox.cs",
"RelativeDocumentMoniker": "CompLootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompLootBox.cs",
"RelativeToolTip": "CompLootBox.cs",
"ViewState": "AgIAABcAAAAAAAAAAAAmwDAAAABJAAAAAAAAAA==",
"ViewState": "AgIAAA4AAAAAAAAAAAAQwBgAAAA5AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:42:42.073Z",
"EditorCaption": ""
"WhenOpened": "2025-05-06T22:42:42.073Z"
},
{
"$type": "Document",
"DocumentIndex": 11,
"DocumentIndex": 12,
"Title": "RarityColor.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\RarityColor.cs",
"RelativeDocumentMoniker": "RarityColor.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\RarityColor.cs",
"RelativeToolTip": "RarityColor.cs",
"ViewState": "AQIAAAMAAAAAAAAAAAAAABMAAAAGAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-08T13:16:57.175Z"
},
{
"$type": "Document",
"DocumentIndex": 13,
"Title": "Rarity.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Rarity.cs",
"RelativeDocumentMoniker": "Rarity.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Rarity.cs",
"RelativeToolTip": "Rarity.cs",
"ViewState": "AQIAAAMAAAAAAAAAAAAAABYAAABNAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T12:47:11.303Z"
},
{
"$type": "Document",
"DocumentIndex": 14,
"Title": "LootBoxPawnKindDef.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxPawnKindDef.cs",
"RelativeDocumentMoniker": "LootBoxPawnKindDef.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxPawnKindDef.cs",
"RelativeToolTip": "LootBoxPawnKindDef.cs",
"ViewState": "AQIAAAMAAAAAAAAAAAAAABgAAAAdAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:37:54.85Z"
},
{
"$type": "Document",
"DocumentIndex": 15,
"Title": "LootBoxSpinner.cs",
"DocumentMoniker": "C:\\Users\\Verniy\\Downloads\\LootBoxSpinner.cs",
"ToolTip": "C:\\Users\\Verniy\\Downloads\\LootBoxSpinner.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T23:49:02.745Z",
"EditorCaption": ""
"WhenOpened": "2025-05-07T23:49:02.745Z"
},
{
"$type": "Document",
"DocumentIndex": 12,
"Title": "Pawn_Kill.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\Pawn_Kill.cs",
"RelativeDocumentMoniker": "HarmonyPatches\\Pawn_Kill.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\Pawn_Kill.cs",
"RelativeToolTip": "HarmonyPatches\\Pawn_Kill.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAgAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T21:58:18.923Z"
},
{
"$type": "Document",
"DocumentIndex": 13,
"Title": "PatchMain.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\PatchMain.cs",
"RelativeDocumentMoniker": "HarmonyPatches\\PatchMain.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\PatchMain.cs",
"RelativeToolTip": "HarmonyPatches\\PatchMain.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABQAAAAJAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T21:58:33.185Z"
},
{
"$type": "Document",
"DocumentIndex": 14,
"DocumentIndex": 16,
"Title": "SimpleLootBox",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\SimpleLootBox.csproj",
"RelativeDocumentMoniker": "SimpleLootBox.csproj",
@ -265,13 +293,13 @@
},
{
"$type": "Document",
"DocumentIndex": 15,
"DocumentIndex": 17,
"Title": "AssemblyInfo.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Properties\\AssemblyInfo.cs",
"RelativeDocumentMoniker": "Properties\\AssemblyInfo.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Properties\\AssemblyInfo.cs",
"RelativeToolTip": "Properties\\AssemblyInfo.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:00:49.967Z"
}

View File

@ -2,6 +2,18 @@
"Version": 1,
"WorkspaceRootPath": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|d:\\steam\\steamapps\\common\\rimworld\\mods\\simplelootbox\\1.5\\source\\simplelootbox\\gamecomponent_spawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:gamecomponent_spawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\compspawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:compspawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\compproperties_lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:compproperties_lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
@ -10,45 +22,6 @@
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\compproperties_spawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:compproperties_spawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\compspawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:compspawnlootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxdatabase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxdatabase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxopeningwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxopeningwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxpawnkinddef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxpawnkinddef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\rarity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:rarity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxthingdef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxthingdef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxspinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxspinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\complootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:complootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Verniy\\Downloads\\LootBoxSpinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\harmonypatches\\pawn_kill.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:harmonypatches\\pawn_kill.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
@ -57,6 +30,41 @@
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\PatchMain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:HarmonyPatches\\PatchMain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|d:\\steam\\steamapps\\common\\rimworld\\mods\\simplelootbox\\1.5\\source\\simplelootbox\\lootboxopeningwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxopeningwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\complootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:complootbox.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxspinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxspinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxthingdef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxthingdef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxdatabase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxdatabase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\raritycolor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:raritycolor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\rarity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:rarity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\lootboxpawnkinddef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{00FCB9AE-563C-4C61-B2E3-317C008E6254}|SimpleLootBox.csproj|solutionrelative:lootboxpawnkinddef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Verniy\\Downloads\\LootBoxSpinner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00000000-0000-0000-0000-000000000000}|\u003CSolution\u003E|SimpleLootBox||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
},
@ -76,67 +84,41 @@
"Children": [
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "LootBoxOpeningWindow.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxOpeningWindow.cs",
"RelativeDocumentMoniker": "LootBoxOpeningWindow.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxOpeningWindow.cs",
"RelativeToolTip": "LootBoxOpeningWindow.cs",
"ViewState": "AgIAAFYAAAAAAAAAAAAqwGkAAABKAAAAAAAAAA==",
"DocumentIndex": 1,
"Title": "GameComponent_SpawnLootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\GameComponent_SpawnLootBox.cs",
"RelativeDocumentMoniker": "GameComponent_SpawnLootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\GameComponent_SpawnLootBox.cs",
"RelativeToolTip": "GameComponent_SpawnLootBox.cs",
"ViewState": "AgIAADMAAAAAAAAAAAAowBgAAABMAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T20:18:46.529Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "LootBoxPawnKindDef.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxPawnKindDef.cs",
"RelativeDocumentMoniker": "LootBoxPawnKindDef.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxPawnKindDef.cs",
"RelativeToolTip": "LootBoxPawnKindDef.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAEAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:37:54.85Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "Rarity.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Rarity.cs",
"RelativeDocumentMoniker": "Rarity.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Rarity.cs",
"RelativeToolTip": "Rarity.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T12:47:11.303Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "LootBoxDatabase.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxDatabase.cs",
"RelativeDocumentMoniker": "LootBoxDatabase.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxDatabase.cs",
"RelativeToolTip": "LootBoxDatabase.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAyAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T02:24:30.5Z",
"WhenOpened": "2025-05-09T02:40:24.696Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "LootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBox.cs",
"RelativeDocumentMoniker": "LootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBox.cs",
"RelativeToolTip": "LootBox.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAYAAAAAAAAAA==",
"Title": "CompProperties_LootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_LootBox.cs",
"RelativeDocumentMoniker": "CompProperties_LootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_LootBox.cs",
"RelativeToolTip": "CompProperties_LootBox.cs",
"ViewState": "AgIAAAkAAAAAAAAAAAAAAB4AAAA0AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T01:23:17.893Z",
"WhenOpened": "2025-05-06T21:54:49.755Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "LootBoxOpeningWindow.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxOpeningWindow.cs",
"RelativeDocumentMoniker": "LootBoxOpeningWindow.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxOpeningWindow.cs",
"RelativeToolTip": "LootBoxOpeningWindow.cs",
"ViewState": "AgIAADcAAAAAAAAAAAAewE0AAAA5AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T20:18:46.529Z",
"EditorCaption": ""
},
{
@ -147,50 +129,75 @@
"RelativeDocumentMoniker": "CompSpawnLootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompSpawnLootBox.cs",
"RelativeToolTip": "CompSpawnLootBox.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA==",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAJAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T01:26:54.137Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"DocumentIndex": 4,
"Title": "CompProperties_SpawnLootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_SpawnLootBox.cs",
"RelativeDocumentMoniker": "CompProperties_SpawnLootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_SpawnLootBox.cs",
"RelativeToolTip": "CompProperties_SpawnLootBox.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABMAAAABAAAAAAAAAA==",
"ViewState": "AgIAAAIAAAAAAAAAAAAYwBQAAAABAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T01:22:11.223Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "CompProperties_LootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_LootBox.cs",
"RelativeDocumentMoniker": "CompProperties_LootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompProperties_LootBox.cs",
"RelativeToolTip": "CompProperties_LootBox.cs",
"ViewState": "AgIAAAMAAAAAAAAAAAAcwBMAAAAAAAAAAAAAAA==",
"DocumentIndex": 6,
"Title": "PatchMain.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\PatchMain.cs",
"RelativeDocumentMoniker": "HarmonyPatches\\PatchMain.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\PatchMain.cs",
"RelativeToolTip": "HarmonyPatches\\PatchMain.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T21:54:49.755Z",
"WhenOpened": "2025-05-06T21:58:33.185Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "LootBoxThingDef.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxThingDef.cs",
"RelativeDocumentMoniker": "LootBoxThingDef.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxThingDef.cs",
"RelativeToolTip": "LootBoxThingDef.cs",
"ViewState": "AgIAAAYAAAAAAAAAAAAAAAsAAAAEAAAAAAAAAA==",
"DocumentIndex": 5,
"Title": "Pawn_Kill.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\Pawn_Kill.cs",
"RelativeDocumentMoniker": "HarmonyPatches\\Pawn_Kill.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\Pawn_Kill.cs",
"RelativeToolTip": "HarmonyPatches\\Pawn_Kill.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:36:06.172Z",
"WhenOpened": "2025-05-06T21:58:18.923Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "LootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBox.cs",
"RelativeDocumentMoniker": "LootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBox.cs",
"RelativeToolTip": "LootBox.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T01:23:17.893Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 11,
"Title": "LootBoxDatabase.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxDatabase.cs",
"RelativeDocumentMoniker": "LootBoxDatabase.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxDatabase.cs",
"RelativeToolTip": "LootBoxDatabase.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T02:24:30.5Z"
},
{
"$type": "Document",
"DocumentIndex": 9,
@ -199,62 +206,83 @@
"RelativeDocumentMoniker": "LootBoxSpinner.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxSpinner.cs",
"RelativeToolTip": "LootBoxSpinner.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABMAAABNAAAAAAAAAA==",
"ViewState": "AQIAAGQAAAAAAAAAAAAYwH0AAAAaAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T20:22:09.628Z",
"EditorCaption": ""
"WhenOpened": "2025-05-07T20:22:09.628Z"
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "LootBoxThingDef.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxThingDef.cs",
"RelativeDocumentMoniker": "LootBoxThingDef.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxThingDef.cs",
"RelativeToolTip": "LootBoxThingDef.cs",
"ViewState": "AQIAAAYAAAAAAAAAAAAAAB8AAAAlAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:36:06.172Z"
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "CompLootBox.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompLootBox.cs",
"RelativeDocumentMoniker": "CompLootBox.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\CompLootBox.cs",
"RelativeToolTip": "CompLootBox.cs",
"ViewState": "AgIAABcAAAAAAAAAAAAmwDAAAABJAAAAAAAAAA==",
"ViewState": "AgIAAA4AAAAAAAAAAAAQwBgAAAA5AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:42:42.073Z",
"EditorCaption": ""
"WhenOpened": "2025-05-06T22:42:42.073Z"
},
{
"$type": "Document",
"DocumentIndex": 11,
"DocumentIndex": 12,
"Title": "RarityColor.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\RarityColor.cs",
"RelativeDocumentMoniker": "RarityColor.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\RarityColor.cs",
"RelativeToolTip": "RarityColor.cs",
"ViewState": "AQIAAAMAAAAAAAAAAAAAABMAAAAGAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-08T13:16:57.175Z"
},
{
"$type": "Document",
"DocumentIndex": 13,
"Title": "Rarity.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Rarity.cs",
"RelativeDocumentMoniker": "Rarity.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Rarity.cs",
"RelativeToolTip": "Rarity.cs",
"ViewState": "AQIAAAMAAAAAAAAAAAAAABYAAABNAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T12:47:11.303Z"
},
{
"$type": "Document",
"DocumentIndex": 14,
"Title": "LootBoxPawnKindDef.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxPawnKindDef.cs",
"RelativeDocumentMoniker": "LootBoxPawnKindDef.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\LootBoxPawnKindDef.cs",
"RelativeToolTip": "LootBoxPawnKindDef.cs",
"ViewState": "AQIAAAMAAAAAAAAAAAAAABgAAAAdAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:37:54.85Z"
},
{
"$type": "Document",
"DocumentIndex": 15,
"Title": "LootBoxSpinner.cs",
"DocumentMoniker": "C:\\Users\\Verniy\\Downloads\\LootBoxSpinner.cs",
"ToolTip": "C:\\Users\\Verniy\\Downloads\\LootBoxSpinner.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T23:49:02.745Z",
"EditorCaption": ""
"WhenOpened": "2025-05-07T23:49:02.745Z"
},
{
"$type": "Document",
"DocumentIndex": 12,
"Title": "Pawn_Kill.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\Pawn_Kill.cs",
"RelativeDocumentMoniker": "HarmonyPatches\\Pawn_Kill.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\Pawn_Kill.cs",
"RelativeToolTip": "HarmonyPatches\\Pawn_Kill.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAgAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T21:58:18.923Z"
},
{
"$type": "Document",
"DocumentIndex": 13,
"Title": "PatchMain.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\PatchMain.cs",
"RelativeDocumentMoniker": "HarmonyPatches\\PatchMain.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\HarmonyPatches\\PatchMain.cs",
"RelativeToolTip": "HarmonyPatches\\PatchMain.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABQAAAAJAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T21:58:33.185Z"
},
{
"$type": "Document",
"DocumentIndex": 14,
"DocumentIndex": 16,
"Title": "SimpleLootBox",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\SimpleLootBox.csproj",
"RelativeDocumentMoniker": "SimpleLootBox.csproj",
@ -265,13 +293,13 @@
},
{
"$type": "Document",
"DocumentIndex": 15,
"DocumentIndex": 17,
"Title": "AssemblyInfo.cs",
"DocumentMoniker": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Properties\\AssemblyInfo.cs",
"RelativeDocumentMoniker": "Properties\\AssemblyInfo.cs",
"ToolTip": "D:\\Steam\\steamapps\\common\\RimWorld\\Mods\\SimpleLootBox\\1.5\\Source\\SimpleLootBox\\Properties\\AssemblyInfo.cs",
"RelativeToolTip": "Properties\\AssemblyInfo.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-06T22:00:49.967Z"
}

View File

@ -76,11 +76,42 @@ namespace SimpleLootBox
context: PawnGenerationContext.NonPlayer,
canGeneratePawnRelations: false,
colonistRelationChanceFactor: 0f,
forceGenerateNewPawn: true
forceGenerateNewPawn: true,
//Because people really want to spawn baby using the loot box
developmentalStages: reward.pawnKindDef.pawnGroupDevelopmentStage ?? DevelopmentalStage.Adult,
allowDowned: true
);
Pawn pawn = PawnGenerator.GeneratePawn(request);
//Some pawns like mechaoid have no faction, so no null check
pawn.SetFaction(Faction.OfPlayer);
if (reward.isHostile)
{
Faction enemy = Find.FactionManager.AllFactionsVisible
.Where(f => !f.IsPlayer && f.HostileTo(Faction.OfPlayer) && f.def.humanlikeFaction)
.RandomElementWithFallback();
pawn.SetFaction(enemy);
if (pawn.RaceProps.Animal)
{
pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, forced: true);
}
else if (pawn.RaceProps.Humanlike)
{
pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.Berserk, forced: true);
}
else if (pawn.RaceProps.IsMechanoid)
{
pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.BerserkMechanoid, forced: true);
}
}
else
{
pawn.SetFaction(Faction.OfPlayer);
if (pawn.ideo != null)
{
pawn.ideo.SetIdeo(Faction.OfPlayer.ideos.PrimaryIdeo);
}
}
if (pawn.ideo != null)
{
pawn.ideo.SetIdeo(Faction.OfPlayer.ideos.PrimaryIdeo);

View File

@ -20,11 +20,17 @@ namespace SimpleLootBox
public List<LootBoxPawnKindDef> lootBoxPawnKindDef;
public ThingDef lootBoxOpenCost;
public int lootBoxOpenCostCount = 0;
public SoundDef lootBoxOpenSound;
public SoundDef lootBoxSpinningSound;
public SoundDef lootBoxBackgroundMusicSound;
public string lootBoxBackgroundTexturePath;
}
}

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RimWorld;
using SimpleLootBox.SimpleLootBox;
using Verse;
namespace SimpleLootBox

View File

@ -3,12 +3,19 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RimWorld;
using Verse;
namespace SimpleLootBox
{
public class CompSpawnLootBox : ThingComp
using System.Collections.Generic;
using RimWorld;
using Verse;
namespace SimpleLootBox
{
//Harmony patch only
public class CompSpawnLootBox : ThingComp
{
}
}
}

View File

@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RimWorld;
using SimpleLootBox.SimpleLootBox;
using Verse;
namespace SimpleLootBox
{
public class GameComponent_SpawnLootBox : GameComponent
{
private Dictionary<string, int> nextSpawnTick = new Dictionary<string, int>();
public GameComponent_SpawnLootBox(Game game) : base() { }
public override void GameComponentTick()
{
if (Current.Game?.World?.worldObjects == null || Find.TickManager.TicksGame % 250 != 0)
return;
int currentTick = Find.TickManager.TicksGame;
foreach (var def in DefDatabase<ThingDef>.AllDefsListForReading)
{
if (def.HasComp(typeof(CompSpawnLootBox)))
{
var spawnComp = def.GetCompProperties<CompProperties_SpawnLootBox>();
if (spawnComp?.lootBoxList == null) continue;
foreach (var lootBox in spawnComp.lootBoxList)
{
if (lootBox.thingDef == null || lootBox.daysBetweenLootBoxSpawns <= 0) continue;
string key = def.defName + "_" + lootBox.thingDef.defName;
if (!nextSpawnTick.TryGetValue(key, out int tick))
{
tick = currentTick + (int)(lootBox.daysBetweenLootBoxSpawns * 60000);
nextSpawnTick[key] = tick;
}
if (currentTick >= tick)
{
Spawn(lootBox.thingDef);
nextSpawnTick[key] = currentTick + (int)(lootBox.daysBetweenLootBoxSpawns * 60000);
}
}
}
}
}
private void Spawn(ThingDef def)
{
Map map = Find.AnyPlayerHomeMap;
if (map == null) return;
IntVec3 pos = DropCellFinder.TradeDropSpot(map);
Thing thing = ThingMaker.MakeThing(def);
GenPlace.TryPlaceThing(thing, pos, map, ThingPlaceMode.Near);
Messages.Message("SimpleLootBox_ThingArrived".Translate(def.label.CapitalizeFirst()),
new TargetInfo(pos, map), MessageTypeDefOf.PositiveEvent);
}
public override void ExposeData()
{
Scribe_Collections.Look(ref nextSpawnTick, "SimpleLootBox_nextSpawnTick", LookMode.Value, LookMode.Value);
}
}
}

View File

@ -10,6 +10,7 @@ namespace SimpleLootBox
public class LootBox
{
public ThingDef thingDef;
public float chance;
public float chance = 0.05f;
public float daysBetweenLootBoxSpawns;
}
}

View File

@ -17,6 +17,7 @@ namespace SimpleLootBox
private readonly LootBoxSpinner lootBoxSpinner;
private Sustainer backgroundMusicSustainer;
private Sustainer spinningSustainer;
private Texture2D backgroundTex;
private LootBoxSpinner.SpinItem? pendingFinalizingSoundItem = null;
private LootBoxSpinner.SpinItem? pendingRewardItem = null;
@ -43,6 +44,11 @@ namespace SimpleLootBox
backgroundMusicSustainer = compLootBox.Props.lootBoxBackgroundMusicSound.TrySpawnSustainer(info);
}
if (!string.IsNullOrEmpty(compLootBox.Props.lootBoxBackgroundTexturePath))
{
backgroundTex = ContentFinder<Texture2D>.Get(compLootBox.Props.lootBoxBackgroundTexturePath, true);
}
this.windowRect.width = 700f;
this.windowRect.height = 800f;
this.windowRect.x = (UI.screenWidth - this.windowRect.width) / 2f;
@ -51,11 +57,31 @@ namespace SimpleLootBox
public override void DoWindowContents(Rect inRect)
{
if (backgroundTex != null)
{
GUI.DrawTexture(inRect, backgroundTex, ScaleMode.StretchToFill);
}
GUI.BeginGroup(inRect);
lootBoxSpinner.Draw(new Rect(0f, 100f, inRect.width, 150f));
//Loot box label UI
Text.Font = GameFont.Medium;
Text.Anchor = TextAnchor.MiddleCenter;
Widgets.Label(new Rect(0f, 50f, inRect.width, 40f), compLootBox.parent.LabelCap);
Widgets.Label(new Rect(0f, 10f, inRect.width, 40f), compLootBox.parent.LabelCap);
//Open loot box cost UI
if (compLootBox.Props.lootBoxOpenCost != null && compLootBox.Props.lootBoxOpenCostCount > 0)
{
Text.Font = GameFont.Small;
Text.Anchor = TextAnchor.MiddleCenter;
Widgets.Label(
new Rect(0f, 55f, inRect.width, 20f),
"SimpleLootBox_CostLabel".Translate(
compLootBox.Props.lootBoxOpenCostCount,
compLootBox.Props.lootBoxOpenCost.LabelCap
)
);
}
backgroundMusicSustainer?.Maintain();
spinningSustainer?.Maintain();
@ -66,26 +92,85 @@ namespace SimpleLootBox
spinningSustainer = null;
}
if (Widgets.ButtonText(new Rect(255f, 250f, 150f, 50f), "Open Box", active: compLootBox.parent.stackCount >= 1)
&& compLootBox.parent.stackCount >= 1)
bool HasEnoughCurrency()
{
LootBoxSpinner.SpinItem itemWon = lootBoxSpinner.Spin();
pendingFinalizingSoundItem = itemWon;
pendingRewardItem = itemWon;
if (compLootBox.Props.lootBoxOpenCost == null || compLootBox.Props.lootBoxOpenCostCount <= 0)
return true;
if (compLootBox.Props.lootBoxSpinningSound != null)
Map map = compLootBox.parent.Map;
ThingDef currencyDef = compLootBox.Props.lootBoxOpenCost;
int requiredCount = compLootBox.Props.lootBoxOpenCostCount;
int availableCount = map.listerThings.AllThings
.Where(thing =>
thing.def == currencyDef &&
thing.def.category == ThingCategory.Item &&
thing.IsInAnyStorage() &&
!thing.Position.Fogged(map))
.Sum(thing => thing.stackCount);
return availableCount >= requiredCount;
}
bool ConsumeCurrency()
{
if (compLootBox.Props.lootBoxOpenCost == null || compLootBox.Props.lootBoxOpenCostCount <= 0)
return true;
Map map = compLootBox.parent.Map;
ThingDef currencyDef = compLootBox.Props.lootBoxOpenCost;
int toConsume = compLootBox.Props.lootBoxOpenCostCount;
foreach (Thing thing in map.listerThings.AllThings
.Where(t =>
t.def == currencyDef &&
t.def.category == ThingCategory.Item &&
t.IsInAnyStorage() &&
!t.Position.Fogged(map))
.OrderByDescending(t => t.stackCount))
{
SoundInfo info = SoundInfo.InMap(new TargetInfo(compLootBox.parent.Position, compLootBox.parent.Map), MaintenanceType.PerFrame);
spinningSustainer = compLootBox.Props.lootBoxSpinningSound.TrySpawnSustainer(info);
int take = Math.Min(toConsume, thing.stackCount);
thing.SplitOff(take).Destroy(DestroyMode.Vanish);
toConsume -= take;
if (toConsume <= 0)
return true;
}
return false;
}
bool canOpen = HasEnoughCurrency();
Rect buttonRect = new Rect(255f, 250f, 150f, 50f);
if (Widgets.ButtonText(buttonRect, "SimpleLootBox_OpenBox".Translate(), active: true))
{
if (!canOpen)
{
string label = compLootBox.Props.lootBoxOpenCost?.LabelCap ?? "unknown";
int count = compLootBox.Props.lootBoxOpenCostCount;
Messages.Message("SimpleLootBox_NotEnoughCurrency".Translate(label, count), MessageTypeDefOf.RejectInput);
Text.Anchor = TextAnchor.UpperLeft;
Text.Font = GameFont.Small;
return;
}
if (!lootBoxSpinner.IsSpinning)
{
var itemWon = lootBoxSpinner.Spin();
pendingFinalizingSoundItem = itemWon;
pendingRewardItem = itemWon;
if (compLootBox.Props.lootBoxSpinningSound != null)
{
SoundInfo info = SoundInfo.InMap(new TargetInfo(compLootBox.parent.Position, compLootBox.parent.Map), MaintenanceType.PerFrame);
spinningSustainer = compLootBox.Props.lootBoxSpinningSound.TrySpawnSustainer(info);
}
}
}
if (!lootBoxSpinner.IsSpinning && pendingRewardItem != null)
{
var item = pendingRewardItem.Value;
bool success = compLootBox.Spawn(item);
if (success)
bool done = compLootBox.Spawn(item);
if (done)
{
compLootBox.DeleteBox(1);
}
@ -95,75 +180,67 @@ namespace SimpleLootBox
item.finalizingSound.PlayOneShot(SoundInfo.InMap(new TargetInfo(compLootBox.parent.Position, compLootBox.parent.Map)));
}
ConsumeCurrency();
pendingRewardItem = null;
pendingFinalizingSoundItem = null;
}
Rect listRect = new Rect(20f, 300f, inRect.width - 20f, inRect.height - 300f);
Rect contentRect = new Rect(listRect.x, listRect.y, listRect.width - 20f, 10f + lootBoxSpinner.PossibleRewards.Count * 20f);
int visibleCount = lootBoxSpinner.PossibleRewards.Count(spinItem =>
(spinItem.thingDef != null && !(compLootBox.Props.lootBoxThingDef?.Find(t => t.thingDef == spinItem.thingDef)?.isHidden ?? false)) ||
(spinItem.pawnKindDef != null && !(compLootBox.Props.lootBoxPawnKindDef?.Find(p => p.pawnKindDef == spinItem.pawnKindDef)?.isHidden ?? false)));
Rect contentRect = new Rect(listRect.x, listRect.y, listRect.width - 20f, 10f + visibleCount * 20f);
Widgets.BeginScrollView(listRect, ref scrollPosition, contentRect);
Text.Font = GameFont.Small;
for (int i = 0; i < lootBoxSpinner.PossibleRewards.Count; i++)
int rowIndex = 0;
foreach (var spinItem in lootBoxSpinner.PossibleRewards)
{
var spinItem = lootBoxSpinner.PossibleRewards[i];
//Color of the background of rarity next to the available rewards
Rect rowRect = new Rect(listRect.x, listRect.y + i * 20f, 100f, 20f);
if (spinItem.rarity == Rarity.None)
if (spinItem.thingDef != null)
{
Widgets.DrawRectFast(rowRect, new Color(0.2f, 0.2f, 0.2f));
var itemForShow = compLootBox.Props.lootBoxThingDef.Find(t => t.thingDef == spinItem.thingDef);
if (itemForShow != null && itemForShow.isHidden)
continue;
}
else if(spinItem.rarity == Rarity.Common)
else if (spinItem.pawnKindDef != null)
{
Widgets.DrawRectFast(rowRect, new Color(0.6f, 0.6f, 0.6f));
}
else if (spinItem.rarity == Rarity.Uncommon)
{
Widgets.DrawRectFast(rowRect, new Color(0.3f, 0.3f, 1f));
}
else if (spinItem.rarity == Rarity.Rare)
{
Widgets.DrawRectFast(rowRect, new Color(0.8f, 0.3f, 1f));
}
else if (spinItem.rarity == Rarity.Epic)
{
Widgets.DrawRectFast(rowRect, new Color(1f, 0.3f, 0.8f));
}
else if (spinItem.rarity == Rarity.Legendary)
{
Widgets.DrawRectFast(rowRect, new Color(1f, 0.3f, 0.3f));
var pawnForShow = compLootBox.Props.lootBoxPawnKindDef.Find(p => p.pawnKindDef == spinItem.pawnKindDef);
if (pawnForShow != null && pawnForShow.isHidden)
continue;
}
//Color of the background of available reward labels
Rect labelRect = new Rect(listRect.x + 120f, listRect.y + i * 20f, listRect.width - 150f, 20f);
Color rarityColor = new Color(0.2f, 0.2f, 0.2f);
if (spinItem.rarity == Rarity.Common)
rarityColor = new Color(0.6f, 0.6f, 0.6f);
else if (spinItem.rarity == Rarity.Uncommon)
rarityColor = new Color(0.3f, 0.3f, 1f);
else if (spinItem.rarity == Rarity.Rare)
rarityColor = new Color(0.8f, 0.3f, 1f);
else if (spinItem.rarity == Rarity.Epic)
rarityColor = new Color(1f, 0.3f, 0.8f);
else if (spinItem.rarity == Rarity.Legendary)
rarityColor = new Color(1f, 0.3f, 0.3f);
Widgets.DrawRectFast(labelRect, rarityColor);
Rect rowRect = new Rect(listRect.x, listRect.y + rowIndex * 20f, 100f, 20f);
Widgets.DrawRectFast(rowRect, RarityColors.GetColor(spinItem.rarity));
Rect labelRect = new Rect(listRect.x + 120f, listRect.y + rowIndex * 20f, listRect.width - 150f, 20f);
Widgets.DrawRectFast(labelRect, RarityColors.GetColor(spinItem.rarity));
Text.Anchor = TextAnchor.MiddleCenter;
Widgets.Label(new Rect(listRect.x, listRect.y + i * 20f, 100f, 20f), spinItem.rarity.ToString());
string rewardName = spinItem.thingDef != null ? spinItem.thingDef.LabelCap : (spinItem.pawnKindDef?.LabelCap ?? "");
Widgets.Label(rowRect, spinItem.rarity.TranslateLabel());
string rewardName = spinItem.thingDef != null
? spinItem.thingDef.LabelCap
: (spinItem.pawnKindDef?.LabelCap ?? "");
Text.Anchor = TextAnchor.MiddleLeft;
Widgets.Label(new Rect(listRect.x + 120f, listRect.y + i * 20f, listRect.width - 150f, 20f), rewardName);
Widgets.Label(labelRect, rewardName);
if (spinItem.count > 1)
{
Text.Anchor = TextAnchor.MiddleRight;
Widgets.Label(new Rect(listRect.x + 120f, listRect.y + i * 20f, listRect.width - 150f, 20f), $"x{spinItem.count}");
Widgets.Label(labelRect, $"x{spinItem.count}");
}
rowIndex++;
}
Widgets.EndScrollView();
GUI.EndGroup();
Text.Anchor = TextAnchor.UpperLeft;
Text.Font = GameFont.Small;
Widgets.EndScrollView();
GUI.EndGroup();
}
public override void PostClose()

View File

@ -22,5 +22,9 @@ namespace SimpleLootBox
public SoundDef lootBoxFinalizingRewardSound;
public bool isHostile = false;
public bool isHidden = false;
}
}

View File

@ -6,6 +6,7 @@ using System.Threading.Tasks;
using RimWorld;
using UnityEngine;
using Verse;
using static SimpleLootBox.LootBoxSpinner;
namespace SimpleLootBox
{
@ -41,7 +42,7 @@ namespace SimpleLootBox
foreach (var thing in props.lootBoxThingDef)
{
if (thing.thingDef == null || thing.weight <= 0) continue;
SpinItem item = new SpinItem(thing.thingDef, thing.stuff, thing.quality, thing.count, thing.rarity, thing.weight, thing.effecterDef, thing.lootBoxFinalizingRewardSound);
SpinItem item = new SpinItem(thing.thingDef, thing.stuff, thing.quality, thing.count, thing.rarity, thing.weight, thing.effecterDef, thing.lootBoxFinalizingRewardSound, thing.isHostile);
PossibleRewards.Add(item);
}
}
@ -51,7 +52,7 @@ namespace SimpleLootBox
foreach (var pawn in props.lootBoxPawnKindDef)
{
if (pawn.pawnKindDef == null || pawn.weight <= 0) continue;
SpinItem item = new SpinItem(pawn.pawnKindDef, pawn.count, pawn.rarity, pawn.weight, pawn.effecterDef, pawn.lootBoxFinalizingRewardSound);
SpinItem item = new SpinItem(pawn.pawnKindDef, pawn.count, pawn.rarity, pawn.weight, pawn.effecterDef, pawn.lootBoxFinalizingRewardSound, pawn.isHostile);
PossibleRewards.Add(item);
}
}
@ -79,16 +80,7 @@ namespace SimpleLootBox
float x = totalWidth - ((position + rect.width * (i * 0.2f)) % totalWidth) + rect.x - rect.width * 0.2f;
Rect cellRect = new Rect(x, rect.y, rect.width * 0.2f - 5f, rect.height);
SpinItem item = spinWheelItems[i];
switch (item.rarity)
{
case Rarity.Common: Widgets.DrawRectFast(cellRect, new Color(0.6f, 0.6f, 0.6f)); break;
case Rarity.Uncommon: Widgets.DrawRectFast(cellRect, new Color(0.3f, 0.3f, 1f)); break;
case Rarity.Rare: Widgets.DrawRectFast(cellRect, new Color(0.8f, 0.3f, 1f)); break;
case Rarity.Epic: Widgets.DrawRectFast(cellRect, new Color(1f, 0.3f, 0.8f)); break;
case Rarity.Legendary: Widgets.DrawRectFast(cellRect, new Color(1f, 0.3f, 0.3f)); break;
}
Widgets.DrawRectFast(cellRect, RarityColors.GetColor(item.rarity));
Rect iconRect = new Rect(x, rect.y + 5f, rect.width * 0.2f - 5f, rect.width * 0.2f - 5f);
Texture iconTex = item.thingDef?.uiIcon;
if (item.pawnKindDef != null)
@ -105,7 +97,11 @@ namespace SimpleLootBox
Text.Anchor = TextAnchor.MiddleCenter;
Text.Font = GameFont.Tiny;
string label = item.thingDef?.LabelCap ?? item.pawnKindDef?.LabelCap ?? "";
Widgets.Label(iconRect, label);
if (!string.IsNullOrWhiteSpace(label))
{
Widgets.Label(iconRect, label);
}
}
if (item.count > 1)
@ -116,8 +112,8 @@ namespace SimpleLootBox
Widgets.Label(countRect, "x" + item.count);
}
Text.Font = GameFont.Small;
Text.Anchor = TextAnchor.UpperLeft;
Text.Font = GameFont.Small;
}
Rect bar = new Rect(rect.x + rect.width / 2f - 1f, rect.y, 2f, rect.height);
@ -176,8 +172,9 @@ namespace SimpleLootBox
public EffecterDef effecterDef;
public RenderTexture portrait;
public SoundDef finalizingSound;
public bool isHostile;
public SpinItem(ThingDef thingDef, ThingDef stuff, QualityCategory quality, int count, Rarity rarity, float weight, EffecterDef effecter, SoundDef finalizingSound)
public SpinItem(ThingDef thingDef, ThingDef stuff, QualityCategory quality, int count, Rarity rarity, float weight, EffecterDef effecter, SoundDef finalizingSound, bool isHostile)
{
this.thingDef = thingDef;
this.pawnKindDef = null;
@ -189,9 +186,10 @@ namespace SimpleLootBox
this.effecterDef = effecter;
this.portrait = null;
this.finalizingSound = finalizingSound;
this.isHostile = false;/*Have to match the struct, always false*/
}
public SpinItem(PawnKindDef pawnKindDef, int count, Rarity rarity, float weight, EffecterDef effecter, SoundDef finalizingSound)
public SpinItem(PawnKindDef pawnKindDef, int count, Rarity rarity, float weight, EffecterDef effecter, SoundDef finalizingSound, bool isHostile)
{
this.thingDef = null;
this.pawnKindDef = pawnKindDef;
@ -202,9 +200,10 @@ namespace SimpleLootBox
this.weight = weight;
this.effecterDef = effecter;
this.finalizingSound = finalizingSound;
this.isHostile = isHostile;
Pawn pawn = PawnGenerator.GeneratePawn(pawnKindDef);
this.portrait = PortraitsCache.Get(pawn, new Vector2(128f, 128f), Rot4.South, new Vector3(0f, 0f, 0.1f), 1.5f);
this.portrait = PortraitsCache.Get(pawn, new Vector2(128f, 128f), Rot4.South, new Vector3(0f, 0f, 0.1f), 1.25f);
}
}
}

View File

@ -26,5 +26,9 @@ namespace SimpleLootBox
public Rarity rarity = 0;
public SoundDef lootBoxFinalizingRewardSound;
public bool isHostile = false; /*I have no idea why I choose to use the struct*/
public bool isHidden = false;
}
}

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace SimpleLootBox
{
@ -15,4 +16,11 @@ namespace SimpleLootBox
Epic = 4,
Legendary = 5,
}
public static class RarityExtensions
{
public static string TranslateLabel(this Rarity rarity)
{
return ("SimpleLootBox_Rarity_" + rarity.ToString()).Translate();
}
}
}

View File

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace SimpleLootBox
{
public static class RarityColors
{
public static Dictionary<Rarity, Color> rarityColorDict = new Dictionary<Rarity, Color>
{
{ Rarity.None, new Color(0.6f, 0.6f, 0.6f) },
{ Rarity.Common, new Color(0.3f, 0.3f, 1f) },
{ Rarity.Uncommon, new Color(0.8f, 0.3f, 1f) },
{ Rarity.Rare, new Color(1f, 0.3f, 0.8f) },
{ Rarity.Epic, new Color(1f, 0.3f, 0.3f) },
{ Rarity.Legendary, new Color(0.85f, 0.7f, 0.2f) }
};
public static Color GetColor(Rarity rarity)
{
return rarityColorDict.TryGetValue(rarity, out var color) ? color : Color.white;
}
}
}

View File

@ -58,6 +58,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="CompLootBox.cs" />
<Compile Include="GameComponent_SpawnLootBox.cs" />
<Compile Include="LootBoxDatabase.cs" />
<Compile Include="LootBoxOpeningWindow.cs" />
<Compile Include="LootBoxSpinner.cs" />
@ -71,6 +72,7 @@
<Compile Include="LootBoxPawnKindDef.cs" />
<Compile Include="LootBoxThingDef.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RarityColor.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -1 +1 @@
705e218464d7300a4f75cf5799c059d7889b490b575db1d6f450c55e9775b6b3
5e2da3e94f7468b69c50cba94c011c2b6d045e493cb681af54aa42fea1387f90

View File

@ -5,3 +5,10 @@ D:\Steam\steamapps\common\RimWorld\Mods\SimpleLootBox\1.5\Assemblies\SimpleLootB
D:\Steam\steamapps\common\RimWorld\Mods\SimpleLootBox\1.5\Source\SimpleLootBox\obj\Debug\SimpleLo.E20EF750.Up2Date
D:\Steam\steamapps\common\RimWorld\Mods\SimpleLootBox\1.5\Source\SimpleLootBox\obj\Debug\SimpleLootBox.dll
D:\Steam\steamapps\common\RimWorld\Mods\SimpleLootBox\1.5\Source\SimpleLootBox\obj\Debug\SimpleLootBox.pdb
C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\SimpleLootBox\1.5\Assemblies\SimpleLootBox.dll
C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\SimpleLootBox\1.5\Assemblies\SimpleLootBox.pdb
C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\SimpleLootBox\1.5\Source\SimpleLootBox\obj\Debug\SimpleLootBox.csproj.AssemblyReference.cache
C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\SimpleLootBox\1.5\Source\SimpleLootBox\obj\Debug\SimpleLootBox.csproj.CoreCompileInputs.cache
C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\SimpleLootBox\1.5\Source\SimpleLootBox\obj\Debug\SimpleLo.E20EF750.Up2Date
C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\SimpleLootBox\1.5\Source\SimpleLootBox\obj\Debug\SimpleLootBox.dll
C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\SimpleLootBox\1.5\Source\SimpleLootBox\obj\Debug\SimpleLootBox.pdb

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<LanguageData>
<SimpleLootBox_OpenBox>开箱!</SimpleLootBox_OpenBox>
<SimpleLootBox_NotEnoughCurrency>储存区里没有足够的 {0} (需要 {1}) 来打开箱子。</SimpleLootBox_NotEnoughCurrency>
<SimpleLootBox_CostLabel>消耗:{0} X {1}</SimpleLootBox_CostLabel>
<SimpleLootBox_ThingArrived>一个 {0} 已经抵达。</SimpleLootBox_ThingArrived>
<SimpleLootBox_Rarity_None>无品质</SimpleLootBox_Rarity_None>
<SimpleLootBox_Rarity_Common>普通</SimpleLootBox_Rarity_Common>
<SimpleLootBox_Rarity_Uncommon>非凡</SimpleLootBox_Rarity_Uncommon>
<SimpleLootBox_Rarity_Rare>稀有</SimpleLootBox_Rarity_Rare>
<SimpleLootBox_Rarity_Epic>史诗</SimpleLootBox_Rarity_Epic>
<SimpleLootBox_Rarity_Legendary>传奇</SimpleLootBox_Rarity_Legendary>
</LanguageData>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<LanguageData>
<SimpleLootBox_OpenBox>Open Box!</SimpleLootBox_OpenBox>
<SimpleLootBox_NotEnoughCurrency>Do not have enough {0} (need {1}) in storage to open this box.</SimpleLootBox_NotEnoughCurrency>
<SimpleLootBox_CostLabel>Cost: {0} X {1}</SimpleLootBox_CostLabel>
<SimpleLootBox_ThingArrived>A {0} has arrived.</SimpleLootBox_ThingArrived>
<SimpleLootBox_Rarity_None>None</SimpleLootBox_Rarity_None>
<SimpleLootBox_Rarity_Common>Common</SimpleLootBox_Rarity_Common>
<SimpleLootBox_Rarity_Uncommon>Uncommon</SimpleLootBox_Rarity_Uncommon>
<SimpleLootBox_Rarity_Rare>Rare</SimpleLootBox_Rarity_Rare>
<SimpleLootBox_Rarity_Epic>Epic</SimpleLootBox_Rarity_Epic>
<SimpleLootBox_Rarity_Legendary>Legendary</SimpleLootBox_Rarity_Legendary>
</LanguageData>

View File

@ -0,0 +1,13 @@
lootBoxBackgroundMusicSoundA
【哈基米FM之胜利之舞终究是我们赢下了所有】 https://www.bilibili.com/video/BV1oQQmYPEyq/?share_source=copy_web&vd_source=d828b477675cefa74034b8af311ab09a
lootBoxBackgroundMusicSoundB
【《大东北我的家乡》最带派的一集】 https://www.bilibili.com/video/BV1dL9zYCEJF/?share_source=copy_web&vd_source=d828b477675cefa74034b8af311ab09a
lootBoxFinalizingRewardSound
lootBoxOpenSound
lootBoxSpinningSound
Counter-Strike: Global Offensive

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

View File

@ -1,47 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<PawnKindDef ParentName="HAR_Nearmaere_KindBase"><!-- 人物的基本数据继承自HAR_Nearmaere_KindBase下面的数据中如果有和parent相同的条目会覆盖parent的数值 -->
<defName>HAR_Nearmaere_Example</defName><!-- 人物的定义名 -->
<label>HAR nearmaere example</label><!-- 人物的名字,可以进行本地化翻译 -->
<race>HAR_Nearmaere</race><!-- 人物的种族的定义名 -->
<combatPower>100</combatPower><!-- 袭击占用分数 -->
<initialWillRange>1~10</initialWillRange><!-- 奴役难度 -->
<initialResistanceRange>10~20</initialResistanceRange><!-- 招募难度 -->
<minGenerationAge>10</minGenerationAge><!-- 生成人物的最小生物年龄 -->
<maxGenerationAge>20</maxGenerationAge><!-- 生成人物的最大生物年龄 -->
<techHediffsMoney>0</techHediffsMoney><!-- 仿生体价值 -->
<apparelMoney>0</apparelMoney><!-- 服装价值 -->
<weaponMoney>0</weaponMoney><!-- 武器价值 -->
<techHediffsTags Inherit="False"><!-- 用来去除可能从parentName里继承的仿生体tag -->
</techHediffsTags>
<weaponTags Inherit="False"><!-- 用来去除可能从parentName里继承的武器tag -->
</weaponTags>
<apparelTags Inherit="False"><!-- 用来去除可能从parentName里继承的服装tag -->
</apparelTags>
<inventoryOptions Inherit="False"><!-- 用来去除可能从parentName里继承的随身携带物品 -->
</inventoryOptions><!-- 生成人物的某项技能的范围,比如 Shooting Melee Construction Mining Cooking Plants Animals Crafting Artistic Medicine Social Intellectual -->
<skills>
<li>
<skill>Shooting</skill>
<range>15~20</range>
</li>
</skills>
<disallowedTraits><!-- 不被允许使用的特性 -->
<li>Brawler</li>
</disallowedTraits>
<disallowedTraitsWithDegree><!-- 不被允许使用的特性以及对应的程度 -->
<PsychicSensitivity>-2</PsychicSensitivity>
</disallowedTraitsWithDegree>
<forcedTraits><!-- 强制生成的特性以及程度通常来讲大部分mod特性不会设置程度 -->
<Recluse>0</Recluse>
</forcedTraits>
<useFactionXenotypes>false</useFactionXenotypes><!-- 去除派系设置的异种生成概率 -->
<xenotypeSet>
<xenotypeChances>
<Aya_Race_Xenotype MayRequire="Ludeon.RimWorld.Biotech">100</Aya_Race_Xenotype><!-- 某个特定异种的生成概率 -->
</xenotypeChances>
</xenotypeSet>
</PawnKindDef>
</Defs>