sc2analyzer 0.1.0a1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sc2analyzer-0.1.0a1/PKG-INFO +10 -0
- sc2analyzer-0.1.0a1/README.md +3 -0
- sc2analyzer-0.1.0a1/pyproject.toml +25 -0
- sc2analyzer-0.1.0a1/setup.cfg +4 -0
- sc2analyzer-0.1.0a1/src/co_op/__init__.py +0 -0
- sc2analyzer-0.1.0a1/src/co_op/event.py +55 -0
- sc2analyzer-0.1.0a1/src/co_op/models/__init__.py +88 -0
- sc2analyzer-0.1.0a1/src/co_op/models/commander.py +8 -0
- sc2analyzer-0.1.0a1/src/co_op/models/player.py +13 -0
- sc2analyzer-0.1.0a1/src/co_op/models/unit.py +25 -0
- sc2analyzer-0.1.0a1/src/co_op/models/unit_cost.py +1929 -0
- sc2analyzer-0.1.0a1/src/co_op/models/unit_type/buildings_units.py +242 -0
- sc2analyzer-0.1.0a1/src/co_op/models/unit_type/commander_ability.py +123 -0
- sc2analyzer-0.1.0a1/src/co_op/models/unit_type/commander_units.py +157 -0
- sc2analyzer-0.1.0a1/src/co_op/models/unit_type/race_army_unit.py +97 -0
- sc2analyzer-0.1.0a1/src/co_op/models/unit_type/temporary_units.py +225 -0
- sc2analyzer-0.1.0a1/src/co_op/models/unit_types.py +80 -0
- sc2analyzer-0.1.0a1/src/co_op/replay/__init__.py +1 -0
- sc2analyzer-0.1.0a1/src/co_op/replay/analyser.py +132 -0
- sc2analyzer-0.1.0a1/src/co_op/replay/analyser_factory.py +35 -0
- sc2analyzer-0.1.0a1/src/co_op/replay/army_analyser.py +215 -0
- sc2analyzer-0.1.0a1/src/co_op/replay/army_processor.py +405 -0
- sc2analyzer-0.1.0a1/src/co_op/replay/economy_processor.py +66 -0
- sc2analyzer-0.1.0a1/src/co_op/replay/processor.py +69 -0
- sc2analyzer-0.1.0a1/src/co_op/replay/replay.py +30 -0
- sc2analyzer-0.1.0a1/src/co_op/replay/replay_factory.py +25 -0
- sc2analyzer-0.1.0a1/src/co_op/replay/unit_value.py +15 -0
- sc2analyzer-0.1.0a1/src/co_op/replay_reports.py +81 -0
- sc2analyzer-0.1.0a1/src/co_op/reports/army_value_report.py +69 -0
- sc2analyzer-0.1.0a1/src/co_op/reports/commanders.py +148 -0
- sc2analyzer-0.1.0a1/src/co_op/reports/resources/commanders_economy.py +38 -0
- sc2analyzer-0.1.0a1/src/co_op/reports/resources/economy_report.py +43 -0
- sc2analyzer-0.1.0a1/src/co_op/reports/resources/resource_bank.py +165 -0
- sc2analyzer-0.1.0a1/src/co_op/reports/resources/resource_bank_analysis.py +110 -0
- sc2analyzer-0.1.0a1/src/co_op/reports/resources/resource_bank_analysis_model.py +16 -0
- sc2analyzer-0.1.0a1/src/co_op/reports/resources/resource_efficiency_report.py +98 -0
- sc2analyzer-0.1.0a1/src/models/graph.py +8 -0
- sc2analyzer-0.1.0a1/src/models/strcraft_report.py +17 -0
- sc2analyzer-0.1.0a1/src/sc2analyzer.egg-info/PKG-INFO +10 -0
- sc2analyzer-0.1.0a1/src/sc2analyzer.egg-info/SOURCES.txt +44 -0
- sc2analyzer-0.1.0a1/src/sc2analyzer.egg-info/dependency_links.txt +1 -0
- sc2analyzer-0.1.0a1/src/sc2analyzer.egg-info/requires.txt +7 -0
- sc2analyzer-0.1.0a1/src/sc2analyzer.egg-info/top_level.txt +2 -0
- sc2analyzer-0.1.0a1/tests/test_army_processor.py +46 -0
- sc2analyzer-0.1.0a1/tests/test_replay_reports.py +12 -0
- sc2analyzer-0.1.0a1/tests/test_unit_types.py +48 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
[project]
|
|
7
|
+
name = "sc2analyzer"
|
|
8
|
+
version = "0.1.0a1"
|
|
9
|
+
|
|
10
|
+
dependencies = [
|
|
11
|
+
#"pandas>=2.2",
|
|
12
|
+
"numpy>=1.26",
|
|
13
|
+
"build",
|
|
14
|
+
"twine",
|
|
15
|
+
"pytest",
|
|
16
|
+
"sc2reader>=1.8",
|
|
17
|
+
"pandas",
|
|
18
|
+
"matplotlib"
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
[tool.setuptools.packages.find]
|
|
22
|
+
where = ["src"]
|
|
23
|
+
|
|
24
|
+
[tool.setuptools.package-dir]
|
|
25
|
+
"" = "src"
|
|
File without changes
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
from sc2reader.events import Event
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class CoOpEvent:
|
|
5
|
+
PLAYER_EVENT = "PlayerEvent"
|
|
6
|
+
GAME_EVENT = "GameEvent"
|
|
7
|
+
UNITBORN_EVENT = "UnitBornEvent"
|
|
8
|
+
def __init__(self, events:list[Event]):
|
|
9
|
+
self.events = events
|
|
10
|
+
self.event_types = self.get_event_types()
|
|
11
|
+
self.players_events = self.arrange_events()
|
|
12
|
+
|
|
13
|
+
def get_event_types(self)->dict[str, set[str]]:
|
|
14
|
+
game_events = set()
|
|
15
|
+
player_events = set()
|
|
16
|
+
for event in self.events:
|
|
17
|
+
value = getattr(event, "control_pid", None)
|
|
18
|
+
if value == None:
|
|
19
|
+
game_events.add(event.name)
|
|
20
|
+
else:
|
|
21
|
+
player_events.add(event.name)
|
|
22
|
+
|
|
23
|
+
types = dict()
|
|
24
|
+
types[self.GAME_EVENT] = game_events
|
|
25
|
+
types[self.PLAYER_EVENT] = player_events
|
|
26
|
+
|
|
27
|
+
return types
|
|
28
|
+
|
|
29
|
+
def arrange_events(self)->dict[int, list]:
|
|
30
|
+
events = {}
|
|
31
|
+
for event in self.events:
|
|
32
|
+
if event.name in self.event_types[self.PLAYER_EVENT]:
|
|
33
|
+
id = event.control_pid
|
|
34
|
+
event_list = []
|
|
35
|
+
if id in events:
|
|
36
|
+
event_list = events[id]
|
|
37
|
+
event_list.append(event)
|
|
38
|
+
events[id] = event_list
|
|
39
|
+
|
|
40
|
+
return events
|
|
41
|
+
def get_unit_born_events(self):
|
|
42
|
+
events = list[Event]()
|
|
43
|
+
for event in self.events:
|
|
44
|
+
if event.name == self.UNITBORN_EVENT:
|
|
45
|
+
events.append(event)
|
|
46
|
+
|
|
47
|
+
return events
|
|
48
|
+
|
|
49
|
+
def get_unit_born_events_for_player(self, id:int)->list[Event]:
|
|
50
|
+
events = list[Event]()
|
|
51
|
+
for event in self.players_events[id]:
|
|
52
|
+
if event.name == self.UNITBORN_EVENT:
|
|
53
|
+
events.append(event)
|
|
54
|
+
|
|
55
|
+
return events
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
HEROS = {
|
|
2
|
+
"Dehaka",
|
|
3
|
+
"Tychus"
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
COMMANDER_POWER_UNITS = {
|
|
7
|
+
"TychusCoop",
|
|
8
|
+
"TychusWarhound",
|
|
9
|
+
"TychusMedic",
|
|
10
|
+
"TychusHERC",
|
|
11
|
+
"TychusFirebat",
|
|
12
|
+
|
|
13
|
+
"DehakaCoop",
|
|
14
|
+
"DehakaCoopClone",
|
|
15
|
+
"DehakaMurvar",
|
|
16
|
+
"DehakaDakrun",
|
|
17
|
+
"DehakaGlevig",
|
|
18
|
+
|
|
19
|
+
#aba
|
|
20
|
+
"Brutalisk",
|
|
21
|
+
"Leviathan",
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
POWER_VALUES = {
|
|
25
|
+
"DehakaCoop": 1000,
|
|
26
|
+
"DehakaCoopClone": 300,
|
|
27
|
+
"DehakaMurvar": 800,
|
|
28
|
+
"DehakaDakrun": 800,
|
|
29
|
+
"DehakaGlevig": 800,
|
|
30
|
+
|
|
31
|
+
"TychusCoop": 1000,
|
|
32
|
+
"TychusWarhound": 800,
|
|
33
|
+
"TychusMedic": 700,
|
|
34
|
+
"TychusHERC": 700,
|
|
35
|
+
"TychusFirebat": 800,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
HERO_IGNOR = [
|
|
39
|
+
"DehakaTrainEggRoach",
|
|
40
|
+
"DehakaTrainEggDrone",
|
|
41
|
+
"DehakaDrone",
|
|
42
|
+
"DehakaHatchery",
|
|
43
|
+
"DehakaCoopReviveCocoonFootPrint",
|
|
44
|
+
"DehakaTrainEggHydralisk",
|
|
45
|
+
"TychusSCV",
|
|
46
|
+
"TychusCommandCenter",
|
|
47
|
+
"TychusResearchCenter",
|
|
48
|
+
"TychusWarhoundAutoTurret",
|
|
49
|
+
"TychusResearchCenterUnlocked",
|
|
50
|
+
"TychusResearchCenterLocked",
|
|
51
|
+
"SupplyDepotLowered",
|
|
52
|
+
"Egg",
|
|
53
|
+
"SiegeTankSieged",
|
|
54
|
+
"Larva",
|
|
55
|
+
"ToxicNestBurrowed",
|
|
56
|
+
|
|
57
|
+
#"BiomassPickup",
|
|
58
|
+
]
|
|
59
|
+
DEHAKA = {
|
|
60
|
+
"DehakaTrainEggRoach",
|
|
61
|
+
"DehakaTrainEggDrone",
|
|
62
|
+
"DehakaDrone",
|
|
63
|
+
"DehakaCreeperFlying",
|
|
64
|
+
}
|
|
65
|
+
TYCHUS_OUTLAWS = {
|
|
66
|
+
"TychusMedic",
|
|
67
|
+
"TychusSCV",
|
|
68
|
+
"TychusWarhoundAutoTurret",
|
|
69
|
+
"TychusResearchCenterUnlocked",
|
|
70
|
+
"TychusResearchCenterLocked",
|
|
71
|
+
"TychusHERC",
|
|
72
|
+
"TychusOdin",
|
|
73
|
+
"TychusCommandCenter",
|
|
74
|
+
"TychusResearchCenter"
|
|
75
|
+
"CoopCasterTychus"
|
|
76
|
+
"TychusCoop",
|
|
77
|
+
"TychusWarhound",
|
|
78
|
+
"TychusFirebat",
|
|
79
|
+
"TychusHERC"
|
|
80
|
+
"Tychus",
|
|
81
|
+
"Sirius",
|
|
82
|
+
"Nux",
|
|
83
|
+
"Sam",
|
|
84
|
+
"Blaze",
|
|
85
|
+
"Rattlesnake",
|
|
86
|
+
"Vega",
|
|
87
|
+
"Cannonball"
|
|
88
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from dataclasses import dataclass, field
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
@dataclass
|
|
5
|
+
class Unit:
|
|
6
|
+
unit_id: int
|
|
7
|
+
owner: int
|
|
8
|
+
|
|
9
|
+
current_type: str
|
|
10
|
+
|
|
11
|
+
# TODO: refact to is_commander_ability
|
|
12
|
+
commander_ability = False
|
|
13
|
+
|
|
14
|
+
is_army = False
|
|
15
|
+
is_building = False
|
|
16
|
+
is_worker = False
|
|
17
|
+
is_temporary = False
|
|
18
|
+
is_commander_unit = False
|
|
19
|
+
is_commander = False
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
birth_frame: int
|
|
23
|
+
death_frame: int | None = None
|
|
24
|
+
|
|
25
|
+
type_history: list = field(default_factory=list)
|