armor shop
This commit is contained in:
		
							parent
							
								
									80f50c49cc
								
							
						
					
					
						commit
						514e18fff3
					
				
							
								
								
									
										219
									
								
								data/shops/barrier.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										219
									
								
								data/shops/barrier.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,219 @@ | ||||
| [[barrier]] | ||||
| level = 0 | ||||
| [[barrier.item]] | ||||
| item = "Barrier" | ||||
| probability = 34 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "Shield" | ||||
| probability = 34 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "CoreShield" | ||||
| probability = 15 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "GigaShield" | ||||
| probability = 15 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "BraveBarrier" | ||||
| probability = 2 | ||||
| 
 | ||||
| 
 | ||||
| [[barrier]] | ||||
| level = 10 | ||||
| [[barrier.item]] | ||||
| item = "Barrier" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "Shield" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "CoreShield" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "GigaShield" | ||||
| probability = 18 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "SoulBarrier" | ||||
| probability = 18 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "HardShield" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "BraveBarrier" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "SolidShield" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "FlameBarrier" | ||||
| probability = 2 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "PlasmaBarrier" | ||||
| probability = 2 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "FreezeBarrier" | ||||
| probability = 2 | ||||
| 
 | ||||
| 
 | ||||
| [[barrier]] | ||||
| level = 25 | ||||
| [[barrier.item]] | ||||
| item = "GigaShield" | ||||
| probability = 6 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "SoulBarrier" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "HardShield" | ||||
| probability = 15 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "BraveBarrier" | ||||
| probability = 19 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "SolidShield" | ||||
| probability = 18 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "FlameBarrier" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "PlasmaBarrier" | ||||
| probability = 9 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "FreezeBarrier" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "PsychicBarrier" | ||||
| probability = 3 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "ProtectBarrier" | ||||
| probability = 2 | ||||
| 
 | ||||
| 
 | ||||
| [[barrier]] | ||||
| level = 42 | ||||
| [[barrier.item]] | ||||
| item = "SoulBarrier" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "HardShield" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "BraveBarrier" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "SolidShield" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "FlameBarrier" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "PlasmaBarrier" | ||||
| probability = 15 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "FreezeBarrier" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "PsychicBarrier" | ||||
| probability = 11 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "GeneralShield" | ||||
| probability = 9 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "ProtectBarrier" | ||||
| probability = 6 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "GloriousShield" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "GuardianShield" | ||||
| probability = 2 | ||||
| 
 | ||||
| 
 | ||||
| [[barrier]] | ||||
| level = 60 | ||||
| [[barrier.item]] | ||||
| item = "HardShield" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "BraveBarrier" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "SolidShield" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "FlameBarrier" | ||||
| probability = 8 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "PlasmaBarrier" | ||||
| probability = 11 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "FreezeBarrier" | ||||
| probability = 13 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "PsychicBarrier" | ||||
| probability = 13 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "GeneralShield" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "ProtectBarrier" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "GloriousShield" | ||||
| probability = 9 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "ImperialBarrier" | ||||
| probability = 2 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "GuardianShield" | ||||
| probability = 1 | ||||
| 
 | ||||
| [[barrier.item]] | ||||
| item = "DivinityBarrier" | ||||
| probability = 1 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										251
									
								
								data/shops/frame.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										251
									
								
								data/shops/frame.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,251 @@ | ||||
| [[frame]] | ||||
| level = 0 | ||||
| [[frame.item]] | ||||
| item = "Frame" | ||||
| probability = 33 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "Armor" | ||||
| probability = 33 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "PsyArmor" | ||||
| probability = 15 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "GigaFrame" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "SoulFrame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "SolidFrame" | ||||
| probability = 4 | ||||
| 
 | ||||
| 
 | ||||
| [[frame]] | ||||
| level = 10 | ||||
| [[frame.item]] | ||||
| item = "Frame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "Armor" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "PsyArmor" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "GigaFrame" | ||||
| probability = 15 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "SoulFrame" | ||||
| probability = 19 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "CrossArmor" | ||||
| probability = 19 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "SolidFrame" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "BraveArmor" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "HyperFrame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "KingsFrame" | ||||
| probability = 2 | ||||
| 
 | ||||
