· 8 years ago · Jul 29, 2018, 02:22 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 guiSetText(kmtravelledLabel,"Distance travelled: "..round(stats["distancetravelled"]).." Km ("..round(stats["distancetravelled"]/(stats["playtime"]/60)).."/h)")
1617 guiSetText(characterswrittenLabel,"Chat text written: "..stats["characterswritten"].." ("..round(stats["characterswritten"]/(stats["playtime"]/60)).."/h)")
1618 else
1619 guiSetText(pointsLabel,"Points: "..round(stats["points"]).." (0/h)")
1620 guiSetText(kmtravelledLabel,"Distance travelled: "..round(stats["distancetravelled"]).." Km (0/h)")
1621 guiSetText(characterswrittenLabel,"Chat text written: "..stats["characterswritten"].." (0/h)")
1622 end
1623
1624 guiSetText(profileviewsLabel,"Profile views: "..info["profileviews"])
1625 guiSetText(guestbookentriesLabel,"Guestbook entries: "..tostring(#guestbook))
1626end
1627
1628function clickPlayerInfoGoButton()
1629 local input1 = string.sub(guiGetText(playersTabMain["playersPlayerSelectMemo"]),1,#guiGetText(playersTabMain["playersPlayerSelectMemo"])-1)
1630 local input2 = string.sub(guiGetText(playersTabMain["playersPlayerSearchMemo"]),1,#guiGetText(playersTabMain["playersPlayerSearchMemo"])-1)
1631
1632 local playername
1633 if input1 ~= "Select..." and getPlayerFromNick(input1) then
1634 playername = input1
1635 elseif #input2 > 0 and input2 ~= "Search..." then
1636 playername = input2
1637 else
1638 outputChatBox("Select or enter someone first.")
1639 end
1640
1641 if playername then
1642 viewProfile(playername)
1643 end
1644end
1645
1646function viewProfile(name)
1647 triggerServerEvent("doRequestPlayerInfo",getLocalPlayer(),name)
1648end
1649
1650function hidePlayerAchievementsTab()
1651 guiSetText(playersTabAchievements["playerAchievementsDescriptionMemo"],"Click on an achievement to see its description.")
1652 guiSetText(playersTabAchievements["playerAchievementNameLabel"],"")
1653 guiSetText(playersTabAchievements["playerAchievementsAchieveTimeMemo"],"-")
1654end
1655
1656function playerAchievementsShowDescription()
1657 local row,column = guiGridListGetSelectedItem(playersTabAchievements["playerAchievementsGridList"])
1658 if row == -1 then
1659 guiSetText(playersTabAchievements["playerAchievementsDescriptionMemo"],"Click on an achievement to see its description.")
1660 guiSetText(playersTabAchievements["playerAchievementNameLabel"],"")
1661 guiSetText(playersTabAchievements["playerAchievementsAchieveTimeMemo"],"-")
1662 else
1663 guiSetText(playersTabAchievements["playerAchievementsDescriptionMemo"],guiGridListGetItemData(playersTabAchievements["playerAchievementsGridList"],row,1))
1664 guiSetText(playersTabAchievements["playerAchievementNameLabel"],guiGridListGetItemText(playersTabAchievements["playerAchievementsGridList"],row,1))
1665 if not guiSetText(playersTabAchievements["playerAchievementsAchieveTimeMemo"],guiGridListGetItemData(playersTabAchievements["playerAchievementsGridList"],row,2)) then
1666 guiSetText(playersTabAchievements["playerAchievementsAchieveTimeMemo"],"-")
1667 end
1668 end
1669end
1670
1671function requestedPlayerInfoReturn(info,stats,list,guestbook,name,playerid)
1672 requestedPlayerInfo[1] = info
1673 requestedPlayerInfo[2] = stats
1674 requestedPlayerInfo[3] = list
1675 requestedPlayerInfo[4] = name
1676 requestedPlayerInfo[5] = playerid
1677
1678 local achieved = 0
1679
1680 guiGridListClear(playersTabAchievements["playerAchievementsGridList"])
1681 hidePlayerAchievementsTab()
1682 --guiGridListAddColumn(playersTabAchievements["playerAchievementsGridList"],"Name",0.8)
1683 --guiGridListAddColumn(playersTabAchievements["playerAchievementsGridList"],"",0.01)
1684
1685 for k,v in pairs(list) do
1686 local rownumber = guiGridListAddRow(playersTabAchievements["playerAchievementsGridList"])
1687 guiGridListSetItemText(playersTabAchievements["playerAchievementsGridList"],rownumber,1,v[1],false,false)
1688 guiGridListSetItemData(playersTabAchievements["playerAchievementsGridList"],rownumber,1,v[2])
1689 if v[3] then
1690 achieved = achieved + 1
1691 guiGridListSetItemText(playersTabAchievements["playerAchievementsGridList"],rownumber,2,"x",false,false)
1692 guiGridListSetItemData(playersTabAchievements["playerAchievementsGridList"],rownumber,2,v[3])
1693 end
1694 end
1695
1696 local text = ""
1697 local sortedtable = reverseITable(guestbook)
1698 for i,v in ipairs(sortedtable) do
1699 local entry = v["player"].." ("..v["time"].."):\n"..v["text"].."---------------\n"
1700 text = text..entry
1701 end
1702 guiSetText(playersTabMain["playerInfoGuestbook"],text)
1703
1704 guiSetText(playersTabMain["playerNameLabel"],name)
1705
1706 if info["avatar"] then
1707 guiStaticImageLoadImage(playersTabMain["playerAvatar"],"avatars/"..info["avatar"]..".png")
1708 else
1709 guiStaticImageLoadImage(playersTabMain["playerAvatar"],"avatars/default.png")
1710 end
1711
1712 guiSetText(playersTabMain["playerInfoName"],"Name: "..name)
1713 guiSetText(playersTabMain["playerInfoCountry"],"Country: "..info["country"])
1714 guiSetText(playersTabMain["playerInfoAge"],"Age: "..info["age"])
1715 guiSetText(playersTabMain["playerInfoMessengers"],"Messengers: "..info["messengers"])
1716 guiSetText(playersTabMain["playerInfoTitle"],"Title: Lv. "..stats["level"].." "..stats["title"])
1717 guiSetText(playersTabMain["playerInfoPoints"],"Points: "..round(stats["points"]))
1718 guiSetText(playersTabMain["playerInfoMoney"],"Money: "..stats["money"].."$")
1719 guiSetText(playersTabMain["playerInfoJoined"],"Joined: "..stats["joined"])
1720 guiSetText(playersTabMain["playerInfoPlayTime"],"Playtime: "..toHoursMinutes(stats["playtime"]).." hours")
1721 guiSetText(playersTabMain["playerInfoAchievements"],"Achievements: "..tostring(achieved).."/"..tostring(#list))
1722
1723 guiSetText(playersTabStats["playerJoinedLabel"],"Joined: "..stats["joined"])
1724 guiSetText(playersTabStats["playerPlaytimeLabel"],"Playtime: "..toHoursMinutes(stats["playtime"]).." hours")
1725 guiSetText(playersTabStats["playerVisitsLabel"],"Visits: "..stats["visits"])
1726 guiSetText(playersTabStats["playerTitleLabel"],"Title: "..stats["title"])
1727 guiSetText(playersTabStats["playerLevelLabel"],"Level: "..stats["level"])
1728
1729 if stats["racesplayed"] > 0 then
1730 guiSetText(playersTabStats["playerRacesLabel"],"Races won: "..stats["raceswon"].."/"..stats["racesplayed"].." ("..round(stats["raceswon"]/stats["racesplayed"]*100).."%)")
1731 else
1732 guiSetText(playersTabStats["playerRacesLabel"],"Races won: "..stats["raceswon"].."/"..stats["racesplayed"])
1733 end
1734
1735 if stats["ddsplayed"] > 0 then
1736 guiSetText(playersTabStats["playerDestructionDerbyLabel"],"Derbies won: "..stats["ddswon"].."/"..stats["ddsplayed"].." ("..round(stats["ddswon"]/stats["ddsplayed"]*100).."%)")
1737 else
1738 guiSetText(playersTabStats["playerDestructionDerbyLabel"],"Derbies won: "..stats["ddswon"].."/"..stats["ddsplayed"])
1739 end
1740
1741 guiSetText(playersTabStats["playerAchievementsLabel"],"Achievements: "..tostring(achieved).."/"..tostring(#list))
1742 guiSetText(playersTabStats["playerLastSeenLabel"],"Last seen: "..stats["lastseen"])
1743
1744 guiSetText(playersTabStats["playerCashLabel"],"Money: "..stats["money"].."$")
1745 guiSetText(playersTabStats["playerCashEarnedLabel"],"Money earned: "..stats["moneyearned"].."$")
1746 guiSetText(playersTabStats["playerCashSpentLabel"],"Money spent: "..stats["moneyspent"].."$")
1747 guiSetText(playersTabStats["playerDeathsLabel"],"Deaths: "..stats["deaths"])
1748
1749 if stats["playtime"] > 0 then
1750 guiSetText(playersTabStats["playerPointsLabel"],"Points: "..round(stats["points"]).." ("..round(stats["points"]/(stats["playtime"]/60)).."/h)")
1751 guiSetText(playersTabStats["playerKmtravelledLabel"],"Distance travelled: "..round(stats["distancetravelled"]).." Km ("..round(stats["distancetravelled"]/(stats["playtime"]/60)).."/h)")
1752 guiSetText(playersTabStats["playerCharactersWrittenLabel"],"Chat text written: "..stats["characterswritten"].." ("..round(stats["characterswritten"]/(stats["playtime"]/60)).."/h)")
1753 else
1754 guiSetText(playersTabStats["playerPointsLabel"],"Points: "..round(stats["points"]).." (0/h)")
1755 guiSetText(playersTabStats["playerKmtravelledLabel"],"Distance travelled: "..round(stats["distancetravelled"]).." Km (0/h)")
1756 guiSetText(playersTabStats["playerCharactersWrittenLabel"],"Chat text written: "..stats["characterswritten"].." (0/h)")
1757 end
1758
1759 guiSetText(playersTabStats["playerProfileviewsLabel"],"Profile views: "..info["profileviews"])
1760 guiSetText(playersTabStats["playerGuestbookentriesLabel"],"Guestbook entries: "..tostring(#guestbook))
1761end
1762addEvent("onRequestedPlayerInfoReturn",true)
1763addEventHandler("onRequestedPlayerInfoReturn",getRootElement(),requestedPlayerInfoReturn)
1764
1765function showItemDescription()
1766 if source == shopGridList then
1767 guiGridListSetSelectedItem(itemGridList,0,0)
1768 local row,column = guiGridListGetSelectedItem(shopGridList)
1769 if row == -1 then
1770 guiSetText(itemDescriptionMemo,"Click on an item to see its description.")
1771 else
1772 guiSetText(itemDescriptionMemo,guiGridListGetItemData(shopGridList,row,1))
1773 end
1774 elseif source == itemGridList then
1775 guiGridListSetSelectedItem(shopGridList,0,0)
1776 local row,column = guiGridListGetSelectedItem(itemGridList)
1777 if row == -1 then
1778 guiSetText(itemDescriptionMemo,"Click on an item to see its description.")
1779 else
1780 guiSetText(itemDescriptionMemo,guiGridListGetItemData(itemGridList,row,1))
1781 end
1782 end
1783end
1784
1785function buyItem()
1786 local row,column = guiGridListGetSelectedItem(shopGridList)
1787 local name = guiGridListGetItemText(shopGridList,row,1)
1788 local unique
1789 for i,v in ipairs(shopItems) do
1790 if name == v["name"] then
1791 unique = v["unique"]
1792 end
1793 end
1794 if unique then
1795 local exist = false
1796 for i,v in ipairs(playerItems) do
1797 if v["name"] == name then
1798 exist = true
1799 end
1800 end
1801 if not exist then
1802 triggerServerEvent("onClientItemBuy",getLocalPlayer(),name)
1803 else
1804 outputChatBox("You can't buy another one.")
1805 end
1806 else
1807 triggerServerEvent("onClientItemBuy",getLocalPlayer(),name)
1808 end
1809end
1810
1811function sellItem()
1812 local row,column = guiGridListGetSelectedItem(itemGridList)
1813 local name = guiGridListGetItemText(itemGridList,row,1)
1814 triggerServerEvent("onClientItemSell",getLocalPlayer(),name)
1815end
1816
1817function clientItemrefresh(clientitems,money)
1818 playerItems = clientitems
1819 if money then
1820 guiSetText(shopMoneyLabel,"Money: "..money.."$")
1821 end
1822 local selectedrow = guiGridListGetSelectedItem(itemGridList)
1823 local item
1824 if selectedrow ~= -1 then
1825 item = guiGridListGetItemText(itemGridList,selectedrow,1)
1826 end
1827 guiGridListClear(itemGridList)
1828 for i,v in ipairs(clientitems) do
1829 local row = guiGridListAddRow(itemGridList)
1830 guiGridListSetItemText(itemGridList,row,1,v["name"],false,false)
1831 local description
1832 local unique
1833 for i1,v1 in ipairs(shopItems) do
1834 if v["name"] == v1["name"] then
1835 description = v1["description"]
1836 unique = v1["unique"]
1837 end
1838 end
1839 if v["name"] == item then
1840 guiGridListSetSelectedItem(itemGridList,row,1)
1841 end
1842 guiGridListSetItemData(itemGridList,row,1,description)
1843 if unique then
1844 guiGridListSetItemText(itemGridList,row,2,"unlimited",false,false)
1845 else
1846 guiGridListSetItemText(itemGridList,row,2,tostring(v["amount"]),false,true)
1847 end
1848 end
1849end
1850addEvent("onClientItemsRefresh",true)
1851addEventHandler("onClientItemsRefresh",getRootElement(),clientItemrefresh)
1852
1853function clickUseItemButton()
1854 local row,column = guiGridListGetSelectedItem(itemGridList)
1855 triggerServerEvent("onClientPlayerUseItem",getLocalPlayer(),getLocalPlayer(),guiGridListGetItemText(itemGridList,row,1))
1856end
1857
1858function addGamesToGameGridList()
1859 local row = guiGridListAddRow(gamesTabMain["gamesGridList"])
1860 guiGridListSetItemText(gamesTabMain["gamesGridList"],row,1,"Snake",false,false)
1861 gamesHighScores["Snake"] = {}
1862end
1863
1864function clickPlayGameButton()
1865 local row = guiGridListGetSelectedItem(gamesTabMain["gamesGridList"])
1866 if row ~= -1 then
1867 local game = guiGridListGetItemText(gamesTabMain["gamesGridList"],row,1)
1868 for k,v in pairs(gamesTabMain) do
1869 guiSetVisible(v,false)
1870 end
1871 for k,v in pairs(gamesTabGames[game]) do
1872 if isElement(v) then
1873 guiSetVisible(v,true)
1874 elseif type(v) == "table" then
1875 for k1,v1 in ipairs(v) do
1876 if isElement(v1) then
1877 guiSetVisible(v1,true)
1878 end
1879 end
1880 end
1881 end
1882 startGame(game)
1883 end
1884end
1885
1886function startGame(game)
1887 if game == "Snake" then
1888 startSnake()
1889 elseif game == "Tetris" then
1890
1891 end
1892end
1893
1894function startSnake()
1895 bindKey("w","down",snakeControl)
1896 bindKey("s","down",snakeControl)
1897 bindKey("a","down",snakeControl)
1898 bindKey("d","down",snakeControl)
1899 bindKey("arrow_u","down",snakeControl)
1900 bindKey("arrow_d","down",snakeControl)
1901 bindKey("arrow_l","down",snakeControl)
1902 bindKey("arrow_r","down",snakeControl)
1903
1904 snakeCreateDot()
1905 gamesTabGames["Snake"]["score"] = guiCreateLabel(340,35,100,20,"0",false,gamesTab)
1906 guiLabelSetHorizontalAlign(gamesTabGames["Snake"]["score"],"right",false)
1907
1908 gamesTabGames["Snake"]["snakeparts"] = {}
1909 table.insert(gamesTabGames["Snake"]["snakeparts"],guiCreateCheckBox(15*15,9*15,15,15,"",true,false,gamesTab))
1910 table.insert(gamesTabGames["Snake"]["snakeparts"],guiCreateCheckBox(15*15,9*15,15,15,"",false,false,gamesTab))
1911 table.insert(gamesTabGames["Snake"]["snakeparts"],guiCreateCheckBox(15*15,9*15,15,15,"",false,false,gamesTab))
1912 table.insert(gamesTabGames["Snake"]["snakeparts"],guiCreateCheckBox(15*15,9*15,15,15,"",false,false,gamesTab))
1913 table.insert(gamesTabGames["Snake"]["snakeparts"],guiCreateCheckBox(15*15,9*15,15,15,"",false,false,gamesTab))
1914 gamesTabGames["Snake"]["counter"] = 0
1915 gamesTabGames["Snake"]["newdirection"] = 4
1916 gamesTabGames["Snake"]["timer"] = setTimer(snakeProgress,75,0)
1917end
1918
1919function snakeProgress()
1920 gamesTabGames["Snake"]["direction"] = gamesTabGames["Snake"]["newdirection"]
1921 local xt,yt = guiGetPosition(gamesTabGames["Snake"]["snakeparts"][1],false)
1922 local x,y = math.floor(xt/15),math.floor(yt/15)
1923 if x <= 1 or x >= 30 or y <= 1 or y >= 17 then
1924 snakeGameEnd()
1925 return
1926 end
1927 gamesTabGames["Snake"]["counter"] = gamesTabGames["Snake"]["counter"] + 1
1928 if gamesTabGames["Snake"]["counter"] == #gamesTabGames["Snake"]["snakeparts"]-1 then
1929 gamesTabGames["Snake"]["counter"] = 0
1930 end
1931 if gamesTabGames["Snake"]["direction"] == 1 then
1932 local newx,newy = x,y-1
1933 if not snakeCheckContact(newx,newy) then
1934 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],newx*15,newy*15,false)
1935 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1936 if newx == gamesTabGames["Snake"]["point"][2] and newy == gamesTabGames["Snake"]["point"][3] then
1937 destroyElement(gamesTabGames["Snake"]["point"][1])
1938 snakeScoreAdd()
1939 snakeAdd()
1940 snakeCreateDot()
1941 end
1942 else
1943 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],newx*15,newy*15,false)
1944 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1945 snakeGameEnd()
1946 return
1947 end
1948 elseif gamesTabGames["Snake"]["direction"] == 2 then
1949 local newx,newy = x+1,y
1950 if not snakeCheckContact(newx,newy) then
1951 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],(x+1)*15,y*15,false)
1952 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1953 if newx == gamesTabGames["Snake"]["point"][2] and newy == gamesTabGames["Snake"]["point"][3] then
1954 destroyElement(gamesTabGames["Snake"]["point"][1])
1955 snakeScoreAdd()
1956 snakeAdd()
1957 snakeCreateDot()
1958 end
1959 else
1960 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],(x+1)*15,y*15,false)
1961 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1962 snakeGameEnd()
1963 return
1964 end
1965 elseif gamesTabGames["Snake"]["direction"] == 3 then
1966 local newx,newy = x,y+1
1967 if not snakeCheckContact(newx,newy) then
1968 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],x*15,(y+1)*15,false)
1969 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1970 if newx == gamesTabGames["Snake"]["point"][2] and newy == gamesTabGames["Snake"]["point"][3] then
1971 destroyElement(gamesTabGames["Snake"]["point"][1])
1972 snakeScoreAdd()
1973 snakeAdd()
1974 snakeCreateDot()
1975 end
1976 else
1977 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],x*15,(y+1)*15,false)
1978 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1979 snakeGameEnd()
1980 return
1981 end
1982 elseif gamesTabGames["Snake"]["direction"] == 4 then
1983 local newx,newy = x-1,y
1984 if not snakeCheckContact(newx,newy) then
1985 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],(x-1)*15,y*15,false)
1986 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1987 if newx == gamesTabGames["Snake"]["point"][2] and newy == gamesTabGames["Snake"]["point"][3] then
1988 destroyElement(gamesTabGames["Snake"]["point"][1])
1989 snakeScoreAdd()
1990 snakeAdd()
1991 snakeCreateDot()
1992 end
1993 else
1994 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][1],(x-1)*15,y*15,false)
1995 guiSetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]],x*15,y*15,false)
1996 snakeGameEnd()
1997 return
1998 end
1999 end
2000end
2001
2002function snakeAdd()
2003 local xt,yt = guiGetPosition(gamesTabGames["Snake"]["snakeparts"][#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"]-1],false)
2004 local x,y = math.floor(xt/15),math.floor(yt/15)
2005 table.insert(gamesTabGames["Snake"]["snakeparts"],#gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"],guiCreateCheckBox(x*15,y*15,15,15,"",false,false,gamesTab))
2006end
2007
2008function snakeScoreAdd()
2009 local score = tonumber(guiGetText(gamesTabGames["Snake"]["score"]))
2010 guiSetText(gamesTabGames["Snake"]["score"],score+1)
2011end
2012
2013function snakeCheckContact(px,py)
2014 for i,v in ipairs(gamesTabGames["Snake"]["snakeparts"]) do
2015 local xt,yt = guiGetPosition(v,false)
2016 local x,y = math.floor(xt/15),math.floor(yt/15)
2017 if px == x and py == y then
2018 if i ~= #gamesTabGames["Snake"]["snakeparts"]-gamesTabGames["Snake"]["counter"] then
2019 return true
2020 end
2021 end
2022 end
2023 return false
2024end
2025
2026function snakeCreateDot()
2027 local x,y = math.random(2,29),math.random(2,16)
2028 gamesTabGames["Snake"]["point"] = {guiCreateCheckBox(x*15,y*15,15,15,"",true,false,gamesTab),x,y}
2029end
2030
2031function snakeControl(key)
2032 if (key == "w" or key == "arrow_u") and gamesTabGames["Snake"]["direction"] ~= 3 then
2033 gamesTabGames["Snake"]["newdirection"] = 1
2034 elseif (key == "d" or key == "arrow_r") and gamesTabGames["Snake"]["direction"] ~= 4 then
2035 gamesTabGames["Snake"]["newdirection"] = 2
2036 elseif (key == "s" or key == "arrow_d") and gamesTabGames["Snake"]["direction"] ~= 1 then
2037 gamesTabGames["Snake"]["newdirection"] = 3
2038 elseif (key == "a" or key == "arrow_l") and gamesTabGames["Snake"]["direction"] ~= 2 then
2039 gamesTabGames["Snake"]["newdirection"] = 4
2040 end
2041end
2042
2043function snakeGameEnd()
2044 killTimer(gamesTabGames["Snake"]["timer"])
2045 local score = tonumber(guiGetText(gamesTabGames["Snake"]["score"]))
2046 submitScore("Snake",score)
2047 setTimer(snakeClear,2500,1)
2048end
2049
2050function snakeClear()
2051 unbindKey("w","down",snakeControl)
2052 unbindKey("s","down",snakeControl)
2053 unbindKey("a","down",snakeControl)
2054 unbindKey("d","down",snakeControl)
2055 unbindKey("arrow_u","down",snakeControl)
2056 unbindKey("arrow_d","down",snakeControl)
2057 unbindKey("arrow_l","down",snakeControl)
2058 unbindKey("arrow_r","down",snakeControl)
2059 for i,v in ipairs(gamesTabGames["Snake"]["snakeparts"]) do
2060 destroyElement(v)
2061 end
2062 destroyElement(gamesTabGames["Snake"]["point"][1])
2063 gamesTabGames["Snake"]["point"] = nil
2064 destroyElement(gamesTabGames["Snake"]["score"])
2065 for i,v in ipairs(gamesTabGames["Snake"]["barriers"]) do
2066 guiSetVisible(v,false)
2067 end
2068 for k,v in pairs(gamesTabMain) do
2069 guiSetVisible(v,true)
2070 end
2071end
2072
2073function submitScore(game,score)
2074 triggerServerEvent("onScoreSubmit",getLocalPlayer(),game,score)
2075end
2076
2077function refreshGameHighScores()
2078 local row = guiGridListGetSelectedItem(gamesTabMain["gamesGridList"])
2079 if row ~= -1 then
2080 local game = guiGridListGetItemText(gamesTabMain["gamesGridList"],row,1)
2081 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]..")")
2082 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]..")")
2083 else
2084 guiSetText(gamesTabMain["gamesHighScoresLabel"],"Highscores\n\n1. \n\n2. \n\n3. \n\n4. \n\n5. ")
2085 guiSetText(gamesTabMain["gamesHighScoresLabel2"],"\n\n6. \n\n7. \n\n8. \n\n9. \n\n10. ")
2086 end
2087end
2088
2089function updateHighScores(game,scores)
2090 gamesHighScores[game] = scores
2091 local row = guiGridListGetSelectedItem(gamesTabMain["gamesGridList"])
2092 if row ~= -1 then
2093 local name = guiGridListGetItemText(gamesTabMain["gamesGridList"],row,1)
2094 if name == game then
2095 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]..")")
2096 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]..")")
2097 end
2098 end
2099end
2100addEvent("updateGameScores",true)
2101addEventHandler("updateGameScores",getRootElement(),updateHighScores)
2102
2103function newHighScoreNotification(game,score)
2104 if localUserSettings["notifyHighScore"] then
2105 playSound("hiscore.mp3",false)
2106 local wind = guiCreateWindow(0,0,200,120,"New High Score!",false)
2107 guiWindowSetMovable(wind,false)
2108 guiWindowSetSizable(wind,false)
2109 local label = guiCreateLabel(10,30,180,80,"Game: "..game.."\nScore: "..score.."\nBy: "..string.gsub(getPlayerName(source),"%(AFK%)",""),false,wind)
2110 guiLabelSetHorizontalAlign(label,"center",true)
2111 guiLabelSetVerticalAlign(label,"center")
2112 triggerEvent("onNotification",wind)
2113 end
2114end
2115addEvent("onNewHighScoreSubmit",true)
2116addEventHandler("onNewHighScoreSubmit",getRootElement(),newHighScoreNotification)
2117
2118function linkInfoToAccount()
2119 triggerServerEvent("linkInfoToAccount",getLocalPlayer())
2120end
2121
2122function getInfoFromAccount()
2123 triggerServerEvent("getInfoFromAccount",getLocalPlayer())
2124end
2125
2126function profileViewStats()
2127 for k,v in pairs(playersTabMain) do
2128 guiSetVisible(v,false)
2129 end
2130 for k,v in pairs(playersTabAchievements) do
2131 guiSetVisible(v,false)
2132 end
2133 for k,v in pairs(playersTabStats) do
2134 guiSetVisible(v,true)
2135 end
2136end
2137
2138function profileViewAchievements()
2139 for k,v in pairs(playersTabMain) do
2140 guiSetVisible(v,false)
2141 end
2142 for k,v in pairs(playersTabStats) do
2143 guiSetVisible(v,false)
2144 end
2145 for k,v in pairs(playersTabAchievements) do
2146 guiSetVisible(v,true)
2147 end
2148end
2149
2150function playerProfileGoBack()
2151 for k,v in pairs(playersTabStats) do
2152 guiSetVisible(v,false)
2153 end
2154 for k,v in pairs(playersTabAchievements) do
2155 guiSetVisible(v,false)
2156 end
2157 for k,v in pairs(playersTabMain) do
2158 guiSetVisible(v,true)
2159 end
2160end
2161
2162function toHoursMinutes(mins)
2163 local hours = tostring(math.floor(mins / 60))
2164 local minutes = mins % 60 >= 10 and tostring(mins % 60) or "0"..mins % 60
2165 return hours..":"..minutes
2166end
2167
2168function reverseITable(oldtable)
2169 local newtable = {}
2170 for i=0,#oldtable-1,1 do
2171 table.insert(newtable,oldtable[#oldtable-i])
2172 end
2173 return newtable
2174end
2175
2176function round(value,dec)
2177 if value then
2178 local decimals = dec or 2
2179 return tonumber(string.format("%.0"..tostring(decimals).."f",math.floor(((value)*10^decimals)+0.5)/(10^decimals)))
2180 end
2181 return false
2182end
2183
2184function getValidAvatars()
2185 return avatarTable
2186end
2187
2188function showMoreThan1MatchWindow(matches)
2189 guiGridListClear(moreThan1MatchGridList)
2190 for i,v in ipairs(matches) do
2191 local row = guiGridListAddRow(moreThan1MatchGridList)
2192 guiGridListSetItemText(moreThan1MatchGridList,row,1,v[1],false,false)
2193 guiGridListSetItemData(moreThan1MatchGridList,row,1,v[2])
2194 guiGridListSetItemText(moreThan1MatchGridList,row,2,v[3],false,false)
2195 end
2196 guiSetVisible(moreThan1MatchWindow,true)
2197 guiBringToFront(moreThan1MatchWindow)
2198end
2199addEvent("onMoreThan1MatchReturn",true)
2200addEventHandler("onMoreThan1MatchReturn",getRootElement(),showMoreThan1MatchWindow)
2201
2202function moreThan1MatchConfirm()
2203 local row = guiGridListGetSelectedItem(moreThan1MatchGridList)
2204 if row ~= -1 then
2205 selectednumber = row + 1
2206 triggerServerEvent("doRequestPlayerInfo",getLocalPlayer(),nil,guiGridListGetItemData(moreThan1MatchGridList,row,1))
2207 moreThan1MatchCancel()
2208 end
2209end
2210
2211function moreThan1MatchCancel()
2212 guiMoveToBack(moreThan1MatchWindow)
2213 guiSetVisible(moreThan1MatchWindow,false)
2214 guiGridListClear(moreThan1MatchGridList)
2215end