Skip to content

Commit ae7bc88

Browse files
author
Hexalgo
committed
fixed some time sync stuff
1 parent 25ff959 commit ae7bc88

File tree

10 files changed

+165
-93
lines changed

10 files changed

+165
-93
lines changed

pydofus2/com/DofusClient.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ def __init__(self, name="DofusClient"):
8181
self._taking_nap = False
8282
self._startTime = None
8383
self._status = None
84+
self.session_run_id = None
8485
self.kernel = None
8586
self.terminated = threading.Event()
8687

@@ -131,6 +132,7 @@ def init(self):
131132
atexit.register(self.at_exit)
132133
self.zaap = ZaapDecoy(self._apikey)
133134
self.kernel = Kernel()
135+
self.kernel.client = self
134136
self.kernel.init()
135137
AdapterFactory.addAdapter("ele", ElementsAdapter)
136138
# AdapterFactory.addAdapter("dlm", MapsAdapter)

pydofus2/com/ankamagames/berilia/managers/KernelEvent.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class KernelEvent(Enum):
77
KamasSpentOnSellTax = auto()
88
FarmPathStart = auto()
99
Paused = auto()
10+
MarketOfflineSales = auto()
1011

1112
# Market
1213
MarketPriceChanged = auto()

pydofus2/com/ankamagames/dofus/kernel/Kernel.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
from pydofus2.com.ankamagames.dofus.logic.game.roleplay.frames.RoleplayMovementFrame import RoleplayMovementFrame
5656
from pydofus2.com.ankamagames.dofus.logic.game.roleplay.frames.RoleplayWorldFrame import RoleplayWorldFrame
5757
from pydofus2.com.ankamagames.dofus.logic.game.roleplay.frames.ZaapFrame import ZaapFrame
58+
from pydofus2.com.DofusClient import DofusClient
5859

5960

6061
class Kernel(metaclass=Singleton):
@@ -64,6 +65,7 @@ def __init__(self) -> None:
6465
self._reset = True
6566
self.isMule = False
6667
self.restart_on_unexpected_conn_close = False
68+
self.client: "DofusClient" = None
6769

6870
@property
6971
def worker(self) -> Worker:

pydofus2/com/ankamagames/dofus/logic/common/frames/MarketFrame.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ def __init__(self):
8787
self._state = "INIT"
8888
self._current_mode = None
8989
self._market_mapId = None
90+
self._market_gfx = None
9091
self._search_item_listener = None
9192

9293
@property
@@ -106,6 +107,7 @@ def reset_state(self):
106107
self._bids_manager.max_item_level = None
107108
self._bids_manager.allowed_types = None
108109
self._bids_manager.npc_id = None
110+
self._market_gfx = None
109111
self._market_type_open = None
110112
self._current_mode = None
111113
self._current_searched_item_gid = None
@@ -117,9 +119,7 @@ def pulled(self) -> bool:
117119

118120
def process(self, msg: Message) -> bool:
119121
if isinstance(msg, ExchangeOfflineSoldItemsMessage):
120-
# FIXME: Implement this very important logic so we can save markets state offline
121-
# items where sold when we where offline
122-
# { "bidHouseItems": [ { "__type__": "ObjectItemQuantityPriceDateEffects", "objectGID": 443, "quantity": 100, "price": 3571, "effects": { "__type__": "ObjectEffects", "effects": [] }, "date": 1731091668 } ] }
122+
KernelEventsManager().send(KernelEvent.MarketOfflineSales, msg.bidHouseItems)
123123
return True
124124

125125
# Handle sell mode initialization

pydofus2/com/ankamagames/dofus/logic/common/managers/PlayerManager.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,7 @@ def refreshSubscriptionEndDateUpdateTime(self) -> None:
110110
self._subscriptionEndDateUpdateTime = TimeManager().getUtcTimestamp()
111111

112112
def isBasicAccount(self) -> bool:
113-
# Logger().debug(f"Subscription end date : {self.subscriptionEndDate}")
114-
# Logger().debug(f"Current timestamp : {TimeManager().getUtcTimestamp()}")
115-
# Logger().debug(f"Has rights : {self.hasRights}")
116-
return self.subscriptionEndDate / 1000 <= TimeManager().getUtcTimestamp() and not self.hasRights
113+
return self.subscriptionEndDate <= TimeManager().getUtcTimestamp() and not self.hasRights
117114