| 
 | ||||
| [[frame]] | ||||
| level = 25 | ||||
| [[frame.item]] | ||||
| item = "SoulFrame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "CrossArmor" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "SolidFrame" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "BraveArmor" | ||||
| probability = 15 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "HyperFrame" | ||||
| probability = 19 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "GrandArmor" | ||||
| probability = 19 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "ShockFrame" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "KingsFrame" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "DragonFrame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "GeneralArmor" | ||||
| probability = 2 | ||||
| 
 | ||||
| 
 | ||||
| [[frame]] | ||||
| level = 42 | ||||
| [[frame.item]] | ||||
| item = "SolidFrame" | ||||
| probability = 2 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "BraveArmor" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "HyperFrame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "GrandArmor" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "ShockFrame" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "KingsFrame" | ||||
| probability = 12 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "DragonFrame" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "AbsorbArmor" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "ProtectFrame" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "GeneralArmor" | ||||
| probability = 9 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "PerfectFrame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "ValiantFrame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "ImperialArmor" | ||||
| probability = 3 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "HolinessArmor" | ||||
| probability = 2 | ||||
| 
 | ||||
| 
 | ||||
| [[frame]] | ||||
| level = 60 | ||||
| [[frame.item]] | ||||
| item = "BraveArmor" | ||||
| probability = 2 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "HyperFrame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "GrandArmor" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "ShockFrame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "KingsFrame" | ||||
| probability = 6 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "DragonFrame" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "AbsorbArmor" | ||||
| probability = 13 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "ProtectFrame" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "GeneralArmor" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "PerfectFrame" | ||||
| probability = 14 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "ValiantFrame" | ||||
| probability = 7 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "ImperialArmor" | ||||
| probability = 3 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "HolinessArmor" | ||||
| probability = 1 | ||||
| 
 | ||||
| [[frame.item]] | ||||
| item = "GuardianArmor" | ||||
| probability = 1 | ||||
| 
 | ||||
| 
 | ||||
| [[slot_rate]] | ||||
| slot = 0 | ||||
| probability = 75 | ||||
| 
 | ||||
| [[slot_rate]] | ||||
| slot = 1 | ||||
| probability = 18 | ||||
| 
 | ||||
| [[slot_rate]] | ||||
| slot = 2 | ||||
| probability = 6 | ||||
| 
 | ||||
| [[slot_rate]] | ||||
| slot = 3 | ||||
| probability = 1 | ||||
| 
 | ||||
| [[slot_rate]] | ||||
| slot = 4 | ||||
| probability = 0 | ||||
| 
 | ||||
							
								
								
									
										300
									
								
								data/shops/unit.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										300
									
								
								data/shops/unit.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,300 @@ | ||||
| [[unit]] | ||||
| level = 10 | ||||
| [[unit.item]] | ||||
| item = "KnightPower" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "PriestMind" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "MarksmanArm" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ThiefLegs" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "DiggerHp" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "WarriorBody" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistFire" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistCold" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistShock" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistLight" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistDark" | ||||
| probability = 5 | ||||
| 
 | ||||
| 
 | ||||
| [[unit]] | ||||
| level = 25 | ||||
| [[unit.item]] | ||||
| item = "KnightPower" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "PriestMind" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "MarksmanArm" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ThiefLegs" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "DiggerHp" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "WarriorBody" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistFire" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistCold" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistShock" | ||||
| probability = 10 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistLight" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistDark" | ||||
| probability = 5 | ||||
| 
 | ||||
| 
 | ||||
| [[unit]] | ||||
| level = 42 | ||||
| [[unit.item]] | ||||
| item = "KnightPower" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "PriestMind" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "MarksmanArm" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ThiefLegs" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "DiggerHp" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "WarriorBody" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistFire" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistCold" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistShock" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistLight" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistDark" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralPower" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralMind" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralArm" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralLegs" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralHp" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralBody" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistFlame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistFreeze" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistThunder" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistSaint" | ||||
| probability = 3 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistEvil" | ||||
| probability = 3 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "HpRestorate" | ||||
| probability = 1 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "TpRestorate" | ||||
| probability = 1 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "PbAmplifier" | ||||
| probability = 1 | ||||
| 
 | ||||
