WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   Lua/XML Help (https://www.wowinterface.com/forums/forumdisplay.php?f=16)
-   -   Stuck on TIME_PLAYED_MSG delay (https://www.wowinterface.com/forums/showthread.php?t=58284)

KrS14 10-14-20 02:40 PM

Stuck on TIME_PLAYED_MSG delay
 
Hi peeps,

I have the following in an addon I'm creating:

--Register /played event to unique frame
frame:RegisterEvent("TIME_PLAYED_MSG")
frame:SetScript("OnEvent", function(self, event, ...)
if (event == "TIME_PLAYED_MSG") then
TotalPlayed, PlayedThisLevel = ...
print("TotalPlayed, PlayedThisLevel "..TotalPlayed, PlayedThisLevel)
end
end)


-- Register Level up hook to unique frame
lvlup = CreateFrame("Frame", UIParent)
lvlup:RegisterEvent("PLAYER_LEVEL_UP")
lvlup:SetScript("OnEvent", function(self, event, ...)
if(event == "PLAYER_LEVEL_UP") then
print("Level up hook started")
newlevel = ...
print("NewLevel is: "..newlevel)
RequestTimePlayed()
inum = (#KLTcharstats+1)
print("inum and inslvl = "..inum)
newindex(inum)
if (inum == 1 and KLTcharstats[inum].clevel == 1) then
print("Running if, that is inum = 1 and clevel = 1 --- TotalPlayed = "..TotalPlayed)
KLTcharstats[inum].TTP = TotalPlayed
KLTcharstats[inum].TFL = TotalPlayed
end

After all this has run there are the correct results in my default chat for time played and level time played, from the event handler BUT i only ever get 1 in the if at the end. Do i have table init that runs before all this so no issues with the creation of the table or variables.

I've been banging my head against this for hours, what do I have wrong? Or is the time return just laggy as sin and I can't do what I need to?

Thanks for the input!!

SDPhantom 10-14-20 05:14 PM

There's always a delay between running RequestTimePlayed() and when TIME_PLAYED_MSG fires because it has to get this info from the server.

KrS14 10-14-20 06:47 PM

Would using something like Ace be the only route to add a pause after levelup till i run functions?

Tim 10-14-20 07:48 PM

Quote:

Originally Posted by KrS14 (Post 337153)
Would using something like Ace be the only route to add a pause after levelup till i run functions?

https://wow.gamepedia.com/API_C_Timer.After

KrS14 10-14-20 09:41 PM

Quote:

Originally Posted by Tim (Post 337155)

I have read about this and tried it. Never got it to work, i'll give it another go tomorrow and report back.

SDPhantom 10-14-20 11:35 PM

Here's what I would do.
Lua Code:
  1. local LevelTimes={};--  For this example, we'll say this is loaded from SavedVar
  2.  
  3. local EventFrame=CreateFrame("Frame");
  4. EventFrame:RegisterEvent("PLAYER_LEVEL_UP");
  5. EventFrame:RegisterEvent("TIME_PLAYED_MSG");
  6. EventFrame:SetScript("OnEvent",function(self,event,...)
  7.     if event=="PLAYER_LEVEL_UP" then
  8.         self.WaitingForPlayTime=true;-- Flag continuation
  9.         RequestTimePlayed();
  10.     elseif event=="TIME_PLAYED_MSG" and self.WaitingForPlayTime then
  11.         self.WaitingForPlayTime=false;--    Clear flag
  12.         LevelTimes[UnitLevel("player")-1]=...;--    Record time to complete level
  13.     end
  14. end);

KrS14 10-15-20 11:44 AM

Quote:

Originally Posted by SDPhantom (Post 337161)
Here's what I would do.
Lua Code:
  1. local LevelTimes={};--  For this example, we'll say this is loaded from SavedVar
  2.  
  3. local EventFrame=CreateFrame("Frame");
  4. EventFrame:RegisterEvent("PLAYER_LEVEL_UP");
  5. EventFrame:RegisterEvent("TIME_PLAYED_MSG");
  6. EventFrame:SetScript("OnEvent",function(self,event,...)
  7.     if event=="PLAYER_LEVEL_UP" then
  8.         self.WaitingForPlayTime=true;-- Flag continuation
  9.         RequestTimePlayed();
  10.     elseif event=="TIME_PLAYED_MSG" and self.WaitingForPlayTime then
  11.         self.WaitingForPlayTime=false;--    Clear flag
  12.         LevelTimes[UnitLevel("player")-1]=...;--    Record time to complete level
  13.     end
  14. end);

While not directly my solution SDPhantom, you completely made me realize I was going about the execution of everything in the wrong order.

I was sticking almost ALL my main work in PLAYER_LEVEL_UP, when it should have been in TIME_PLAYED_MSG that was my natural delay I needed :)

Thank you so much for your input, I'm about 4 days into learning LUA in any capacity lol so there's definitely some tricks to learn :)

All is working as intended now.


All times are GMT -6. The time now is 04:05 AM.

vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI