albibong 1.0.7__py3-none-any.whl → 1.1.1__py3-none-any.whl

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.
Files changed (43) hide show
  1. albibong/__init__.py +92 -8
  2. albibong/__main__.py +6 -0
  3. albibong/classes/character.py +7 -23
  4. albibong/classes/dungeon.py +53 -32
  5. albibong/classes/event_handler/__init__.py +17 -1
  6. albibong/classes/event_handler/handle_event_character_equipment_changed.py +2 -10
  7. albibong/classes/event_handler/handle_event_might_and_favor_received_event.py +18 -0
  8. albibong/classes/event_handler/handle_event_other_grabbed_loot.py +9 -0
  9. albibong/classes/event_handler/handle_event_party.py +6 -13
  10. albibong/classes/event_handler/handle_event_update_fame.py +9 -0
  11. albibong/classes/event_handler/handle_event_update_re_spec_points.py +9 -0
  12. albibong/classes/event_handler/handle_operation_change_cluster.py +17 -22
  13. albibong/classes/event_handler/handle_operation_farmable_harvest.py +17 -0
  14. albibong/classes/event_handler/handle_operation_join.py +14 -36
  15. albibong/classes/event_handler/world_data_utils.py +62 -30
  16. albibong/classes/item.py +19 -4
  17. albibong/classes/location.py +136 -5
  18. albibong/classes/utils.py +20 -0
  19. albibong/gui_dist/assets/index-B31tZ4Ku.css +1 -0
  20. albibong/gui_dist/assets/index-BkyL_QUY.js +168 -0
  21. albibong/gui_dist/favor.png +0 -0
  22. albibong/gui_dist/index.html +2 -2
  23. albibong/gui_dist/might.png +0 -0
  24. albibong/migrations/001_init.py +97 -0
  25. albibong/migrations/002_alter_dungeon_table.py +53 -0
  26. albibong/models/__init__.py +0 -0
  27. albibong/models/models.py +12 -0
  28. albibong/requirements.txt +2 -0
  29. albibong/resources/items_by_unique_name.json +55282 -0
  30. albibong/resources/maps.json +259 -259
  31. albibong/threads/http_server.py +4 -0
  32. albibong/threads/sniffer_thread.py +39 -2
  33. albibong/threads/websocket_server.py +80 -43
  34. {albibong-1.0.7.dist-info → albibong-1.1.1.dist-info}/METADATA +3 -1
  35. {albibong-1.0.7.dist-info → albibong-1.1.1.dist-info}/RECORD +39 -32
  36. albibong/gui_dist/assets/index-DZvgNqlG.css +0 -1
  37. albibong/gui_dist/assets/index-Dt6hyZiS.css +0 -1
  38. albibong/gui_dist/assets/index-E7pha23k.js +0 -161
  39. albibong/gui_dist/assets/index-WIuC9Mnh.js +0 -161
  40. /albibong/resources/{items.json → items_by_id.json} +0 -0
  41. {albibong-1.0.7.dist-info → albibong-1.1.1.dist-info}/WHEEL +0 -0
  42. {albibong-1.0.7.dist-info → albibong-1.1.1.dist-info}/entry_points.txt +0 -0
  43. {albibong-1.0.7.dist-info → albibong-1.1.1.dist-info}/licenses/LICENSE +0 -0
@@ -45,6 +45,7 @@ class HttpServerThread(threading.Thread):
45
45
  def run(self):
46
46
  # Create an object of the above class
47
47
  handler_object = HttpRequestHandler
48
+ handler_object.extensions_map.update({".js": "application/javascript"})
48
49
 
49
50
  self.http_server = socketserver.TCPServer(("", self.port), handler_object)
50
51
  self.http_server.allow_reuse_address = True
@@ -54,6 +55,9 @@ class HttpServerThread(threading.Thread):
54
55
  server_thread.daemon = True
55
56
  server_thread.start()
56
57
  logger.info(f"Thread {self.name} started at port {self.port}")
58
+ logger.info(
59
+ f"\n==\n\nYou can access the GUI using a browser using below url\n\nhttp://localhost:{self.port}/\n\n==\n\n"
60
+ )
57
61
 
58
62
  def stop(self):
59
63
  self.http_server.shutdown()
@@ -1,28 +1,65 @@
1
+ import os
1
2
  import threading
3
+ from time import sleep
2
4
 
3
- from scapy.all import AsyncSniffer
5
+ from scapy.all import AsyncSniffer, wrpcapng
4
6
 
5
7
  from albibong.classes.logger import Logger
