1. -- Playtime interval
  2. local interval = 1200;
  3. -- Event constants
  4. local ELUNA_EVENT_ON_LUA_STATE_OPEN = 33;
  5. local PLAYER_EVENT_ON_LOGIN = 3;
  6. -- Data table.
  7. local wage = {};
  8. -- Add all players currently in world to table.
  9. local function onElunaStateOpen()
  10. for _, player in pairs(GetPlayersInWorld()) do
  11. wage[player:GetGUIDLow()] = {
  12. session_time = 0,
  13. update_time = os.time() + interval
  14. };
  15. end
  16. end
  17. RegisterServerEvent(ELUNA_EVENT_ON_LUA_STATE_OPEN, onElunaStateOpen);
  18. -- Add player to table on login.
  19. local function onLogin(_, player)
  20. wage[player:GetGUIDLow()] = {
  21. session_time = 0,
  22. update_time = os.time() + interval
  23. };
  24. end
  25. RegisterPlayerEvent(PLAYER_EVENT_ON_LOGIN, onLogin);
  26. -- Function that will reward players if needed.
  27. local function rewardPlayers()
  28. for _, player in pairs(GetPlayersInWorld()) do
  29. local player_wage = wage[player:GetGUIDLow()];
  30. if player_wage and player_wage.update_time <= os.time() then
  31. wage[player:GetGUIDLow()].session_time = wage[player:GetGUIDLow()].session_time + interval / 60;
  32. player:ModifyMoney(20);
  33. player:SendBroadcastMessage("You have played for " .. player_wage.session_time .. " minutes this session and have earned 20 copper.");
  34. wage[player:GetGUIDLow()].update_time = os.time() + interval;
  35. end
  36. end
  37. end
  38. CreateLuaEvent(rewardPlayers, 60000, 0);