refactor: beachte, dass in Python Namen von Ordnern und Dateien immer klein geschieben werden

Auch vermeide Denglisch
This commit is contained in:
2026-07-10 00:15:28 +02:00
parent d4002624f4
commit 84236eb324
15 changed files with 16 additions and 15 deletions
+58
View File
@@ -0,0 +1,58 @@
@startuml
'https://plantuml.com/object-diagram
object Mech <<Mech>>
abstract Area <<Zone>> {
next_area: Area
item_lines: #
armor: #
}
abstract AreaItem <<Item>> {
item_lines: #
}
object InnerStructure <<InnerStructure>> {
heater: x
}
object OuterAmor <<Zone>> {
armor: #
}
object Head <<Area>> {
item_lines: 6
}
object Torso <<Area>> {
item_lines: 12
}
object SideTorso <<Area>> {
item_lines: 12
}
object Arm <<Area>> {
item_lines: 12
}
object Leg <<Area>> {
item_lines: 6
}
Area *- "1,*" OuterAmor
AreaItem "*" -* Area
Head <|-- Area
Torso <|-- Area
SideTorso <|-- Area
Arm <|-- Area
Leg <|-- Area
Mech *-- InnerStructure
InnerStructure *-- Head
InnerStructure *-- Torso
Torso *-- SideTorso
SideTorso *-- "0|2" Arm
SideTorso *-- "2|4" Leg
@enduml
+75
View File
@@ -0,0 +1,75 @@
@startuml
'https://plantuml.com/object-diagram
object Mech <<Mech>> {
heater: x
}
object Head <<Area>> {
item_lines: 6
}
object Sustainment <<AreaItem>>
object Sensors <<AreaItem>>
object Cockpit <<Cockpit>> <<AreaItem>>
object InnerStructure <<InnerStructure>>
object Gyroskope <<Gyroskope>> <<AreaItem>>
object Reaktor <<Reaktor>> <<AreaItem>>
object TorsoMiddle <<Area>> {
item_lines: 12
}
object TorsoLeft <<Area>> {
item_lines: 12
}
object ArmLeft <<Area>> {
item_lines: 12
}
object LegLeft <<Area>> {
item_lines: 6
}
object TorsoRight <<Area>> {
item_lines: 12
}
object ArmRight <<Area>> {
item_lines: 12
}
object LegRight <<Area>> {
item_lines: 6
}
object JointAL as "Joint" <<AreaItem>>
object ActivatorAL as "Activator" <<AreaItem>>
object JointLL as "Joint" <<AreaItem>>
object ActivatorLL as "Activator" <<AreaItem>>
object JointAR as "Joint" <<AreaItem>>
object ActivatorAR as "Activator" <<AreaItem>>
object JointLR as "Joint" <<AreaItem>>
object ActivatorLR as "Activator" <<AreaItem>>
Mech *- Gyroskope
Head *- Cockpit
Head *-- Sustainment
Head *-- Sensors
Mech *-- InnerStructure
InnerStructure *-- Head
InnerStructure *-- TorsoMiddle
Mech *- Reaktor
Gyroskope .. TorsoMiddle
Reaktor .. TorsoMiddle
TorsoMiddle *-- TorsoLeft
TorsoMiddle *-- TorsoRight
TorsoLeft *-- ArmLeft
TorsoLeft *-- LegLeft
TorsoRight *-- ArmRight
TorsoRight *-- LegRight
ArmLeft *-- JointAL
ArmLeft *-- ActivatorAL
ArmRight *-- JointAR
ArmRight *-- ActivatorAR
LegRight *-- JointLR
LegRight *-- ActivatorLR
LegLeft *-- JointLL
LegLeft *-- ActivatorLL
@enduml
+39
View File
@@ -0,0 +1,39 @@
@startuml
'https://plantuml.com/activity-diagram-beta
start
:eine //Zone// wird getroffen;
:Trefferpunkte; <<object>>
if (die //Zone// hat noch äußere Panzerung?) then (Ja)
:äußere Panzerung abtragen; <<objectSignal>>
:Trefferpunkte verringern; <<object>>
:äußere Treffer triggern; <<acceptEvent>>
endif
if (sind noch Trefferpunkte übrig?) then (Ja)
if (die //Zone// hat noch innere Panzerung?) then (Ja)
:restliche Treffer nach innen leiten; <<objectSignal>>
:innere Panzerung abtragen; <<objectSignal>>
:inneren Treffer triggern; <<acceptEvent>>
:Trefferpunkte verringern; <<object>>
if (sind noch Trefferpunkte übrig?) then (Ja)
:die //Zone// ist zerstört; <<acceptEvent>>
:restliche Trefferpunkte zur //Eltern-Zone// leiten; <<objectSignal>>
end
else (Nein)
end
endif
else (Nein)
:die //Zone// ist zerstört; <<acceptEvent>>
:restliche Trefferpunkte zur //Eltern-Zone// leiten; <<objectSignal>>
end
endif
endif
end
@enduml
@@ -0,0 +1,31 @@
@startuml
'https://plantuml.com/sequence-diagram
autonumber
actor Gegner
actor Selbst
database InnerStructure
collections Zone
entity ZoneEvent
Gegner -> Selbst: Treffer
Selbst -> InnerStructure: verarbeite Treffer
InnerStructure -> Zone: suche getroffene Außen-Zone
return Zone
InnerStructure -> ZoneEvent: erstelle **ZonenEvent**
return **ZonenEvent**
alt aktuelles **ZoneEvent** hat noch nicht alle Trefferpunkte verarbeitet
alt **Zone** hat noch Panzerung
InnerStructure -> ZonenEvent: trage Trefferpunkte ab
return ZoneEvent
else **Zone** hat keine Panzerung
InnerStructure -> Zone: hole Weiterleitung-Zone
return Zone
InnerStructure -> ZoneEvent: erstelle **ZonenEvent** für weitergeleitete **Zone**
return ZoneEvent
end
end
@enduml
+161
View File
@@ -0,0 +1,161 @@
from hangar.mech import Mech
from mech_factory.components import InnerStructure, Area, AreaNames, OuterAmor, ZoneNames
from mech_factory.components.items import Activator, Cockpit, Gyroskope, Joint, Reaktor, Sensors, Sustainment
from mech_factory.reader import ComponentReader
class MechFabrik(object):
def __init__(self, name: str, tonnage: float, movement_rate: int):
self.__components = ComponentReader()
self.__tonnage = tonnage
self.__reactor_value = int(movement_rate * tonnage)
self.__areas = {
AreaNames.HEAD: Area(),
AreaNames.MIDDLE_TORSO: Area(),
AreaNames.LEFT_TORSO: Area(),
AreaNames.RIGHT_TORSO: Area(),
AreaNames.LEFT_ARM: Area(),
AreaNames.RIGHT_ARM: Area(),
AreaNames.LEFT_LEG: Area(),
AreaNames.RIGHT_LEG: Area(),
}
self.__zones = {
ZoneNames.HEAD: OuterAmor(self.__areas[AreaNames.HEAD]),
ZoneNames.MIDDLE_TORSO_FRONT: OuterAmor(self.__areas[AreaNames.MIDDLE_TORSO]),
ZoneNames.MIDDLE_TORSO_REAR: OuterAmor(self.__areas[AreaNames.MIDDLE_TORSO]),
ZoneNames.LEFT_TORSO_FRONT: OuterAmor(self.__areas[AreaNames.LEFT_TORSO]),
ZoneNames.LEFT_TORSO_REAR: OuterAmor(self.__areas[AreaNames.LEFT_TORSO]),
ZoneNames.RIGHT_TORSO_FRONT: OuterAmor(self.__areas[AreaNames.RIGHT_TORSO]),
ZoneNames.RIGHT_TORSO_REAR: OuterAmor(self.__areas[AreaNames.RIGHT_TORSO]),
ZoneNames.LEFT_ARM: OuterAmor(self.__areas[AreaNames.LEFT_ARM]),
ZoneNames.RIGHT_ARM: OuterAmor(self.__areas[AreaNames.RIGHT_ARM]),
ZoneNames.LEFT_LEG: OuterAmor(self.__areas[AreaNames.LEFT_LEG]),
ZoneNames.RIGHT_LEG: OuterAmor(self.__areas[AreaNames.RIGHT_LEG]),
}
self.__build_inner_structure(tonnage, movement_rate)
self._mech = Mech(name, tonnage, movement_rate, self._inner_structure)
def __build_inner_structure(self, tonnage: float, movement_rate: int) -> None:
reactor_value = int(movement_rate * tonnage)
gyroscope = Gyroskope(float(round(reactor_value / 100)))
self._inner_structure = InnerStructure(self.__components.inner_structure_from(tonnage), gyroscope)
self.__build_head_area()
self.__build_middle_torso_area(gyroscope)
def __build_head_area(self) -> None:
cockpit = Cockpit()
self.__areas[AreaNames.HEAD].cockpit = cockpit
self.__areas[AreaNames.HEAD].items = {
(1, 1): Sustainment(),
(1, 2): Sensors(),
(1, 3): cockpit,
(1, 4): None,
(1, 5): Sensors(),
(1, 6): Sustainment(),
}
self.__areas[AreaNames.HEAD].armor = 3
self.__areas[AreaNames.HEAD].parent = self.__areas[AreaNames.MIDDLE_TORSO]
def __build_middle_torso_area(self, gyroscope: Gyroskope) -> None:
self.__areas[AreaNames.LEFT_TORSO].parent = self.__areas[AreaNames.MIDDLE_TORSO]
self.__areas[AreaNames.RIGHT_TORSO].parent = self.__areas[AreaNames.MIDDLE_TORSO]
reactor = Reaktor(self.__reactor_value, self.__components.reactor_tonnage_from(self.__reactor_value))
self.__areas[AreaNames.MIDDLE_TORSO].reactor = reactor
self.__areas[AreaNames.MIDDLE_TORSO].children = [
self.__areas[AreaNames.RIGHT_TORSO],
self.__areas[AreaNames.LEFT_TORSO]
]
self.__areas[AreaNames.MIDDLE_TORSO].items = {
(1, 1): reactor,
(1, 2): reactor,
(1, 3): reactor,
(1, 4): gyroscope,
(1, 5): gyroscope,
(1, 6): gyroscope,
(2, 1): gyroscope,
(2, 2): reactor,
(2, 3): reactor,
(2, 4): reactor,
(2, 5): None,
(2, 6): None,
}
self.__areas[AreaNames.MIDDLE_TORSO].armor = self.__components.inner_amor_for_tonnage_and_area(
self.__tonnage,
AreaNames.MIDDLE_TORSO
)
self.__areas[AreaNames.LEFT_TORSO].armor = self.__components.inner_amor_for_tonnage_and_area(
self.__tonnage, AreaNames.LEFT_TORSO)
self.__areas[AreaNames.RIGHT_TORSO].armor = self.__components.inner_amor_for_tonnage_and_area(
self.__tonnage,
AreaNames.RIGHT_TORSO
)
self.__build_arm(self.__areas[AreaNames.RIGHT_TORSO], AreaNames.RIGHT_ARM)
self.__build_leg(self.__areas[AreaNames.RIGHT_TORSO], AreaNames.RIGHT_LEG)
self.__build_arm(self.__areas[AreaNames.LEFT_TORSO], AreaNames.LEFT_ARM)
self.__build_leg(self.__areas[AreaNames.LEFT_TORSO], AreaNames.LEFT_LEG)
def __build_arm(self, parent: Area, index: AreaNames):
self.__areas[index].parent = parent
self.__areas[index].items = {
(1, 1): Joint(),
(1, 2): Activator(),
(1, 3): Activator(),
(1, 4): Activator(),
(1, 5): None,
(1, 6): None,
(2, 1): None,
(2, 2): None,
(2, 3): None,
(2, 4): None,
(2, 5): None,
(2, 6): None,
}
self.__areas[index].armor = self.__components.inner_amor_for_tonnage_and_area(self.__tonnage, index)
parent.children.append(self.__areas[index])
def __build_leg(self, parent: Area, index: AreaNames):
self.__areas[index].parent = parent
self.__areas[index].items = {
(1, 1): Joint(),
(1, 2): Activator(),
(1, 3): Activator(),
(1, 4): Activator(),
(1, 5): None,
(1, 6): None,
}
self.__areas[index].armor = self.__components.inner_amor_for_tonnage_and_area(self.__tonnage, index)
parent.children.append(self.__areas[index])
def auslieferung(self) -> Mech:
for (index, area) in self.__areas.items():
self._inner_structure.add_area(index, area)
for (index, outer_amor) in self.__zones.items():
self._inner_structure.add_zone(index, outer_amor)
return self._mech
def set_head_armor(self, armor: int) -> None:
self.__set_outer_armor(armor, ZoneNames.HEAD, AreaNames.HEAD)
def set_middle_torso_armor(self, armor_front: int, amor_rear: int) -> None:
self.__set_outer_armor(armor_front, ZoneNames.MIDDLE_TORSO_FRONT, AreaNames.MIDDLE_TORSO)
self.__set_outer_armor(amor_rear, ZoneNames.MIDDLE_TORSO_REAR, AreaNames.MIDDLE_TORSO)
def set_side_torso_armor(self, armor_front: int, amor_rear: int) -> None:
self.__set_outer_armor(armor_front, ZoneNames.LEFT_TORSO_FRONT, AreaNames.LEFT_TORSO)
self.__set_outer_armor(amor_rear, ZoneNames.LEFT_TORSO_REAR, AreaNames.LEFT_TORSO)
self.__set_outer_armor(armor_front, ZoneNames.RIGHT_TORSO_FRONT, AreaNames.RIGHT_TORSO)
self.__set_outer_armor(amor_rear, ZoneNames.RIGHT_TORSO_REAR, AreaNames.RIGHT_TORSO)
def set_arm_armor(self, armor: int) -> None:
self.__set_outer_armor(armor, ZoneNames.LEFT_ARM, AreaNames.LEFT_ARM)
self.__set_outer_armor(armor, ZoneNames.RIGHT_ARM, AreaNames.RIGHT_ARM)
def set_leg_armor(self, armor: int) -> None:
self.__set_outer_armor(armor, ZoneNames.LEFT_LEG, AreaNames.LEFT_LEG)
self.__set_outer_armor(armor, ZoneNames.RIGHT_LEG, AreaNames.RIGHT_LEG)
def __set_outer_armor(self, armor: int, zone_name: ZoneNames, parent_name: AreaNames) -> None:
self.__zones[zone_name].armor = armor
self.__zones[zone_name].parent = self.__areas[parent_name]
self.__areas[parent_name].outer_amor.append(self.__zones[zone_name])
+1 -1
View File
@@ -1,6 +1,6 @@
import enum
from MechFabrik.bauteile.items import Gyroskope, Item, ItemStatus
from mech_factory.components.items import Gyroskope, Item, ItemStatus
class ZoneNames(enum.Enum):
+105
View File
@@ -0,0 +1,105 @@
import enum
class ItemTypes(enum.Enum):
COCKPIT = 1
REAKTOR = 2
GYROSKOPE = 3
ACTIVATOR = 4
JOINT = 5
SENSORS = 6
SUSTAINMENT = 7
class ItemStatus(enum.Flag):
FINE = 0
DAMAGED = 1
DESTROYED = 2
class Item(object):
def __init__(self, item_type: ItemTypes, **another: dict):
self._type = item_type
self._state = ItemStatus.FINE
@property
def type(self):
return self._type
@property
def state(self):
return self._state
@state.setter
def state(self, new_state: ItemStatus):
self._state = new_state
def process_strike(self):
self._state = ItemStatus.DESTROYED
class BigItem(Item):
def __init__(self, item_type: ItemTypes, tonnage: float, **another: dict):
super().__init__(item_type, **another)
self._tonnage = tonnage
@property
def tonnage(self) -> float:
return self._tonnage
class DurableItem(Item):
def __init__(self, item_type: ItemTypes, max_strike: int, **another):
super().__init__(item_type)
self._max_strike = max_strike
@property
def max_strike(self):
return self._max_strike
def process_strike(self):
self._max_strike -= 1
self._state = ItemStatus.DAMAGED if self._max_strike > 0 else ItemStatus.DESTROYED
class Gyroskope(BigItem, DurableItem):
def __init__(self, tonnage: float):
super().__init__(item_type = ItemTypes.GYROSKOPE, tonnage=tonnage, max_strike=2)
class Cockpit(BigItem):
def __init__(self):
super().__init__(ItemTypes.COCKPIT, 3.0)
class Reaktor(BigItem, DurableItem):
def __init__(self, value: int, tonnage: float):
super().__init__(item_type = ItemTypes.REAKTOR, tonnage=tonnage, max_strike=3)
self._value = value
@property
def value(self):
return self._value
class Activator(Item):
def __init__(self):
super().__init__(ItemTypes.ACTIVATOR)
class Joint(Item):
def __init__(self):
super().__init__(ItemTypes.JOINT)
class Sensors(DurableItem):
def __init__(self):
super().__init__(ItemTypes.SENSORS, 2)
class Sustainment(Item):
def __init__(self):
super().__init__(ItemTypes.SUSTAINMENT)
+52
View File
@@ -0,0 +1,52 @@
import csv
import os.path
from mech_factory import AreaNames
# noinspection SpellCheckingInspection
class CsvDialect (csv.Dialect):
lineterminator='\r\n'
delimiter = ','
quotechar = '"'
quoting=csv.QUOTE_NONNUMERIC
class ComponentReader:
def __init__(self):
my_dirname = str(os.path.dirname(__file__))
self._inner_structure_data = {}
self._reactor_data = {}
self._weapon_data = {}
with open(os.path.join(my_dirname, 'tabellen', 'bauteile.csv')) as csvfile:
component_reader = csv.DictReader(csvfile, dialect=CsvDialect)
for row in component_reader:
self._inner_structure_data[float(row['GTonnage'])] = row
with open(os.path.join(my_dirname, 'tabellen', 'reaktoren.csv')) as csvfile:
component_reader = csv.DictReader(csvfile, dialect=CsvDialect)
for row in component_reader:
self._reactor_data[float(row['RW'])] = row
with open(os.path.join(my_dirname, 'tabellen', 'waffen.csv')) as csvfile:
component_reader = csv.DictReader(csvfile, dialect=CsvDialect)
for row in component_reader:
self._weapon_data[row['Waffentyp']] = row
def inner_structure_from(self, tonnage: float) -> float:
return float(self._inner_structure_data.get(tonnage, {}).get('Tonnage IS', 0.0))
def reactor_tonnage_from(self, reactor_value: int) -> float:
return float(self._reactor_data.get(reactor_value, {}).get('Tonnage', 0.0))
def inner_amor_for_tonnage_and_area(self, tonnage: float, area: AreaNames) -> int:
match area:
case AreaNames.HEAD:
return 3
case AreaNames.MIDDLE_TORSO:
return int(self._inner_structure_data.get(tonnage, {}).get('TorsoMitte', 0))
case AreaNames.RIGHT_TORSO | AreaNames.LEFT_TORSO:
return int(self._inner_structure_data.get(tonnage, {}).get('TorsoSeite', 0))
case AreaNames.RIGHT_ARM | AreaNames.LEFT_ARM:
return int(self._inner_structure_data.get(tonnage, {}).get('Arm', 0))
case AreaNames.RIGHT_LEG | AreaNames.LEFT_LEG:
return int(self._inner_structure_data.get(tonnage, {}).get('Bein', 0))
+20
View File
@@ -0,0 +1,20 @@
"GTonnage","Tonnage IS","Tonnage Endo","TorsoMitte","TorsoSeite","Arm","Bein","Tonnage SD"
10,1.0,0.5,4,3,1,2,0.5
15,1.5,1.0,5,4,2,3,0.5
20,2.0,1.0,6,5,3,4,0.5
25,2.5,1.5,8,6,4,6,0.5
30,3.0,1.5,10,7,5,7,0.5
35,3.5,2.0,11,8,6,8,0.5
40,4.0,2.0,12,10,6,10,0.5
45,4.5,2.5,14,11,7,11,0.5
50,5.0,2.5,16,12,8,12,0.5
55,5.5,3.0,18,13,9,13,0.5
60,6.0,3.0,20,14,10,14,1
65,6.5,3.5,21,15,10,15,1
70,7.0,3.5,22,15,11,15,1
75,7.5,4.0,23,16,12,16,1
80,8.0,4.0,25,17,13,17,1
85,8.5,4.25,27,18,14,18,1
90,9.0,4.5,29,19,15,19,2
95,9.5,4.75,30,20,16,20,2
100,10.0,5.0,31,21,17,21,2
1 GTonnage Tonnage IS Tonnage Endo TorsoMitte TorsoSeite Arm Bein Tonnage SD
2 10 1.0 0.5 4 3 1 2 0.5
3 15 1.5 1.0 5 4 2 3 0.5
4 20 2.0 1.0 6 5 3 4 0.5
5 25 2.5 1.5 8 6 4 6 0.5
6 30 3.0 1.5 10 7 5 7 0.5
7 35 3.5 2.0 11 8 6 8 0.5
8 40 4.0 2.0 12 10 6 10 0.5
9 45 4.5 2.5 14 11 7 11 0.5
10 50 5.0 2.5 16 12 8 12 0.5
11 55 5.5 3.0 18 13 9 13 0.5
12 60 6.0 3.0 20 14 10 14 1
13 65 6.5 3.5 21 15 10 15 1
14 70 7.0 3.5 22 15 11 15 1
15 75 7.5 4.0 23 16 12 16 1
16 80 8.0 4.0 25 17 13 17 1
17 85 8.5 4.25 27 18 14 18 1
18 90 9.0 4.5 29 19 15 19 2
19 95 9.5 4.75 30 20 16 20 2
20 100 10.0 5.0 31 21 17 21 2
+80
View File
@@ -0,0 +1,80 @@
"RW","Tonnage","TonnageXL","Hersteller"
10,0.50,0.50,"unbekannt"
15,0.50,0.50,"unbekannt"
20,0.50,0.50,"unbekannt"
25,0.50,0.50,"unbekannt"
30,1.00,0.50,"unbekannt"
35,1.00,0.50,"unbekannt"
40,1.00,0.50,"unbekannt"
45,1.00,0.50,"unbekannt"
50,1.50,1.00,"unbekannt"
55,1.50,1.00,"unbekannt"
60,1.50,1.00,"unbekannt"
65,2.00,1.00,"unbekannt"
70,2.00,1.00,"unbekannt"
75,2.00,1.00,"unbekannt"
80,2.50,1.50,"unbekannt"
85,2.50,1.50,"unbekannt"
90,3.00,1.50,"unbekannt"
95,3.00,1.50,"unbekannt"
100,3.00,1.50,"unbekannt"
105,3.50,2.00,"unbekannt"
110,3.50,2.00,"unbekannt"
115,4.00,2.00,"unbekannt"
120,4.00,2.00,"unbekannt"
125,4.00,2.00,"unbekannt"
130,4.50,2.50,"unbekannt"
135,4.50,2.50,"unbekannt"
140,5.00,2.50,"unbekannt"
145,5.00,2.50,"unbekannt"
150,5.50,3.00,"unbekannt"
155,5.50,3.00,"unbekannt"
160,6.00,3.00,"unbekannt"
165,6.00,3.00,"unbekannt"
170,6.00,3.00,"unbekannt"
175,7.00,3.50,"unbekannt"
180,7.00,3.50,"unbekannt"
185,7.50,4.00,"unbekannt"
190,7.50,4.00,"unbekannt"
195,8.00,4.00,"unbekannt"
200,8.50,4.50,"unbekannt"
205,8.50,4.50,"unbekannt"
210,9.00,4.50,"unbekannt"
215,9.50,5.00,"unbekannt"
220,10.00,5.00,"unbekannt"
225,10.00,5.00,"unbekannt"
230,10.50,5.50,"unbekannt"
235,11.00,5.50,"unbekannt"
240,11.50,6.00,"unbekannt"
245,12.00,6.00,"unbekannt"
250,12.50,6.50,"unbekannt"
255,13.00,6.50,"unbekannt"
260,13.50,7.00,"unbekannt"
265,14.00,7.00,"unbekannt"
270,14.50,7.50,"unbekannt"
275,15.50,8.00,"unbekannt"
280,16.00,8.00,"unbekannt"
285,16.50,8.50,"unbekannt"
290,17.50,9.00,"unbekannt"
295,18.00,9.00,"unbekannt"
300,19.00,9.50,"unbekannt"
305,19.50,10.00,"unbekannt"
310,20.50,10.50,"unbekannt"
315,21.50,11.00,"unbekannt"
320,22.50,11.50,"unbekannt"
325,23.50,12.00,"unbekannt"
330,24.50,12.50,"VOX"
335,25.50,13.00,"unbekannt"
340,27.00,13.50,"unbekannt"
345,28.50,14.50,"unbekannt"
350,29.50,15.00,"unbekannt"
355,31.50,16.00,"unbekannt"
360,33.00,16.50,"unbekannt"
365,34.50,17.50,"unbekannt"
370,36.50,18.50,"unbekannt"
375,38.50,19.50,"unbekannt"
380,41.00,20.50,"unbekannt"
385,43.50,22.00,"unbekannt"
390,46.00,23.00,"unbekannt"
395,49.00,24.50,"unbekannt"
400,52.50,26.50,"unbekannt"
1 RW Tonnage TonnageXL Hersteller
2 10 0.50 0.50 unbekannt
3 15 0.50 0.50 unbekannt
4 20 0.50 0.50 unbekannt
5 25 0.50 0.50 unbekannt
6 30 1.00 0.50 unbekannt
7 35 1.00 0.50 unbekannt
8 40 1.00 0.50 unbekannt
9 45 1.00 0.50 unbekannt
10 50 1.50 1.00 unbekannt
11 55 1.50 1.00 unbekannt
12 60 1.50 1.00 unbekannt
13 65 2.00 1.00 unbekannt
14 70 2.00 1.00 unbekannt
15 75 2.00 1.00 unbekannt
16 80 2.50 1.50 unbekannt
17 85 2.50 1.50 unbekannt
18 90 3.00 1.50 unbekannt
19 95 3.00 1.50 unbekannt
20 100 3.00 1.50 unbekannt
21 105 3.50 2.00 unbekannt
22 110 3.50 2.00 unbekannt
23 115 4.00 2.00 unbekannt
24 120 4.00 2.00 unbekannt
25 125 4.00 2.00 unbekannt
26 130 4.50 2.50 unbekannt
27 135 4.50 2.50 unbekannt
28 140 5.00 2.50 unbekannt
29 145 5.00 2.50 unbekannt
30 150 5.50 3.00 unbekannt
31 155 5.50 3.00 unbekannt
32 160 6.00 3.00 unbekannt
33 165 6.00 3.00 unbekannt
34 170 6.00 3.00 unbekannt
35 175 7.00 3.50 unbekannt
36 180 7.00 3.50 unbekannt
37 185 7.50 4.00 unbekannt
38 190 7.50 4.00 unbekannt
39 195 8.00 4.00 unbekannt
40 200 8.50 4.50 unbekannt
41 205 8.50 4.50 unbekannt
42 210 9.00 4.50 unbekannt
43 215 9.50 5.00 unbekannt
44 220 10.00 5.00 unbekannt
45 225 10.00 5.00 unbekannt
46 230 10.50 5.50 unbekannt
47 235 11.00 5.50 unbekannt
48 240 11.50 6.00 unbekannt
49 245 12.00 6.00 unbekannt
50 250 12.50 6.50 unbekannt
51 255 13.00 6.50 unbekannt
52 260 13.50 7.00 unbekannt
53 265 14.00 7.00 unbekannt
54 270 14.50 7.50 unbekannt
55 275 15.50 8.00 unbekannt
56 280 16.00 8.00 unbekannt
57 285 16.50 8.50 unbekannt
58 290 17.50 9.00 unbekannt
59 295 18.00 9.00 unbekannt
60 300 19.00 9.50 unbekannt
61 305 19.50 10.00 unbekannt
62 310 20.50 10.50 unbekannt
63 315 21.50 11.00 unbekannt
64 320 22.50 11.50 unbekannt
65 325 23.50 12.00 unbekannt
66 330 24.50 12.50 VOX
67 335 25.50 13.00 unbekannt
68 340 27.00 13.50 unbekannt
69 345 28.50 14.50 unbekannt
70 350 29.50 15.00 unbekannt
71 355 31.50 16.00 unbekannt
72 360 33.00 16.50 unbekannt
73 365 34.50 17.50 unbekannt
74 370 36.50 18.50 unbekannt
75 375 38.50 19.50 unbekannt
76 380 41.00 20.50 unbekannt
77 385 43.50 22.00 unbekannt
78 390 46.00 23.00 unbekannt
79 395 49.00 24.50 unbekannt
80 400 52.50 26.50 unbekannt
+23
View File
@@ -0,0 +1,23 @@
"Waffentyp","Wärme","Schaden","Minimal","Nah","Mittel","Weit","Tonnage","Zeilen","Schuss/Tonne"
"L-Laser",1,3,0,1,2,3,0.5,1
"L-I-Laser",2,3,0,1,2,3,1,1
"M-Laser",3,5,0,"1 - 3","4 - 6","7 - 9",1,1
"M-I-Laser",4,6,0,"1 - 2","3 - 4","5 - 6",2,1
"S-Laser",8,8,0,"1 - 5","6 - 10","11 - 15",5,2
"ER-S-Laser",12,8,0,"1 - 7","8 - 14","15 - 19",5,2
"S-I-Laser",10,9,0,"1 - 3","4 - 7","8 - 10",7,2
"PPK",10,10,3,"1 - 6","7 - 12","13 - 18",7,3
"ER-PPK",15,10,0,"1 - 7","8 - 14","15 - 23",7,3
"LSR-5",2,"LSR",6,"1 - 7","8 - 14","15 - 21",2,1,24
"LSR-10",4,"LSR",6,"1 - 7","8 - 14","15 - 21",5,2,12
"LSR-15",5,"LSR",6,"1 - 7","8 - 14","15 - 21",6,3,8
"LSR-20",6,"LSR",6,"1 - 7","8 - 14","15 - 21",10,5,6
"KSR-2",2,"KSR",0,"1 - 3","4 - 6","7 - 9",1,1,50
"KSR-4",3,"KSR",0,"1 - 3","4 - 6","7 - 9",2,1,25
"KSR-6",4,"KSR",0,"1 - 3","4 - 6","7 - 9",3,2,15
"AK-2",1,2,6,"1 - 8","9 - 16","17 - 24",6,1,45
"AK-5",1,3,5,"1 - 6","7 - 12","13 - 18",8,4,20
"AK-10",3,10,0,"1 - 5","6 - 10","11 - 15",12,7,10
"AK-20",7,20,0,"1 - 3","4 - 6","7 - 9",14,10,5
"MG",0,2,0,1,2,3,0.5,1,200
"Flammer",3,2,0,1,2,3,1,1
1 Waffentyp Wärme Schaden Minimal Nah Mittel Weit Tonnage Zeilen Schuss/Tonne
2 L-Laser 1 3 0 1 2 3 0.5 1
3 L-I-Laser 2 3 0 1 2 3 1 1
4 M-Laser 3 5 0 1 - 3 4 - 6 7 - 9 1 1
5 M-I-Laser 4 6 0 1 - 2 3 - 4 5 - 6 2 1
6 S-Laser 8 8 0 1 - 5 6 - 10 11 - 15 5 2
7 ER-S-Laser 12 8 0 1 - 7 8 - 14 15 - 19 5 2
8 S-I-Laser 10 9 0 1 - 3 4 - 7 8 - 10 7 2
9 PPK 10 10 3 1 - 6 7 - 12 13 - 18 7 3
10 ER-PPK 15 10 0 1 - 7 8 - 14 15 - 23 7 3
11 LSR-5 2 LSR 6 1 - 7 8 - 14 15 - 21 2 1 24
12 LSR-10 4 LSR 6 1 - 7 8 - 14 15 - 21 5 2 12
13 LSR-15 5 LSR 6 1 - 7 8 - 14 15 - 21 6 3 8
14 LSR-20 6 LSR 6 1 - 7 8 - 14 15 - 21 10 5 6
15 KSR-2 2 KSR 0 1 - 3 4 - 6 7 - 9 1 1 50
16 KSR-4 3 KSR 0 1 - 3 4 - 6 7 - 9 2 1 25
17 KSR-6 4 KSR 0 1 - 3 4 - 6 7 - 9 3 2 15
18 AK-2 1 2 6 1 - 8 9 - 16 17 - 24 6 1 45
19 AK-5 1 3 5 1 - 6 7 - 12 13 - 18 8 4 20
20 AK-10 3 10 0 1 - 5 6 - 10 11 - 15 12 7 10
21 AK-20 7 20 0 1 - 3 4 - 6 7 - 9 14 10 5
22 MG 0 2 0 1 2 3 0.5 1 200
23 Flammer 3 2 0 1 2 3 1 1