118115
def inHavenBag(self):
119116
from pydofus2.com.ankamagames.dofus.logic.game.common.managers.PlayedCharacterManager import (

pydofus2/com/ankamagames/dofus/logic/connection/frames/AuthenticationFrame.py

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -85,31 +85,32 @@ def process(self, msg: Message) -> bool:
8585
return True
8686

8787
elif isinstance(msg, IdentificationSuccessMessage):
88-
ismsg = msg
89-
if isinstance(ismsg, IdentificationSuccessWithLoginTokenMessage):
90-
AuthenticationManager().nextToken = IdentificationSuccessWithLoginTokenMessage(ismsg).loginToken
91-
if ismsg.login:
92-
AuthenticationManager().username = ismsg.login
93-
PlayerManager().accountId = ismsg.accountId
94-
PlayerManager().communityId = ismsg.communityId
95-
PlayerManager().hasRights = ismsg.hasRights
96-
PlayerManager().hasReportRight = ismsg.hasReportRight
97-
PlayerManager().nickname = ismsg.accountTag.nickname
98-
PlayerManager().tag = ismsg.accountTag.tagNumber
99-
PlayerManager().subscriptionEndDate = ismsg.subscriptionEndDate
88+
if isinstance(msg, IdentificationSuccessWithLoginTokenMessage):
89+
AuthenticationManager().nextToken = msg.loginToken
90+
if msg.login:
91+
AuthenticationManager().username = msg.login
92+
PlayerManager().accountId = msg.accountId
93+
PlayerManager().communityId = msg.communityId
94+
PlayerManager().hasRights = msg.hasRights
95+
PlayerManager().hasReportRight = msg.hasReportRight
96+
PlayerManager().nickname = msg.accountTag.nickname
97+
PlayerManager().tag = msg.accountTag.tagNumber
98+
PlayerManager().subscriptionEndDate = msg.subscriptionEndDate
10099
if PlayerManager().isBasicAccount():
101100
Logger().info("Player has basic account")
102-
formatted = "N/A"
103101
else:
104-
formatted = TimeManager().getFormatterDateFromTime(ismsg.subscriptionEndDate)
105-
Logger().info(f"Player subscription end date: {formatted}")
106-
PlayerManager().accountCreation = ismsg.accountCreation
107-
PlayerManager().wasAlreadyConnected = ismsg.wasAlreadyConnected
108-
DataStoreType.ACCOUNT_ID = str(ismsg.accountId)
102+
date = TimeManager().format_date_irl(msg.subscriptionEndDate, True)
103+
time = TimeManager().format_clock(msg.subscriptionEndDate, True, True)
104+
Logger().info(f"Player is subscribed until: {date} {time}")
105+
106+
PlayerManager().accountCreation = msg.accountCreation
107+
PlayerManager().wasAlreadyConnected = msg.wasAlreadyConnected
108+
DataStoreType.ACCOUNT_ID = str(msg.accountId)
109109
Kernel().worker.removeFrame(self)
110110
Kernel().worker.addFrame(CharacterFrame())
111111
Kernel().worker.addFrame(ServerSelectionFrame())
112-
KernelEventsManager().send(KernelEvent.PlayerLoginSuccess, ismsg)
112+
KernelEventsManager().send(KernelEvent.PlayerLoginSuccess, msg)
113+
formatted = TimeManager().getFormatterDateFromTime(msg.subscriptionEndDate)
113114
KernelEventsManager().send(
114115
KernelEvent.ClientStatusUpdate,
115116
ClientStatusEnum.AUTHENTICATED_TO_LOGIN_SERVER,

pydofus2/com/ankamagames/dofus/logic/game/approach/frames/GameServerApproachFrame.py

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import time
2-
from datetime import datetime
32

43
from prettytable import PrettyTable
54

@@ -128,7 +127,6 @@
128127
ServerConnectionFailedMessage,
129128
)
130129
from pydofus2.com.ankamagames.jerakine.network.NetworkMessage import NetworkMessage
131-
from pydofus2.com.ankamagames.jerakine.types.DataStoreType import DataStoreType
132130
from pydofus2.com.ankamagames.jerakine.types.enums.Priority import Priority
133131
from pydofus2.com.ClientStatusEnum import ClientStatusEnum
134132

@@ -297,12 +295,10 @@ def process(self, msg: Message) -> bool:
297295
return True
298296

299297
elif isinstance(msg, CharacterSelectedSuccessMessage):
300-
cssmsg = msg
301298
self._loadingStart = time.perf_counter()
302299
if Kernel().worker.getFrameByName("ServerSelectionFrame"):
303300
Kernel().worker.removeFrameByName("ServerSelectionFrame")
304-
PlayedCharacterManager().infos = cssmsg.infos
305-
DataStoreType.CHARACTER_ID = str(cssmsg.infos.id)
301+
PlayedCharacterManager().infos = msg.infos
306302
Kernel().worker.addFrame(WorldFrame())
307303
Kernel().worker.addFrame(AlignmentFrame())
308304
Kernel().worker.addFrame(SynchronisationFrame())
@@ -317,13 +313,12 @@ def process(self, msg: Message) -> bool:
317313
Kernel().worker.addFrame(AveragePricesFrame())
318314
Kernel().worker.addFrame(NpcFrame())
319315
Kernel().worker.addFrame(PartyFrame())
320-
KernelEventsManager().send(KernelEvent.CharacterSelectionSuccess, cssmsg.infos)
316+
KernelEventsManager().send(KernelEvent.CharacterSelectionSuccess, msg.infos)
321317
KernelEventsManager().send(
322-
KernelEvent.ClientStatusUpdate, ClientStatusEnum.CHARACTER_SELECTED, {"infos": cssmsg.infos.to_json()}
318+
KernelEvent.ClientStatusUpdate, ClientStatusEnum.CHARACTER_SELECTED, {"infos": msg.infos.to_json()}
323319
)
324-
self._cssmsg = cssmsg
320+
self._cssmsg = msg
325321
PlayedCharacterManager().infos = self._cssmsg.infos
326-
DataStoreType.CHARACTER_ID = str(self._cssmsg.infos.id)
327322
now = time.perf_counter()
328323
delta = now - self._loadingStart
329324
if delta > self.LOADING_TIMEOUT:
@@ -332,8 +327,8 @@ def process(self, msg: Message) -> bool:
332327

333328
elif isinstance(msg, CharacterLoadingCompleteMessage):
334329
Kernel().worker.removeFrame(self)
335-
gccrmsg = GameContextCreateRequestMessage()
336-
ConnectionsHandler().send(gccrmsg)
330+
msg = GameContextCreateRequestMessage()
331+
ConnectionsHandler().send(msg)
337332
return True
338333

339334
elif isinstance(msg, ConnectionResumedMessage):
@@ -349,13 +344,7 @@ def process(self, msg: Message) -> bool:
349344
return True
350345

351346
elif isinstance(msg, BasicTimeMessage):
352-
btmsg = msg
353-
TimeManager().serverTimeLag = float(
354-
btmsg.timestamp + btmsg.timezoneOffset * 60 * 1000 - datetime.now().timestamp()
355-
)
356-
TimeManager().serverUtcTimeLag = btmsg.timestamp - datetime.now().timestamp()
357-
TimeManager().timezoneOffset = btmsg.timezoneOffset * 60 * 1000
358-
TimeManager().dofusTimeYearLag = -1370
347+
TimeManager().sync_with_server(msg)
359348
return True
360349

361350
elif isinstance(msg, AccountSubscriptionElapsedDurationMessage):
@@ -384,15 +373,15 @@ def process(self, msg: Message) -> bool:
384373
self._charaListMinusDeadPeople.append(perso)
385374
else:
386375
Kernel().worker.removeFrame(self)
387-
Logger().warn("Empty Gift List Received")
376+
Logger().warning("Empty Gift List Received")
388377
return True
389378

390379
elif isinstance(msg, PopupWarningClosedMessage):
391380
return True
392381

393382
elif isinstance(msg, PopupWarningCloseRequestAction):
394-
pwcrmsg = PopupWarningCloseRequestMessage()
395-
ConnectionsHandler().send(pwcrmsg)
383+
msg = PopupWarningCloseRequestMessage()
384+
ConnectionsHandler().send(msg)
396385
return True
397386

398387
elif isinstance(msg, CharacterSelectionAction):

pydofus2/com/ankamagames/dofus/logic/game/common/frames/PlayedCharacterUpdatesFrame.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from datetime import datetime
2-
from time import perf_counter
31
from typing import TYPE_CHECKING
42

53
import pydofus2.com.ankamagames.dofus.internalDatacenter.spells.SpellWrapper as swmod
@@ -360,12 +358,7 @@ def process(self, msg: Message) -> bool:
360358
pass
361359

362360
if isinstance(msg, BasicTimeMessage):
363-
btmsg = msg
364-
receptionDelay = perf_counter() - btmsg.receptionTime
365-
TimeManager().serverTimeLag = (
366-
btmsg.timestamp + btmsg.timezoneOffset * 60 * 1000 - datetime.now().timestamp() + receptionDelay
367-
)
368-
TimeManager().serverUtcTimeLag = btmsg.timestamp - datetime.now().timestamp() + receptionDelay
361+
TimeManager().sync_with_server(msg)
369362
return True
370363

371364
if isinstance(msg, StartupActionsListMessage):
@@ -377,7 +370,7 @@ def process(self, msg: Message) -> bool:
377370
# for gift in salm.actions:
378371
# _items = []
379372
# for item in gift.items:
380-
# iw = ItemWrapper.create(0,0,item.objectGID,item.quantity,item.effects,False)
373+
# iw = ItemWrapper.create(0, 0, item.objectGID ,item.quantity, item.effects, False)
381374
# _items.append(iw)
382375
# obj = {
383376
# "uid":gift.uid,

0 commit comments

Comments
 (0)