8
+ from albibong.threads.websocket_server import send_event
9
+
10
+ home_dir = os.path.expanduser("~")
11
+ pcap_file = home_dir + "/Albibong/Debug/debug.pcapng"
6
12
 
7
13
  logger = Logger(__name__, stdout=True, log_to_file=False)
8
14
 
9
15
 
10
16
  class SnifferThread(threading.Thread):
11
- def __init__(self, name, out_queue, sentinel):
17
+ def __init__(self, name, out_queue, sentinel, is_debug=False):
12
18
  super().__init__()
13
19
  self.name = name
14
20
  self.out_queue = out_queue
15
21
  self.sentinel = sentinel
22
+ self.is_debug = is_debug
16
23
  self.sniffer = AsyncSniffer(filter="udp and port 5056", prn=self.push_packet)
24
+ self.packet_counter = 0
25
+ self.timer_exit = threading.Event()
26
+ self.all_packets = []
17
27
 
18
28
  def push_packet(self, packet):
19
29
  self.out_queue.put(packet)
30
+ self.all_packets.append(packet)
31
+ self.packet_counter += 1
20
32
 
21
33
  def run(self):
22
34
  logger.info(f"Thread {self.name} started")
23
35
  self.sniffer.start()
36
+ timer = threading.Thread(target=self.start_timer, args=[5], daemon=True)
37
+ timer.run()
24
38
 
25
39
  def stop(self):
26
40
  logger.info(f"Thread {self.name} stopped")
27
41
  self.sniffer.stop()
28
42
  self.out_queue.put(self.sentinel)
43
+ self.quit_timer()
44
+ if self.is_debug:
45
+ wrpcapng(pcap_file, self.all_packets)
46
+
47
+ def start_timer(self, seconds):
48
+ while not self.timer_exit.is_set():
49
+ self.timer_exit.wait(seconds)
50
+
51
+ if self.packet_counter > 0:
52
+ msg = {
53
+ "type": "health_check",
54
+ "payload": {"status": "passed", "message": "Passed"},
55
+ }
56
+ else:
57
+ msg = {
58
+ "type": "health_check",
59
+ "payload": {"status": "failed", "message": "No Packets Received"},
60
+ }
61
+ send_event(msg)
62
+ self.packet_counter = 0
63
+
64
+ def quit_timer(self):
65
+ self.timer_exit.set()
@@ -1,21 +1,18 @@
1
1
  import asyncio
2
- from datetime import timedelta
3
2
  import json
4
- import os
5
3
  import queue
6
4
  import threading
5
+ from datetime import datetime, timedelta
7
6
 
8
7
  import websockets
9
8
 
10
9
  from albibong.classes.dungeon import Dungeon
10
+ from albibong.classes.location import Island
11
11
  from albibong.classes.logger import Logger
12
12
 
13
13
  logger = Logger(__name__, stdout=True, log_to_file=False)
14
14
  logger_file = Logger(__name__)
15
15
 
16
- home_dir = os.path.expanduser("~")
17
- FILENAME = f"{home_dir}/Albibong/list_dungeon.json"
18
-
19
16
 
20
17
  class WebsocketServer(threading.Thread):
21
18
  def __init__(self, name, in_queue) -> None:
@@ -32,7 +29,6 @@ class WebsocketServer(threading.Thread):
32
29
  try:
33
30
  world_data = get_world_data()
34
31
  me = world_data.me
35
- # if me.id != None:
36
32
  event_init_world = {
37
33
  "type": "init_world",
38
34
  "payload": {
@@ -41,41 +37,42 @@ class WebsocketServer(threading.Thread):
41
37
  "fame": me.fame_gained,
42
38
  "re_spec": me.re_spec_gained,
43
39
  "silver": me.silver_gained,
40
+ "might": me.might_gained,
41
+ "favor": me.favor_gained,
44
42
  },
45
43
  "world": {
46
44
  "map": (
47
45
  world_data.current_map.name
48
46
  if world_data.current_map
49
- else "not initialized"
47
+ else "zone in to other map to initialize"
50
48
  ),
51
49
  "dungeon": (
52
- Dungeon.serialize(world_data.current_dungeon)
50
+ world_data.current_dungeon.name
53
51
  if world_data.current_dungeon
54
- else None
52
+ else "zone in to other map to initialize"
55
53
  ),
56
54
  "isDPSMeterRunning": world_data.is_dps_meter_running,
57
55
  },
58
56
  },
59
57
  }
