albibong 1.1.0__py3-none-any.whl → 1.1.2__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 (35) hide show
  1. albibong/__init__.py +70 -44
  2. albibong/__main__.py +6 -0
  3. albibong/classes/character.py +7 -23
  4. albibong/classes/dungeon.py +18 -4
  5. albibong/classes/event_handler/__init__.py +11 -5
  6. albibong/classes/event_handler/handle_event_might_and_favor_received_event.py +18 -0
  7. albibong/classes/event_handler/handle_event_new_character.py +2 -3
  8. albibong/classes/event_handler/handle_event_other_grabbed_loot.py +9 -0
  9. albibong/classes/event_handler/handle_event_update_fame.py +9 -0
  10. albibong/classes/event_handler/handle_event_update_re_spec_points.py +9 -0
  11. albibong/classes/event_handler/handle_operation_farmable_harvest.py +1 -1
  12. albibong/classes/event_handler/handle_operation_join.py +12 -11
  13. albibong/classes/event_handler/world_data_utils.py +0 -11
  14. albibong/classes/utils.py +20 -0
  15. albibong/gui_dist/assets/index-B31tZ4Ku.css +1 -0
  16. albibong/gui_dist/assets/index-BkyL_QUY.js +168 -0
  17. albibong/gui_dist/favor.png +0 -0
  18. albibong/gui_dist/index.html +2 -2
  19. albibong/gui_dist/might.png +0 -0
  20. albibong/migrations/001_init.py +97 -0
  21. albibong/migrations/002_alter_dungeon_table.py +53 -0
  22. albibong/models/models.py +2 -2
  23. albibong/requirements.txt +2 -1
  24. albibong/resources/EventCode.py +2 -0
  25. albibong/resources/event_code.json +2 -1
  26. albibong/threads/http_server.py +4 -0
  27. albibong/threads/sniffer_thread.py +39 -2
  28. albibong/threads/websocket_server.py +17 -3
  29. {albibong-1.1.0.dist-info → albibong-1.1.2.dist-info}/METADATA +2 -1
  30. {albibong-1.1.0.dist-info → albibong-1.1.2.dist-info}/RECORD +33 -28
  31. albibong/gui_dist/assets/index-C4r00CBk.js +0 -168
  32. albibong/gui_dist/assets/index-DKbORdbN.css +0 -1
  33. {albibong-1.1.0.dist-info → albibong-1.1.2.dist-info}/WHEEL +0 -0
  34. {albibong-1.1.0.dist-info → albibong-1.1.2.dist-info}/entry_points.txt +0 -0
  35. {albibong-1.1.0.dist-info → albibong-1.1.2.dist-info}/licenses/LICENSE +0 -0
Binary file
@@ -5,8 +5,8 @@
5
5
  <link rel="icon" type="image/png" href="/Albibong.png" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>Albibong - Albion Data Tracker</title>
