· 8 years ago · Jul 29, 2018, 02:48 PM
1local screenSizeX,screenSizeY = guiGetScreenSize()
2local windowSizeX,windowSizeY = 510,350
3local inboxSizeX,inboxSizeY = 600,280
4local friendsSizeX,friendsSizeY = 300,400
5local editSizeX,editSizeY = 400,180
6local addFriendSizeX,addFriendSizeY = 300,135
7local sendMessageSizeX,sendMessageSizeY = 350,300
8local changeAvatarSizeX,changeAvatarSizeY = 350,180
9local moreThan1MatchX,moreThan1MatchY = 400,250
10local avatarTable =
11{
12 "default",
13 "ace",
14 "alien",
15 "ambulance",
16 "atomic",
17 "ball",
18 "beastsymbol",
19 "bender",
20 "bird",
21 "blackdragon",
22 "bloodskull",
23 "bomb",
24 "bug",
25 "car",
26 "cartoondog",
27 "cat",
28 "cheguevara",
29 "chineze1",
30 "chineze2",
31 "clown",
32 "cowboy",
33 "crash",
34 "deadveteran",
35 "dinosaur",
36 "dog",
37 "domo",
38 "donkey",
39 "dragonsymbol",
40 "eye",
41 "evilmonkey",
42 "feather",
43 "female",
44 "football",
45 "frog",
46 "fry",
47 "ghostalien",
48 "goku",
49 "goldskull",
50 "gorilla",
51 "gun",
52 "halloween",
53 "hawk",
54 "hawksymbol",
55 "heart",
56 "homer",
57 "key",
58 "kirby",
59 "lemon",
60 "luigi",
61 "male",
62 "mario",
63 "monopoly",
64 "oldman",
65 "oneup",
66 "orb",
67 "pacman",
68 "passport",
69 "penguin",
70 "phoenix",
71 "rabbit",
72 "reddead",
73 "redhat",
74 "robodog",
75 "roboguy",
76 "scorpion",
77 "serialkiller",
78 "shark",
79 "sheep",
80 "shockface",
81 "sign1",
82 "sign2",
83 "sign3",
84 "sign4",
85 "sign5",
86 "sign6",
87 "skull",
88 "snowman",
89 "sonic",
90 "sphinx",
91 "spongebob",
92 "spyro",
93 "stickman",
94 "suisse",
95 "superman",
96 "threeeye",
97 "wallace",
98 "windows1",
99 "windows2",
100 "woman",
101 "worldflag",
102 "worms",
103 "yoshi",
104}
105local tabpanelBorderLeft,tabpanelBorderTop,tabpanelBorderRight,tabpanelBorderBottom = 10,30,150,10
106local avatarBorderLeft,avatarBorderTop = 10,60
107local avatarSizeX,avatarSizeY = 75,75
108
109local localUserInfo = {}
110local localUserSettings = {}
111local currentlyViewedMessage
112local requestedPlayerInfo = {}
113local playerItems
114local shopItems
115
116local versionString = "1.0.5"
117
118local panelNameList =
119{
120 "Over 9000 Panel",
121 "1337 Panel",
122 "Banana Phone Panel",
123 "Chocolate Rain Panel",
124 "OMGWTFBBQ Panel",
125 "Uber Panel",
126 "Chuck Norris Panel",
127 "Dramatic Chipmunk Panel",
128 "WTF Boooooooooom Panel",
129 "You got Rick'Paneld",
130 "Charley bit my Panel",
131 "Leek Spin Panel",
132 "I can break this Panel",
133 "HAAAAAX Panel",
134 "SPARTAAAAA Panel",
135 "All your Panel are belong to us",
136 "Booooom Headshot Panel",
137 "Don't taze my Panel, bro",
138 "Falcon PANEL",
139 "It's a trap Panel",
140 "Ima firin' mah Panel",
141 "Leeeeeeeeeeroy Jenkins Panel",
142 "Mudkip Panel",
143 "Nigga stole my Panel",
144 "Peanut Butter Panel Time",
145 "Numa Numa Panel",
146 "Objection Panel",
147 "Pingas Panel",
148 "ORLY Panel",
149 "Weegee Panel",
150 "Barrel Roll Panel",
151}
152
153function resourceStart()
154 -- Load User Preferences File
155 file = xmlLoadFile("preferences.xml")
156 if not file then
157 file = xmlCreateFile("preferences.xml","user")
158 xmlNodeSetAttribute(file,"usercountry","")
159 xmlNodeSetAttribute(file,"userage","")
160 xmlNodeSetAttribute(file,"usermessengers","")
161 xmlNodeSetAttribute(file,"useravatar","default")
162
163 xmlNodeSetAttribute(file,"version",versionString)
164
165 localUserInfo["country"] = ""
166 localUserInfo["age"] = ""
167 localUserInfo["messengers"] = ""
168 localUserInfo["avatar"] = "default"
169 localUserInfo["friends"] = {}
170 else
171 xmlNodeSetAttribute(file,"version",versionString)
172
173 localUserInfo["country"] = xmlNodeGetAttribute(file,"usercountry")
174 localUserInfo["age"] = xmlNodeGetAttribute(file,"userage")
175 localUserInfo["messengers"] = xmlNodeGetAttribute(file,"usermessengers")
176 localUserInfo["avatar"] = xmlNodeGetAttribute(file,"useravatar") or "default"
177 localUserInfo["friends"] = {}
178 for i,v in ipairs(xmlNodeGetChildren(file)) do
179 if xmlNodeGetName(v) == "friend" then
180 table.insert(localUserInfo["friends"],xmlNodeGetAttribute(v,"name"))
181 elseif xmlNodeGetName(v) == "setting" then
182 localUserSettings[xmlNodeGetAttribute(v,"name")] = xmlNodeGetAttribute(v,"enabled") == "true"
183 end
184 end
185 end
186
187 -- Create Main Window
188 if math.random() <= 0.05 then
189 mainWindow = guiCreateWindow(screenSizeX*0.5-windowSizeX*0.5,screenSizeY*0.5-windowSizeY*0.5,windowSizeX,windowSizeY,panelNameList[math.random(1,#panelNameList)],false)
190 else
191 mainWindow = guiCreateWindow(screenSizeX*0.5-windowSizeX*0.5,screenSizeY*0.5-windowSizeY*0.5,windowSizeX,windowSizeY,"Advanced User Control Panel",false)
192 end
193 guiWindowSetSizable(mainWindow,false)
194 mainWindowTabpanel = guiCreateTabPanel(10,30,490,310,false,mainWindow)
195 --closeButton = guiCreateButton(550,310,80,30,"Close",false,mainWindow)
196 --addEventHandler("onClientGUIClick",closeButton,hideAll,false)
197
198
199 -- Home Tab
200 homeTab = guiCreateTab("Home",mainWindowTabpanel)
201 userNameLabel = guiCreateLabel(10,5,450,45,getPlayerName(getLocalPlayer()),false,homeTab)
202 guiSetFont(userNameLabel,"sa-header")
203 userAvatarBorder = guiCreateStaticImage(avatarBorderLeft,avatarBorderTop,avatarSizeX+20,avatarSizeY+20,"border.png",false,homeTab)
204 userAvatar = guiCreateStaticImage(avatarBorderLeft+10,avatarBorderTop+10,avatarSizeX,avatarSizeY,"avatars/"..localUserInfo["avatar"]..".png",false,homeTab)
205
206 userInfoName = guiCreateLabel(115,70,450,20,"Name: "..getPlayerName(getLocalPlayer()),false,homeTab)
207 userInfoCountry = guiCreateLabel(115,90,450,20,"Country: "..localUserInfo["country"],false,homeTab)
208 userInfoAge = guiCreateLabel(115,110,450,20,"Age: "..localUserInfo["age"],false,homeTab)
209 userInfoMessengers = guiCreateLabel(115,130,450,25,"Messengers: "..localUserInfo["messengers"],false,homeTab)
210
211 userInfoGuestbook = guiCreateMemo(10,160,220,80,"",false,homeTab)
212 guiMemoSetReadOnly(userInfoGuestbook,true)
213 userInfoAddLine = guiCreateMemo(10,245,175,31,"",false,homeTab)
214 userInfoAddButton = guiCreateButton(190,245,40,30,"Add",false,homeTab)
215 addEventHandler("onClientGUIClick",userInfoAddButton,addOwnUserGuestbookLine,false)
216
217 userInfoTitle = guiCreateLabel(240,160,450,25,"Title: ",false,homeTab)
218 userInfoPoints = guiCreateLabel(240,180,450,25,"Points: ",false,homeTab)
219 userInfoMoney = guiCreateLabel(240,200,450,25,"Money: ",false,homeTab)
220 userInfoJoined = guiCreateLabel(240,220,450,25,"Joined: ",false,homeTab)
221 userInfoPlayTime = guiCreateLabel(240,240,450,25,"Playtime: ",false,homeTab)
222 userInfoAchievements = guiCreateLabel(240,260,450,25,"Achievements: ",false,homeTab)
223
224 messatesButton = guiCreateButton(370,10,110,30,"0 New Messages",false,homeTab)
225 addEventHandler("onClientGUIClick",messatesButton,showInboxWindow,false)
226
227 friendsButton = guiCreateButton(370,45,110,30,"0 Friends Online",false,homeTab)
228 addEventHandler("onClientGUIClick",friendsButton,showFriendsWindow,false)
229
230 editProfileButton = guiCreateButton(400,245,80,30,"Edit Profile",false,homeTab)
231 addEventHandler("onClientGUIClick",editProfileButton,showEditProfileWindow,false)
232
233 guiSetVisible(mainWindow,false)
234 -- Stats Tab
235 statsTab = guiCreateTab("Stats",mainWindowTabpanel)
236
237 statsLabel = guiCreateLabel(10,5,450,45,"Stats",false,statsTab)
238 guiSetFont(statsLabel,"sa-header")
239
240 joinedLabel = guiCreateLabel(10,65,450,25,"Joined: ",false,statsTab)
241 playtimeLabel = guiCreateLabel(10,85,450,25,"Playtime: ",false,statsTab)
242 visitsLabel = guiCreateLabel(10,105,450,25,"Visits: ",false,statsTab)
243 titleLabel = guiCreateLabel(10,125,450,25,"Title: ",false,statsTab)
244 levelLabel = guiCreateLabel(10,145,450,25,"Level: ",false,statsTab)
245 pointsLabel = guiCreateLabel(10,165,450,25,"Points: ",false,statsTab)
246 racesLabel = guiCreateLabel(10,185,450,25,"Races won: ",false,statsTab)
247 destructionDerbyLabel = guiCreateLabel(10,205,450,25,"Destruction Derbies won: ",false,statsTab)
248 achievementsLabel = guiCreateLabel(10,225,450,25,"Achievements: ",false,statsTab)
249 lastSeenLabel = guiCreateLabel(10,245,450,25,"Last seen: ",false,statsTab)
250
251 cashLabel = guiCreateLabel(245,65,450,25,"Money: ",false,statsTab)
252 cashEarnedLabel = guiCreateLabel(245,85,450,25,"Money earned: ",false,statsTab)
253 cashSpentLabel = guiCreateLabel(245,105,450,25,"Money spent: ",false,statsTab)
254 kmtravelledLabel = guiCreateLabel(245,125,450,25,"Distance travelled: ",false,statsTab)
255 deathsLabel = guiCreateLabel(245,145,450,25,"Deaths: ",false,statsTab)
256 characterswrittenLabel = guiCreateLabel(245,165,450,25,"Chat text written: ",false,statsTab)
257 profileviewsLabel = guiCreateLabel(245,185,450,25,"Profile views: ",false,statsTab)
258 guestbookentriesLabel = guiCreateLabel(245,205,450,25,"Guestbook entries: ",false,statsTab)
259
260 -- Achievements Tab
261 achievementsTab = guiCreateTab("Achievements",mainWindowTabpanel)
262
263 achievementsGridList = guiCreateGridList(10,10,200,265,false,achievementsTab)
264 guiGridListAddColumn(achievementsGridList,"Name",0.8)
265 guiGridListAddColumn(achievementsGridList,"",0.01)
266 addEventHandler("onClientGUIClick",achievementsGridList,achievementsShowDescription)
267
268 achievementNameLabel = guiCreateLabel(225,15,450,25,"",false,achievementsTab)
269 achievementsDescriptionMemo = guiCreateMemo(220,40,260,170,"Click on an achievement to see its description.",false,achievementsTab)
270 guiMemoSetReadOnly(achievementsDescriptionMemo,true)
271 achievementAchieveTimeLabel = guiCreateLabel(225,219,450,25,"Achieved on:",false,achievementsTab)
272 achievementsAchieveTimeMemo = guiCreateMemo(220,244,260,31,"-",false,achievementsTab)
273 guiMemoSetReadOnly(achievementsAchieveTimeMemo,true)
274
275 -- Players Tab
276 playersTab = guiCreateTab("Players",mainWindowTabpanel)
277
278 playersTabMain = {}
279 playersTabStats = {}
280 playersTabAchievements = {}
281
282 -- Main page
283 playersTabMain["playerNameLabel"] = guiCreateLabel(10,5,450,45,"Player Profile",false,playersTab)
284 guiSetFont(playersTabMain["playerNameLabel"],"sa-header")
285 playersTabMain["playerAvatarBorder"] = guiCreateStaticImage(avatarBorderLeft,avatarBorderTop,avatarSizeX+20,avatarSizeY+20,"border.png",false,playersTab)
286 playersTabMain["playerAvatar"] = guiCreateStaticImage(avatarBorderLeft+10,avatarBorderTop+10,avatarSizeX,avatarSizeY,"avatars/default.png",false,playersTab)
287
288 playersTabMain["playerInfoName"] = guiCreateLabel(115,70,450,20,"Name: ",false,playersTab)
289 playersTabMain["playerInfoCountry"] = guiCreateLabel(115,90,450,20,"Country: ",false,playersTab)
290 playersTabMain["playerInfoAge"] = guiCreateLabel(115,110,450,20,"Age: ",false,playersTab)
291 playersTabMain["playerInfoMessengers"] = guiCreateLabel(115,130,450,25,"Messengers: ",false,playersTab)
292
293 playersTabMain["playerInfoGuestbook"] = guiCreateMemo(10,160,220,80,"",false,playersTab)
294 guiMemoSetReadOnly(playersTabMain["playerInfoGuestbook"],true)
295 playersTabMain["playerInfoAddLine"] = guiCreateMemo(10,245,175,31,"",false,playersTab)
296 playersTabMain["playerInfoAddButton"] = guiCreateButton(190,245,40,30,"Add",false,playersTab)
297 addEventHandler("onClientGUIClick",playersTabMain["playerInfoAddButton"],addUserGuestbookLine,false)
298
299 playersTabMain["playerInfoTitle"] = guiCreateLabel(240,160,450,25,"Title: ",false,playersTab)
300 playersTabMain["playerInfoPoints"] = guiCreateLabel(240,180,450,25,"Points: ",false,playersTab)
301 playersTabMain["playerInfoMoney"] = guiCreateLabel(240,200,450,25,"Money: ",false,playersTab)
302 playersTabMain["playerInfoJoined"] = guiCreateLabel(240,220,450,25,"Joined: ",false,playersTab)
303 playersTabMain["playerInfoPlayTime"] = guiCreateLabel(240,240,450,25,"Playtime: ",false,playersTab)
304 playersTabMain["playerInfoAchievements"] = guiCreateLabel(240,260,450,25,"Achievements: ",false,playersTab)
305
306 playersTabMain["playerAddFriendButton"] = guiCreateButton(390,140,90,30,"Friend",false,playersTab)
307 addEventHandler("onClientGUIClick",playersTabMain["playerAddFriendButton"],profileAddFriend,false)
308 playersTabMain["playerSendMessageButton"] = guiCreateButton(390,175,90,30,"Message",false,playersTab)
309 addEventHandler("onClientGUIClick",playersTabMain["playerSendMessageButton"],profileSendMessage,false)
310 playersTabMain["playerViewStatsButton"] = guiCreateButton(390,210,90,30,"Stats",false,playersTab)
311 addEventHandler("onClientGUIClick",playersTabMain["playerViewStatsButton"],profileViewStats,false)
312 playersTabMain["playerViewAchievementsButton"] = guiCreateButton(390,245,90,30,"Achievements",false,playersTab)
313 addEventHandler("onClientGUIClick",playersTabMain["playerViewAchievementsButton"],profileViewAchievements,false)
314
315 playersTabMain["playersPlayerSelectMemo"] = guiCreateMemo(305,10,85,31,"Select...",false,playersTab)
316 guiMemoSetReadOnly(playersTabMain["playersPlayerSelectMemo"],true)
317 addEventHandler("onClientGUIClick",playersTabMain["playersPlayerSelectMemo"],clickPlayerSelectionMemo,false)
318
319 playersTabMain["playersPlayerSearchMemo"] = guiCreateMemo(395,10,85,31,"Search...",false,playersTab)
320 addEventHandler("onClientGUIClick",playersTabMain["playersPlayerSearchMemo"],clickPlayersPlayerSearchMemo,false)
321
322 playersTabMain["playerInfoGoButton"] = guiCreateButton(305,46,85,30,"Go",false,playersTab)
323 addEventHandler("onClientGUIClick",playersTabMain["playerInfoGoButton"],clickPlayerInfoGoButton,false)
324
325 playersTabMain["playerInfoResetButton"] = guiCreateButton(395,46,85,30,"Reset",false,playersTab)
326 addEventHandler("onClientGUIClick",playersTabMain["playerInfoResetButton"],clickPlayerInfoResetButton,false)
327
328 -- Stats page
329 playersTabStats["playerStatsLabel"] = guiCreateLabel(10,5,450,45,"Stats",false,playersTab)
330 guiSetFont(playersTabStats["playerStatsLabel"],"sa-header")
331
332 playersTabStats["playerJoinedLabel"] = guiCreateLabel(10,65,450,25,"Joined: ",false,playersTab)
333 playersTabStats["playerPlaytimeLabel"] = guiCreateLabel(10,85,450,25,"Playtime: ",false,playersTab)
334 playersTabStats["playerVisitsLabel"] = guiCreateLabel(10,105,450,25,"Visits: ",false,playersTab)
335 playersTabStats["playerTitleLabel"] = guiCreateLabel(10,125,450,25,"Title: ",false,playersTab)
336 playersTabStats["playerLevelLabel"] = guiCreateLabel(10,145,450,25,"Level: ",false,playersTab)
337 playersTabStats["playerPointsLabel"] = guiCreateLabel(10,165,450,25,"Points: ",false,playersTab)
338 playersTabStats["playerRacesLabel"] = guiCreateLabel(10,185,450,25,"Races won: ",false,playersTab)
339 playersTabStats["playerDestructionDerbyLabel"] = guiCreateLabel(10,205,450,25,"Destruction Derbies won: ",false,playersTab)
340 playersTabStats["playerAchievementsLabel"] = guiCreateLabel(10,225,450,25,"Achievements: ",false,playersTab)
341 playersTabStats["playerLastSeenLabel"] = guiCreateLabel(10,245,450,25,"Last seen: ",false,playersTab)
342
343 playersTabStats["playerCashLabel"] = guiCreateLabel(245,65,450,25,"Money: ",false,playersTab)
344 playersTabStats["playerCashEarnedLabel"] = guiCreateLabel(245,85,450,25,"Money earned: ",false,playersTab)
345 playersTabStats["playerCashSpentLabel"] = guiCreateLabel(245,105,450,25,"Money spent: ",false,playersTab)
346 playersTabStats["playerKmtravelledLabel"] = guiCreateLabel(245,125,450,25,"Distance travelled: ",false,playersTab)
347 playersTabStats["playerDeathsLabel"] = guiCreateLabel(245,145,450,25,"Deaths: ",false,playersTab)
348 playersTabStats["playerCharactersWrittenLabel"] = guiCreateLabel(245,165,450,25,"Chat text written: ",false,playersTab)
349 playersTabStats["playerProfileviewsLabel"] = guiCreateLabel(245,185,450,25,"Profile views: ",false,playersTab)
350 playersTabStats["playerGuestbookentriesLabel"] = guiCreateLabel(245,205,450,25,"Guestbook entries: ",false,playersTab)
351
352 playersTabStats["playerProfileBackButton"] = guiCreateButton(400,245,80,30,"Back",false,playersTab)
353 addEventHandler("onClientGUIClick",playersTabStats["playerProfileBackButton"],playerProfileGoBack,false)
354
355 for k,v in pairs(playersTabStats) do
356 guiSetVisible(v,false)
357 end
358
359 -- Achievements Page
360 playersTabAchievements["playerAchievementsGridList"] = guiCreateGridList(10,10,200,265,false,playersTab)
361 guiGridListAddColumn(playersTabAchievements["playerAchievementsGridList"],"Name",0.8)
362 guiGridListAddColumn(playersTabAchievements["playerAchievementsGridList"],"",0.01)
363 addEventHandler("onClientGUIClick",playersTabAchievements["playerAchievementsGridList"],playerAchievementsShowDescription)
364
365 playersTabAchievements["playerAchievementNameLabel"] = guiCreateLabel(225,15,450,25,"",false,playersTab)
366 playersTabAchievements["playerAchievementsDescriptionMemo"] = guiCreateMemo(220,40,260,170,"Click on an achievement to see its description.",false,playersTab)
367 guiMemoSetReadOnly(playersTabAchievements["playerAchievementsDescriptionMemo"],true)
368 playersTabAchievements["playerAchievementAchieveTimeLabel"] = guiCreateLabel(225,219,450,25,"Achieved on:",false,playersTab)
369 playersTabAchievements["playerAchievementsAchieveTimeMemo"] = guiCreateMemo(220,244,170,31,"-",false,playersTab)
370 guiMemoSetReadOnly(playersTabAchievements["playerAchievementsAchieveTimeMemo"],true)
371
372 playersTabAchievements["playerAchievementsBackButton"] = guiCreateButton(400,245,80,30,"Back",false,playersTab)
373 addEventHandler("onClientGUIClick",playersTabAchievements["playerAchievementsBackButton"],playerProfileGoBack,false)
374
375 for k,v in pairs(playersTabAchievements) do
376 guiSetVisible(v,false)
377 end
378
379 -- Shop Tab
380 shopTab = guiCreateTab("Shop",mainWindowTabpanel)
381 shopLabel = guiCreateLabel(10,5,200,45,"Shop",false,shopTab)
382 guiLabelSetHorizontalAlign(shopLabel,"center",false)
383 guiSetFont(shopLabel,"sa-header")
384 itemsLabel = guiCreateLabel(280,5,200,45,"Items",false,shopTab)
385 guiLabelSetHorizontalAlign(itemsLabel,"center",false)
386 guiSetFont(itemsLabel,"sa-header")
387
388 shopGridList = guiCreateGridList(10,60,200,135,false,shopTab)
389 guiGridListAddColumn(shopGridList,"Item",0.6)
390 guiGridListAddColumn(shopGridList,"Price",0.3)
391 addEventHandler("onClientGUIClick",shopGridList,showItemDescription,false)
392
393 itemGridList = guiCreateGridList(280,60,200,175,false,shopTab)
394 guiGridListAddColumn(itemGridList,"Item",0.6)
395 guiGridListAddColumn(itemGridList,"Amount",0.3)
396 addEventHandler("onClientGUIClick",itemGridList,showItemDescription,false)
397
398 itemDescriptionMemo = guiCreateMemo(10,205,260,70,"Click on an item to see its description.",false,shopTab)
399 guiMemoSetReadOnly(itemDescriptionMemo,true)
400
401 itemBuyButton = guiCreateButton(220,80,50,40,"Buy\n-->",false,shopTab)
402 addEventHandler("onClientGUIClick",itemBuyButton,buyItem,false)
403
404 itemSellButton = guiCreateButton(220,130,50,40,"<--\nSell",false,shopTab)
405 addEventHandler("onClientGUIClick",itemSellButton,sellItem,false)
406 shopMoneyLabel = guiCreateLabel(285,250,110,25,"Money: ",false,shopTab)
407
408 itemUseButton = guiCreateButton(400,245,80,30,"Use Item",false,shopTab)
409 addEventHandler("onClientGUIClick",itemUseButton,clickUseItemButton,false)
410 -- Games Tab
411 gamesTab = guiCreateTab("Games",mainWindowTabpanel)
412 gamesTabMain = {}
413 gamesTabMain["gamesLabel"] = guiCreateLabel(10,5,450,45,"Games",false,gamesTab)
414 guiSetFont(gamesTabMain["gamesLabel"],"sa-header")
415 gamesTabMain["gamesGridList"] = guiCreateGridList(10,60,150,175,false,gamesTab)
416 addEventHandler("onClientGUIClick",gamesTabMain["gamesGridList"],refreshGameHighScores,false)
417 guiGridListAddColumn(gamesTabMain["gamesGridList"],"Game",0.8)
418 gamesHighScores = {}
419 addGamesToGameGridList()
420 gamesTabMain["gamesHighScoresLabel"] = guiCreateLabel(170,60,155,215,"Highscores\n\n1. \n\n2. \n\n3. \n\n4. \n\n5. ",false,gamesTab)
421 gamesTabMain["gamesHighScoresLabel2"] = guiCreateLabel(325,60,155,215,"\n\n6. \n\n7. \n\n8. \n\n9. \n\n10. ",false,gamesTab)
422 gamesTabMain["gamesPlayButton"] = guiCreateButton(10,245,150,30,"Play",false,gamesTab)
423 addEventHandler("onClientGUIClick",gamesTabMain["gamesPlayButton"],clickPlayGameButton,false)
424
425 gamesTabGames = {}
426 gamesTabGames["Snake"] = {}
427 gamesTabGames["Snake"]["barriers"] = {}
428 for i=1,30,1 do
429 table.insert(gamesTabGames["Snake"]["barriers"],guiCreateCheckBox(i*15,15,15,15,"",false,false,gamesTab))
430 end
431 for i=1,30,1 do
432 table.insert(gamesTabGames["Snake"]["barriers"],guiCreateCheckBox(i*15,255,15,15,"",false,false,gamesTab))
433 end
434 for i=2,16,1 do
435 table.insert(gamesTabGames["Snake"]["barriers"],guiCreateCheckBox(15,i*15,15,15,"",false,false,gamesTab))
436 end
437 for i=2,16,1 do
438 table.insert(gamesTabGames["Snake"]["barriers"],guiCreateCheckBox(450,i*15,15,15,"",false,false,gamesTab))
439 end
440 for k,v in pairs(gamesTabGames["Snake"]) do
441 if isElement(v) then
442 guiSetVisible(v,false)
443 elseif type(v) == "table" then
444 for k1,v1 in ipairs(v) do
445 guiSetVisible(v1,false)
446 end
447 end
448 end
449
450 -- Preferences Tab
451 preferencesTab = guiCreateTab("Preferences",mainWindowTabpanel)
452 preferencesLabel = guiCreateLabel(10,5,450,45,"Preferences",false,preferencesTab)
453 guiSetFont(preferencesLabel,"sa-header")
454
455 preferencesGeneralLabel = guiCreateLabel(10,65,450,25,"General Settings: ",false,preferencesTab)
456 guiSetFont(preferencesGeneralLabel,"default-bold-small")
457
458 if localUserSettings["toggleControlswithPanel"] ~= nil then
459 preferencesToggleControlsCheckbox = guiCreateCheckBox(10,85,210,15,"Toggle controls while panel active",localUserSettings["toggleControlswithPanel"],false,preferencesTab)
460 else
461 localUserSettings["toggleControlswithPanel"] = true
462 local node = xmlCreateChild(file,"setting")
463 xmlNodeSetAttribute(node,"name","toggleControlswithPanel")
464 xmlNodeSetAttribute(node,"enabled","true")
465 preferencesToggleControlsCheckbox = guiCreateCheckBox(10,85,210,15,"Toggle controls while panel active",true,false,preferencesTab)
466 end
467 addEventHandler("onClientGUIClick",preferencesToggleControlsCheckbox,toggleSetting,false)
468
469 preferencesNotificationsLabel = guiCreateLabel(10,125,450,25,"Notifications: ",false,preferencesTab)
470 guiSetFont(preferencesNotificationsLabel,"default-bold-small")
471
472 if localUserSettings["notifyFriendAction"] ~= nil then
473 preferencesNotifyFriendCheckbox = guiCreateCheckBox(10,145,210,15,"Friend joined/left",localUserSettings["notifyFriendAction"],false,preferencesTab)
474 else
475 localUserSettings["notifyFriendAction"] = true
476 local node = xmlCreateChild(file,"setting")
477 xmlNodeSetAttribute(node,"name","notifyFriendAction")
478 xmlNodeSetAttribute(node,"enabled","true")
479 preferencesNotifyFriendCheckbox = guiCreateCheckBox(10,145,210,15,"Friend joined/left",true,false,preferencesTab)
480 end
481 addEventHandler("onClientGUIClick",preferencesNotifyFriendCheckbox,toggleSetting,false)
482
483 if localUserSettings["notifyMessageArrived"] ~= nil then
484 preferencesNotifyMessageCheckbox = guiCreateCheckBox(10,165,210,15,"Message arrived",localUserSettings["notifyMessageArrived"],false,preferencesTab)
485 else
486 localUserSettings["notifyMessageArrived"] = true
487 local node = xmlCreateChild(file,"setting")
488 xmlNodeSetAttribute(node,"name","notifyMessageArrived")
489 xmlNodeSetAttribute(node,"enabled","true")
490 preferencesNotifyMessageCheckbox = guiCreateCheckBox(10,165,210,15,"Message arrived",true,false,preferencesTab)
491 end
492 addEventHandler("onClientGUIClick",preferencesNotifyMessageCheckbox,toggleSetting,false)
493
494 if localUserSettings["notifyHighScore"] ~= nil then
495 preferencesNotifyHighscoreCheckbox = guiCreateCheckBox(10,185,210,15,"New highscore",localUserSettings["notifyHighScore"],false,preferencesTab)
496 else
497 localUserSettings["notifyHighScore"] = true
498 local node = xmlCreateChild(file,"setting")
499 xmlNodeSetAttribute(node,"name","notifyHighScore")
500 xmlNodeSetAttribute(node,"enabled","true")
501 preferencesNotifyHighscoreCheckbox = guiCreateCheckBox(10,185,210,15,"New highscore",true,false,preferencesTab)
502 end
503 addEventHandler("onClientGUIClick",preferencesNotifyHighscoreCheckbox,toggleSetting,false)
504
505 preferencesAccountLabel = guiCreateLabel(10,225,450,25,"Account: ",false,preferencesTab)
506 guiSetFont(preferencesAccountLabel,"default-bold-small")
507
508 preferencesSaveToAccountButton = guiCreateButton(10,245,95,30,"Link all info to Account",false,preferencesTab)
509 addEventHandler("onClientGUIClick",preferencesSaveToAccountButton,linkInfoToAccount,false)
510 preferencesGetFromAccountButton = guiCreateButton(115,245,95,30,"Get linked info from Account",false,preferencesTab)
511 addEventHandler("onClientGUIClick",preferencesGetFromAccountButton,getInfoFromAccount,false)
512
513 --preferencesResetAllButton
514
515 -- Create Message Box
516 inboxWindow = guiCreateWindow(screenSizeX*0.5-inboxSizeX*0.5,screenSizeY*0.5-inboxSizeY*0.5,inboxSizeX,inboxSizeY,"Inbox",false)
517 guiWindowSetSizable(inboxWindow,false)
518 inboxGridlist = guiCreateGridList(10,30,490,240,false,inboxWindow)
519 addEventHandler("onClientGUIClick",inboxGridlist,clickInboxGridList,false)
520 guiGridListAddColumn(inboxGridlist,"#",0.07)
521 guiGridListAddColumn(inboxGridlist,"Subject",0.4)
522 guiGridListAddColumn(inboxGridlist,"Autor",0.247)
523 guiGridListAddColumn(inboxGridlist,"Time",0.25)
524
525 inboxSendButton = guiCreateButton(inboxSizeX-90,30,80,30,"Send New",false,inboxWindow)
526 addEventHandler("onClientGUIClick",inboxSendButton,showSendMessageWindow,false)
527 --inboxReadButton = guiCreateButton(inboxSizeX-90,80,80,30,"Read",false,inboxWindow)
528 --inboxDeleteButton = guiCreateButton(inboxSizeX-90,115,80,30,"Delete",false,inboxWindow)
529 --inboxRefreshButton = guiCreateButton(inboxSizeX-90,165,80,30,"Refresh",false,inboxWindow)
530 inboxCloseButton = guiCreateButton(inboxSizeX-90,240,80,30,"Close",false,inboxWindow)
531 addEventHandler("onClientGUIClick",inboxCloseButton,hideInboxWindow,false)
532
533 guiSetVisible(inboxWindow,false)
534
535 -- Create Friends Window
536 friendsWindow = guiCreateWindow(screenSizeX*0.5-friendsSizeX*0.5,screenSizeY*0.5-friendsSizeY*0.5,friendsSizeX,friendsSizeY,"Friends",false)
537 guiWindowSetSizable(friendsWindow,false)
538 friendsGridlist = guiCreateGridList(10,30,190,360,false,friendsWindow)
539 addEventHandler("onClientGUIClick",friendsGridlist,clickFriendsGridlist,false)
540
541 guiGridListAddColumn(friendsGridlist,"On",0.15)
542 guiGridListAddColumn(friendsGridlist,"Name",0.75)
543
544 friendsAddButton = guiCreateButton(friendsSizeX-90,30,80,30,"Add Friend",false,friendsWindow)
545 addEventHandler("onClientGUIClick",friendsAddButton,showAddFriendWindow,false)
546 --friendsRemoveButton = guiCreateButton(friendsSizeX-90,65,80,30,"Remove",false,friendsWindow)
547 friendsCloseButton = guiCreateButton(friendsSizeX-90,360,80,30,"Close",false,friendsWindow)
548 addEventHandler("onClientGUIClick",friendsCloseButton,hideFriendsWindow,false)
549
550 guiSetVisible(friendsWindow,false)
551
552 -- Create Edit Profile Window
553 editProfileWindow = guiCreateWindow(screenSizeX*0.5-editSizeX*0.5,screenSizeY*0.5-editSizeY*0.5,editSizeX,editSizeY,"Edit Profile",false)
554 guiWindowSetSizable(editProfileWindow,false)
555
556 editAvatarBorder = guiCreateStaticImage(10,30,95,95,"border.png",false,editProfileWindow)
557 editAvatar = guiCreateStaticImage(20,40,75,75,"avatars/"..localUserInfo["avatar"]..".png",false,editProfileWindow)
558
559 editCountryLabel = guiCreateLabel(115,35,150,25,"Country:",false,editProfileWindow)
560 editCountryMemo = guiCreateMemo(225,30,165,31,localUserInfo["country"],false,editProfileWindow)
561 editAgeLabel = guiCreateLabel(115,71,150,25,"Age:",false,editProfileWindow)
562 editAgeMemo = guiCreateMemo(225,66,165,31,localUserInfo["age"],false,editProfileWindow)
563 editMessengersLabel = guiCreateLabel(115,107,150,25,"Messengers:",false,editProfileWindow)
564 editMessengersMemo = guiCreateMemo(225,102,165,31,localUserInfo["messengers"],false,editProfileWindow)
565 --editTitleLabel = guiCreateLabel(115,143,150,25,"Custom Title:",false,editProfileWindow)
566 --editTitleMemo = guiCreateMemo(220,138,170,31,"",false,editProfileWindow)
567
568 editAvatarButton = guiCreateButton(20,130,75,30,"Change",false,editProfileWindow)
569 addEventHandler("onClientGUIClick",editAvatarButton,showChangeAvatarWindow,false)
570 editCancelButton = guiCreateButton(editSizeX-175,140,80,30,"Cancel",false,editProfileWindow)
571 addEventHandler("onClientGUIClick",editCancelButton,hideEditProfileWindow,false)
572 editConfirmButton = guiCreateButton(editSizeX-90,140,80,30,"Save",false,editProfileWindow)
573 addEventHandler("onClientGUIClick",editConfirmButton,updateUserProfile,false)
574
575 guiSetVisible(editProfileWindow,false)
576
577 -- Create Add A Friend Window
578 addFriendWindow = guiCreateWindow(screenSizeX*0.5-addFriendSizeX*0.5,screenSizeY*0.5-addFriendSizeY*0.5,addFriendSizeX,addFriendSizeY,"Add A Friend",false)
579 guiWindowSetSizable(addFriendWindow,false)
580
581 friendSelectLabel = guiCreateLabel(20,30,100,25,"Select Player:",false,addFriendWindow)
582 friendSearchLabel = guiCreateLabel(170,30,100,25,"Add manually:",false,addFriendWindow)
583 friendSelectMemo = guiCreateMemo(10,55,135,31,"Select...",false,addFriendWindow)
584 addEventHandler("onClientGUIClick",friendSelectMemo,clickAddFriendSelect,false)
585 guiMemoSetReadOnly(friendSelectMemo,true)
586 --guiSetEnabled(friendSelectMemo,false)
587 friendSearchMemo = guiCreateMemo(155,55,135,31,"Enter Player Name",false,addFriendWindow)
588 addEventHandler("onClientGUIClick",friendSearchMemo,clickAddFriendSearch,false)
589
590 addFriendConfirmButton = guiCreateButton(65,95,80,30,"Add",false,addFriendWindow)
591 addEventHandler("onClientGUIClick",addFriendConfirmButton,clickAddFriendButton,false)
592 addFriendCancelButton = guiCreateButton(155,95,80,30,"Cancel",false,addFriendWindow)
593 addEventHandler("onClientGUIClick",addFriendCancelButton,hideAddFriendWindow,false)
594
595 guiSetVisible(addFriendWindow,false)
596
597 -- Create Send Message Window
598 sendMessageWindow = guiCreateWindow(screenSizeX*0.5-sendMessageSizeX*0.5,screenSizeY*0.5-sendMessageSizeY*0.5,sendMessageSizeX,sendMessageSizeY,"Send Message",false)
599 guiWindowSetSizable(sendMessageWindow,false)
600
601 sendMessageAutorLabel = guiCreateLabel(20,37,200,25,"Autor: ",false,sendMessageWindow)
602 sendMessageAutorMemo = guiCreateMemo(100,30,240,31,getPlayerName(getLocalPlayer()),false,sendMessageWindow)
603 guiMemoSetReadOnly(sendMessageAutorMemo,true)
604 sendMessageToLabel = guiCreateLabel(20,73,200,25,"To: ",false,sendMessageWindow)
605 sendMessageToMemo = guiCreateMemo(100,66,240,31,"",false,sendMessageWindow)
606 sendMessageSubjectLabel = guiCreateLabel(20,109,200,25,"Subject: ",false,sendMessageWindow)
607 sendMessageSubjectMemo = guiCreateMemo(100,102,240,31,"",false,sendMessageWindow)
608 sendMessageMessageMemo = guiCreateMemo(10,143,330,107,"",false,sendMessageWindow)
609 sendMessageSendButton = guiCreateButton(260,260,80,30,"Send",false,sendMessageWindow)
610 addEventHandler("onClientGUIClick",sendMessageSendButton,sendMessage,false)
611 sendMessageCancelButton = guiCreateButton(170,260,80,30,"Cancel",false,sendMessageWindow)
612 addEventHandler("onClientGUIClick",sendMessageCancelButton,hideSendMessageWindow,false)
613
614 guiSetVisible(sendMessageWindow,false)
615
616 -- Create Read Message Window
617 readMessageWindow = guiCreateWindow(screenSizeX*0.5-sendMessageSizeX*0.5,screenSizeY*0.5-sendMessageSizeY*0.5,sendMessageSizeX,sendMessageSizeY,"Read Message",false)
618 guiWindowSetSizable(readMessageWindow,false)
619
620 readMessageSentByLabel = guiCreateLabel(20,37,200,25,"Sent by: ",false,readMessageWindow)
621 readMessageSentByMemo = guiCreateMemo(100,30,240,31,"",false,readMessageWindow)
622 guiMemoSetReadOnly(readMessageSentByMemo,true)
623 readMessageTimeLabel = guiCreateLabel(20,73,200,25,"Time: ",false,readMessageWindow)
624 readMessageTimeMemo = guiCreateMemo(100,66,240,31,"",false,readMessageWindow)
625 guiMemoSetReadOnly(readMessageTimeMemo,true)
626 readMessageSubjectLabel = guiCreateLabel(20,109,200,25,"Subject: ",false,readMessageWindow)
627 readMessageSubjectMemo = guiCreateMemo(100,102,240,31,"",false,readMessageWindow)
628 guiMemoSetReadOnly(readMessageSubjectMemo,true)
629 readMessageMessageMemo = guiCreateMemo(10,143,330,107,"",false,readMessageWindow)
630 guiMemoSetReadOnly(readMessageMessageMemo,true)
631 readMessageCloseButton = guiCreateButton(260,260,80,30,"Close",false,readMessageWindow)
632 addEventHandler("onClientGUIClick",readMessageCloseButton,hideReadMessageWindow,false)
633 readMessageDeleteButton = guiCreateButton(170,260,80,30,"Delete",false,readMessageWindow)
634 addEventHandler("onClientGUIClick",readMessageDeleteButton,deleteMessage,false)
635
636 readMessageAnswerButton = guiCreateButton(10,260,80,30,"Answer",false,readMessageWindow)
637 addEventHandler("onClientGUIClick",readMessageAnswerButton,clickMessageAnswerButton,false)
638
639 guiSetVisible(readMessageWindow,false)
640
641 -- Create Change Avatar Window
642 changeAvatarWindow = guiCreateWindow(screenSizeX*0.5-changeAvatarSizeX*0.5,screenSizeY*0.5-changeAvatarSizeY*0.5,changeAvatarSizeX,changeAvatarSizeY,"Change Avatar",false)
643 guiWindowSetSizable(changeAvatarWindow,false)
644
645 changeAvatarGridlist = guiCreateGridList(10,30,150,140,false,changeAvatarWindow)
646 addEventHandler("onClientGUIClick",changeAvatarGridlist,clickChangeAvatarGrid,false)
647 guiGridListAddColumn(changeAvatarGridlist,"Avatar",0.7)
648
649 for i,v in ipairs(avatarTable) do
650 local row = guiGridListAddRow(changeAvatarGridlist)
651 guiGridListSetItemText(changeAvatarGridlist,row,1,v,false,false)
652 end
653
654 changeAvatarBorder = guiCreateStaticImage(205,30,95,95,"border.png",false,changeAvatarWindow)
655 changeAvatar = guiCreateStaticImage(215,40,75,75,"avatars/"..localUserInfo["avatar"]..".png",false,changeAvatarWindow)
656
657 changeAvatarConfirmButton = guiCreateButton(260,140,80,30,"Confirm",false,changeAvatarWindow)
658 addEventHandler("onClientGUIClick",changeAvatarConfirmButton,changeUserAvatar,false)
659 changeAvatarCancelButton = guiCreateButton(170,140,80,30,"Cancel",false,changeAvatarWindow)
660 addEventHandler("onClientGUIClick",changeAvatarCancelButton,hideChangeAvatarWindow,false)
661
662 guiSetVisible(changeAvatarWindow,false)
663
664 -- Create More Than 1 Player match Window
665 moreThan1MatchWindow = guiCreateWindow(screenSizeX*0.5-moreThan1MatchX*0.5,screenSizeY*0.5-moreThan1MatchY*0.5,moreThan1MatchX,moreThan1MatchY,"More than 1 matching players",false)
666 guiWindowSetSizable(moreThan1MatchWindow,false)
667 moreThan1MatchGridList = guiCreateGridList(10,30,380,170,false,moreThan1MatchWindow)
668 moreThan1MatchOkButton = guiCreateButton(moreThan1MatchX-90,moreThan1MatchY-40,80,30,"Ok",false,moreThan1MatchWindow)
669 addEventHandler("onClientGUIClick",moreThan1MatchOkButton,moreThan1MatchConfirm,false)
670 moreThan1MatchCancelButton = guiCreateButton(moreThan1MatchX-180,moreThan1MatchY-40,80,30,"Cancel",false,moreThan1MatchWindow)
671 addEventHandler("onClientGUIClick",moreThan1MatchCancelButton,moreThan1MatchCancel,false)
672 guiGridListAddColumn(moreThan1MatchGridList,"Name",0.5)
673 guiGridListAddColumn(moreThan1MatchGridList,"Last seen",0.45)
674
675 guiSetVisible(moreThan1MatchWindow,false)
676
677 xmlSaveFile(file)
678 updateFriendList()
679
680 outputChatBox("Press 'u' to open your user panel. (v.."..versionString..")",0,255,0)
681end
682addEventHandler("onClientResourceStart",getResourceRootElement(getThisResource()),resourceStart)
683
684function toggleSetting()
685 if source == preferencesToggleControlsCheckbox then
686 local settingname = "toggleControlswithPanel"
687 localUserSettings[settingname] = not localUserSettings[settingname]
688 for i,v in ipairs(xmlNodeGetChildren(file)) do
689 if xmlNodeGetName(v) == "setting" then
690 if xmlNodeGetAttribute(v,"name") == settingname then
691 xmlNodeSetAttribute(v,"enabled",tostring(localUserSettings[settingname]))
692 end
693 end
694 end
695 elseif source == preferencesNotifyFriendCheckbox then
696 local settingname = "notifyFriendAction"
697 localUserSettings[settingname] = not localUserSettings[settingname]
698 for i,v in ipairs(xmlNodeGetChildren(file)) do
699 if xmlNodeGetName(v) == "setting" then
700 if xmlNodeGetAttribute(v,"name") == settingname then
701 xmlNodeSetAttribute(v,"enabled",tostring(localUserSettings[settingname]))
702 end
703 end
704 end
705 elseif source == preferencesNotifyMessageCheckbox then
706 local settingname = "notifyMessageArrived"
707 localUserSettings[settingname] = not localUserSettings[settingname]
708 for i,v in ipairs(xmlNodeGetChildren(file)) do
709 if xmlNodeGetName(v) == "setting" then
710 if xmlNodeGetAttribute(v,"name") == settingname then
711 xmlNodeSetAttribute(v,"enabled",tostring(localUserSettings[settingname]))
712 end
713 end
714 end
715 elseif source == preferencesNotifyHighscoreCheckbox then
716 local settingname = "notifyHighScore"
717 localUserSettings[settingname] = not localUserSettings[settingname]
718 for i,v in ipairs(xmlNodeGetChildren(file)) do
719 if xmlNodeGetName(v) == "setting" then
720 if xmlNodeGetAttribute(v,"name") == settingname then
721 xmlNodeSetAttribute(v,"enabled",tostring(localUserSettings[settingname]))
722 end
723 end
724 end
725 end
726 xmlSaveFile(file)
727end
728
729function toggleMainWindow()
730 if guiGetVisible(mainWindow) then
731 hideAll()
732 else
733 triggerServerEvent("doRequestRefreshedUserInfo",getLocalPlayer())
734 guiSetVisible(mainWindow,true)
735 guiBringToFront(mainWindow)
736 showCursor(true,localUserSettings["toggleControlswithPanel"])
737 end
738end
739addCommandHandler("userpanel",toggleMainWindow)
740bindKey("u","down","userpanel")
741
742function hideAll()
743 guiMoveToBack(mainWindow)
744 guiSetVisible(mainWindow,false)
745 showCursor(false,localUserSettings["toggleControlswithPanel"])
746 hideInboxWindow()
747 hideFriendsWindow()
748 hideEditProfileWindow()
749 hideAddFriendWindow()
750 hidePlayerSelectionGrid()
751 hideChooseList()
752 hideSendMessageWindow()
753 hideReadMessageWindow()
754 hideInboxChooseList()
755 hideChangeAvatarWindow()
756 hidePlayerChooseList()
757 hideMoreThan1MatchWindow()
758end
759
760function hidePlayersTab()
761 guiGridListClear(playersTabAchievements["playerAchievementsGridList"])
762 hidePlayerAchievementsTab()
763 guiSetText(playersTabMain["playerInfoGuestbook"],"")
764 guiSetText(playersTabMain["playerInfoAddLine"],"")
765 guiSetText(playersTabMain["playerNameLabel"],"Player Profile")
766 guiStaticImageLoadImage(playersTabMain["playerAvatar"],"avatars/default.png")
767 guiSetText(playersTabMain["playerInfoName"],"Name: ")
768 guiSetText(playersTabMain["playerInfoCountry"],"Country: ")
769 guiSetText(playersTabMain["playerInfoAge"],"Age: ")
770 guiSetText(playersTabMain["playerInfoMessengers"],"Messengers: ")
771 guiSetText(playersTabMain["playerInfoTitle"],"Title: ")
772 guiSetText(playersTabMain["playerInfoPoints"],"Points: ")
773 guiSetText(playersTabMain["playerInfoMoney"],"Money: ")
774 guiSetText(playersTabMain["playerInfoJoined"],"Joined: ")
775 guiSetText(playersTabMain["playerInfoPlayTime"],"Playtime: ")
776 guiSetText(playersTabMain["playerInfoAchievements"],"Achievements: ")
777 guiSetText(playersTabStats["playerJoinedLabel"],"Joined: ")
778 guiSetText(playersTabStats["playerPlaytimeLabel"],"Playtime: ")
779 guiSetText(playersTabStats["playerVisitsLabel"],"Visits: ")
780 guiSetText(playersTabStats["playerTitleLabel"],"Title: ")
781 guiSetText(playersTabStats["playerLevelLabel"],"Level: ")
782 guiSetText(playersTabStats["playerRacesLabel"],"Races won: ")
783 guiSetText(playersTabStats["playerDestructionDerbyLabel"],"Derbies won: ")
784 guiSetText(playersTabStats["playerAchievementsLabel"],"Achievements: ")
785 guiSetText(playersTabStats["playerLastSeenLabel"],"Last seen: ")
786 guiSetText(playersTabStats["playerCashLabel"],"Money: ")
787 guiSetText(playersTabStats["playerCashEarnedLabel"],"Money earned: ")
788 guiSetText(playersTabStats["playerCashSpentLabel"],"Money spent: ")
789 guiSetText(playersTabStats["playerDeathsLabel"],"Deaths: ")
790 guiSetText(playersTabStats["playerPointsLabel"],"Points: ")
791 guiSetText(playersTabStats["playerKmtravelledLabel"],"Distance travelled: ")
792 guiSetText(playersTabStats["playerCharactersWrittenLabel"],"Chat text written: ")
793 guiSetText(playersTabStats["playerProfileviewsLabel"],"Profile views: ")
794 guiSetText(playersTabStats["playerGuestbookentriesLabel"],"Guestbook entries: ")
795 guiSetText(playersTabMain["playersPlayerSelectMemo"],"Select...")
796 guiSetText(playersTabMain["playersPlayerSearchMemo"],"Search...")
797end
798
799function clickPlayerInfoResetButton()
800 requestedPlayerInfo = {}
801 hidePlayersTab()
802end
803
804function hideAchievementsTab()
805 guiSetText(achievementsDescriptionMemo,"Click on an achievement to see its description.")
806 guiSetText(achievementNameLabel,"")
807 guiSetText(achievementsAchieveTimeMemo,"-")
808end
809
810function showInboxWindow()
811 guiSetVisible(inboxWindow,true)
812 guiBringToFront(inboxWindow)
813end
814
815function hideInboxWindow()
816 guiMoveToBack(inboxWindow)
817 guiSetVisible(inboxWindow,false)
818end
819
820function showFriendsWindow()
821 guiSetVisible(friendsWindow,true)
822 guiBringToFront(friendsWindow)
823end
824
825function hideFriendsWindow()
826 guiMoveToBack(friendsWindow)
827 guiSetVisible(friendsWindow,false)
828end
829
830function showEditProfileWindow()
831 guiSetVisible(editProfileWindow,true)
832 guiBringToFront(editProfileWindow)
833end
834
835function hideEditProfileWindow()
836 guiMoveToBack(editProfileWindow)
837 guiSetVisible(editProfileWindow,false)
838 guiSetText(editCountryMemo,xmlNodeGetAttribute(file,"usercountry"))
839 guiSetText(editAgeMemo,xmlNodeGetAttribute(file,"userage"))
840 guiSetText(editMessengersMemo,xmlNodeGetAttribute(file,"usermessengers"))
841end
842
843function updateUserProfile()
844 localUserInfo["country"] = guiGetText(editCountryMemo)
845 localUserInfo["age"] = guiGetText(editAgeMemo)
846 localUserInfo["messengers"] = guiGetText(editMessengersMemo)
847 guiSetText(userInfoCountry,"Country: "..localUserInfo["country"])
848 guiSetText(userInfoAge,"Age: "..localUserInfo["age"])
849 guiSetText(userInfoMessengers,"Messengers: "..localUserInfo["messengers"])
850 xmlNodeSetAttribute(file,"usercountry",localUserInfo["country"])
851 xmlNodeSetAttribute(file,"userage",localUserInfo["age"])
852 xmlNodeSetAttribute(file,"usermessengers",localUserInfo["messengers"])
853 xmlSaveFile(file)
854 triggerServerEvent("onClientInfoReturn",getLocalPlayer(),localUserInfo)
855 guiSetVisible(editProfileWindow,false)
856end
857
858function showAddFriendWindow()
859 guiSetVisible(addFriendWindow,true)
860 guiBringToFront(addFriendWindow)
861end
862
863function hideAddFriendWindow()
864 guiMoveToBack(addFriendWindow)
865 guiSetVisible(addFriendWindow,false)
866 guiSetText(friendSelectMemo,"Select...")
867 guiSetText(friendSearchMemo,"Enter Player Name")
868end
869
870function showSendMessageWindow(infotable)
871 guiSetVisible(sendMessageWindow,true)
872 guiBringToFront(sendMessageWindow)
873 if type(infotable) == "table" then
874 if infotable["sendto"] then
875 guiSetText(sendMessageToMemo,infotable["sendto"])
876 end
877 if infotable["subject"] then
878 guiSetText(sendMessageSubjectMemo,infotable["subject"])
879 end
880 if infotable["message"] then
881 guiSetText(sendMessageMessageMemo,infotable["message"])
882 end
883 end
884end
885
886function hideSendMessageWindow()
887 guiMoveToBack(sendMessageWindow)
888 guiSetVisible(sendMessageWindow,false)
889 guiSetText(sendMessageToMemo,"")
890 guiSetText(sendMessageSubjectMemo,"")
891 guiSetText(sendMessageMessageMemo,"")
892end
893
894function showChangeAvatarWindow()
895 guiSetVisible(changeAvatarWindow,true)
896 guiBringToFront(changeAvatarWindow)
897end
898
899function hideChangeAvatarWindow()
900 guiMoveToBack(changeAvatarWindow)
901 guiSetVisible(changeAvatarWindow,false)
902 guiStaticImageLoadImage(changeAvatar,"avatars/"..localUserInfo["avatar"]..".png")
903end
904
905function sendMessage()
906 local sender = string.sub(guiGetText(sendMessageAutorMemo),1,#guiGetText(sendMessageAutorMemo)-1)
907 local sendto = string.sub(guiGetText(sendMessageToMemo),1,#guiGetText(sendMessageToMemo)-1)
908 local subject = string.sub(guiGetText(sendMessageSubjectMemo),1,#guiGetText(sendMessageSubjectMemo)-1)
909 local message = string.sub(guiGetText(sendMessageMessageMemo),1,#guiGetText(sendMessageMessageMemo)-1)
910 if #sender > 0 and #sendto > 0 and #subject > 0 and #message > 0 then
911 triggerServerEvent("onUserPMSend",getLocalPlayer(),{["sentby"]=sender,["sendto"]=sendto,["subject"]=subject,["message"]=message,["unread"]=true})
912 hideSendMessageWindow()
913 end
914end
915
916function showReadMessageWindow(infotable,row)
917 currentlyViewedMessage = row
918 guiSetVisible(readMessageWindow,true)
919 guiBringToFront(readMessageWindow)
920 if type(infotable) == "table" then
921 if infotable["sentby"] then
922 guiSetText(readMessageSentByMemo,infotable["sentby"])
923 end
924 if infotable["time"] then
925 guiSetText(readMessageTimeMemo,infotable["time"])
926 end
927 if infotable["subject"] then
928 guiSetText(readMessageSubjectMemo,infotable["subject"])
929 end
930 if infotable["message"] then
931 guiSetText(readMessageMessageMemo,infotable["message"])
932 end
933 end
934end
935
936function hideReadMessageWindow()
937 guiMoveToBack(readMessageWindow)
938 guiSetVisible(readMessageWindow,false)
939 guiSetText(readMessageSentByMemo,"")
940 guiSetText(readMessageTimeMemo,"")
941 guiSetText(readMessageSubjectMemo,"")
942 guiSetText(readMessageMessageMemo,"")
943end
944
945function hideMoreThan1MatchWindow()
946 guiMoveToBack(moreThan1MatchWindow)
947 guiSetVisible(moreThan1MatchWindow,false)
948end
949
950local addOwnGuestBookTime
951function addOwnUserGuestbookLine()
952 local nowtick = getTickCount()
953 addOwnGuestBookTime = addOwnGuestBookTime or 0
954 if nowtick - addOwnGuestBookTime >= 60000 or not addOwnGuestBookTime then
955 local newtext = guiGetText(userInfoAddLine)
956 local text = string.sub(newtext,1,#newtext-1)
957 if #text >= 5 then
958 triggerServerEvent("onPlayerGuestBookAdd",getLocalPlayer(),call(getResourceFromName("uniqueID"),"getClientPlayerUniqueID"),newtext,true)
959 guiSetText(userInfoAddLine,"")
960 addOwnGuestBookTime = nowtick
961 else
962 outputChatBox("Please write at least 5 characters.")
963 end
964 else
965 outputChatBox("Please wait a minute before posting again.")
966 end
967end
968
969function refreshOwnGuestBook(guestbooktable)
970 local text = ""
971 local sortedtable = reverseITable(guestbooktable)
972 for i,v in ipairs(sortedtable) do
973 local entry = v["player"].." ("..v["time"].."):\n"..v["text"].."---------------\n"
974 text = text..entry
975 end
976 guiSetText(userInfoGuestbook,text)
977end
978addEvent("onOwnGuestBookRefresh",true)
979addEventHandler("onOwnGuestBookRefresh",getRootElement(),refreshOwnGuestBook)
980
981function addUserGuestbookLine()
982 local nowtick = getTickCount()
983 addOwnGuestBookTime = addOwnGuestBookTime or 0
984 if nowtick - addOwnGuestBookTime >= 60000 or not addOwnGuestBookTime then
985 local newtext = guiGetText(playersTabMain["playerInfoAddLine"])
986 local text = string.sub(newtext,1,#newtext-1)
987 if #text >= 5 then
988 triggerServerEvent("onPlayerGuestBookAdd",getLocalPlayer(),requestedPlayerInfo[5],newtext)
989 guiSetText(playersTabMain["playerInfoAddLine"],"")
990 addOwnGuestBookTime = nowtick
991 else
992 outputChatBox("Please write at least 5 characters.")
993 end
994 else
995 outputChatBox("Please wait a minute before posting again.")
996 end
997end
998
999function refreshGuestBook(guestbooktable)
1000 local text = ""
1001 local sortedtable = reverseITable(guestbooktable)
1002 for i,v in ipairs(sortedtable) do
1003 local entry = v["player"].." ("..v["time"].."):\n"..v["text"].."---------------\n"
1004 text = text..entry
1005 end
1006 guiSetText(playersTabMain["playerInfoGuestbook"],text)
1007end
1008addEvent("onGuestBookRefresh",true)
1009addEventHandler("onGuestBookRefresh",getRootElement(),refreshGuestBook)
1010
1011function clickAddFriendSelect()
1012 local posX,posY = guiGetPosition(addFriendWindow,false)
1013 local posX,posY = posX+10,posY+55
1014 createPlayerGridlist(posX,posY,135,33,getElementsByType("player"),getPlayerName)
1015end
1016
1017function clickAddFriendSearch()
1018 guiSetText(friendSearchMemo,"")
1019end
1020
1021function clickPlayersPlayerSearchMemo()
1022 guiSetText(playersTabMain["playersPlayerSearchMemo"],"")
1023end
1024
1025function createPlayerGridlist(posX,posY,sizeX,sizeY,entries,stringfunction)
1026 playerSelectionGrid = guiCreateGridList(posX,posY,sizeX,sizeY+#entries*14,false)
1027 addEventHandler("onClientGUIClick",playerSelectionGrid,gridlistSelect,false)
1028 addEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hidePlayerSelectionGrid,true)
1029 guiGridListAddColumn(playerSelectionGrid,"Select...",0.85)
1030 for i,v in ipairs(entries) do
1031 guiGridListAddRow(playerSelectionGrid)
1032 guiGridListSetItemText(playerSelectionGrid,i-1,1,stringfunction(v),false,false)
1033 end
1034end
1035
1036function gridlistSelect()
1037 local row = guiGridListGetSelectedItem(playerSelectionGrid)
1038 local playername = guiGridListGetItemText(playerSelectionGrid,row,1)
1039 removeEventHandler("onClientGUIClick",playerSelectionGrid,gridlistSelect,false)
1040 removeEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hidePlayerSelectionGrid,true)
1041 destroyElement(playerSelectionGrid)
1042 playerSelectionGrid = nil
1043 if #playername > 0 then
1044 guiSetText(friendSelectMemo,playername)
1045 else
1046 guiSetText(friendSelectMemo,"Select...")
1047 end
1048end
1049
1050function hidePlayerSelectionGrid()
1051 if source ~= playerSelectionGrid and source ~= friendSelectMemo then
1052 if isElement(playerSelectionGrid) then
1053 removeEventHandler("onClientGUIClick",playerSelectionGrid,gridlistSelect,false)
1054 removeEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hidePlayerSelectionGrid,true)
1055 destroyElement(playerSelectionGrid)
1056 playerSelectionGrid = nil
1057 guiSetText(friendSelectMemo,"Select...")
1058 end
1059 end
1060end
1061
1062function handleInput()
1063 if source and isElement(source) and getElementType(source) == "gui-memo" then -- and not guiGetProperty(source,"ReadOnly") == "True" then
1064 guiSetInputEnabled(true)
1065 else
1066 guiSetInputEnabled(false)
1067 end
1068end
1069addEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),handleInput)
1070
1071function clickAddFriendButton()
1072 local input1 = string.sub(guiGetText(friendSelectMemo),1,#guiGetText(friendSelectMemo)-1)
1073 local input2 = string.sub(guiGetText(friendSearchMemo),1,#guiGetText(friendSearchMemo)-1)
1074
1075 local playername
1076 if input1 ~= "Select..." and getPlayerFromNick(input1) then
1077 playername = input1
1078 elseif #input2 > 0 and input2 ~= "Enter Player Name" then
1079 playername = input2
1080 else
1081 outputChatBox("Select or enter a friend first.")
1082 end
1083
1084 addFriend(playername)
1085end
1086
1087function profileAddFriend()
1088 if requestedPlayerInfo[4] then
1089 addFriend(requestedPlayerInfo[4])
1090 end
1091end
1092
1093function addFriend(name)
1094 if name then
1095 local playername = string.lower(name)
1096 local alreadyexists = false
1097
1098 for i,v in ipairs(localUserInfo["friends"]) do
1099 if playername == string.lower(v) then
1100 alreadyexists = true
1101 end
1102 end
1103 if not alreadyexists then
1104 table.insert(localUserInfo["friends"],playername)
1105 local node = xmlCreateChild(file,"friend")
1106 xmlNodeSetAttribute(node,"name",playername)
1107 xmlSaveFile(file)
1108 hideAddFriendWindow()
1109 updateFriendList()
1110 else
1111 outputChatBox("Friend already exists.")
1112 end
1113 end
1114end
1115
1116function clickFriendsGridlist()
1117 if isElement(chooseList) then
1118 removeEventHandler("onClientGUIClick",chooseList,chooseListChoose,false)
1119 removeEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hideChooseList,true)
1120 destroyElement(chooseList)
1121 chooseList = nil
1122 end
1123 local row = guiGridListGetSelectedItem(friendsGridlist)
1124 if row and row ~= -1 then
1125 local posX,posY = getCursorPosition()
1126 --createChooseList(posX*screenSizeX,posY*screenSizeY,135,33,{"View Profile","Send Message","Open Chat","Send Cash","Remove"})
1127 createChooseList(posX*screenSizeX,posY*screenSizeY,135,33,{"View Profile","Send Message","Remove"})
1128 end
1129end
1130
1131function createChooseList(posX,posY,sizeX,sizeY,entries)
1132 chooseList = guiCreateGridList(posX,posY,sizeX,sizeY+#entries*14,false)
1133 addEventHandler("onClientGUIClick",chooseList,chooseListChoose,false)
1134 addEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hideChooseList,true)
1135 guiGridListAddColumn(chooseList,"Select...",0.85)
1136 for i,v in ipairs(entries) do
1137 guiGridListAddRow(chooseList)
1138 guiGridListSetItemText(chooseList,i-1,1,v,false,false)
1139 end
1140end
1141
1142function chooseListChoose()
1143 local row = guiGridListGetSelectedItem(chooseList)
1144 local choice = guiGridListGetItemText(chooseList,row,1)
1145 removeEventHandler("onClientGUIClick",chooseList,chooseListChoose,false)
1146 removeEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hideChooseList,true)
1147 destroyElement(chooseList)
1148 chooseList = nil
1149 if #choice > 0 then
1150 local row = guiGridListGetSelectedItem(friendsGridlist)
1151 local playername = guiGridListGetItemText(friendsGridlist,row,2)
1152 if choice == "View Profile" then
1153 viewProfile(playername)
1154 guiSetSelectedTab(mainWindowTabpanel,playersTab)
1155 hideFriendsWindow()
1156 guiBringToFront(mainWindow)
1157 elseif choice == "Send Message" then
1158 showSendMessageWindow({["sendto"]=playername})
1159 elseif choice == "Open Chat" then
1160 openChat(playername)
1161 elseif choice == "Send Cash" then
1162 sendMoney(playername)
1163 elseif choice == "Remove" then
1164 removeFriend(playername)
1165 end
1166 end
1167end
1168
1169function hideChooseList()
1170 if source ~= chooseList and source ~= friendsGridlist then
1171 if isElement(chooseList) then
1172 removeEventHandler("onClientGUIClick",chooseList,chooseListChoose,false)
1173 removeEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hideChooseList,true)
1174 destroyElement(chooseList)
1175 chooseList = nil
1176 end
1177 end
1178end
1179
1180function clickPlayerSelectionMemo()
1181 if isElement(playerChooseList) then
1182 removeEventHandler("onClientGUIClick",playerChooseList,playerChooseListChoose,false)
1183 removeEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hidePlayerChooseList,true)
1184 destroyElement(playerChooseList)
1185 playerChooseList = nil
1186 end
1187
1188 local posX,posY = guiGetPosition(mainWindow,false)
1189 createPlayerChooseList(posX+315,posY+65,175,33,getElementsByType("player"),getPlayerName)
1190end
1191
1192function createPlayerChooseList(posX,posY,sizeX,sizeY,entries,stringfunction)
1193 playerChooseList = guiCreateGridList(posX,posY,sizeX,sizeY+#entries*14,false)
1194 addEventHandler("onClientGUIClick",playerChooseList,playerChooseListChoose,false)
1195 addEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hidePlayerChooseList,true)
1196 guiGridListAddColumn(playerChooseList,"Select...",0.85)
1197 for i,v in ipairs(entries) do
1198 guiGridListAddRow(playerChooseList)
1199 guiGridListSetItemText(playerChooseList,i-1,1,stringfunction(v),false,false)
1200 end
1201end
1202
1203function playerChooseListChoose()
1204 local row = guiGridListGetSelectedItem(playerChooseList)
1205 local choice = guiGridListGetItemText(playerChooseList,row,1)
1206 removeEventHandler("onClientGUIClick",playerChooseList,playerChooseListChoose,false)
1207 removeEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hidePlayerChooseList,true)
1208 destroyElement(playerChooseList)
1209 playerChooseList = nil
1210 if #choice > 0 then
1211 guiSetText(playersTabMain["playersPlayerSelectMemo"],choice)
1212 else
1213 guiSetText(playersTabMain["playersPlayerSelectMemo"],"Select...")
1214 end
1215end
1216
1217function hidePlayerChooseList()
1218 if source ~= playerChooseList and source ~= playersTabMain["playersPlayerSelectMemo"] then
1219 if isElement(playerChooseList) then
1220 removeEventHandler("onClientGUIClick",playerChooseList,playerChooseListChoose,false)
1221 removeEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hidePlayerChooseList,true)
1222 destroyElement(playerChooseList)
1223 playerChooseList = nil
1224 end
1225 end
1226end
1227
1228function clickInboxGridList()
1229 if isElement(inboxChooseList) then
1230 removeEventHandler("onClientGUIClick",inboxChooseList,inboxChooseListChoose,false)
1231 removeEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hideInboxChooseList,true)
1232 destroyElement(inboxChooseList)
1233 inboxChooseList = nil
1234 end
1235 local row = guiGridListGetSelectedItem(inboxGridlist)
1236 if row and row ~= -1 then
1237 local posX,posY = getCursorPosition()
1238 createInboxChooseList(posX*screenSizeX,posY*screenSizeY,135,33,{"Read","Mark as Read","Delete"})
1239 end
1240end
1241
1242function createInboxChooseList(posX,posY,sizeX,sizeY,entries)
1243 inboxChooseList = guiCreateGridList(posX,posY,sizeX,sizeY+#entries*14,false)
1244 addEventHandler("onClientGUIClick",inboxChooseList,inboxChooseListChoose,false)
1245 addEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hideInboxChooseList,true)
1246 guiGridListAddColumn(inboxChooseList,"Select...",0.85)
1247 for i,v in ipairs(entries) do
1248 guiGridListAddRow(inboxChooseList)
1249 guiGridListSetItemText(inboxChooseList,i-1,1,v,false,false)
1250 end
1251end
1252
1253function inboxChooseListChoose()
1254 local row = guiGridListGetSelectedItem(inboxChooseList)
1255 local choice = guiGridListGetItemText(inboxChooseList,row,1)
1256 removeEventHandler("onClientGUIClick",inboxChooseList,inboxChooseListChoose,false)
1257 removeEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hideInboxChooseList,true)
1258 destroyElement(inboxChooseList)
1259 inboxChooseList = nil
1260 if #choice > 0 then
1261 local row = guiGridListGetSelectedItem(inboxGridlist)
1262 if choice == "Read" then
1263 if guiGridListGetItemData(inboxGridlist,row,1) == "true" then
1264 markMessageRead(row)
1265 end
1266 local infotable = getMessageInfo(row)
1267 showReadMessageWindow(infotable,row)
1268 elseif choice == "Mark as Read" then
1269 if guiGridListGetItemData(inboxGridlist,row,1) == "true" then
1270 markMessageRead(row)
1271 end
1272 elseif choice == "Delete" then
1273 deleteMessage(row)
1274 end
1275 end
1276 updateInbox()
1277end
1278
1279function markMessageRead(row)
1280 guiGridListSetItemData(inboxGridlist,row,1,"false")
1281 guiGridListSetItemText(inboxGridlist,row,2,string.sub(guiGridListGetItemText(inboxGridlist,row,2),3),false,false)
1282 triggerServerEvent("onMessageMarkRead",getLocalPlayer(),getMessageInfo(row))
1283end
1284
1285function deleteMessage(row)
1286 if tonumber(row) then
1287 local info = getMessageInfo(row)
1288 guiGridListRemoveRow(inboxGridlist,row)
1289 triggerServerEvent("onMessageDelete",getLocalPlayer(),info)
1290 else
1291 local info = getMessageInfo(currentlyViewedMessage)
1292 guiGridListRemoveRow(inboxGridlist,currentlyViewedMessage)
1293 hideReadMessageWindow()
1294 triggerServerEvent("onMessageDelete",getLocalPlayer(),info)
1295 end
1296end
1297
1298function hideInboxChooseList()
1299 if source ~= inboxChooseList and source ~= inboxGridlist then
1300 if isElement(inboxChooseList) then
1301 removeEventHandler("onClientGUIClick",inboxChooseList,inboxChooseListChoose,false)
1302 removeEventHandler("onClientGUIClick",getResourceRootElement(getThisResource()),hideInboxChooseList,true)
1303 destroyElement(inboxChooseList)
1304 inboxChooseList = nil
1305 end
1306 end
1307end
1308
1309function getMessageInfo(row)
1310 local infotable = {}
1311 infotable["subject"] = guiGridListGetItemText(inboxGridlist,row,2)
1312 infotable["message"] = guiGridListGetItemData(inboxGridlist,row,2)
1313 infotable["sentby"] = guiGridListGetItemText(inboxGridlist,row,3)
1314 infotable["time"] = guiGridListGetItemText(inboxGridlist,row,4)
1315 return infotable
1316end
1317
1318function removeFriend(playername)
1319 for i,v in ipairs(localUserInfo["friends"]) do
1320 if v == playername then
1321 table.remove(localUserInfo["friends"],i)
1322 end
1323 end
1324 for i,v in ipairs(xmlNodeGetChildren(file)) do
1325 if xmlNodeGetName(v) == "friend" then
1326 if xmlNodeGetAttribute(v,"name") == playername then
1327 xmlDestroyNode(v)
1328 end
1329 end
1330 end
1331 xmlSaveFile(file)
1332 updateFriendList()
1333end
1334
1335function updateFriendList(param,param2)
1336 local onlineFriends = {}
1337 local offlineFriends = {}
1338 for i,v in ipairs(localUserInfo["friends"]) do
1339 if getPlayerFromName(v) and (getPlayerFromName(v) ~= source or not param or (param and param2)) then
1340 table.insert(onlineFriends,v)
1341 if getPlayerFromName(v) and getPlayerFromName(v) == source then
1342 if localUserSettings["notifyFriendAction"] then
1343 -- Notify the Player
1344 playSound("join.wav",false)
1345 local wind = guiCreateWindow(0,0,200,120,"Friend Joined!",false)
1346 guiWindowSetMovable(wind,false)
1347 guiWindowSetSizable(wind,false)
1348 local label = guiCreateLabel(10,30,180,80,getPlayerName(source).." is now online",false,wind)
1349 guiLabelSetHorizontalAlign(label,"center",true)
1350 guiLabelSetVerticalAlign(label,"center")
1351 triggerEvent("onNotification",wind)
1352 end
1353 end
1354 else
1355 table.insert(offlineFriends,v)
1356 if getPlayerFromName(v) and getPlayerFromName(v) == source then
1357 if localUserSettings["notifyFriendAction"] then
1358 -- Notify the Player
1359 --playSound("join.wav",false)
1360 local wind = guiCreateWindow(0,0,200,120,"Friend Left!",false)
1361 guiWindowSetMovable(wind,false)
1362 guiWindowSetSizable(wind,false)
1363 local label = guiCreateLabel(10,30,180,80,getPlayerName(source).." is now offline",false,wind)
1364 guiLabelSetHorizontalAlign(label,"center",true)
1365 guiLabelSetVerticalAlign(label,"center")
1366 triggerEvent("onNotification",wind)
1367 end
1368 end
1369 end
1370 end
1371 guiSetText(friendsButton,#onlineFriends.." Friends Online")
1372 local row = guiGridListGetSelectedItem(friendsGridlist)
1373 local selectedname
1374 if row and row ~= -1 then
1375 selectedname = guiGridListGetItemText(friendsGridlist,row,2)
1376 end
1377 guiGridListClear(friendsGridlist)
1378 for i,v in ipairs(onlineFriends) do
1379 local row = guiGridListAddRow(friendsGridlist)
1380 guiGridListSetItemText(friendsGridlist,row,1,"x",false,false)
1381 guiGridListSetItemText(friendsGridlist,row,2,v,false,false)
1382 if selectedname and selectedname == v then
1383 guiGridListSetSelectedItem(friendsGridlist,row,1)
1384 end
1385 end
1386 for i,v in ipairs(offlineFriends) do
1387 local row = guiGridListAddRow(friendsGridlist)
1388 guiGridListSetItemText(friendsGridlist,row,1,"",false,false)
1389 guiGridListSetItemText(friendsGridlist,row,2,v,false,false)
1390 if selectedname and selectedname == v then
1391 guiGridListSetSelectedItem(friendsGridlist,row,1)
1392 end
1393 end
1394end
1395addEventHandler("onClientPlayerJoin",getRootElement(),updateFriendList)
1396addEventHandler("onClientPlayerQuit",getRootElement(),updateFriendList)
1397addEventHandler("onClientPlayerChangeNick",getRootElement(),updateFriendList)
1398
1399function userPMReceive(infotable)
1400 -- Add the Message to the Board
1401 local row = guiGridListAddRow(inboxGridlist)
1402 guiGridListSetItemText(inboxGridlist,row,1,tostring(row+1),false,true)
1403 guiGridListSetItemData(inboxGridlist,row,1,"true")
1404 guiGridListSetItemText(inboxGridlist,row,2,"* "..infotable["subject"],false,false)
1405 guiGridListSetItemData(inboxGridlist,row,2,infotable["message"])
1406 guiGridListSetItemText(inboxGridlist,row,3,infotable["sentby"],false,false)
1407 guiGridListSetItemText(inboxGridlist,row,4,infotable["time"],false,false)
1408
1409 if infotable["unread"] then
1410 guiGridListSetItemData(inboxGridlist,row,1,"true")
1411 guiGridListSetItemText(inboxGridlist,row,2,"* "..infotable["subject"],false,false)
1412 if localUserSettings["notifyMessageArrived"] then
1413 -- Notify the Player
1414 playSound("message2.wav",false)
1415 local wind = guiCreateWindow(0,0,200,120,"New Message!",false)
1416 guiWindowSetMovable(wind,false)
1417 guiWindowSetSizable(wind,false)
1418 local label = guiCreateLabel(10,30,180,80,"Subject: "..infotable["subject"].."\nSent by: "..infotable["sentby"].."\n\n\""..string.sub(infotable["message"],1,50).."...\"",false,wind)
1419 guiLabelSetHorizontalAlign(label,"center",true)
1420 guiLabelSetVerticalAlign(label,"center")
1421 triggerEvent("onNotification",wind)
1422 end
1423 else
1424 guiGridListSetItemData(inboxGridlist,row,1,"false")
1425 guiGridListSetItemText(inboxGridlist,row,2,infotable["subject"],false,false)
1426 end
1427
1428 updateInbox()
1429end
1430addEvent("onUserPMReceive",true)
1431addEventHandler("onUserPMReceive",getRootElement(),userPMReceive)
1432
1433function clickMessageAnswerButton()
1434 local infotable = {}
1435 infotable["sendto"] = guiGetText(readMessageSentByMemo)
1436 infotable["subject"] = "Re: "..guiGetText(readMessageSubjectMemo)
1437 showSendMessageWindow(infotable)
1438 hideReadMessageWindow()
1439end
1440
1441function profileSendMessage()
1442 if requestedPlayerInfo[4] then
1443 local infotable = {}
1444 infotable["sendto"] = requestedPlayerInfo[4]
1445 infotable["sendtoserial"] = requestedPlayerInfo[5]
1446 showSendMessageWindow(infotable)
1447 end
1448end
1449
1450function clickChangeAvatarGrid()
1451 local row = guiGridListGetSelectedItem(changeAvatarGridlist)
1452 local avatar = "avatars/"..guiGridListGetItemText(changeAvatarGridlist,row,1)..".png"
1453 guiStaticImageLoadImage(changeAvatar,avatar)
1454end
1455
1456function changeUserAvatar()
1457 local row = guiGridListGetSelectedItem(changeAvatarGridlist)
1458 localUserInfo["avatar"] = guiGridListGetItemText(changeAvatarGridlist,row,1)
1459 xmlNodeSetAttribute(file,"useravatar",localUserInfo["avatar"])
1460 guiStaticImageLoadImage(changeAvatar,"avatars/"..localUserInfo["avatar"]..".png")
1461 guiStaticImageLoadImage(userAvatar,"avatars/"..localUserInfo["avatar"]..".png")
1462 guiStaticImageLoadImage(editAvatar,"avatars/"..localUserInfo["avatar"]..".png")
1463 triggerServerEvent("onClientInfoReturn",getLocalPlayer(),localUserInfo)
1464 hideChangeAvatarWindow()
1465end
1466
1467function updateInbox()
1468 local unread = 0
1469 for i=0,guiGridListGetRowCount(inboxGridlist)-1,1 do
1470 if guiGridListGetItemData(inboxGridlist,i,1) == "true" then
1471 unread = unread + 1
1472 end
1473 end
1474 guiSetText(messatesButton,unread.." New Messages")
1475end
1476
1477function updateAchievementList(player,achievement,achievementtext,achievetime)
1478 for i=0,guiGridListGetRowCount(achievementsGridList),1 do
1479 if achievement == guiGridListGetItemText(achievementsGridList,i,1) then
1480 guiGridListSetItemText(achievementsGridList,i,2,"x",false,false)
1481 guiGridListSetItemData(achievementsGridList,i,2,achievetime)
1482 end
1483 end
1484end
1485addEvent("onAchievementUnlock",true)
1486addEventHandler("onAchievementUnlock",getLocalPlayer(),updateAchievementList)
1487
1488function achievementsShowDescription()
1489 local row,column = guiGridListGetSelectedItem(achievementsGridList)
1490 if row == -1 then
1491 guiSetText(achievementsDescriptionMemo,"Click on an achievement to see its description.")
1492 guiSetText(achievementNameLabel,"")
1493 guiSetText(achievementsAchieveTimeMemo,"-")
1494 else
1495 guiSetText(achievementsDescriptionMemo,guiGridListGetItemData(achievementsGridList,row,1))
1496 guiSetText(achievementNameLabel,guiGridListGetItemText(achievementsGridList,row,1))
1497 if not guiSetText(achievementsAchieveTimeMemo,guiGridListGetItemData(achievementsGridList,row,2)) then
1498 guiSetText(achievementsAchieveTimeMemo,"-")
1499 end
1500 end
1501end
1502
1503function clientInfoRequest(pms,itemlist,clientitems)
1504 for i,v in ipairs(pms) do
1505 userPMReceive(v)
1506 end
1507 shopItems = itemlist
1508 for i,v in ipairs(itemlist) do
1509 local row = guiGridListAddRow(shopGridList)
1510 guiGridListSetItemText(shopGridList,row,1,v["name"],false,false)
1511 guiGridListSetItemData(shopGridList,row,1,v["description"])
1512 guiGridListSetItemText(shopGridList,row,2,v["price"].."$",false,false)
1513 guiGridListSetItemData(shopGridList,row,2,v["unique"])
1514 end
1515 playerItems = clientitems
1516 for i,v in ipairs(clientitems) do
1517 local row = guiGridListAddRow(itemGridList)
1518 guiGridListSetItemText(itemGridList,row,1,v["name"],false,false)
1519 local description
1520 local unique
1521 for i1,v1 in ipairs(itemlist) do
1522 if v["name"] == v1["name"] then
1523 description = v1["description"]
1524 unique = v1["unique"]
1525 end
1526 end
1527 guiGridListSetItemData(itemGridList,row,1,description)
1528 if unique then
1529 guiGridListSetItemText(itemGridList,row,2,"unlimited",false,true)
1530 else
1531 guiGridListSetItemText(itemGridList,row,2,tostring(v["amount"]),false,true)
1532 end
1533 end
1534 triggerServerEvent("onClientInfoReturn",getLocalPlayer(),localUserInfo)
1535end
1536addEvent("onClientInfoRequest",true)
1537addEventHandler("onClientInfoRequest",getRootElement(),clientInfoRequest)
1538
1539function clientRefreshedInfoRequest(info,stats,list,guestbook,snakescores)
1540 writeInfo(info,stats,list,guestbook,snakescores)
1541end
1542addEvent("onClientRefreshedInfoRequest",true)
1543addEventHandler("onClientRefreshedInfoRequest",getRootElement(),clientRefreshedInfoRequest)
1544
1545function writeInfo(info,stats,list,guestbook,highscores)
1546 for k,v in pairs(highscores) do
1547 gamesHighScores[k] = v
1548 end
1549 refreshGameHighScores()
1550
1551 local achieved = 0
1552
1553 guiSetText(userNameLabel,getPlayerName(getLocalPlayer()))
1554 guiSetText(userInfoName,"Name: "..getPlayerName(getLocalPlayer()))
1555
1556 guiGridListClear(achievementsGridList)
1557 hideAchievementsTab()
1558 --guiGridListAddColumn(achievementsGridList,"Name",0.8)
1559 --guiGridListAddColumn(achievementsGridList,"",0.01)
1560
1561 for k,v in pairs(list) do
1562 local rownumber = guiGridListAddRow(achievementsGridList)
1563 guiGridListSetItemText(achievementsGridList,rownumber,1,v[1],false,false)
1564 guiGridListSetItemData(achievementsGridList,rownumber,1,v[2])
1565 if v[3] then
1566 achieved = achieved + 1
1567 guiGridListSetItemText(achievementsGridList,rownumber,2,"x",false,false)
1568 guiGridListSetItemData(achievementsGridList,rownumber,2,v[3])
1569 end
1570 end
1571
1572 local text = ""
1573 local sortedtable = reverseITable(guestbook)
1574 for i,v in ipairs(sortedtable) do
1575 local entry = v["player"].." ("..v["time"].."):\n"..v["text"].."---------------\n"
1576 text = text..entry
1577 end
1578 guiSetText(userInfoGuestbook,text)
1579
1580 guiSetText(userInfoTitle,"Title: Lv. "..stats["level"].." "..stats["title"])
1581 guiSetText(userInfoPoints,"Points: "..round(stats["points"]))
1582 guiSetText(userInfoMoney,"Money: "..stats["money"].."$")
1583 guiSetText(shopMoneyLabel,"Money: "..stats["money"].."$")
1584 guiSetText(userInfoJoined,"Joined: "..stats["joined"])
1585 guiSetText(userInfoPlayTime,"Playtime: "..toHoursMinutes(stats["playtime"]).." hours")
1586 guiSetText(userInfoAchievements,"Achievements: "..tostring(achieved).."/"..tostring(#list))
1587
1588 guiSetText(joinedLabel,"Joined: "..stats["joined"])
1589 guiSetText(playtimeLabel,"Playtime: "..toHoursMinutes(stats["playtime"]).." hours")
1590 guiSetText(visitsLabel,"Visits: "..stats["visits"])
1591 guiSetText(titleLabel,"Title: "..stats["title"])
1592 guiSetText(levelLabel,"Level: "..stats["level"])
1593
1594 if stats["racesplayed"] > 0 then
1595 guiSetText(racesLabel,"Races won: "..stats["raceswon"].."/"..stats["racesplayed"].." ("..round(stats["raceswon"]/stats["racesplayed"]*100).."%)")
1596 else
1597 guiSetText(racesLabel,"Races won: "..stats["raceswon"].."/"..stats["racesplayed"])
1598 end
1599
1600 if stats["ddsplayed"] > 0 then
1601 guiSetText(destructionDerbyLabel,"Derbies won: "..stats["ddswon"].."/"..stats["ddsplayed"].." ("..round(stats["ddswon"]/stats["ddsplayed"]*100).."%)")
1602 else
1603 guiSetText(destructionDerbyLabel,"Derbies won: "..stats["ddswon"].."/"..stats["ddsplayed"])
1604 end
1605
1606 guiSetText(achievementsLabel,"Achievements: "..tostring(achieved).."/"..tostring(#list))
1607 guiSetText(lastSeenLabel,"Last seen: "..stats["lastseen"])
1608
1609 guiSetText(cashLabel,"Money: "..stats["money"].."$")
1610 guiSetText(cashEarnedLabel,"Money earned: "..stats["moneyearned"].."$")
1611 guiSetText(cashSpentLabel,"Money spent: "..stats["moneyspent"].."$")
1612 guiSetText(deathsLabel,"Deaths: "..stats["deaths"])
1613
1614 if stats["playtime"] > 0 then
1615 guiSetText(pointsLabel,"Points: "..round(stats["points"]).." ("..round(stats["points"]/(stats["playtime"]/60)).."/h)")
1616 if stats["distancetravelled"]) >= 100000 then
1617 guiSetText(kmtravelledLabel,"Distance travelled: "..round(stats["distancetravelled"]/1000,0).."k Km ("..round(stats["distancetravelled"]/(stats["playtime"]/60)).."/h)")
1618 elseif stats["distancetravelled"]) >= 1000 then
1619 guiSetText(kmtravelledLabel,"Distance travelled: "..round(stats["distancetravelled"],0).." Km ("..round(stats["distancetravelled"]/(stats["playtime"]/60)).."/h)")
1620 else
1621 guiSetText(kmtravelledLabel,"Distance travelled: "..round(stats["distancetravelled"]).." Km ("..round(stats["distancetravelled"]/(stats["playtime"]/60)).."/h)")
1622 end
1623 guiSetText(characterswrittenLabel,"Chat text written: "..stats["characterswritten"].." ("..round(stats["characterswritten"]/(stats["playtime"]/60)).."/h)")
1624 else
1625 guiSetText(pointsLabel,"Points: "..round(stats["points"]).." (0/h)")
1626 if stats["distancetravelled"]) >= 100000 then
1627 guiSetText(kmtravelledLabel,"Distance travelled: "..round(stats["distancetravelled"]/1000,0).."k Km (0/h)")
1628 elseif stats["distancetravelled"]) >= 1000 then
1629 guiSetText(kmtravelledLabel,"Distance travelled: "..round(stats["distancetravelled"],0).." Km (0/h)")
1630 else
1631 guiSetText(kmtravelledLabel,"Distance travelled: "..round(stats["distancetravelled"]).." Km (0/h)")
1632 end
1633 guiSetText(characterswrittenLabel,"Chat text written: "..stats["characterswritten"].." (0/h)")
1634 end
1635
1636 guiSetText(profileviewsLabel,"Profile views: "..info["profileviews"])
1637 guiSetText(guestbookentriesLabel,"Guestbook entries: "..tostring(#guestbook))
1638end
1639
1640function clickPlayerInfoGoButton()
1641 local input1 = string.sub(guiGetText(playersTabMain["playersPlayerSelectMemo"]),1,#guiGetText(playersTabMain["playersPlayerSelectMemo"])-1)
1642 local input2 = string.sub(guiGetText(playersTabMain["playersPlayerSearchMemo"]),1,#guiGetText(playersTabMain["playersPlayerSearchMemo"])-1)
1643
1644 local playername
1645 if input1 ~= "Select..." and getPlayerFromNick(input1) then
1646 playername = input1
1647 elseif #input2 > 0 and input2 ~= "Search..." then
1648 playername = input2
1649 else
1650 outputChatBox("Select or enter someone first.")
1651 end
1652
1653 if playername then
1654 viewProfile(playername)
1655 end
1656end
1657
1658function viewProfile(name)
1659 triggerServerEvent("doRequestPlayerInfo",getLocalPlayer(),name)
1660end
1661
1662function hidePlayerAchievementsTab()
1663 guiSetText(playersTabAchievements["playerAchievementsDescriptionMemo"],"Click on an achievement to see its description.")
1664 guiSetText(playersTabAchievements["playerAchievementNameLabel"],"")
1665 guiSetText(playersTabAchievements["playerAchievementsAchieveTimeMemo"],"-")
1666end
1667
1668function playerAchievementsShowDescription()
1669 local row,column = guiGridListGetSelectedItem(playersTabAchievements["playerAchievementsGridList"])
1670 if row == -1 then
1671 guiSetText(playersTabAchievements["playerAchievementsDescriptionMemo"],"Click on an achievement to see its description.")
1672 guiSetText(playersTabAchievements["playerAchievementNameLabel"],"")
1673 guiSetText(playersTabAchievements["playerAchievementsAchieveTimeMemo"],"-")
1674 else
1675 guiSetText(playersTabAchievements["playerAchievementsDescriptionMemo"],guiGridListGetItemData(playersTabAchievements["playerAchievementsGridList"],row,1))
1676 guiSetText(playersTabAchievements["playerAchievementNameLabel"],guiGridListGetItemText(playersTabAchievements["playerAchievementsGridList"],row,1))
1677 if not guiSetText(playersTabAchievements["playerAchievementsAchieveTimeMemo"],guiGridListGetItemData(playersTabAchievements["playerAchievementsGridList"],row,2)) then
1678 guiSetText(playersTabAchievements["playerAchievementsAchieveTimeMemo"],"-")
1679 end
1680 end
1681end
1682
1683function requestedPlayerInfoReturn(info,stats,list,guestbook,name,playerid)
1684 requestedPlayerInfo[1] = info
1685 requestedPlayerInfo[2] = stats
1686 requestedPlayerInfo[3] = list
1687 requestedPlayerInfo[4] = name
1688 requestedPlayerInfo[5] = playerid
1689
1690 local achieved = 0
1691
1692 guiGridListClear(playersTabAchievements["playerAchievementsGridList"])
1693 hidePlayerAchievementsTab()
1694 --guiGridListAddColumn(playersTabAchievements["playerAchievementsGridList"],"Name",0.8)
1695 --guiGridListAddColumn(playersTabAchievements["playerAchievementsGridList"],"",0.01)
1696
1697 for k,v in pairs(list) do
1698 local rownumber = guiGridListAddRow(playersTabAchievements["playerAchievementsGridList"])
1699 guiGridListSetItemText(playersTabAchievements["playerAchievementsGridList"],rownumber,1,v[1],false,false)
1700 guiGridListSetItemData(playersTabAchievements["playerAchievementsGridList"],rownumber,1,v[2])
1701 if v[3] then
1702 achieved = achieved + 1
1703 guiGridListSetItemText(playersTabAchievements["playerAchievementsGridList"],rownumber,2,"x",false,false)
1704 guiGridListSetItemData(playersTabAchievements["playerAchievementsGridList"],rownumber,2,v[3])
1705 end
1706 end
1707
1708 local text = ""
1709 local sortedtable = reverseITable(guestbook)
1710 for i,v in ipairs(sortedtable) do
1711 local entry = v["player"].." ("..v["time"].."):\n"..v["text"].."---------------\n"
1712 text = text..entry
1713 end
1714 guiSetText(playersTabMain["playerInfoGuestbook"],text)
1715
1716 guiSetText(playersTabMain["playerNameLabel"],name)
1717
1718 if info["avatar"] then
1719 guiStaticImageLoadImage(playersTabMain["playerAvatar"],"avatars/"..info["avatar"]..".png")
1720 else
1721 guiStaticImageLoadImage(playersTabMain["playerAvatar"],"avatars/default.png")
1722 end
1723
1724 guiSetText(playersTabMain["playerInfoName"],"Name: "..name)
1725 guiSetText(playersTabMain["playerInfoCountry"],"Country: "..info["country"])
1726 guiSetText(playersTabMain["playerInfoAge"],"Age: "..info["age"])
1727 guiSetText(playersTabMain["playerInfoMessengers"],"Messengers: "..info["messengers"])
1728 guiSetText(playersTabMain["playerInfoTitle"],"Title: Lv. "..stats["level"].." "..stats["title"])
1729 guiSetText(playersTabMain["playerInfoPoints"],"Points: "..round(stats["points"]))
1730 guiSetText(playersTabMain["playerInfoMoney"],"Money: "..stats["money"].."$")
1731 guiSetText(playersTabMain["playerInfoJoined"],"Joined: "..stats["joined"])
1732 guiSetText(playersTabMain["playerInfoPlayTime"],"Playtime: "..toHoursMinutes(stats["playtime"]).." hours")
1733 guiSetText(playersTabMain["playerInfoAchievements"],"Achievements: "..tostring(achieved).."/"..tostring(#list))
1734
1735 guiSetText(playersTabStats["playerJoinedLabel"],"Joined: "..stats["joined"])
1736 guiSetText(playersTabStats["playerPlaytimeLabel"],"Playtime: "..toHoursMinutes(stats["playtime"]).." hours")
1737 guiSetText(playersTabStats["playerVisitsLabel"],"Visits: "..stats["visits"])
1738 guiSetText(playersTabStats["playerTitleLabel"],"Title: "..stats["title"])
1739 guiSetText(playersTabStats["playerLevelLabel"],"Level: "..stats["level"])
1740
1741 if stats["racesplayed"] > 0 then
1742 guiSetText(playersTabStats["playerRacesLabel"],"Races won: "..stats["raceswon"].."/"..stats["racesplayed"].." ("..round(stats["raceswon"]/stats["racesplayed"]*100).."%)")
1743 else
1744 guiSetText(playersTabStats["playerRacesLabel"],"Races won: "..stats["raceswon"].."/"..stats["racesplayed"])
1745 end
1746
1747 if stats["ddsplayed"] > 0 then
1748 guiSetText(playersTabStats["playerDestructionDerbyLabel"],"Derbies won: "..stats["ddswon"].."/"..stats["ddsplayed"].." ("..round(stats["ddswon"]/stats["ddsplayed"]*100).."%)")
1749 else
1750 guiSetText(playersTabStats["playerDestructionDerbyLabel"],"Derbies won: "..stats["ddswon"].."/"..stats["ddsplayed"])
1751 end
1752
1753 guiSetText(playersTabStats["playerAchievementsLabel"],"Achievements: "..tostring(achieved).."/"..tostring(#list))
1754 guiSetText(playersTabStats["playerLastSeenLabel"],"Last seen: "..stats["lastseen"])
1755
1756 guiSetText(playersTabStats["playerCashLabel"],"Money: "..stats["money"].."$")
1757 guiSetText(playersTabStats["playerCashEarnedLabel"],"Money earned: "..stats["moneyearned"].."$")
1758 guiSetText(playersTabStats["playerCashSpentLabel"],"Money spent: "..stats["moneyspent"].."$")
1759 guiSetText(playersTabStats["playerDeathsLabel"],"Deaths: "..stats["deaths"])
1760
1761 if stats["playtime"] > 0 then
1762 guiSetText(playersTabStats["playerPointsLabel"],"Points: "..round(stats["points"]).." ("..round(stats["points"]/(stats["playtime"]/60)).."/h)")
1763 guiSetText(playersTabStats["playerKmtravelledLabel"],"Distance travelled: "..round(stats["distancetravelled"]).." Km ("..round(stats["distancetravelled"]/(stats["playtime"]/60)).."/h)")
1764 guiSetText(playersTabStats["playerCharactersWrittenLabel"],"Chat text written: "..stats["characterswritten"].." ("..round(stats["characterswritten"]/(stats["playtime"]/60)).."/h)")
1765 else
1766 guiSetText(playersTabStats["playerPointsLabel"],"Points: "..round(stats["points"]).." (0/h)")
1767 guiSetText(playersTabStats["playerKmtravelledLabel"],"Distance travelled: "..round(stats["distancetravelled"]).." Km (0/h)")
1768 guiSetText(playersTabStats["playerCharactersWrittenLabel"],"Chat text written: "..stats["characterswritten"].." (0/h)")
1769 end
1770
1771 guiSetText(playersTabStats["playerProfileviewsLabel"],"Profile views: "..info["profileviews"])
1772 guiSetText(playersTabStats["playerGuestbookentriesLabel"],"Guestbook entries: "..tostring(#guestbook))
1773end
1774addEvent("onRequestedPlayerInfoReturn",true)
1775addEventHandler("onRequestedPlayerInfoReturn",getRootElement(),requestedPlayerInfoReturn)
1776
1777function showItemDescription()
1778 if source == shopGridList then
1779 guiGridListSetSelectedItem(itemGridList,0,0)
1780 local row,column = guiGridListGetSelectedItem(shopGridList)
1781 if row == -1 then
1782 guiSetText(itemDescriptionMemo,"Click on an item to see its description.")
1783 else
1784 guiSetText(itemDescriptionMemo,guiGridListGetItemData(shopGridList,row,1))
1785 end
1786 elseif source == itemGridList then
1787 guiGridListSetSelectedItem(shopGridList,0,0)
1788 local row,column = guiGridListGetSelectedItem(itemGridList)
1789 if row == -1 then
1790 guiSetText(itemDescriptionMemo,"Click on an item to see its description.")
1791 else
1792 guiSetText(itemDescriptionMemo,guiGridListGetItemData(itemGridList,row,1))
1793 end
1794 end
1795end
1796
1797function buyItem()
1798 local row,column = guiGridListGetSelectedItem(shopGridList)
1799 local name = guiGridListGetItemText(shopGridList,row,1)
1800 local unique
1801 for i,v in ipairs(shopItems) do
1802 if name == v["name"] then
1803 unique = v["unique"]
1804 end
1805 end
1806 if unique then
1807 local exist = false
1808 for i,v in ipairs(playerItems) do
1809 if v["name"] == name then
1810 exist = true
1811 end
1812 end
1813 if not exist then
1814 triggerServerEvent("onClientItemBuy",getLocalPlayer(),name)
1815 else
1816 outputChatBox("You can't buy another one.")
1817 end
1818 else
1819 triggerServerEvent("onClientItemBuy",getLocalPlayer(),name)
1820 end
1821end
1822
1823function sellItem()
1824 local row,column = guiGridListGetSelectedItem(itemGridList)
1825 local name = guiGridListGetItemText(itemGridList,row,1)
1826 triggerServerEvent("onClientItemSell",getLocalPlayer(),name)
1827end
1828
1829function clientItemrefresh(clientitems,money)
1830 playerItems = clientitems
1831 if money then
1832 guiSetText(shopMoneyLabel,"Money: "..money.."$")
1833 end
1834 local selectedrow = guiGridListGetSelectedItem(itemGridList)
1835 local item
1836 if selectedrow ~= -1 then
1837 item = guiGridListGetItemText(itemGridList,selectedrow,1)
1838 end
1839 guiGridListClear(itemGridList)
1840 for i,v in ipairs(clientitems) do
1841 local row = guiGridListAddRow(itemGridList)
1842 guiGridListSetItemText(itemGridList,row,1,v["name"],false,false)
1843 local description
1844 local unique
1845 for i1,v1 in ipairs(shopItems) do
1846 if v["name"] == v1["name"] then
1847 description = v1["description"]
1848 unique = v1["unique"]
1849 end
1850 end
1851 if v["name"] == item then
1852 guiGridListSetSelectedItem(itemGridList,row,1)
1853 end
1854 guiGridListSetItemData(itemGridList,row,1,description)
1855 if unique then
1856 guiGridListSetItemText(itemGridList,row,2,"unlimited",false,false)
1857 else
1858 guiGridListSetItemText(itemGridList,row,2,tostring(v["amount"]),false,true)
1859 end
1860 end
1861end
1862addEvent("onClientItemsRefresh",true)
1863addEventHandler("onClientItemsRefresh",getRootElement(),clientItemrefresh)
1864
1865function clickUseItemButton()
1866 local row,column = guiGridListGetSelectedItem(itemGridList)
1867 triggerServerEvent("onClientPlayerUseItem",getLocalPlayer(),getLocalPlayer(),guiGridListGetItemText(itemGridList,row,1))
1868end
1869
1870function addGamesToGameGridList()
1871 local row = guiGridListAddRow(gamesTabMain["gamesGridList"])
1872 guiGridListSetItemText(gamesTabMain["gamesGridList"],row,1,"Snake",false,false)
1873 gamesHighScores["Snake"] = {}
1874end
1875
1876function clickPlayGameButton()
1877 local row = guiGridListGetSelectedItem(gamesTabMain["gamesGridList"])
1878 if row ~= -1 then
1879 local game = guiGridListGetItemText(gamesTabMain["gamesGridList"],row,1)
1880 for k,v in pairs(gamesTabMain) do
1881 guiSetVisible(v,false)
1882 end
1883 for k,v in pairs(gamesTabGames[game]) do
1884 if isElement(v) then
1885 guiSetVisible(v,true)
1886 elseif type(v) == "table" then
1887 for k1,v1 in ipairs(v) do
1888 if isElement(v1) then
1889 guiSetVisible(v1,true)
1890 end
1891 end
1892 end
1893 end
1894 startGame(game)
1895 end
1896end
1897
1898function startGame(game)
1899 if game == "Snake" then
1900 startSnake()
1901 elseif game == "Tetris" then
1902
1903 end
1904end
1905
1906function startSnake()
1907 bindKey("w","down",snakeControl)
1908 bindKey("s","down",snakeControl)
1909 bindKey("a","down",snakeControl)
1910 bindKey("d","down",snakeControl)
1911 bindKey("arrow_u","down",snakeControl)
1912 bindKey("arrow_d","down",snakeControl)
1913 bindKey("arrow_l","down",snakeControl)
1914 bindKey("arrow_r","down",snakeControl)
1915
1916 snakeCreateDot()
1917 gamesTabGames["Snake"]["score"] = guiCreateLabel(340,35,100,20,"0",false,gamesTab)
1918 guiLabelSetHorizontalAlign(gamesTabGames["Snake"]["score"],"right",false)
1919
1920 gamesTabGames["Snake"]["snakeparts"] = {}
1921 table.insert(gamesTabGames["Snake"]["snakeparts"],guiCreateCheckBox(15*15,9*15,15,15,"",true,false,gamesTab))
1922 table.insert(gamesTabGames["Snake"]["snakeparts"],guiCreateCheckBox(15*15,9*15,15,15,"",false,false,gamesTab))
1923 table.insert(gamesTabGames["Snake"]["snakeparts"],guiCreateCheckBox(15*15,9*15,15,15,"",false,false,gamesTab))
1924 table.insert(gamesTabGames["Snake"]["snakeparts"],guiCreateCheckBox(15*15,9*15,15,15,"",false,false,gamesTab))
1925 table.insert(gamesTabGames["Snake"]["snakeparts"],guiCreateCheckBox(15*15,9*15,15,15,"",false,false,gamesTab))
1926 gamesTabGames["Snake"]["counter"] = 0
1927 gamesTabGames["Snake"]["newdirection"] = 4
1928 gamesTabGames["Snake"]["timer"] = setTimer(snakeProgress,75,0)
1929end
1930
1931function snakeProgress()
1932 gamesTabGames["Snake"]["direction"] = gamesTabGames["Snake"]["newdirection"]
1933 local xt,yt = guiGetPosition(gamesTabGames["Snake"]["snakeparts"][1],false)
1934 local x,y = math.floor(xt/15),math.floor(yt/15)
1935 if x <= 1 or x >= 30 or y <= 1 or y >= 17 then
1936 snakeGameEnd()
1937 return
1938 end
1939 gamesTabGames["Snake"]["counter"] = gamesTabGames["Snake"]["counter"] + 1
1940 if gamesTabGames["Snake"]["counter"] == #gamesTabGames["Snake"]["snakeparts"]-1 then
1941 gamesTabGames["Snake"]["counter"] = 0
1942 end
1943 if gamesTabGames["Snake"]["direction"] == 1 then
1944 local newx,newy = x,y-1
1945 if not snakeCheckContact(newx,newy) then
1946 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],newx*15,newy*15,false)
1947 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1948 if newx == gamesTabGames["Snake"]["point"][2] and newy == gamesTabGames["Snake"]["point"][3] then
1949 destroyElement(gamesTabGames["Snake"]["point"][1])
1950 snakeScoreAdd()
1951 snakeAdd()
1952 snakeCreateDot()
1953 end
1954 else
1955 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],newx*15,newy*15,false)
1956 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1957 snakeGameEnd()
1958 return
1959 end
1960 elseif gamesTabGames["Snake"]["direction"] == 2 then
1961 local newx,newy = x+1,y
1962 if not snakeCheckContact(newx,newy) then
1963 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],(x+1)*15,y*15,false)
1964 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1965 if newx == gamesTabGames["Snake"]["point"][2] and newy == gamesTabGames["Snake"]["point"][3] then
1966 destroyElement(gamesTabGames["Snake"]["point"][1])
1967 snakeScoreAdd()
1968 snakeAdd()
1969 snakeCreateDot()
1970 end
1971 else
1972 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],(x+1)*15,y*15,false)
1973 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1974 snakeGameEnd()
1975 return
1976 end
1977 elseif gamesTabGames["Snake"]["direction"] == 3 then
1978 local newx,newy = x,y+1
1979 if not snakeCheckContact(newx,newy) then
1980 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],x*15,(y+1)*15,false)
1981 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1982 if newx == gamesTabGames["Snake"]["point"][2] and newy == gamesTabGames["Snake"]["point"][3] then
1983 destroyElement(gamesTabGames["Snake"]["point"][1])
1984 snakeScoreAdd()
1985 snakeAdd()
1986 snakeCreateDot()
1987 end
1988 else
1989 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],x*15,(y+1)*15,false)
1990 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1991 snakeGameEnd()
1992 return
1993 end
1994 elseif gamesTabGames["Snake"]["direction"] == 4 then
1995 local newx,newy = x-1,y
1996 if not snakeCheckContact(newx,newy) then
1997 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],(x-1)*15,y*15,false)
1998 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1999 if newx == gamesTabGames["Snake"]["point"][2] and newy == gamesTabGames["Snake"]["point"][3] then
2000 destroyElement(gamesTabGames["Snake"]["point"][1])
2001 snakeScoreAdd()
2002 snakeAdd()
2003 snakeCreateDot()
2004 end
2005 else
2006 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],(x-1)*15,y*15,false)
2007 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
2008 snakeGameEnd()
2009 return
2010 end
2011 end
2012end
2013
2014function snakeAdd()
2015 local xt,yt = guiGetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]-1],false)
2016 local x,y = math.floor(xt/15),math.floor(yt/15)
2017 table.insert(gamesTabGames["Snake"]["snakeparts"],#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"],guiCreateCheckBox(x*15,y*15,15,15,"",false,false,gamesTab))
2018end
2019
2020function snakeScoreAdd()
2021 local score = tonumber(guiGetText(gamesTabGames["Snake"]["score"]))
2022 guiSetText(gamesTabGames["Snake"]["score"],score+1)
2023end
2024
2025function snakeCheckContact(px,py)
2026 for i,v in ipairs(gamesTabGames["Snake"]["snakeparts"]) do
2027 local xt,yt = guiGetPosition(v,false)
2028 local x,y = math.floor(xt/15),math.floor(yt/15)
2029 if px == x and py == y then
2030 if i ~= #gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"] then
2031 return true
2032 end
2033 end
2034 end
2035 return false
2036end
2037
2038function snakeCreateDot()
2039 local x,y = math.random(2,29),math.random(2,16)
2040 gamesTabGames["Snake"]["point"] = {guiCreateCheckBox(x*15,y*15,15,15,"",true,false,gamesTab),x,y}
2041end
2042
2043function snakeControl(key)
2044 if (key == "w" or key == "arrow_u") and gamesTabGames["Snake"]["direction"] ~= 3 then
2045 gamesTabGames["Snake"]["newdirection"] = 1
2046 elseif (key == "d" or key == "arrow_r") and gamesTabGames["Snake"]["direction"] ~= 4 then
2047 gamesTabGames["Snake"]["newdirection"] = 2
2048 elseif (key == "s" or key == "arrow_d") and gamesTabGames["Snake"]["direction"] ~= 1 then
2049 gamesTabGames["Snake"]["newdirection"] = 3
2050 elseif (key == "a" or key == "arrow_l") and gamesTabGames["Snake"]["direction"] ~= 2 then
2051 gamesTabGames["Snake"]["newdirection"] = 4
2052 end
2053end
2054
2055function snakeGameEnd()
2056 killTimer(gamesTabGames["Snake"]["timer"])
2057 local score = tonumber(guiGetText(gamesTabGames["Snake"]["score"]))
2058 submitScore("Snake",score)
2059 setTimer(snakeClear,2500,1)
2060end
2061
2062function snakeClear()
2063 unbindKey("w","down",snakeControl)
2064 unbindKey("s","down",snakeControl)
2065 unbindKey("a","down",snakeControl)
2066 unbindKey("d","down",snakeControl)
2067 unbindKey("arrow_u","down",snakeControl)
2068 unbindKey("arrow_d","down",snakeControl)
2069 unbindKey("arrow_l","down",snakeControl)
2070 unbindKey("arrow_r","down",snakeControl)
2071 for i,v in ipairs(gamesTabGames["Snake"]["snakeparts"]) do
2072 destroyElement(v)
2073 end
2074 destroyElement(gamesTabGames["Snake"]["point"][1])
2075 gamesTabGames["Snake"]["point"] = nil
2076 destroyElement(gamesTabGames["Snake"]["score"])
2077 for i,v in ipairs(gamesTabGames["Snake"]["barriers"]) do
2078 guiSetVisible(v,false)
2079 end
2080 for k,v in pairs(gamesTabMain) do
2081 guiSetVisible(v,true)
2082 end
2083end
2084
2085function submitScore(game,score)
2086 triggerServerEvent("onScoreSubmit",getLocalPlayer(),game,score)
2087end
2088
2089function refreshGameHighScores()
2090 local row = guiGridListGetSelectedItem(gamesTabMain["gamesGridList"])
2091 if row ~= -1 then
2092 local game = guiGridListGetItemText(gamesTabMain["gamesGridList"],row,1)
2093 guiSetText(gamesTabMain["gamesHighScoresLabel"],"Highscores\n\n1. "..gamesHighScores[game][1][2].." ("..gamesHighScores[game][1][1]..")\n\n2. "..gamesHighScores[game][2][2].." ("..gamesHighScores[game][2][1]..")\n\n3. "..gamesHighScores[game][3][2].." ("..gamesHighScores[game][3][1]..")\n\n4. "..gamesHighScores[game][4][2].." ("..gamesHighScores[game][4][1]..")\n\n5. "..gamesHighScores[game][5][2].." ("..gamesHighScores[game][5][1]..")")
2094 guiSetText(gamesTabMain["gamesHighScoresLabel2"],"\n\n6. "..gamesHighScores[game][6][2].." ("..gamesHighScores[game][6][1]..")\n\n7. "..gamesHighScores[game][7][2].." ("..gamesHighScores[game][7][1]..")\n\n8. "..gamesHighScores[game][8][2].." ("..gamesHighScores[game][8][1]..")\n\n9. "..gamesHighScores[game][9][2].." ("..gamesHighScores[game][9][1]..")\n\n10. "..gamesHighScores[game][10][2].." ("..gamesHighScores[game][10][1]..")")
2095 else
2096 guiSetText(gamesTabMain["gamesHighScoresLabel"],"Highscores\n\n1. \n\n2. \n\n3. \n\n4. \n\n5. ")
2097 guiSetText(gamesTabMain["gamesHighScoresLabel2"],"\n\n6. \n\n7. \n\n8. \n\n9. \n\n10. ")
2098 end
2099end
2100
2101function updateHighScores(game,scores)
2102 gamesHighScores[game] = scores
2103 local row = guiGridListGetSelectedItem(gamesTabMain["gamesGridList"])
2104 if row ~= -1 then
2105 local name = guiGridListGetItemText(gamesTabMain["gamesGridList"],row,1)
2106 if name == game then
2107 guiSetText(gamesTabMain["gamesHighScoresLabel"],"Highscores\n\n1. "..gamesHighScores[game][1][2].." ("..gamesHighScores[game][1][1]..")\n\n2. "..gamesHighScores[game][2][2].." ("..gamesHighScores[game][2][1]..")\n\n3. "..gamesHighScores[game][3][2].." ("..gamesHighScores[game][3][1]..")\n\n4. "..gamesHighScores[game][4][2].." ("..gamesHighScores[game][4][1]..")\n\n5. "..gamesHighScores[game][5][2].." ("..gamesHighScores[game][5][1]..")")
2108 guiSetText(gamesTabMain["gamesHighScoresLabel2"],"\n\n6. "..gamesHighScores[game][6][2].." ("..gamesHighScores[game][6][1]..")\n\n7. "..gamesHighScores[game][7][2].." ("..gamesHighScores[game][7][1]..")\n\n8. "..gamesHighScores[game][8][2].." ("..gamesHighScores[game][8][1]..")\n\n9. "..gamesHighScores[game][9][2].." ("..gamesHighScores[game][9][1]..")\n\n10. "..gamesHighScores[game][10][2].." ("..gamesHighScores[game][10][1]..")")
2109 end
2110 end
2111end
2112addEvent("updateGameScores",true)
2113addEventHandler("updateGameScores",getRootElement(),updateHighScores)
2114
2115function newHighScoreNotification(game,score)
2116 if localUserSettings["notifyHighScore"] then
2117 playSound("hiscore.mp3",false)
2118 local wind = guiCreateWindow(0,0,200,120,"New High Score!",false)
2119 guiWindowSetMovable(wind,false)
2120 guiWindowSetSizable(wind,false)
2121 local label = guiCreateLabel(10,30,180,80,"Game: "..game.."\nScore: "..score.."\nBy: "..string.gsub(getPlayerName(source),"%(AFK%)",""),false,wind)
2122 guiLabelSetHorizontalAlign(label,"center",true)
2123 guiLabelSetVerticalAlign(label,"center")
2124 triggerEvent("onNotification",wind)
2125 end
2126end
2127addEvent("onNewHighScoreSubmit",true)
2128addEventHandler("onNewHighScoreSubmit",getRootElement(),newHighScoreNotification)
2129
2130function linkInfoToAccount()
2131 triggerServerEvent("linkInfoToAccount",getLocalPlayer())
2132end
2133
2134function getInfoFromAccount()
2135 triggerServerEvent("getInfoFromAccount",getLocalPlayer())
2136end
2137
2138function profileViewStats()
2139 for k,v in pairs(playersTabMain) do
2140 guiSetVisible(v,false)
2141 end
2142 for k,v in pairs(playersTabAchievements) do
2143 guiSetVisible(v,false)
2144 end
2145 for k,v in pairs(playersTabStats) do
2146 guiSetVisible(v,true)
2147 end
2148end
2149
2150function profileViewAchievements()
2151 for k,v in pairs(playersTabMain) do
2152 guiSetVisible(v,false)
2153 end
2154 for k,v in pairs(playersTabStats) do
2155 guiSetVisible(v,false)
2156 end
2157 for k,v in pairs(playersTabAchievements) do
2158 guiSetVisible(v,true)
2159 end
2160end
2161
2162function playerProfileGoBack()
2163 for k,v in pairs(playersTabStats) do
2164 guiSetVisible(v,false)
2165 end
2166 for k,v in pairs(playersTabAchievements) do
2167 guiSetVisible(v,false)
2168 end
2169 for k,v in pairs(playersTabMain) do
2170 guiSetVisible(v,true)
2171 end
2172end
2173
2174function toHoursMinutes(mins)
2175 local hours = tostring(math.floor(mins / 60))
2176 local minutes = mins % 60 >= 10 and tostring(mins % 60) or "0"..mins % 60
2177 return hours..":"..minutes
2178end
2179
2180function reverseITable(oldtable)
2181 local newtable = {}
2182 for i=0,#oldtable-1,1 do
2183 table.insert(newtable,oldtable[#oldtable-i])
2184 end
2185 return newtable
2186end
2187
2188function round(value,dec)
2189 if value then
2190 local decimals = dec or 2
2191 return tonumber(string.format("%.0"..tostring(decimals).."f",math.floor(((value)*10^decimals)+0.5)/(10^decimals)))
2192 end
2193 return false
2194end
2195
2196function getValidAvatars()
2197 return avatarTable
2198end
2199
2200function showMoreThan1MatchWindow(matches)
2201 guiGridListClear(moreThan1MatchGridList)
2202 for i,v in ipairs(matches) do
2203 local row = guiGridListAddRow(moreThan1MatchGridList)
2204 guiGridListSetItemText(moreThan1MatchGridList,row,1,v[1],false,false)
2205 guiGridListSetItemData(moreThan1MatchGridList,row,1,v[2])
2206 guiGridListSetItemText(moreThan1MatchGridList,row,2,v[3],false,false)
2207 end
2208 guiSetVisible(moreThan1MatchWindow,true)
2209 guiBringToFront(moreThan1MatchWindow)
2210end
2211addEvent("onMoreThan1MatchReturn",true)
2212addEventHandler("onMoreThan1MatchReturn",getRootElement(),showMoreThan1MatchWindow)
2213
2214function moreThan1MatchConfirm()
2215 local row = guiGridListGetSelectedItem(moreThan1MatchGridList)
2216 if row ~= -1 then
2217 selectednumber = row + 1
2218 triggerServerEvent("doRequestPlayerInfo",getLocalPlayer(),nil,guiGridListGetItemData(moreThan1MatchGridList,row,1))
2219 moreThan1MatchCancel()
2220 end
2221end
2222
2223function moreThan1MatchCancel()
2224 guiMoveToBack(moreThan1MatchWindow)
2225 guiSetVisible(moreThan1MatchWindow,false)
2226 guiGridListClear(moreThan1MatchGridList)
2227end