60
- # logger.info(f"initializing character: {event}")
61
58
  await websocket.send(json.dumps(event_init_world))
62
- try:
63
- with open(FILENAME) as json_file:
64
- list_dungeon = json.load(json_file)
65
- event_init_dungeon_list = {
66
- "type": "update_dungeon",
67
- "payload": {"list_dungeon": list_dungeon},
68
- }
69
- except:
70
- event_init_dungeon_list = {
71
- "type": "update_dungeon",
72
- "payload": {"list_dungeon": []},
73
- }
59
+ event_init_dungeon_list = {
60
+ "type": "update_dungeon",
61
+ "payload": {"list_dungeon": Dungeon.get_all_dungeon()},
62
+ }
74
63
  await websocket.send(json.dumps(event_init_dungeon_list))
75
-
64
+ event_init_island_list = {
65
+ "type": "update_island",
66
+ "payload": {"list_island": Island.get_all_island()},
67
+ }
68
+ await websocket.send(json.dumps(event_init_island_list))
69
+ total_harvest_reply = {
70
+ "type": "update_total_harvest_by_date",
71
+ "payload": Island.get_total_harvest_by_date(),
72
+ }
73
+ await websocket.send(json.dumps(total_harvest_reply))
76
74
  async for message in websocket:
77
75
  event = json.loads(message)
78
- # print(event)
79
76
  if event["type"] == "update_is_dps_meter_running":
80
77
  world_data.is_dps_meter_running = event["payload"]["value"]