8
- <script type="module" crossorigin src="/assets/index-C4r00CBk.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-DKbORdbN.css">
8
+ <script type="module" crossorigin src="/assets/index-BkyL_QUY.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-B31tZ4Ku.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>
Binary file
@@ -0,0 +1,97 @@
1
+ """Peewee migrations -- 001_init.py.
2
+
3
+ Some examples (model - class or model name)::
4
+
5
+ > Model = migrator.orm['table_name'] # Return model in current state by name
6
+ > Model = migrator.ModelClass # Return model in current state by name
7
+
8
+ > migrator.sql(sql) # Run custom SQL
9
+ > migrator.run(func, *args, **kwargs) # Run python function with the given args
10
+ > migrator.create_model(Model) # Create a model (could be used as decorator)
11
+ > migrator.remove_model(model, cascade=True) # Remove a model
12
+ > migrator.add_fields(model, **fields) # Add fields to a model
13
+ > migrator.change_fields(model, **fields) # Change fields
14
+ > migrator.remove_fields(model, *field_names, cascade=True)
15
+ > migrator.rename_field(model, old_field_name, new_field_name)
16
+ > migrator.rename_table(model, new_table_name)
17
+ > migrator.add_index(model, *col_names, unique=False)
18
+ > migrator.add_not_null(model, *field_names)
19
+ > migrator.add_default(model, field_name, default)
20
+ > migrator.add_constraint(model, name, sql)
21
+ > migrator.drop_index(model, *col_names)
22
+ > migrator.drop_not_null(model, *field_names)
23
+ > migrator.drop_constraints(model, *constraints)
24
+
25
+ """
26
+
27
+ from contextlib import suppress
28
+
29
+ import peewee as pw
30
+ from peewee_migrate import Migrator
31
+
32
+ with suppress(ImportError):
33
+ import playhouse.postgres_ext as pw_pext
34
+
35
+
36
+ def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
37
+ """Write your migrations here."""
38
+
39
+ print("001_init")
40
+
41
+ @migrator.create_model
42
+ class BaseModel(pw.Model):
43
+ id = pw.AutoField()
44
+
45
+ class Meta:
46
+ table_name = "basemodel"
47
+
48
+ @migrator.create_model
49
+ class Dungeon(pw.Model):
50
+ id = pw.UUIDField(unique=True)
51
+ type = pw.CharField(max_length=255)
52
+ name = pw.CharField(max_length=255)
53
+ tier = pw.IntegerField(default=0)
54
+ fame = pw.FloatField(default=0.0)
55
+ silver = pw.FloatField(default=0.0)
56
+ re_spec = pw.FloatField(default=0.0)
57
+ start_time = pw.DateTimeField()
58
+ end_time = pw.DateTimeField(null=True)
59
+ meter = pw.TextField()
60
+
61
+ class Meta:
62
+ table_name = "dungeon"
63
+
64
+ @migrator.create_model
65
+ class Island(pw.Model):
66
+ uuid = pw.UUIDField(unique=True)
67
+ id = pw.CharField(max_length=255)
68
+ name = pw.CharField(max_length=255)
69
+ type = pw.CharField(max_length=255)
70
+ start_time = pw.DateTimeField()
71
+ crops = pw.TextField()
72
+ animals = pw.TextField()
73
+
74
+ class Meta:
75
+ table_name = "island"
76
+
77
+ @migrator.create_model
78
+ class Location(pw.Model):
79
+ uuid = pw.UUIDField(unique=True)
80
+ id = pw.CharField(max_length=255)
81
+ name = pw.CharField(max_length=255)
82
+ type = pw.CharField(max_length=255)
83
+
84
+ class Meta:
85
+ table_name = "location"
86
+
87
+
88
+ def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
89
+ """Write your rollback migrations here."""
90
+
91
+ migrator.remove_model("location")
92
+
93
+ migrator.remove_model("island")
94
+
95
+ migrator.remove_model("dungeon")
96
+
97
+ migrator.remove_model("basemodel")
@@ -0,0 +1,53 @@
1
+ """Peewee migrations -- 002_alter_dungeon_table.py.
2
+
3
+ Some examples (model - class or model name)::
4
+
5
+ > Model = migrator.orm['table_name'] # Return model in current state by name
6
+ > Model = migrator.ModelClass # Return model in current state by name
7
+
8
+ > migrator.sql(sql) # Run custom SQL
9
+ > migrator.run(func, *args, **kwargs) # Run python function with the given args
10
+ > migrator.create_model(Model) # Create a model (could be used as decorator)
11
+ > migrator.remove_model(model, cascade=True) # Remove a model
12
+ > migrator.add_fields(model, **fields) # Add fields to a model
13
+ > migrator.change_fields(model, **fields) # Change fields
14
+ > migrator.remove_fields(model, *field_names, cascade=True)
15
+ > migrator.rename_field(model, old_field_name, new_field_name)
16
+ > migrator.rename_table(model, new_table_name)
17
+ > migrator.add_index(model, *col_names, unique=False)
18
+ > migrator.add_not_null(model, *field_names)
19
+ > migrator.add_default(model, field_name, default)
20
+ > migrator.add_constraint(model, name, sql)
21
+ > migrator.drop_index(model, *col_names)
22
+ > migrator.drop_not_null(model, *field_names)
23
+ > migrator.drop_constraints(model, *constraints)
24
+
25
+ """
26
+
27
+ from contextlib import suppress
28
+
29
+ import peewee as pw
30
+ from peewee_migrate import Migrator
31
+
32
+ with suppress(ImportError):
33
+ import playhouse.postgres_ext as pw_pext
34
+
35
+
36
+ def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
37
+ """Write your migrations here."""
38
+
39
+ print("002_alter_dungeon_table")
40
+
41
+ migrator.add_fields(
42
+ "dungeon", favor=pw.FloatField(default=0.0), might=pw.FloatField(default=0.0)
43
+ )
44
+
45
+ migrator.change_fields("dungeon", tier=pw.FloatField(default=0.0))
46
+
47
+
48
+ def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
49
+ """Write your rollback migrations here."""
50
+
51
+ migrator.remove_fields("dungeon", "favor", "might")
52
+
53
+ migrator.change_fields("dungeon", tier=pw.IntegerField(default=0))
albibong/models/models.py CHANGED
@@ -3,8 +3,8 @@ import os
3
3
  from peewee import *
4
4
 
5
5
  home_dir = os.path.expanduser("~")
6
- db_dir = f"{home_dir}/Albibong/Albibong.db"
7
- db = SqliteDatabase(db_dir)
6
+ SQLITE_DB = f"{home_dir}/Albibong/Albibong.db"
7
+ db = SqliteDatabase(SQLITE_DB)
8
8
 
9
9
 
10
10
  class BaseModel(Model):
albibong/requirements.txt CHANGED
@@ -1,4 +1,5 @@
1
1
  scapy==2.5.0
2
2
  websockets==12.0
3
3
  pywebview==5.1
4
- peewee==3.17.6
4
+ peewee==3.17.6
5
+ peewee-migrate==1.13.0
@@ -2,6 +2,7 @@ from enum import Enum
2
2
 
3
3
 
4
4
  class EventCode(Enum):
5
+
5
6
  LEAVE = 1
6
7
  JOIN_FINISHED = 2
7
8
  MOVE = 3
@@ -591,3 +592,4 @@ class EventCode(Enum):
591
592
  BOT_COMMAND = 587
592
593
  JOURNAL_ACHIEVEMENT_PROGRESS_UPDATE = 588
593
594
  JOURNAL_CLAIMABLE_REWARD_UPDATE = 589
595
+ KEY_SYNC = 590
@@ -587,5 +587,6 @@
587
587
  "586": "FORTIFICATION_BUILDING_WILL_DOWNGRADE",
588
588
  "587": "BOT_COMMAND",
589
589
  "588": "JOURNAL_ACHIEVEMENT_PROGRESS_UPDATE",
590
- "589": "JOURNAL_CLAIMABLE_REWARD_UPDATE"
590
+ "589": "JOURNAL_CLAIMABLE_REWARD_UPDATE",
591
+ "590": "KEY_SYNC"
591
592
  }
@@ -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,6 +1,5 @@
1
1
  import asyncio
2
2
  import json
3
- import os
4
3
  import queue
5
4
  import threading
6
5
  from datetime import datetime, timedelta
@@ -38,17 +37,19 @@ class WebsocketServer(threading.Thread):
38
37
  "fame": me.fame_gained,
39
38
  "re_spec": me.re_spec_gained,
40
39
  "silver": me.silver_gained,
40
+ "might": me.might_gained,
41
+ "favor": me.favor_gained,
41
42
  },
42
43
  "world": {
43
44
  "map": (
44
45
  world_data.current_map.name
45
46
  if world_data.current_map
46
- else "not initialized"
47
+ else "zone in to other map to initialize"
47
48
  ),
48
49
  "dungeon": (
49
50
  world_data.current_dungeon.name
50
51
  if world_data.current_dungeon
51
- else "not initialized"
52
+ else "zone in to other map to initialize"
52
53
  ),
53
54
  "isDPSMeterRunning": world_data.is_dps_meter_running,
54
55
  },
