feedback.lua

main 113 lines · 2.9 KB Raw
Alex Alex Commit Client Upload Part 2 19/10/2026 00:06
1-- chunkname: @/modules/client_feedback/feedback.lua
2
3local feedbackWindow, textEdit, okButton, cancelButton
4local postId = 0
5local tries = 0
6local replyEvent
7
8function init()
9 feedbackWindow = g_ui.displayUI("feedback")
10
11 feedbackWindow:hide()
12
13 textEdit = feedbackWindow:getChildById("text")
14 okButton = feedbackWindow:getChildById("okButton")
15 cancelButton = feedbackWindow:getChildById("cancelButton")
16 okButton.onClick = send
17 cancelButton.onClick = hide
18 feedbackWindow.onEscape = hide
19end
20
21function terminate()
22 feedbackWindow:destroy()
23 removeEvent(replyEvent)
24end
25
26function show()
27 if not Services or not Services.feedback or Services.feedback:len() < 4 then
28 return
29 end
30
31 feedbackWindow:show()
32 feedbackWindow:raise()
33 feedbackWindow:focus()
34 textEdit:setMaxLength(8192)
35 textEdit:setText("")
36 textEdit:setEditable(true)
37 textEdit:setCursorVisible(true)
38 feedbackWindow:focusChild(textEdit, KeyboardFocusReason)
39
40 tries = 0
41end
42
43function hide()
44 feedbackWindow:hide()
45 textEdit:setEditable(false)
46 textEdit:setCursorVisible(false)
47end
48
49function send()
50 local text = textEdit:getText()
51
52 if text:len() > 1 then
53 local localPlayer = g_game.getLocalPlayer()
54 local playerData
55
56 if localPlayer ~= nil then
57 playerData = {
58 name = localPlayer:getName(),
59 position = localPlayer:getPosition()
60 }
61 end
62
63 local details = {
64 report_delay = sendInterval,
65 os = g_app.getOs(),
66 graphics_vendor = g_graphics.getVendor(),
67 graphics_renderer = g_graphics.getRenderer(),
68 graphics_version = g_graphics.getVersion(),
69 fps = g_app.getFps(),
70 maxFps = g_app.getMaxFps(),
71 atlas = g_atlas.getStats(),
72 classic = tostring(g_settings.getBoolean("classicView")),
73 fullscreen = tostring(g_window.isFullscreen()),
74 vsync = tostring(g_settings.getBoolean("vsync")),
75 window_width = g_window.getWidth(),
76 window_height = g_window.getHeight(),
77 player_name = g_game.getCharacterName(),
78 world_name = g_game.getWorldName(),
79 otserv_host = G.host,
80 otserv_protocol = g_game.getProtocolVersion(),
81 otserv_client = g_game.getClientVersion(),
82 build_version = g_app.getVersion(),
83 build_revision = g_app.getBuildRevision(),
84 build_commit = g_app.getBuildCommit(),
85 build_date = g_app.getBuildDate(),
86 display_width = g_window.getDisplayWidth(),
87 display_height = g_window.getDisplayHeight(),
88 cpu = g_platform.getCPUName(),
89 mem = g_platform.getTotalSystemMemory(),
90 os_name = g_platform.getOSName()
91 }
92 local data = json.encode({
93 text = text,
94 version = g_app.getVersion(),
95 host = g_settings.get("host"),
96 player = playerData,
97 details = details
98 })
99
100 postId = HTTP.post(Services.feedback, data, function(ret, err)
101 if err then
102 tries = tries + 1
103
104 if tries < 3 then
105 replyEvent = scheduleEvent(send, 1000)
106 end
107 end
108 end)
109 end
110
111 hide()
112end
113
Top