81
78
  reply = {
@@ -92,7 +89,7 @@ class WebsocketServer(threading.Thread):
92
89
  char.healing_dealt = 0
93
90
  char.total_combat_duration = timedelta(0, 0)
94
91
  reply = {
95
- "type": "update_dps",
92
+ "type": "update_damage_meter",
96
93
  "payload": {
97
94
  "party_members": world_data.serialize_party_members()
98
95
  },
@@ -102,6 +99,9 @@ class WebsocketServer(threading.Thread):
102
99
  world_data.me.fame_gained = 0
103
100
  world_data.me.re_spec_gained = 0
104
101
  world_data.me.silver_gained = 0
102
+ world_data.me.might_gained = 0
103
+ world_data.me.favor_gained = 0
104
+
105
105
  fame = {
106
106
  "type": "update_fame",
107
107
  "payload": {
@@ -123,33 +123,70 @@ class WebsocketServer(threading.Thread):
123
123
  "silver_gained": world_data.me.silver_gained,
124
124
  },
125
125
  }
126
+ might_and_favor = {
127
+ "type": "update_might_and_favor",
128
+ "payload": {
129
+ "username": world_data.me.username,
130
+ "favor_gained": world_data.me.favor_gained,
131
+ "might_gained": world_data.me.might_gained,
132
+ },
133
+ }
126
134
  await websocket.send(json.dumps(fame))
127
135
  await websocket.send(json.dumps(re_spec))
128
136
  await websocket.send(json.dumps(silver))
137
+ await websocket.send(json.dumps(might_and_favor))
138
+
129
139
  elif event["type"] == "refresh_dungeon_list":
130
- try:
131
- with open(FILENAME) as json_file:
132
- list_dungeon = json.load(json_file)
133
- reply = {
134
- "type": "update_dungeon",
135
- "payload": {"list_dungeon": list_dungeon},
136
- }
137
- except:
138
- reply = {
139
- "type": "update_dungeon",
140
- "payload": {"list_dungeon": []},
141
- }
140
+ reply = {
141
+ "type": "update_dungeon",
142
+ "payload": {"list_dungeon": Dungeon.get_all_dungeon()},
143
+ }
142
144
  await websocket.send(json.dumps(reply))
143
- elif event["type"] == "update_dungeon_data":
144
- updated_tier = event["payload"]["list_dungeon"]
145
- with open(FILENAME, "w") as json_file:
146
- json.dump(updated_tier, json_file)
147
-
145
+ elif event["type"] == "update_dungeon_tier":
146
+ id = event["payload"]["id"]
147
+ value = event["payload"]["value"]
148
+ dungeon: Dungeon = Dungeon.update(tier=value).where(
149
+ Dungeon.id == id
150
+ )
151
+ dungeon.execute()
152
+ reply = {
153
+ "type": "update_dungeon",
154
+ "payload": {"list_dungeon": Dungeon.get_all_dungeon()},
155
+ }
156
+ await websocket.send(json.dumps(reply))
157
+ elif event["type"] == "update_dungeon_name":
158
+ id = event["payload"]["id"]
159
+ value = event["payload"]["value"]
160
+ dungeon: Dungeon = Dungeon.update(name=value).where(
161
+ Dungeon.id == id
162
+ )
163
+ dungeon.execute()
148
164
  reply = {
149
165
  "type": "update_dungeon",
150
- "payload": {"list_dungeon": updated_tier},
166
+ "payload": {"list_dungeon": Dungeon.get_all_dungeon()},
151
167
  }
152
168
  await websocket.send(json.dumps(reply))
169
+ elif event["type"] == "refresh_island_list":
170
+ refresh_island_reply = {
171
+ "type": "update_island",
172
+ "payload": {"list_island": Island.get_all_island()},
173
+ }
174
+ total_harvest_reply = {
175
+ "type": "update_total_harvest_by_date",
176
+ "payload": Island.get_total_harvest_by_date(),
177
+ }
178
+ await websocket.send(json.dumps(refresh_island_reply))
179
+ await websocket.send(json.dumps(total_harvest_reply))
180
+ elif event["type"] == "update_total_harvested_date_range":
181
+ date = event["payload"]["date"]
182
+ format = "%Y-%m-%d"
183
+ total_harvest_reply = {
184
+ "type": "update_total_harvest_by_date",
185
+ "payload": Island.get_total_harvest_by_date(
186
+ date=datetime.strptime(date, format)
187
+ ),
188
+ }
189
+ await websocket.send(json.dumps(total_harvest_reply))
153
190
 
154
191
  event = {}
155
192
  send_event(event)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: albibong
3
- Version: 1.0.7
3
+ Version: 1.1.1
4
4
  Summary: A cross-platform Albion Online damage, fame, and dungeon tracker
5
5
  Project-URL: Homepage, https://github.com/imjangkar/albibong
6
6
  Project-URL: Issues, https://github.com/imjangkar/albibong/issues
@@ -10,6 +10,8 @@ Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Operating System :: OS Independent
11
11
  Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.10
13
+ Requires-Dist: peewee-migrate==1.13.0
14
+ Requires-Dist: peewee==3.17.6
13
15
  Requires-Dist: pywebview==5.1
14
16
  Requires-Dist: scapy==2.5.0
15
17
  Requires-Dist: websockets==12.0
@@ -1,41 +1,47 @@
1
- albibong/__init__.py,sha256=zNZ9EpEtHp036ajiULW7CrxdHffh4TrjdCCm_rXi1bE,2074
2
- albibong/__main__.py,sha256=c_p0e0PEZwwTNFl0f0-bzcNKwfrV94ZKpq4Od_1OfOQ,149
3
- albibong/requirements.txt,sha256=4pncSaL-zczX75QkIl3Dcl1GuwJ0JVqbiU-URFI7f-g,45
1
+ albibong/__init__.py,sha256=TFp1uv5XC6ZwGJHqbDdgpIk2Et_RiTUX3zZ4fA_h_yM,5139
2
+ albibong/__main__.py,sha256=evemoPcehqpwrr4uZQ_4x4p8kq04OcSSNjNXWEW8a7M,290
3
+ albibong/requirements.txt,sha256=HzAZc3BiHT5i1UIYa6yiUhSo8FoJvyAVMht103J8GHA,82
4
4
  albibong/assets/boom_small.mp3,sha256=XEeYaifS3kBu7jxJo4j8cwGjher8Ml0CpMvu3YNk4y0,16722
5
5
  albibong/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- albibong/classes/character.py,sha256=epYuMsu_zREPJkICDHyZEsqXhtON9qOufc89bXDoVvc,3486
6
+ albibong/classes/character.py,sha256=EsG6TEig5DnF4GzCp63p4KKvH0ABYFQb-W7FKllDaus,2961
7
7
  albibong/classes/coords.py,sha256=wjCO7YnKXzH9IsJ9YFObbpMYfVFT5o38RndWjQhjVEg,189
8
- albibong/classes/dungeon.py,sha256=DWvBWi-iy_94ZoeiOivvj2CtcQ23PJdt2sZARima6NI,1700
9
- albibong/classes/item.py,sha256=q5FJYEwS-xrhgE__WCQn8uRAcC8f-pQrNS8hM8cBWbs,1096
10
- albibong/classes/location.py,sha256=Ll9Hthm2M-liWy_f6YF-usPOOPJTjI2S6TGjLktjqO4,508
8
+ albibong/classes/dungeon.py,sha256=Nyc5hXFRRJqJeFu-4TLZktyNHTV7zpVmmuQdZowCGoI,2543
9
+ albibong/classes/item.py,sha256=tjAqXAexrqjrFaRAMPQfccmsMnI0FGafoEurJq_iAdc,1612
10
+ albibong/classes/location.py,sha256=VrzHuDkWDDJgNrNyuHDOcb_sg3P44j-lQStegP8Rjqo,4321
11
11
  albibong/classes/logger.py,sha256=5DQoUqrvA2wf28XdRm2xwC4RBhIpP4d70PqRohRKNwM,4442
12
12
  albibong/classes/packet_handler.py,sha256=1DpAZf5sMWO06qnjP62zxn3e9mU50_c5o1y6EUnxW68,1792
13
- albibong/classes/utils.py,sha256=07fb06ZHNNtpjjTeGnCFOkGf7A4OWiithS1OEfjb9H0,146
13
+ albibong/classes/utils.py,sha256=mZ4xSASSVGAIJcj8LfIWOMlMvSHyjqI7o8Pmd4oYoPE,987
14
14
  albibong/classes/world_data.py,sha256=mUhgXNzS0GjNGSxIDzhw55KDB8rKt661zeAotE4WBds,3466
15
- albibong/classes/event_handler/__init__.py,sha256=HI7NA_P3S_x9waI0I_kO3br7_JYLSd-jXWTa5eXzBrc,4474
16
- albibong/classes/event_handler/handle_event_character_equipment_changed.py,sha256=B31rBaLtWP0gzZtLJWlg7To5Qn3pZD9tx6V6biZxP9E,965
15
+ albibong/classes/event_handler/__init__.py,sha256=7QAS91XhkAjvIKI4dK4CiPsNBqIPH9PY6kXSBRYAGS0,5204
16
+ albibong/classes/event_handler/handle_event_character_equipment_changed.py,sha256=QT6SfYfRLUipWWgyd1uOYXPnrA4jR-T9mkLzKbqCdwE,783
17
17
  albibong/classes/event_handler/handle_event_health.py,sha256=0RPvv0C-nklmKsp3UflN9qhpAkcLtd5bmmoN3cf-WM4,1078
18
18
  albibong/classes/event_handler/handle_event_in_combat_state_update.py,sha256=sWDu5RdupNAT5ESCY1RJ7rMAKq1b4HwYM272UFHI9h8,517
19
+ albibong/classes/event_handler/handle_event_might_and_favor_received_event.py,sha256=Q3L2Zn5mPXic_8_jAv_9z3y1uOZaADNcBkxKu2NFrJY,628
19
20
  albibong/classes/event_handler/handle_event_new_character.py,sha256=t9bdwe1-k2TVWAQ_HuBEmx2HO4-lgPoZJR0qKGcS6Vw,1507
20
- albibong/classes/event_handler/handle_event_other_grabbed_loot.py,sha256=SQA9oHwxm4jxpDOIIN6R_KFK-U5kkQhNFSqmAO0hj50,529
21
- albibong/classes/event_handler/handle_event_party.py,sha256=7WIld9YgbLNYoQ4y7LR0rFqJ9CTgBgWwHkAGY4xn4jA,1216
22
- albibong/classes/event_handler/handle_event_update_fame.py,sha256=fnreRc3NWISKdHePeQfSDiNsNpd_TgdyQOCjdFbVaSg,253
23
- albibong/classes/event_handler/handle_event_update_re_spec_points.py,sha256=tUa8iMiOsRZX2FIZ5ySqEgO4gNZvtAqDBsqUo91BgWg,320
24
- albibong/classes/event_handler/handle_operation_change_cluster.py,sha256=9zIyKTHY_rmuDZ-NTV7P8YJ5-NOuaGEJu8kMEvZ5OxI,1600
25
- albibong/classes/event_handler/handle_operation_join.py,sha256=_0n9cLUZ3xXKd5yMnuq944T684BUDKo2JtOzwVLJiv8,2883
21
+ albibong/classes/event_handler/handle_event_other_grabbed_loot.py,sha256=vm9gylmpg-I34U_PNwAjP4fyYSQ0RV6521oWSWjzM-M,813
22
+ albibong/classes/event_handler/handle_event_party.py,sha256=LNdgsi4hxzESD7gPut88RBTnV1JbEbLIT_amAy9BvXM,1094
23
+ albibong/classes/event_handler/handle_event_update_fame.py,sha256=8FQT75mdU3S4uOGfvtqDXfxRlFSc-N0KwefnhBbc_-0,517
24
+ albibong/classes/event_handler/handle_event_update_re_spec_points.py,sha256=zIdlkoBvJ_IqKMsmDlVFPXmnmE1IPPpWeEpi-M3t_Ds,593
25
+ albibong/classes/event_handler/handle_operation_change_cluster.py,sha256=Pc9E27JL1oJwc3iKgTsFlGWUz6iRVHtySN59jV8gLo0,1644
26
+ albibong/classes/event_handler/handle_operation_farmable_harvest.py,sha256=PH0UONCmjdoTdlcYa70x2oKC5j7PXmrrsRS8pl9clZM,680
27
+ albibong/classes/event_handler/handle_operation_join.py,sha256=RxN5X-Dv4jfIFn3e0zqrJOufgDJlMPqYIM0wlJadcGc,2290
26
28
  albibong/classes/event_handler/handle_operation_move.py,sha256=vg_wTPQ4nA4-xyw9axtFmKkVCUoCkUq3RV74wFLbc_4,200
27
- albibong/classes/event_handler/world_data_utils.py,sha256=FX-OUPtfY0mLPKF0iuCTofzZiBAjuuBgXAVitGpd9_4,3772
29
+ albibong/classes/event_handler/world_data_utils.py,sha256=9BHsgzA2EBnBC26SJf0T2fiDlwj1MpYTb2EFLcmzmlU,5109
28
30
  albibong/gui_dist/Albibong.png,sha256=vFWgJSosXfnSCy_U7Uu9hCYDCHiYtcmR1lpPA0XQRhY,38093
29
31
  albibong/gui_dist/No Equipment.png,sha256=HdVR3WJ0ktF5v606QyURdHscjOgCqiXJnqI8k8IlSgE,131
30
32
  albibong/gui_dist/fame.png,sha256=X2tUCmgR5TkGLUVvFB2lInH_RrXkC1pSLqpw_ply-rE,6015
31
- albibong/gui_dist/index.html,sha256=QQOD8vIvhEJL4pOGy8H5M9VkhQpF1jtJxR2wsb4dYu4,477
33
+ albibong/gui_dist/favor.png,sha256=0e2z8GZ8_1gWw14UFFVo3QG9vKUmaGFqVmoKyJRU9mU,1859
34
+ albibong/gui_dist/index.html,sha256=TdC4ngLxJ8HbhTKQ__ujkZfaErdZhcs1GToWpBsEjEs,477
35
+ albibong/gui_dist/might.png,sha256=J7mi_99lkCJ253ctTixISeaTuQWbGSLbIQ9BlBPQaEA,3412
32
36
  albibong/gui_dist/re_spec.png,sha256=1KTzGT1u1wjmNk9svS5ZOV7zCDIEmiFy0USh6A_vhPA,6230
33
37
  albibong/gui_dist/silver.png,sha256=tqXvZdf9zr0YoOQZoR2vG8NRffl4xvz0LY5XgwIrYD8,11533
34
38
  albibong/gui_dist/vite.svg,sha256=SnSK_UQ5GLsWWRyDTEAdrjPoeGGrXbrQgRw6O0qSFPs,1497
35
- albibong/gui_dist/assets/index-DZvgNqlG.css,sha256=LHq3c3k3VjlgOWEVM-l0THNTG_C9HojSlmQRh35I-YU,2324
36
- albibong/gui_dist/assets/index-Dt6hyZiS.css,sha256=zWYKo3Bar5Ab2MQbGaC6QE7RuVV49pdCBLUmXXHLXsU,2379
37
- albibong/gui_dist/assets/index-E7pha23k.js,sha256=SzsQQYnYjJLZAGzgRmopPzIJ0XER2oCQ79CO5nk-wgo,438407
38
- albibong/gui_dist/assets/index-WIuC9Mnh.js,sha256=9p5kNfUrvtvwgp2nhpCbvbmVrC-vOmgz2Gisj1js6To,438767
39
+ albibong/gui_dist/assets/index-B31tZ4Ku.css,sha256=L5X0kNcjz8FOEUdcZ3kSGpHOgTcewoXHwqY1FsWMrwI,3265
40
+ albibong/gui_dist/assets/index-BkyL_QUY.js,sha256=oPc3TTDVB7uh24OZLPLx9CsYKPnKEl_ThbXVqZSTHFU,655519
41
+ albibong/migrations/001_init.py,sha256=RYp53geL5KHhT9ClwhkgAEsn_RWJ6mNdcLp3h8W4KkQ,3210
42
+ albibong/migrations/002_alter_dungeon_table.py,sha256=Ke84RajqSOCYoAkBqylHfa18Yj4r5Kl-fK5e8x4bjm0,2057
43
+ albibong/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
+ albibong/models/models.py,sha256=V9uv99x0GHwZcD8cNFQVUt2klTuao7xK5ywoT_JT4vs,210
39
45
  albibong/photon_packet_parser/__init__.py,sha256=Y_XwBGLl0ufhLr7d6phhfA6qL1RrG6mJ3qAC5lNKM_c,301
40
46
  albibong/photon_packet_parser/command_type.py,sha256=-LSdpsQgViDygDJsjaoCUuLbBkK4-pmQuM8ESHG1BNk,137
41
47
  albibong/photon_packet_parser/crc_calculator.py,sha256=rnhmknjiZBaSXBwS2cJacwLlnXaT74u9yEmvLknIh2o,402
@@ -51,16 +57,17 @@ albibong/photon_packet_parser/segmented_packet.py,sha256=pftqyVO0D7ZX8m1ZL2w2Xt_
51
57
  albibong/resources/EventCode.py,sha256=WSKFXuaABz3FBugHmlTSHAvMaNfa4JaRQo5xqdcn3aI,19349
52
58
  albibong/resources/OperationCode.py,sha256=9l5xdNhVCs4i-zaAPYC9BXPDBavX1D7VdpESmFQtKyE,16509
53
59
  albibong/resources/event_code.json,sha256=vIHnrH1T0qaGM4t4qYyoknAYEjiSO543RNu4zhYWOGs,20483
54
- albibong/resources/items.json,sha256=UoU4OSbB09DyxOpia2Ye1Hm4HR_4QlYqvhL_DKn6eQ8,1400109
55
- albibong/resources/maps.json,sha256=gGTILKQjanARBRgDi4QTDqs6q0zUstVWEiujqYMJCws,130469
60
+ albibong/resources/items_by_id.json,sha256=UoU4OSbB09DyxOpia2Ye1Hm4HR_4QlYqvhL_DKn6eQ8,1400109
61
+ albibong/resources/items_by_unique_name.json,sha256=VLixfNoc6RbMjfdBna2IdtG2PAwBbaYzsHSC8b96qp8,1635865
62
+ albibong/resources/maps.json,sha256=jEXIhIlPYO8fXk9xHOVpFKxw4_KUb72TBICvJy4-gBE,129753
56
63
  albibong/resources/operation_code.json,sha256=zV9kgHtZ_fs1Pm7ntQxNbjfZbdiHRdUIhEkKAIJPLhU,17457
57
64
  albibong/threads/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
- albibong/threads/http_server.py,sha256=Tqy7P8pXvIQywmFdiFy4TNKxR4LadJP0t4OsQE3oHDI,1940
65
+ albibong/threads/http_server.py,sha256=qg87iVD7AaKg32eJ5qeqL3RUo-B7sVywC4_qTxEhH2U,2172
59
66
  albibong/threads/packet_handler_thread.py,sha256=bqgYQUeCaTtnWgx4bGoqw-cWQcXRJohIse2hwCbVLmo,949
60
- albibong/threads/sniffer_thread.py,sha256=mvz4YeEnZwNbbIUAKicue5QX0vt_KoJ6p81UuwkRQe0,767
61
- albibong/threads/websocket_server.py,sha256=MbcNuHy6IGuMqXhYztR7Q6pKYqv8fRl7K4nQUk90b3w,7574
62
- albibong-1.0.7.dist-info/METADATA,sha256=AjT7JbraMnnVrZjmaGxxxSRQIA60SZRsVvEkVmBB3ls,581
63
- albibong-1.0.7.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
64
- albibong-1.0.7.dist-info/entry_points.txt,sha256=pLvUeo6eUwvsDQXsxdP9mRdSPufUlrz_9mFxsov0nm0,43
65
- albibong-1.0.7.dist-info/licenses/LICENSE,sha256=7EI8xVBu6h_7_JlVw-yPhhOZlpY9hP8wal7kHtqKT_E,1074
66
- albibong-1.0.7.dist-info/RECORD,,
67
+ albibong/threads/sniffer_thread.py,sha256=m7y0dlv8SPxGganodjxMrGKN40Ma2Dg1pFHAiRzgFWo,2024
68
+ albibong/threads/websocket_server.py,sha256=6Mi7ylFIC3FE5zSNXUNrOuPvdwMNhLdPuiMu-BCptFY,9709
69
+ albibong-1.1.1.dist-info/METADATA,sha256=LsOaOf1POlqvr165vblsKL56iGcMhznzw-wD5r8sqME,649
70
+ albibong-1.1.1.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
71
+ albibong-1.1.1.dist-info/entry_points.txt,sha256=pLvUeo6eUwvsDQXsxdP9mRdSPufUlrz_9mFxsov0nm0,43
72
+ albibong-1.1.1.dist-info/licenses/LICENSE,sha256=7EI8xVBu6h_7_JlVw-yPhhOZlpY9hP8wal7kHtqKT_E,1074
73
+ albibong-1.1.1.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- *{box-sizing:border-box}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}p{margin:0}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}#root,body{margin:auto;display:flex;flex-direction:column;justify-content:start;align-items:center;min-width:320px;min-height:100vh;color:#fff;width:100%}h1{font-size:2em;line-height:1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}._dmgBar_zdqdf_1{background:linear-gradient(135deg,#ff6486,#6486ff);height:6px;border-radius:8px;margin-bottom:2px}._healBar_zdqdf_8{background:linear-gradient(135deg,#64ffde,#64ff90);height:2px;border-radius:4px}._dpsContainer_zdqdf_14{display:flex;flex-direction:column;justify-content:flex-start;width:100%;gap:4px;box-sizing:content-box;padding:16px}._dpsRow_zdqdf_24{display:flex;flex-direction:row;justify-content:space-between;align-items:center}._dpsNumber_zdqdf_31{width:128px;text-align:right}._hidden_zdqdf_36{display:none}._player_zdqdf_40{flex-grow:1}._checkboxColor_zdqdf_44{accent-color:#64d3ff}._dungeonContainer_3nxyx_1{border-radius:1rem;width:100%;padding:2rem;display:flex;flex-direction:column;gap:1rem}._tag_3nxyx_12{background-color:#64d3ff;padding:0 1rem;border-radius:1rem;color:#0f3c4e;font-weight:700}._stickToTop_3nxyx_20{z-index:10;position:sticky;top:64px;left:0;width:100%;padding:24px 0}._container_pkz1i_1{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%;gap:1.5rem}._snackbar_pkz1i_10{position:fixed;right:64px}._stats_pkz1i_15{display:flex;flex-direction:row;align-items:center;gap:.5rem}._options_pkz1i_22{display:flex;flex-direction:row;align-items:center;gap:2rem}._row_pkz1i_29{display:flex;width:100%;justify-content:space-between}._hidden_pkz1i_35{display:none}
@@ -1 +0,0 @@
1
- *{box-sizing:border-box}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}p{margin:0}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}#root,body{margin:auto;display:flex;flex-direction:column;justify-content:start;align-items:center;min-width:320px;min-height:100vh;color:#fff;width:100%}h1{font-size:2em;line-height:1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}._dmgBar_uvx94_1{background:linear-gradient(135deg,#ff6486,#6486ff);height:6px;border-radius:8px;margin-bottom:2px}._healBar_uvx94_8{background:linear-gradient(135deg,#64ffde,#64ff90);height:2px;border-radius:4px}._dpsContainer_uvx94_14{display:flex;flex-direction:column;justify-content:flex-start;width:100%;gap:4px;box-sizing:content-box;padding:16px}._dpsRow_uvx94_24{display:flex;flex-direction:row;justify-content:space-between;align-items:center}._dpsNumber_uvx94_31{width:128px;text-align:right}._dpsButton_uvx94_36{display:flex;flex-grow:1;gap:1rem}._hidden_uvx94_42{display:none}._player_uvx94_46{flex-grow:1}._checkboxColor_uvx94_50{accent-color:#64d3ff}._dungeonContainer_3nxyx_1{border-radius:1rem;width:100%;padding:2rem;display:flex;flex-direction:column;gap:1rem}._tag_3nxyx_12{background-color:#64d3ff;padding:0 1rem;border-radius:1rem;color:#0f3c4e;font-weight:700}._stickToTop_3nxyx_20{z-index:10;position:sticky;top:64px;left:0;width:100%;padding:24px 0}._container_pkz1i_1{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%;gap:1.5rem}._snackbar_pkz1i_10{position:fixed;right:64px}._stats_pkz1i_15{display:flex;flex-direction:row;align-items:center;gap:.5rem}._options_pkz1i_22{display:flex;flex-direction:row;align-items:center;gap:2rem}._row_pkz1i_29{display:flex;width:100%;justify-content:space-between}._hidden_pkz1i_35{display:none}