@@ -98,6 +99,9 @@ class WebsocketServer(threading.Thread):
98
99
  world_data.me.fame_gained = 0
99
100
  world_data.me.re_spec_gained = 0
100
101
  world_data.me.silver_gained = 0
102
+ world_data.me.might_gained = 0
103
+ world_data.me.favor_gained = 0
104
+
101
105
  fame = {
102
106
  "type": "update_fame",
103
107
  "payload": {
@@ -119,9 +123,19 @@ class WebsocketServer(threading.Thread):
119
123
  "silver_gained": world_data.me.silver_gained,
120
124
  },
121
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
+ }
122
134
  await websocket.send(json.dumps(fame))
123
135
  await websocket.send(json.dumps(re_spec))
124
136
  await websocket.send(json.dumps(silver))
137
+ await websocket.send(json.dumps(might_and_favor))
138
+
125
139
  elif event["type"] == "refresh_dungeon_list":
126
140
  reply = {
127
141
  "type": "update_dungeon",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: albibong
3
- Version: 1.1.0
3
+ Version: 1.1.2
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,7 @@ 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
13
14
  Requires-Dist: peewee==3.17.6
14
15
  Requires-Dist: pywebview==5.1
15
16
  Requires-Dist: scapy==2.5.0
@@ -1,42 +1,47 @@
1
- albibong/__init__.py,sha256=c72O9jkaUoT8THK0n5AesWiceNynfjy8_1DHgGeRdxk,4341
2
- albibong/__main__.py,sha256=c_p0e0PEZwwTNFl0f0-bzcNKwfrV94ZKpq4Od_1OfOQ,149
3
- albibong/requirements.txt,sha256=APRaJ65RM4p9TciHYCpaXvFyKhOHubAuyif_p5fyTQg,59
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=AT8sEqGCRoVcBNYvMVvfVFVW77OYtp1MahFFZvMmu3U,1900
8
+ albibong/classes/dungeon.py,sha256=Nyc5hXFRRJqJeFu-4TLZktyNHTV7zpVmmuQdZowCGoI,2543
9
9
  albibong/classes/item.py,sha256=tjAqXAexrqjrFaRAMPQfccmsMnI0FGafoEurJq_iAdc,1612
10
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=4EyPwvLeeua5lySV9WkYfH_iciOpnuq9_Bo_L11JRfI,4919
15
+ albibong/classes/event_handler/__init__.py,sha256=ctQQtUDqLbAZE02fzIhkMdd1LwLbXRLQcATbxlDrVUs,5186
16
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_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
19
+ albibong/classes/event_handler/handle_event_might_and_favor_received_event.py,sha256=Q3L2Zn5mPXic_8_jAv_9z3y1uOZaADNcBkxKu2NFrJY,628
20
+ albibong/classes/event_handler/handle_event_new_character.py,sha256=-gsZkmeBKuCkvh4b0u9U7JKH3_P2nddOaSK6tc6v4UU,1506
21
+ albibong/classes/event_handler/handle_event_other_grabbed_loot.py,sha256=vm9gylmpg-I34U_PNwAjP4fyYSQ0RV6521oWSWjzM-M,813
21
22
  albibong/classes/event_handler/handle_event_party.py,sha256=LNdgsi4hxzESD7gPut88RBTnV1JbEbLIT_amAy9BvXM,1094
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
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
24
25
  albibong/classes/event_handler/handle_operation_change_cluster.py,sha256=Pc9E27JL1oJwc3iKgTsFlGWUz6iRVHtySN59jV8gLo0,1644
25
- albibong/classes/event_handler/handle_operation_farmable_harvest.py,sha256=PH0UONCmjdoTdlcYa70x2oKC5j7PXmrrsRS8pl9clZM,680
26
- albibong/classes/event_handler/handle_operation_join.py,sha256=V37XhLyToHci6ZoBTudZgI_DgdWxJZahLaZ1ZgKgcDM,2312
26
+ albibong/classes/event_handler/handle_operation_farmable_harvest.py,sha256=H-fS6Kb7bxLMNxuanAuwrtueqLQhXiwV57IObxa50o0,674
27
+ albibong/classes/event_handler/handle_operation_join.py,sha256=RxN5X-Dv4jfIFn3e0zqrJOufgDJlMPqYIM0wlJadcGc,2290
27
28
  albibong/classes/event_handler/handle_operation_move.py,sha256=vg_wTPQ4nA4-xyw9axtFmKkVCUoCkUq3RV74wFLbc_4,200
28
- albibong/classes/event_handler/world_data_utils.py,sha256=qGfKH9YGe_xWN8cCjSkhJ3zGcw6O8BuYIilK-kR2qUw,5513
29
+ albibong/classes/event_handler/world_data_utils.py,sha256=9BHsgzA2EBnBC26SJf0T2fiDlwj1MpYTb2EFLcmzmlU,5109
29
30
  albibong/gui_dist/Albibong.png,sha256=vFWgJSosXfnSCy_U7Uu9hCYDCHiYtcmR1lpPA0XQRhY,38093
30
31
  albibong/gui_dist/No Equipment.png,sha256=HdVR3WJ0ktF5v606QyURdHscjOgCqiXJnqI8k8IlSgE,131
31
32
  albibong/gui_dist/fame.png,sha256=X2tUCmgR5TkGLUVvFB2lInH_RrXkC1pSLqpw_ply-rE,6015
32
- albibong/gui_dist/index.html,sha256=5gLx1Sb9TUnCufEXdKAeq6xDkhdDT5_EiAKY_lzej-I,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
33
36
  albibong/gui_dist/re_spec.png,sha256=1KTzGT1u1wjmNk9svS5ZOV7zCDIEmiFy0USh6A_vhPA,6230
34
37
  albibong/gui_dist/silver.png,sha256=tqXvZdf9zr0YoOQZoR2vG8NRffl4xvz0LY5XgwIrYD8,11533
35
38
  albibong/gui_dist/vite.svg,sha256=SnSK_UQ5GLsWWRyDTEAdrjPoeGGrXbrQgRw6O0qSFPs,1497
36
- albibong/gui_dist/assets/index-C4r00CBk.js,sha256=ZTo4BK2mM6Ho5VGX1nU9yl5gKKH22bJ8OMgMR1eyxvA,653266
37
- albibong/gui_dist/assets/index-DKbORdbN.css,sha256=3mA_HToM0FzqFGXQD-KlMEskfkjWH3Aexah6w6slvMA,2741
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
38
43
  albibong/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- albibong/models/models.py,sha256=CjQqahTEKx4MsCmD8CkQFhBA6n_rwFzkajIoYK2fCiQ,204
44
+ albibong/models/models.py,sha256=V9uv99x0GHwZcD8cNFQVUt2klTuao7xK5ywoT_JT4vs,210
40
45
  albibong/photon_packet_parser/__init__.py,sha256=Y_XwBGLl0ufhLr7d6phhfA6qL1RrG6mJ3qAC5lNKM_c,301
41
46
  albibong/photon_packet_parser/command_type.py,sha256=-LSdpsQgViDygDJsjaoCUuLbBkK4-pmQuM8ESHG1BNk,137
42
47
  albibong/photon_packet_parser/crc_calculator.py,sha256=rnhmknjiZBaSXBwS2cJacwLlnXaT74u9yEmvLknIh2o,402
@@ -49,20 +54,20 @@ albibong/photon_packet_parser/photon_packet_parser.py,sha256=ayPObVh3LQLWsvJxSMp
49
54
  albibong/photon_packet_parser/protocol16_deserializer.py,sha256=apZZUI0_c5yF9BN-E3DihenClCYCxlGifnNSe_uj3p8,11646
50
55
  albibong/photon_packet_parser/protocol16_type.py,sha256=r1DLNl_mmaEvb9v7W_OOlp5hikp5UeEgrzpQgl7efBw,451
51
56
  albibong/photon_packet_parser/segmented_packet.py,sha256=pftqyVO0D7ZX8m1ZL2w2Xt_g1Nc_mClXvQ99FOBn41E,235
52
- albibong/resources/EventCode.py,sha256=WSKFXuaABz3FBugHmlTSHAvMaNfa4JaRQo5xqdcn3aI,19349
57
+ albibong/resources/EventCode.py,sha256=3JowIq2xtY9qIsl_TkSKKEF00iIcoxpWVQ6b6XhPsaY,19369
53
58
  albibong/resources/OperationCode.py,sha256=9l5xdNhVCs4i-zaAPYC9BXPDBavX1D7VdpESmFQtKyE,16509
54
- albibong/resources/event_code.json,sha256=vIHnrH1T0qaGM4t4qYyoknAYEjiSO543RNu4zhYWOGs,20483
59
+ albibong/resources/event_code.json,sha256=SqyLYYaUfMz7hIapxRc74LjP_fuQozaJ6IUYEwvPPdo,20504
55
60
  albibong/resources/items_by_id.json,sha256=UoU4OSbB09DyxOpia2Ye1Hm4HR_4QlYqvhL_DKn6eQ8,1400109
56
61
  albibong/resources/items_by_unique_name.json,sha256=VLixfNoc6RbMjfdBna2IdtG2PAwBbaYzsHSC8b96qp8,1635865
57
62
  albibong/resources/maps.json,sha256=jEXIhIlPYO8fXk9xHOVpFKxw4_KUb72TBICvJy4-gBE,129753
58
63
  albibong/resources/operation_code.json,sha256=zV9kgHtZ_fs1Pm7ntQxNbjfZbdiHRdUIhEkKAIJPLhU,17457
59
64
  albibong/threads/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- albibong/threads/http_server.py,sha256=Tqy7P8pXvIQywmFdiFy4TNKxR4LadJP0t4OsQE3oHDI,1940
65
+ albibong/threads/http_server.py,sha256=qg87iVD7AaKg32eJ5qeqL3RUo-B7sVywC4_qTxEhH2U,2172
61
66
  albibong/threads/packet_handler_thread.py,sha256=bqgYQUeCaTtnWgx4bGoqw-cWQcXRJohIse2hwCbVLmo,949
62
- albibong/threads/sniffer_thread.py,sha256=mvz4YeEnZwNbbIUAKicue5QX0vt_KoJ6p81UuwkRQe0,767
63
- albibong/threads/websocket_server.py,sha256=23_DGv7PPVxhv0uWMLuykYdws9pgpVgo8dS8yrKSIes,9015
64
- albibong-1.1.0.dist-info/METADATA,sha256=yj99hwDc-hmMrHE3pQnfyW_9v1aLLKefHmto8u7aAGk,611
65
- albibong-1.1.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
66
- albibong-1.1.0.dist-info/entry_points.txt,sha256=pLvUeo6eUwvsDQXsxdP9mRdSPufUlrz_9mFxsov0nm0,43
67
- albibong-1.1.0.dist-info/licenses/LICENSE,sha256=7EI8xVBu6h_7_JlVw-yPhhOZlpY9hP8wal7kHtqKT_E,1074
68
- albibong-1.1.0.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.2.dist-info/METADATA,sha256=NbRiOHeUDzN2pfwYXXK4bz8A6610dbEIOKsLNepd_bI,649
70
+ albibong-1.1.2.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
71
+ albibong-1.1.2.dist-info/entry_points.txt,sha256=pLvUeo6eUwvsDQXsxdP9mRdSPufUlrz_9mFxsov0nm0,43
72
+ albibong-1.1.2.dist-info/licenses/LICENSE,sha256=7EI8xVBu6h_7_JlVw-yPhhOZlpY9hP8wal7kHtqKT_E,1074
73
+ albibong-1.1.2.dist-info/RECORD,,