| 
 | ||||
| [[unit]] | ||||
| level = 60 | ||||
| [[unit.item]] | ||||
| item = "KnightPower" | ||||
| probability = 3 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "PriestMind" | ||||
| probability = 3 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "MarksmanArm" | ||||
| probability = 3 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ThiefLegs" | ||||
| probability = 3 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "DiggerHp" | ||||
| probability = 3 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "WarriorBody" | ||||
| probability = 3 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistFire" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistCold" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistShock" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistLight" | ||||
| probability = 4 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistDark" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralPower" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralMind" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralArm" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralLegs" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralHp" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "GeneralBody" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistFlame" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistFreeze" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistThunder" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistSaint" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "ResistEvil" | ||||
| probability = 5 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "HpRestorate" | ||||
| probability = 2 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "TpRestorate" | ||||
| probability = 2 | ||||
| 
 | ||||
| [[unit.item]] | ||||
| item = "PbAmplifier" | ||||
| probability = 2 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										259
									
								
								src/ship/shops/armor.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								src/ship/shops/armor.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,259 @@ | ||||
| use std::collections::HashMap; | ||||
| use std::fs::File; | ||||
| use std::io::Read; | ||||
| use std::path::PathBuf; | ||||
| use serde::Deserialize; | ||||
| use rand::{Rng, SeedableRng}; | ||||
| use rand::distributions::{WeightedIndex, Distribution}; | ||||
| use rand::seq::{SliceRandom, IteratorRandom}; | ||||
| use crate::entity::character::SectionID; | ||||
| use crate::ship::room::Difficulty; | ||||
| use crate::entity::item::armor::ArmorType; | ||||
| use crate::entity::item::shield::ShieldType; | ||||
| use crate::entity::item::unit::UnitType; | ||||
| 
 | ||||
| 
 | ||||
| enum ShopArmor { | ||||
|     Frame(ArmorType, usize), | ||||
|     Barrier(ShieldType), | ||||
|     Unit(UnitType), | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #[derive(Debug, Deserialize, Clone)] | ||||
| struct FrameTierItem { | ||||
|     item: ArmorType, | ||||
|     probability: usize, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Deserialize, Clone)] | ||||
| struct FrameTier { | ||||
|     level: usize, | ||||
|     item: Vec<FrameTierItem>, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Deserialize)] | ||||
| struct SlotRate { | ||||
|     slot: usize, | ||||
|     probability: usize, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Deserialize)] | ||||
| struct FrameTable { | ||||
|     frame: Vec<FrameTier>, | ||||
|     slot_rate: Vec<SlotRate>, | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #[derive(Debug, Deserialize, Clone)] | ||||
| struct BarrierTierItem { | ||||
|     item: ShieldType, | ||||
|     probability: usize, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Deserialize, Clone)] | ||||
| struct BarrierTier { | ||||
|     level: usize, | ||||
|     item: Vec<BarrierTierItem>, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Deserialize)] | ||||
| struct BarrierTable { | ||||
|     barrier: Vec<BarrierTier>, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Deserialize, Clone)] | ||||
| struct UnitTierItem { | ||||
|     item: UnitType, | ||||
|     probability: usize, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Deserialize, Clone)] | ||||
| struct UnitTier { | ||||
|     level: usize, | ||||
|     item: Vec<UnitTierItem>, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Deserialize)] | ||||
| struct UnitTable { | ||||
|     unit: Vec<UnitTier>, | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| fn load_frame_table() -> FrameTable { | ||||
|     let path = PathBuf::from("data/shops/frame.toml"); | ||||
|     let mut f = File::open(path).unwrap(); | ||||
|     let mut s = String::new(); | ||||
|     f.read_to_string(&mut s).unwrap(); | ||||
| 
 | ||||
|     let table: FrameTable = toml::from_str(s.as_str()).unwrap(); | ||||
|     table | ||||
| } | ||||
| 
 | ||||
| fn load_barrier_table() -> BarrierTable { | ||||
|     let path = PathBuf::from("data/shops/barrier.toml"); | ||||
|     let mut f = File::open(path).unwrap(); | ||||
|     let mut s = String::new(); | ||||
|     f.read_to_string(&mut s).unwrap(); | ||||
| 
 | ||||
|     let table: BarrierTable = toml::from_str(s.as_str()).unwrap(); | ||||
|     table | ||||
| } | ||||
| 
 | ||||
| fn load_unit_table() -> UnitTable { | ||||
|     let path = PathBuf::from("data/shops/unit.toml"); | ||||
|     let mut f = File::open(path).unwrap(); | ||||
|     let mut s = String::new(); | ||||
|     f.read_to_string(&mut s).unwrap(); | ||||
| 
 | ||||
|     let table: UnitTable = toml::from_str(s.as_str()).unwrap(); | ||||
|     table | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| fn number_of_frames_to_generate(character_level: usize) -> usize { | ||||
|     if character_level <= 10 { | ||||
|         4 | ||||
|     } | ||||
|     else if character_level <= 25 { | ||||
|         6 | ||||
|     } | ||||
|     else if character_level <= 42 { | ||||
|         7 | ||||
|     } | ||||
|     else { | ||||
|         8 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| fn number_of_barriers_to_generate(character_level: usize) -> usize { | ||||
|     if character_level <= 10 { | ||||
|         4 | ||||
|     } | ||||
|     else if character_level <= 25 { | ||||
|         5 | ||||
|     } | ||||
|     else if character_level <= 42 { | ||||
|         6 | ||||
|     } | ||||
|     else { | ||||
|         7 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| fn number_of_units_to_generate(character_level: usize) -> usize { | ||||
|     if character_level <= 10 { | ||||
|         0 | ||||
|     } | ||||
|     else if character_level <= 25 { | ||||
|         3 | ||||
|     } | ||||
|     else if character_level <= 42 { | ||||
|         5 | ||||
|     } | ||||
|     else { | ||||
|         6 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
| struct ArmorShop<R: Rng + SeedableRng> { | ||||
|     frame: FrameTable, | ||||
|     barrier: BarrierTable, | ||||
|     unit: UnitTable, | ||||
|     rng: R, | ||||
| } | ||||
| 
 | ||||
| impl<R: Rng + SeedableRng> ArmorShop<R> { | ||||
|     pub fn new() -> ArmorShop<R> { | ||||
|         ArmorShop { | ||||
|             frame: load_frame_table(), | ||||
|             barrier: load_barrier_table(), | ||||
|             unit: load_unit_table(), | ||||
|             rng: R::from_entropy(), | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fn generate_frame_list(&mut self, character_level: usize) -> Vec<ShopArmor> { | ||||
|         let tier = self.frame.frame.iter() | ||||
|             .filter(|t| t.level <= character_level) | ||||
|             .last() | ||||
|             .cloned() | ||||
|             .unwrap(); | ||||
| 
 | ||||
|         let frame_choice = WeightedIndex::new(tier.item.iter().map(|f| f.probability)).unwrap(); | ||||
|         let slot_choice = WeightedIndex::new(self.frame.slot_rate.iter().map(|sr| sr.probability)).unwrap(); | ||||
|         (0..number_of_frames_to_generate(character_level)) | ||||
|             .map(|_| { | ||||
|                 let frame_detail = tier.item.get(frame_choice.sample(&mut self.rng)).unwrap(); | ||||
|                 let slot = self.frame.slot_rate.get(slot_choice.sample(&mut self.rng)).unwrap(); | ||||
|                 
 | ||||
|                 ShopArmor::Frame(frame_detail.item, slot.slot) | ||||
|             }) | ||||
|             .collect() | ||||
|     } | ||||
| 
 | ||||
|     fn generate_barrier_list(&mut self, character_level: usize) -> Vec<ShopArmor> { | ||||
|         let tier = self.barrier.barrier.iter() | ||||
|             .filter(|t| t.level <= character_level) | ||||
|             .last() | ||||
|             .cloned() | ||||
|             .unwrap(); | ||||
| 
 | ||||
|         let barrier_choice = WeightedIndex::new(tier.item.iter().map(|b| b.probability)).unwrap(); | ||||
|         (0..number_of_barriers_to_generate(character_level)) | ||||
|             .map(|_| { | ||||
|                 let barrier_detail = tier.item.get(barrier_choice.sample(&mut self.rng)).unwrap(); | ||||
|                 
 | ||||
|                 ShopArmor::Barrier(barrier_detail.item) | ||||
|             }) | ||||
|             .collect() | ||||
|     } | ||||
| 
 | ||||
|     fn generate_unit_list(&mut self, character_level: usize) -> Vec<ShopArmor> { | ||||
|         self.unit.unit.iter() | ||||
|             .filter(|t| t.level <= character_level) | ||||
|             .last() | ||||
|             .cloned() | ||||
|             .map(|tier| { | ||||
|                 let unit_choice = WeightedIndex::new(tier.item.iter().map(|u| u.probability)).unwrap(); | ||||
|                 (0..number_of_units_to_generate(character_level)) | ||||
|                     .map(|_| { | ||||
|                         let unit_detail = tier.item.get(unit_choice.sample(&mut self.rng)).unwrap(); | ||||
|                         
 | ||||
|                 ShopArmor::Unit(unit_detail.item) | ||||
|                     }) | ||||
|                     .collect() | ||||
|             }) | ||||
|             .unwrap_or(Vec::new()) | ||||
|     } | ||||
| 
 | ||||
|     pub fn generate_armor_list(&mut self, character_level: usize) -> Vec<ShopArmor> { | ||||
|         self.generate_frame_list(character_level).into_iter() | ||||
|             .chain(self.generate_barrier_list(character_level).into_iter()) | ||||
|             .chain(self.generate_unit_list(character_level).into_iter()) | ||||
|             .collect() | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #[cfg(test)] | ||||
| mod test { | ||||
|     use super::*; | ||||
| 
 | ||||
|     #[test] | ||||
|     fn test_loading_tool_shop() { | ||||
|         ArmorShop::<rand_chacha::ChaCha20Rng>::new(); | ||||
|     } | ||||
| 
 | ||||
|     #[test] | ||||
|     fn test_generating_some_armor() { | ||||
|         let mut fs = ArmorShop::<rand_chacha::ChaCha20Rng>::new(); | ||||
|         for i in 0..200 { | ||||
|             fs.generate_armor_list(i); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,2 +1,3 @@ | ||||
| pub mod weapon; | ||||
| pub mod tool; | ||||
| pub mod armor; | ||||
|  | ||||
| @ -265,4 +265,12 @@ mod test { | ||||
|     fn test_loading_tool_shop() { | ||||
|         ToolShop::<rand_chacha::ChaCha20Rng>::new(); | ||||
|     } | ||||
| 
 | ||||
|     #[test] | ||||
|     fn test_generating_some_tools() { | ||||
|         let mut ts = ToolShop::<rand_chacha::ChaCha20Rng>::new(); | ||||
|         for i in 0..200 { | ||||
|             ts.generate_tool_list(i); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -401,4 +401,11 @@ mod test { | ||||
|     fn test_loading_weapon_shop() { | ||||
|         WeaponShop::<rand_chacha::ChaCha20Rng>::new(Difficulty::Ultimate, SectionID::Pinkal); | ||||
|     } | ||||
|     #[test] | ||||
|     fn test_generating_some_weapons() { | ||||
|         let mut ws = WeaponShop::<rand_chacha::ChaCha20Rng>::new(Difficulty::Ultimate, SectionID::Pinkal); | ||||
|         for i in 0..200 { | ||||
|             ws.generate_weapon(i); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user