Advertisement
Guest User

Untitled

a guest
Dec 21st, 2012
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 46.29 KB | None | 0 0
  1. --Made by Fivos Exclusively for PRO
  2. gRoot = getRootElement()
  3.  
  4. AchievementsName = {
  5. "First Win!", -- 1sze zwyciestwo
  6. "First Hunter!", -- 1szy hunter
  7. "Top Winner!", -- 300 wins
  8. "Awesome Winner!", -- 1000 wins
  9. "Top Gamer!", -- 2000 map
  10. "Long Time Player!", -- 7 dni
  11. "Hunter Owner!", -- hunter 50 razy
  12. "Beat my TT kid!", -- pobij swoj TT
  13. "5 Maps In a Row LOL!", -- 5x
  14. "Triple Deathmatch!", -- 3x dm pod rzad
  15. "Triple Dest. Derby!", -- 3x DD
  16. "Hunter Power", -- hunterfight z 3 graczami
  17. "Map Buyer", -- 10 razy kupic mape
  18. "Top Times collector!", -- 50 toptimow
  19. "Rich player!", -- 1 mln
  20. }
  21. LastWinnersDD={"","","","",""}
  22. LastWinnersDM={"","","","",""}
  23. LastWinners={"","","","",""}
  24. HunterCount = 0
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32. ------------------------------------------
  33. -- Settings
  34. ------------------------------------------
  35. mapCost = 10000
  36.  
  37. local activePlayers = {}
  38.  
  39. function startResource ()
  40. exports.scoreboard:removeScoreboardColumn("race rank")
  41. exports.scoreboard:removeScoreboardColumn("checkpoint")
  42. exports.scoreboard:addScoreboardColumn("Money",gRoot,5,100)
  43. mapIsAlreadySet = false
  44. for i,pla in ipairs(getElementsByType("player")) do
  45. scoreboardRefresh(pla)
  46. end
  47. end
  48. addEventHandler ( "onResourceStart", getResourceRootElement(getThisResource()), startResource )
  49.  
  50. ------------------------------------------
  51. -- Load All Stats on Join
  52. ------------------------------------------
  53. function scoreboardRefresh(thePlayer)
  54. local playerCash = loadPlayerData(thePlayer,"cash")
  55. setElementData(thePlayer,"Money","$"..playerCash)
  56. callClientFunction(thePlayer, "refreshCash", playerCash)
  57. end
  58.  
  59. function playerJoinHandler ( )
  60. outputChatBox("#00AAFF# #FFFFFFPress '#00AAFFF7#FFFFFF' to open your - Lords of Destruction!",source,255,255,255,true)
  61. scoreboardRefresh(source)
  62. end
  63. addEventHandler ( "onPlayerJoin", gRoot, playerJoinHandler )
  64.  
  65. ------------------------------------------
  66. -- DD/DM/FUN checking
  67. ------------------------------------------
  68. addEvent("onMapStarting")
  69. addEventHandler("onMapStarting", getRootElement(),
  70. function(mapInfo, mapOptions, gameOptions)
  71. CurrentMap = nil
  72. HunterCount = 0
  73. MaxI = 0
  74. for i,thePlayer in ipairs(getElementsByType("player")) do
  75. MaxI = i
  76. end
  77. if MaxI >=3 then
  78. if (checkMapType(mapInfo.name) == 1) then
  79. CurrentMap = 1
  80. for i,thePlayer in ipairs(getElementsByType("player")) do
  81. local mapsPlayedDM = tonumber(loadPlayerData(thePlayer,"mapsPlayedDM"))
  82. savePlayerData(thePlayer,"mapsPlayedDM", mapsPlayedDM+1)
  83. CheckAchievement(thePlayer,5)
  84. end
  85. elseif (checkMapType(mapInfo.name) == 2) then
  86. CurrentMap = 2
  87. for i,thePlayer in ipairs(getElementsByType("player")) do
  88. local mapsPlayedDD = tonumber(loadPlayerData(thePlayer,"mapsPlayedDD"))
  89. savePlayerData(thePlayer,"mapsPlayedDD", mapsPlayedDD+1)
  90. CheckAchievement(thePlayer,5)
  91. end
  92. end
  93. else
  94. outputChatBox("#00AAFF# #FFFFFF Required 3 players to get Stats and Cash!",gRoot,255,255,255,true)
  95. end
  96. end)
  97.  
  98. function checkMapType(mapname)
  99. if string.find(mapname, "[DM]", 1, true) then
  100. return 1
  101. elseif string.find(mapname, "[DD]", 1,true) then
  102. return 2
  103. elseif string.find(mapname, "[FUN]", 1,true) then
  104. return 3
  105. end
  106. end
  107.  
  108.  
  109. function getRaceAlivePlayers()
  110. local result = {}
  111. local _getAlivePlayers = getElementsByType("player")
  112. for i,v in ipairs(_getAlivePlayers) do
  113. if getElementData(v,"state") == "alive" then
  114. table.insert(result,v)
  115. end
  116. end
  117. return result
  118. end
  119.  
  120.  
  121. ------------------------------------------
  122. -- Wins Stats
  123. ------------------------------------------
  124. function onPlayerDeadInRace()
  125. local thePlayer = source
  126. local dPlayers = getDeadRacePlayers()
  127. local aPlayers = getAliveRacePlayers()
  128. local Position = aPlayers + 1
  129. if dPlayers + aPlayers >= 2 then
  130. local cashForPlayer = math.floor((200/Position)*(dPlayers + aPlayers))
  131. local playerCash = loadPlayerData(thePlayer,"cash")
  132. savePlayerData(thePlayer,"cash",playerCash+cashForPlayer)
  133. CheckAchievement(thePlayer,15)
  134. scoreboardRefresh(thePlayer)
  135. if Position == 1 then
  136. outputChatBox("#00AAFF# "..getPlayerName(thePlayer).." #FFFFFFhas won the map +$#00AAFF" .. cashForPlayer.. "#FFFFFF!",gRoot,255,255,255,true)
  137. --triggerClientEvent ( "showWinMessage", getRootElement(), thePlayer, cashForPlayer)
  138.  
  139. if LastWinners[1] == "" then
  140. if LastWinners[2] == "" then
  141. if LastWinners[3] == "" then
  142. if LastWinners[4] == "" then
  143. if LastWinners[5] == "" then
  144. LastWinners[5] = thePlayer
  145. else
  146. LastWinners[4] = thePlayer
  147. end
  148. else
  149. LastWinners[3] = thePlayer
  150. end
  151. else
  152. LastWinners[2] = thePlayer
  153. end
  154. else
  155. LastWinners[1] = thePlayer
  156. end
  157. else
  158. LastWinners[5] = LastWinners[4]
  159. LastWinners[4] = LastWinners[3]
  160. LastWinners[3] = LastWinners[2]
  161. LastWinners[2] = LastWinners[1]
  162. LastWinners[1] = thePlayer
  163. CheckAchievement(thePlayer,9)
  164. end
  165.  
  166.  
  167.  
  168. if CurrentMap and CurrentMap == 1 then
  169. local mapsWonDM = tonumber(loadPlayerData(thePlayer,"mapsWonDM"))
  170. savePlayerData(thePlayer,"mapsWonDM", mapsWonDM+1)
  171. CheckAchievement(thePlayer,1)
  172. CheckAchievement(thePlayer,3)
  173. CheckAchievement(thePlayer,4)
  174. if LastWinnersDM[1] == ""then
  175. if LastWinnersDM[2] == "" then
  176. if LastWinnersDM[3] == "" then
  177. LastWinnersDM[3] = thePlayer
  178. else
  179. LastWinnersDM[2] = thePlayer
  180. end
  181. else
  182. LastWinnersDM[1] = thePlayer
  183. end
  184. else
  185. LastWinnersDM[3] = LastWinnersDM[2]
  186. LastWinnersDM[2] = LastWinnersDM[1]
  187. LastWinnersDM[1] = thePlayer
  188. CheckAchievement(thePlayer,10)
  189. end
  190. if HunterCount >= 3 then
  191. unlockedAC(thePlayer,12)
  192. end
  193. elseif CurrentMap and CurrentMap == 2 then
  194. local mapsWonDD = tonumber(loadPlayerData(thePlayer,"mapsWonDD"))
  195. savePlayerData(thePlayer,"mapsWonDD", mapsWonDD+1)
  196. CheckAchievement(thePlayer,1)
  197. CheckAchievement(thePlayer,3)
  198. CheckAchievement(thePlayer,4)
  199. if LastWinnersDD[1] == "" then
  200. if LastWinnersDD[2] == "" then
  201. if LastWinnersDD[3] == "" then
  202. LastWinnersDD[3] = thePlayer
  203. else
  204. LastWinnersDD[2] = thePlayer
  205. end
  206. else
  207. LastWinnersDD[1] = thePlayer
  208. end
  209. else
  210. LastWinnersDD[3] = LastWinnersDD[2]
  211. LastWinnersDD[2] = LastWinnersDD[1]
  212. LastWinnersDD[1] = thePlayer
  213. CheckAchievement(thePlayer,11)
  214. end
  215. end
  216. else
  217. outputChatBox("#00AAFF# #FFFFFFYou have recieved $#00AAFF" .. cashForPlayer .. "#FFFFFF!",thePlayer,255,255,255,true)
  218. end
  219. else
  220. outputChatBox("#00AAFF# #FFFFFF Min. 3 players to get stats and cash!",thePlayer,255,255,255,true)
  221. end
  222. end
  223. addEvent("onPlayerWasted", true)
  224. addEventHandler("onPlayerWasted", gRoot , onPlayerDeadInRace)
  225.  
  226. ------------------------------------------
  227. -- Statystyki
  228. ------------------------------------------
  229. function showStats(thePlayer,CMD,targetPlayer)
  230. if targetPlayer then
  231. if (findPlayerByName(targetPlayer)) then
  232. local targetPlayer = findPlayerByName(targetPlayer)
  233. local c,ddw,ddp,ddr,dmw,dmp,dmr,pt,h,mb,ac,tt = loadPlayerStats(targetPlayer)
  234. outputChatBox("#00AAFF# #FFFFFF"..getPlayerName(targetPlayer).."#FFFFFF's stats:",thePlayer,255,255,255,true)
  235. outputChatBox("#00AAFF# [DM] #FFFFFFPlayed: "..dmp.." | Wins: "..dmw.." | Ratio: "..dmr.."%",thePlayer,255,255,255,true)
  236. outputChatBox("#00AAFF# [DD] #FFFFFFPlayed: "..ddp.." | Wins: "..ddw.." | Ratio: "..ddr.."%",thePlayer,255,255,255,true)
  237. outputChatBox("#00AAFF# #FFFFFFCash: $"..c.." | Hunters: "..h.." | Map Buys: "..mb,thePlayer,255,255,255,true)
  238. outputChatBox("#00AAFF# #FFFFFFPlayed Time: "..convertTime(pt),thePlayer,255,255,255,true)
  239. ACCOUNT = 0
  240. for i=1,#ac do
  241. if ac[i] == 1 then
  242. ACCOUNT = ACCOUNT+1
  243. end
  244. end
  245. outputChatBox("#00AAFF# #FFFFFFAchievements: "..ACCOUNT.."/15 | TopTimes: "..tt,thePlayer,255,255,255,true)
  246. else
  247. outputChatBox("#00AAFF# #FFFFFFERROR! The player you specified does not exist!",thePlayer,255,255,255,true)
  248. end
  249. else
  250. local c,ddw,ddp,ddr,dmw,dmp,dmr,pt,h,mb,ac,tt = loadPlayerStats(thePlayer)
  251. outputChatBox("#00AAFF# #FFFFFF"..getPlayerName(thePlayer).."#FFFFFF's stats:",thePlayer,255,255,255,true)
  252. outputChatBox("#00AAFF# [DM] #FFFFFFPlayed: "..dmp.." | Wins: "..dmw.." | Ratio: "..dmr.."%",thePlayer,255,255,255,true)
  253. outputChatBox("#00AAFF# [DD] #FFFFFFPlayed: "..ddp.." | Wins: "..ddw.." | Ratio: "..ddr.."%",thePlayer,255,255,255,true)
  254. outputChatBox("#00AAFF# #FFFFFFCash: $"..c.." | Hunters: "..h.." | Map Buys: "..mb,thePlayer,255,255,255,true)
  255. outputChatBox("#00AAFF# #FFFFFFPlayed Time: "..convertTime(pt),thePlayer,255,255,255,true)
  256. ACCOUNT = 0
  257. for i=1,#ac do
  258. if ac[i] == 1 then
  259. ACCOUNT = ACCOUNT+1
  260. end
  261. end
  262. outputChatBox("#00AAFF# #FFFFFFAchievements: "..ACCOUNT.."/15 | TopTimes: "..tt,thePlayer,255,255,255,true)
  263. end
  264. end
  265. addCommandHandler("stats", showStats)
  266. addCommandHandler("st", showStats)
  267.  
  268. ------------------------------------------
  269. -- Shaders
  270. ------------------------------------------
  271.  
  272. function ShadersUpdate(Who,Shader,Data)
  273. savePlayerData(Who,"Shader"..Shader,Data)
  274. end
  275. function ClientStarted ( who )
  276. for i=1,2 do
  277. local data = loadPlayerData(who,"Shader"..i)
  278. if i == 1 then callClientFunction(who,"CarShaderToggle",who,data)
  279. elseif i == 2 then callClientFunction(who,"WaterShaderToggle",who,data)
  280. end
  281. end
  282. end
  283.  
  284. ------------------------------------------
  285. -- SPD GPD
  286. ------------------------------------------
  287. addCommandHandler("spd",
  288. function(player,command,toplayername,datatype,amount)
  289. if hasObjectPermissionTo ( player, "function.kickPlayer", false ) then
  290. if (toplayername) and (datatype) and (amount) then
  291. if datatype == "cash" or datatype == "mapsWonDD" or datatype == "mapsPlayedDD" or datatype == "mapsWonDM" or datatype == "mapsPlayedDM" or datatype == "playedTime" or datatype == "hunters" or datatype == "mapBuys" then
  292. if (findPlayerByName (toplayername)) then
  293. toplayer = findPlayerByName (toplayername)
  294. savePlayerData(toplayer,datatype,amount)
  295. outputChatBox ("#00AAFF# #FFFFFFsetPlayerData: " .. getPlayerName(toplayer) .. " #FF0000|#FFFFFF Player's #00AAFF" .. datatype .. "#FFFFFF has been set to: #00AAFF" .. amount, player,255,0,0,true)
  296. outputChatBox ("#00AAFF# #FFFFFF" .. getPlayerName (player) .. " #FFFFFFhas set your #ABCDEF" .. datatype .."#FFFFFF to: #00AAFF" .. amount, toplayer,255,0,0,true)
  297. local playerCash = loadPlayerData(toplayer,"cash")
  298. local playerLevel = loadPlayerData(toplayer,"level")
  299. local thePlayer = toplayer
  300. scoreboardRefresh(thePlayer)
  301. end
  302. else
  303. outputChatBox ("#00AAFF# #FF0000ERROR! #FFFFFFDatatype: cash/mapsWonDD/mapsPlayedDD/mapsWonDM/mapsPlayedDM/playedTime/hunters/mapBuys",player,255,255,255,true)
  304. end
  305. else
  306. outputChatBox ("#00AAFF# #FF0000ERROR!#FFFFFF Syntax: /setPlayerData [playername] [datatype] [new_amount]",player,255,255,255,true)
  307. end
  308. else
  309. end
  310. end)
  311.  
  312. addCommandHandler("gpd",
  313. function(player,command,toplayername,datatype)
  314. if hasObjectPermissionTo ( player, "function.kickPlayer", false ) then
  315. if (toplayername) and (datatype) then
  316. if datatype == "cash" or datatype == "mapsWonDD" or datatype == "mapsPlayedDD" or datatype == "mapsWonDM" or datatype == "mapsPlayedDM" or datatype == "playedTime" or datatype == "hunters" or datatype == "mapBuys" then
  317. if (findPlayerByName (toplayername)) then
  318. toplayer = findPlayerByName (toplayername)
  319. local amount = loadPlayerData(toplayer,datatype)
  320. outputChatBox ("#00AAFF# #FFFFFFgetPlayerData: " .. getPlayerName(toplayer) .. " #FF0000|#FFFFFF " .. datatype .."#FFFFFF: #00AAFF" .. amount,player,255,255,255,true)
  321. end
  322. else
  323. outputChatBox ("#00AAFF# #FF0000ERROR! #FFFFFFDatatype: cash/mapsWonDD/mapsPlayedDD/mapsWonDM/mapsPlayedDM/playedTime/hunters/mapBuys",player,255,255,255,true)
  324. end
  325. else
  326. outputChatBox ("#00AAFF# #FF0000ERROR!#FFFFFF Syntax: /getPlayerData [playername] [datatype]",player,255,255,255,true)
  327. end
  328. end
  329. end)
  330.  
  331.  
  332. ------------------------------------------
  333. -- loadStats
  334. ------------------------------------------
  335. function loadStats(thePlayer,whoask)
  336. local playerCash = tonumber(loadPlayerData(thePlayer,"cash"))
  337. setElementData(thePlayer,"Money","$"..playerCash)
  338. local mapsWonDD = tonumber(loadPlayerData(thePlayer,"mapsWonDD"))
  339. local mapsPlayedDD = tonumber(loadPlayerData(thePlayer,"mapsPlayedDD"))
  340. local mapsWonDM = tonumber(loadPlayerData(thePlayer,"mapsWonDM"))
  341. local mapsPlayedDM = tonumber(loadPlayerData(thePlayer,"mapsPlayedDM"))
  342. ------ playedTime
  343. local PlayerCheckTime = getTickCount ()
  344. local PlayerTodayTime = math.floor((PlayerCheckTime - getElementData(thePlayer,"joinTime"))/1000)
  345. local PlayerOldTime = loadPlayerData(thePlayer,"playedTime")
  346. savePlayerData(thePlayer,"playedTime", PlayerOldTime + PlayerTodayTime)
  347. CheckAchievement(thePlayer,6)
  348. setElementData(thePlayer,"joinTime", PlayerCheckTime)
  349. ------
  350. local playedTime = PlayerOldTime + PlayerTodayTime
  351. local hunters = tonumber(loadPlayerData(thePlayer,"hunters"))
  352. local mapBuys = tonumber(loadPlayerData(thePlayer,"mapBuys"))
  353. AC = {}
  354. for i=1,15 do
  355. AC[i] = tonumber(loadPlayerData(thePlayer,"ac"..i))
  356. end
  357. local toptimes = tonumber(loadPlayerData(thePlayer,"TopTimes"))
  358. --[[UData = {}
  359. for j=1,20 do
  360. UData[j] = loadPlayerData(thePlayer,"ud"..j)
  361. end]]--
  362.  
  363.  
  364. local winRatioDD = 0
  365. local winRatioDM = 0
  366. if mapsPlayedDD == 0 and mapsWonDD == 0 then
  367. winRatioDD = 0
  368. elseif mapsPlayedDD ~= 0 and mapsWonDD == 0 then
  369. winRatioDD = 0
  370. elseif mapsPlayedDD ~= 0 and mapsWonDD ~= 0 then
  371. winRatioDD = math.round(((100/mapsPlayedDD)*mapsWonDD),2)
  372. elseif mapsWonDD > mapsPlayedDD then
  373. winRatioDD = 0
  374. end
  375. if mapsPlayedDM == 0 and mapsWonDM == 0 then
  376. winRatioDM = 0
  377. elseif mapsPlayedDM ~= 0 and mapsWonDM == 0 then
  378. winRatioDM = 0
  379. elseif mapsPlayedDM ~= 0 and mapsWonDM ~= 0 then
  380. winRatioDM = math.round(((100/mapsPlayedDM)*mapsWonDM),2)
  381. elseif mapsWonDM > mapsPlayedDM then
  382. winRatioDM = 0
  383. end
  384. callClientFunction(whoask, "refreshPanelData", thePlayer ,playerCash, mapsWonDD, mapsPlayedDD, winRatioDD, mapsWonDM, mapsPlayedDM, winRatioDM, playedTime, hunters, mapBuys, AC,toptimes)
  385. end
  386.  
  387. function loadPlayerStats(thePlayer)
  388. local playerCash = tonumber(loadPlayerData(thePlayer,"cash"))
  389. setElementData(thePlayer,"Money","$"..playerCash)
  390. local mapsWonDD = tonumber(loadPlayerData(thePlayer,"mapsWonDD"))
  391. local mapsPlayedDD = tonumber(loadPlayerData(thePlayer,"mapsPlayedDD"))
  392. local mapsWonDM = tonumber(loadPlayerData(thePlayer,"mapsWonDM"))
  393. local mapsPlayedDM = tonumber(loadPlayerData(thePlayer,"mapsPlayedDM"))
  394. local playedTime = tonumber(loadPlayerData(thePlayer,"playedTime"))
  395. local hunters = tonumber(loadPlayerData(thePlayer,"hunters"))
  396. local mapBuys = tonumber(loadPlayerData(thePlayer,"mapBuys"))
  397. AC = {}
  398. for i=1,15 do
  399. local name = "ac"..i
  400. AC[i] = tonumber(loadPlayerData(thePlayer,name))
  401. end
  402. local toptimes = tonumber(loadPlayerData(thePlayer,"TopTimes"))
  403.  
  404. local winRatioDD = 0
  405. local winRatioDM = 0
  406. if mapsPlayedDD == 0 and mapsWonDD == 0 then
  407. winRatioDD = 0
  408. elseif mapsPlayedDD ~= 0 and mapsWonDD == 0 then
  409. winRatioDD = 0
  410. elseif mapsPlayedDD ~= 0 and mapsWonDD ~= 0 then
  411. winRatioDD = math.round(((100/mapsPlayedDD)*mapsWonDD),2)
  412. elseif mapsWonDD > mapsPlayedDD then
  413. winRatioDD = 0
  414. end
  415. if mapsPlayedDM == 0 and mapsWonDM == 0 then
  416. winRatioDM = 0
  417. elseif mapsPlayedDM ~= 0 and mapsWonDM == 0 then
  418. winRatioDM = 0
  419. elseif mapsPlayedDM ~= 0 and mapsWonDM ~= 0 then
  420. winRatioDM = math.round(((100/mapsPlayedDM)*mapsWonDM),2)
  421. elseif mapsWonDM > mapsPlayedDM then
  422. winRatioDM = 0
  423. end
  424. return playerCash, mapsWonDD, mapsPlayedDD, winRatioDD, mapsWonDM, mapsPlayedDM, winRatioDM, playedTime, hunters, mapBuys, AC, toptimes
  425. end
  426.  
  427. --[[function NewUserDataFromPanel(ud,thePlayer)
  428. for i=1,20 do
  429. savePlayerData (thePlayer,"ud"..i,ud[i])
  430. end
  431. end
  432.  
  433. function getUserStats(whoask,who)
  434. UData = {}
  435. for j=1,20 do
  436. UData[j] = loadPlayerData(who,"ud"..j)
  437. end
  438. callClientFunction(whoask,"UserStats",UData)
  439. end]]--
  440. ------------------------------------------
  441. -- Load & Save Data
  442. ------------------------------------------
  443. function loadPlayerData (player,datatype)
  444. local playerSerial = getPlayerSerial (player)
  445. if (playerSerial) then
  446. local root = xmlLoadFile ("DataBase.xml")
  447. if (root) then
  448. local usersNode = xmlFindChild (root,"user",0)
  449. if (usersNode) then
  450. local playerRootNode = xmlFindChild (usersNode,"SERIAL_" .. playerSerial,0)
  451. if not (playerRootNode == false) then
  452. local playerData = xmlNodeGetAttribute (playerRootNode,datatype)
  453. if (playerData) then
  454. xmlUnloadFile (root)
  455. --outputDebugString("---- LoadD: "..getPlayerName(player).." , "..datatype.." , "..playerData)
  456. return playerData
  457. else
  458. xmlNodeSetAttribute (playerRootNode,datatype,0)
  459. xmlSaveFile (root)
  460. xmlUnloadFile (root)
  461. --outputDebugString("---- LoadD: "..getPlayerName(player).." , "..datatype.." , 0")
  462. return 0
  463. end
  464. else
  465. local playerRootNode = xmlCreateChild (usersNode,"SERIAL_" .. playerSerial)
  466. xmlNodeSetAttribute (playerRootNode,datatype,0)
  467. xmlSaveFile (root)
  468. xmlUnloadFile (root)
  469. --outputDebugString("---- LoadD: "..getPlayerName(player).." , "..datatype.." , 0")
  470. return 0
  471. end
  472. end
  473. end
  474. end
  475. end
  476.  
  477. function savePlayerData (player,datatype,newvalue)
  478. local playerSerial = getPlayerSerial (player)
  479. if (playerSerial) then
  480. local root = xmlLoadFile ("DataBase.xml")
  481. if (root) then
  482. local usersNode = xmlFindChild (root,"user",0)
  483. if (usersNode) then
  484. local playerRootNode = xmlFindChild (usersNode,"SERIAL_" .. playerSerial,0)
  485. if not (playerRootNode == false) then
  486. local newNodeValue = xmlNodeSetAttribute (playerRootNode,datatype,newvalue)
  487. xmlSaveFile (root)
  488. xmlUnloadFile (root)
  489. --outputDebugString("---- SaveD: "..getPlayerName(player).." , "..datatype.." , "..newvalue)
  490. return newNodeValue
  491. else
  492. local playerRootNode = xmlCreateChild (usersNode,"SERIAL_" .. playerSerial)
  493. local newNodeValue = xmlNodeSetAttribute (playerRootNode,datatype,newvalue)
  494. xmlSaveFile (root)
  495. xmlUnloadFile (root)
  496. --outputDebugString("---- SaveD: "..getPlayerName(player).." , "..datatype.." , "..newvalue)
  497. return newNodeValue
  498. end
  499. end
  500. end
  501. end
  502. end
  503. ------------------------------------------
  504. -- Achievementy
  505. ------------------------------------------
  506.  
  507.  
  508. function CheckAchievement(thePlayer,achiev)
  509. local name = "ac"..achiev
  510. local LockedUnlocked = tonumber(loadPlayerData(thePlayer,name))
  511. if LockedUnlocked == 0 then
  512. if achiev == 1 then -- 1st win
  513. local mapsWonDD = tonumber(loadPlayerData(thePlayer,"mapsWonDD"))
  514. local mapsWonDM = tonumber(loadPlayerData(thePlayer,"mapsWonDM"))
  515. if mapsWonDD > 0 or mapsWonDM > 0 then
  516. unlockedAC(thePlayer,achiev)
  517. end
  518. elseif achiev == 2 then -- 1st hunter
  519. local hunters = tonumber(loadPlayerData(thePlayer,"hunters"))
  520. if hunters > 0 then
  521. unlockedAC(thePlayer,achiev)
  522. end
  523. elseif achiev == 3 then -- 300+ wins
  524. local mapsWonDD = tonumber(loadPlayerData(thePlayer,"mapsWonDD"))
  525. local mapsWonDM = tonumber(loadPlayerData(thePlayer,"mapsWonDM"))
  526. if mapsWonDD + mapsWonDM >= 300 then
  527. unlockedAC(thePlayer,achiev)
  528. end
  529. elseif achiev == 4 then -- 1000+wins
  530. local mapsWonDD = tonumber(loadPlayerData(thePlayer,"mapsWonDD"))
  531. local mapsWonDM = tonumber(loadPlayerData(thePlayer,"mapsWonDM"))
  532. if mapsWonDD + mapsWonDM >= 1000 then
  533. unlockedAC(thePlayer,achiev)
  534. end
  535. elseif achiev == 5 then -- 2000 played
  536. local mapsPlayedDD = tonumber(loadPlayerData(thePlayer,"mapsPlayedDD"))
  537. local mapsPlayedDM = tonumber(loadPlayerData(thePlayer,"mapsPlayedDM"))
  538. if mapsPlayedDD + mapsPlayedDM >= 2000 then
  539. unlockedAC(thePlayer,achiev)
  540. end
  541. elseif achiev == 6 then -- 7days
  542. local playedTime = tonumber(loadPlayerData(thePlayer,"playedTime"))
  543. if playedTime >= 604800 then
  544. unlockedAC(thePlayer,achiev)
  545. end
  546. elseif achiev == 7 then -- 50+ hunters
  547. local hunters = tonumber(loadPlayerData(thePlayer,"hunters"))
  548. if hunters >= 50 then
  549. unlockedAC(thePlayer,achiev)
  550. end
  551. elseif achiev == 8 then--beat TT
  552. local toptimes = tonumber(loadPlayerData(thePlayer,"TopTimes"))
  553. if toptimes > 0 then
  554. unlockedAC(thePlayer,achiev)
  555. end
  556. elseif achiev == 9 then-- 5x in a row
  557. if LastWinners[1] == thePlayer and LastWinners[2] == thePlayer and LastWinners[3] == thePlayer and LastWinners[4] == thePlayer and LastWinners[5] == thePlayer then
  558. unlockedAC(thePlayer,achiev)
  559. end
  560. elseif achiev == 10 then --3x DM
  561. if LastWinnersDM[1] == thePlayer and LastWinnersDM[2] == thePlayer and LastWinnersDM[3] == thePlayer then
  562. unlockedAC(thePlayer,achiev)
  563. end
  564. elseif achiev == 11 then --3x DD
  565. if LastWinnersDD[1] == thePlayer and LastWinnersDD[2] == thePlayer and LastWinnersDD[3] == thePlayer then
  566. unlockedAC(thePlayer,achiev)
  567. end
  568. elseif achiev == 13 then --10x mapbuy
  569. local mapBuys = tonumber(loadPlayerData(thePlayer,"mapBuys"))
  570. if mapBuys >= 10 then
  571. unlockedAC(thePlayer,achiev)
  572. end
  573. elseif achiev == 14 then --50 toptimow
  574. local toptimes = tonumber(loadPlayerData(thePlayer,"TopTimes"))
  575. if toptimes >= 50 then
  576. unlockedAC(thePlayer,achiev)
  577. end
  578. elseif achiev == 15 then --1mln
  579. local playerCash = tonumber(loadPlayerData(thePlayer,"cash"))
  580. if playerCash >= 1000000 then
  581. unlockedAC(thePlayer,achiev)
  582. end
  583. end
  584. else
  585. if achiev == 15 then
  586. local playerCash = tonumber(loadPlayerData(thePlayer,"cash"))
  587. if playerCash < 1000000 then
  588. savePlayerData(thePlayer,"ac"..achiev,0)
  589. end
  590. elseif achiev == 13 then
  591. local mapBuys = tonumber(loadPlayerData(thePlayer,"mapBuys"))
  592. if mapBuys <= 10 then
  593. unlockedAC(thePlayer,achiev)
  594. end
  595. end
  596. end
  597. end
  598.  
  599. function unlockedAC(thePlayer,achiev)
  600. callClientFunction(thePlayer,"unlockAChievement", achiev)
  601. outputChatBox("#FFFFFFAC: #00AAFF"..getPlayerName(thePlayer).."#FFFFFF has unlocked an achievement!",getRootElement(),255,255,255,true)
  602. outputChatBox("#FFFFFFAC: #00AAFF"..AchievementsName[achiev],getRootElement(),255,255,255,true)
  603. savePlayerData(thePlayer,"ac"..achiev,1)
  604. end
  605.  
  606. addEvent("onPlayerToptimeImprovement",true)
  607. addEventHandler("onPlayerToptimeImprovement",getRootElement(),
  608. function (player)
  609. local totalToptimes = tonumber(loadPlayerData(source,"TopTimes"))
  610. savePlayerData(source,"TopTimes",totalToptimes+1)
  611. CheckAchievement(source,8)
  612. CheckAchievement(source,14)
  613. end)
  614. ------------------------------------------
  615. -- Join - PlayedTime
  616. ------------------------------------------
  617. function PlayedTimeJoin()
  618. local thePlayer = source
  619. local PlayerJoinTime = getTickCount ()
  620. setElementData(thePlayer,"joinTime", PlayerJoinTime)
  621. end
  622. addEventHandler ("onPlayerJoin",getRootElement(), PlayedTimeJoin)
  623.  
  624. function PlayedTimeQuit()
  625. local thePlayer = source
  626. local PlayerQuitTime = getTickCount ()
  627. local PlayerTodayTime = math.floor((PlayerQuitTime - getElementData(thePlayer,"joinTime"))/1000)
  628. local PlayerOldTime = loadPlayerData(thePlayer,"playedTime")
  629. savePlayerData(thePlayer,"playedTime", PlayerOldTime + PlayerTodayTime)
  630. end
  631. addEventHandler ("onPlayerQuit",getRootElement(), PlayedTimeQuit)
  632.  
  633. function convertTime(timeinseconds)
  634. Days = math.floor(timeinseconds/86400)
  635. timeinseconds = timeinseconds - Days*86400
  636. Hours = math.floor(timeinseconds/3600)
  637. timeinseconds = timeinseconds - Hours*3600
  638. Minutes = math.floor(timeinseconds/60)
  639. timeinseconds = timeinseconds - Minutes*60
  640. Seconds = timeinseconds
  641. if Days > 0 then
  642. Time = Days.." days "..Hours.."h "..Minutes.."m "..Seconds.."s"
  643. elseif Hours > 0 then
  644. Time = Hours.."h "..Minutes.."m "..Seconds.."s"
  645. elseif Minutes > 0 then
  646. Time = Minutes.."m "..Seconds.."s"
  647. else
  648. Time = Seconds.."s"
  649. end
  650. return Time
  651. end
  652.  
  653. ------------------------------------------
  654. -- Hunters
  655. ------------------------------------------
  656. function checkForHunter(number,sort,model)
  657. thePlayer = source
  658. if sort == "vehiclechange" then
  659. if model == 425 then
  660. if getElementData(thePlayer,"playerGotHunter") == false then
  661. setElementData(thePlayer,"playerGotHunter",true)
  662. local oldhunters = loadPlayerData(thePlayer,"hunters")
  663. savePlayerData(thePlayer,"hunters", oldhunters + 1)
  664. CheckAchievement(thePlayer,2)
  665. CheckAchievement(thePlayer,7)
  666. HunterCount = HunterCount + 1
  667. end
  668. end
  669. end
  670. end
  671. addEventHandler("onPlayerPickUpRacePickup",getRootElement(),checkForHunter)
  672.  
  673. ------------------------------------------
  674. -- Mapy
  675. ------------------------------------------
  676. function buyMap(thePlayer,mapName)
  677. if mapIsAlreadySet == false then
  678. if not (mapName == "") then
  679. local playerCash = tonumber(loadPlayerData(thePlayer,"cash"))
  680. if playerCash >= mapCost then
  681. executeCommandHandler("pnfnsdhasd3w7432jhdsbw3ersdncsdir",thePlayer,mapName)
  682. savePlayerData(thePlayer,"cash",playerCash-mapCost)
  683. outputChatBox("#FFFFFFNextmap: "..getPlayerName(thePlayer).."#FFFFFF has bought a next map!",getRootElement(),255,255,255,true)
  684. outputChatBox("#FFFFFFNextmap: #00AAFF"..mapName,getRootElement(),255,255,255,true)
  685. mapIsAlreadySet = thePlayer
  686. local oldmapbuys = loadPlayerData(thePlayer,"mapBuys")
  687. savePlayerData(thePlayer,"mapBuys", oldmapbuys + 1)
  688. CheckAchievement(thePlayer,13)
  689. scoreboardRefresh(thePlayer)
  690. else
  691. outputChatBox("#00AAFF# #FFFFFFYou don't have enough money to set a map!",thePlayer,255,255,255,true)
  692. end
  693. else
  694. outputChatBox("#00AAFF# #FFFFFFPlease select a map from the list first!",thePlayer,255,255,255,true)
  695. end
  696. else
  697. outputChatBox("#00AAFF# #FFFFFFA map is already set at the moment! Please try again later.",thePlayer,255,255,255,true)
  698. end
  699. end
  700.  
  701. function unbuyMap(thePlayer)
  702. if mapIsAlreadySet ~= false then
  703. if mapIsAlreadySet == thePlayer then
  704. executeCommandHandler("pnfnsdhasd3w7432jhdsbw3ersdncsdir",thePlayer,nil)
  705. local playerCash = tonumber(loadPlayerData(thePlayer,"cash"))
  706. savePlayerData(thePlayer,"cash",playerCash+(mapCost/4)*3)
  707. outputChatBox("#FFFFFFNextmap: "..getPlayerName(thePlayer).."#FFFFFF has unbought a next map!",getRootElement(),255,255,255,true)
  708. mapIsAlreadySet = false
  709. local oldmapbuys = loadPlayerData(thePlayer,"mapBuys")
  710. savePlayerData(thePlayer,"mapBuys", oldmapbuys - 1)
  711. CheckAchievement(thePlayer,13)
  712. scoreboardRefresh(thePlayer)
  713. else
  714. outputChatBox("#00AAFF# #FFFFFFYou didn't buy that map!",thePlayer,255,255,255,true)
  715. end
  716. else
  717. outputChatBox("#00AAFF# #FFFFFFNo map has been bought!",thePlayer,255,255,255,true)
  718. end
  719. end
  720.  
  721. function resetMapSetStatus()
  722. mapIsAlreadySet = false
  723. end
  724. addEventHandler("onMapStarting",getRootElement(),resetMapSetStatus)
  725.  
  726. function getServerMaps (loadList,s)
  727. local tableOut
  728. if loadList then
  729.  
  730. tableOut = {}
  731. -- local deletedMaps = {}
  732. local gamemodes = {}
  733. gamemodes = call(getResourceFromName("mapmanager"), "getGamemodes")
  734. for id,gamemode in ipairs (gamemodes) do
  735. tableOut[id] = {}
  736. tableOut[id].name = getResourceInfo(gamemode, "name") or getResourceName(gamemode)
  737. tableOut[id].resname = getResourceName(gamemode)
  738. tableOut[id].maps = {}
  739. local maps = call(getResourceFromName("mapmanager"), "getMapsCompatibleWithGamemode" , gamemode)
  740. for _,map in ipairs (maps) do
  741. table.insert(tableOut[id]["maps"] ,{name = getResourceInfo(map, "name") or getResourceName(map), resname = getResourceName(map)})
  742. end
  743. table.sort(tableOut[id]["maps"], sortCompareFunction)
  744. end
  745. table.sort((tableOut), sortCompareFunction)
  746. table.insert(tableOut, {name = "no gamemode", resname = "no gamemode", maps = {}})
  747. local countGmodes = #tableOut
  748. local maps = call(getResourceFromName("mapmanager"), "getMapsCompatibleWithGamemode")
  749. for id,map in ipairs (maps) do
  750. -- if fileOpen(":"..getResourceName(map).."/deleted") then
  751. -- table.insert(deletedMaps ,{name = getResourceInfo(map, "name") or getResourceName(map), resname = getResourceName(map)})
  752. -- else
  753. table.insert(tableOut[countGmodes]["maps"] ,{name = getResourceInfo(map, "name") or getResourceName(map), resname = getResourceName(map)})
  754. -- end
  755. end
  756. -- table.sort(deletedMaps, sortCompareFunction)
  757. table.sort(tableOut[countGmodes]["maps"], sortCompareFunction)
  758. -- table.insert(tableOut, {name = "deleted maps", resname = "deleted maps", maps = {}})
  759. -- local countGmodes = countGmodes + 1
  760. -- tableOut[countGmodes]["maps"] = deletedMaps
  761. end
  762.  
  763. local map = call(getResourceFromName("mapmanager"), "getRunningGamemodeMap")
  764. local gamemode = call(getResourceFromName("mapmanager"), "getRunningGamemode")
  765. gamemode = gamemode and getResourceName(gamemode) or "N/A"
  766. map = map and getResourceName(map) or "N/A"
  767. callClientFunction(loadList,"loadMaps", tableOut, gamemode, map, s)
  768. end
  769.  
  770. function sortCompareFunction(s1, s2)
  771. if type(s1) == "table" and type(s2) == "table" then
  772. s1, s2 = s1.name, s2.name
  773. end
  774. s1, s2 = s1:lower(), s2:lower()
  775. if s1 == s2 then
  776. return false
  777. end
  778. local byte1, byte2 = string.byte(s1:sub(1,1)), string.byte(s2:sub(1,1))
  779. if not byte1 then
  780. return true
  781. elseif not byte2 then
  782. return false
  783. elseif byte1 < byte2 then
  784. return true
  785. elseif byte1 == byte2 then
  786. return sortCompareFunction(s1:sub(2), s2:sub(2))
  787. else
  788. return false
  789. end
  790. end
  791.  
  792. ------------------------------------------
  793. -- giveMoney
  794. ------------------------------------------
  795. function giveMoney(thePlayer,CMD,targetPlayer,amount)
  796. if not (targetPlayer == "") then
  797. if tonumber(amount) then
  798. local playerCash = tonumber(loadPlayerData(thePlayer,"cash"))
  799. if tonumber(amount) > 0 then
  800. if tonumber(amount) <= playerCash then
  801. if (findPlayerByName(targetPlayer)) then
  802. local target = findPlayerByName(targetPlayer)
  803. if target ~= thePlayer then
  804. local amount = math.ceil(amount)
  805. local playerCash = loadPlayerData(thePlayer,"cash")
  806. local targetCash = loadPlayerData(target,"cash")
  807. savePlayerData(thePlayer,"cash",playerCash-tonumber(amount))
  808. CheckAchievement(thePlayer,15)
  809. savePlayerData(target,"cash",targetCash+tonumber(amount))
  810. CheckAchievement(target,15)
  811. local playerCash = loadPlayerData(thePlayer,"cash")
  812. local targetCash = loadPlayerData(target,"cash")
  813. scoreboardRefresh(thePlayer)
  814. scoreboardRefresh(target)
  815. outputChatBox("#00AAFF# #FFFFFFYou have sent #00AAFF$"..amount.."#FFFFFF to "..getPlayerName(target).."#FFFFFF!",thePlayer,255,255,255,true)
  816. outputChatBox("#00AAFF# #FFFFFF"..getPlayerName(thePlayer).." #FFFFFFhas sent you #00AAFF$"..amount.."#FFFFFF!",target,255,255,255,true)
  817. else
  818. outputChatBox("#00AAFF# #FFFFFFERROR! You cannot send money to yourself!",thePlayer,255,255,255,true)
  819. return false
  820. end
  821. else
  822. outputChatBox("#00AAFF# #FFFFFFERROR! The player you specified does not exist!",thePlayer,255,255,255,true)
  823. return false
  824. end
  825. else
  826. outputChatBox("#00AAFF# #FFFFFFERROR! You don't have enough money!",thePlayer,255,255,255,true)
  827. return false
  828. end
  829. else
  830. outputChatBox("#00AAFF# #FFFFFFERROR! Invalid amount! [#00AAFF"..amount.."#FFFFFF]",thePlayer,255,255,255,true)
  831. return false
  832. end
  833. else
  834. outputChatBox("#00AAFF# #FFFFFFERROR! Please specify the amount to send!",thePlayer,255,255,255,true)
  835. return false
  836. end
  837. else
  838. outputChatBox("#00AAFF# #FFFFFFERROR! Please select a player!",thePlayer,255,255,255,true)
  839. return false
  840. end
  841. end
  842. addCommandHandler("givecash", giveMoney)
  843. ------------------------------------------
  844. -- Tops
  845. ------------------------------------------
  846. function getDataFromServerAndSendToClient ( thePlayer , argument)
  847. if ( thePlayer ) then
  848. if argument then
  849. if string.lower(argument) == "cash" then
  850. local tablica = loadAllData ("cash")
  851. callClientFunction(thePlayer,"SortTops","Top Cash!",tablica,thePlayer,"$","")
  852. elseif string.lower(argument) == "achievements" or string.lower(argument) == "ac" then
  853. local tablica = loadAllData ("achievements")
  854. callClientFunction(thePlayer,"SortTops","Top Achievements!",tablica,thePlayer,"","")
  855. elseif string.lower(argument) == "ddwins" then
  856. local tablica = loadAllData ("mapsWonDD")
  857. callClientFunction(thePlayer,"SortTops","Top DD wins!",tablica,thePlayer,"","")
  858. elseif string.lower(argument) == "dmwins" then
  859. local tablica = loadAllData ("mapsWonDM")
  860. callClientFunction(thePlayer,"SortTops","Top DM wins!",tablica,thePlayer,"","")
  861. elseif string.lower(argument) == "dds" then
  862. local tablica = loadAllData ("mapsPlayedDD")
  863. callClientFunction(thePlayer,"SortTops","Top Played DDs!",tablica,thePlayer,"","")
  864. elseif string.lower(argument) == "dms" then
  865. local tablica = loadAllData ("mapsPlayedDM")
  866. callClientFunction(thePlayer,"SortTops","Top Played DMs!",tablica,thePlayer,"","")
  867. elseif string.lower(argument) == "playedtime" or string.lower(argument) == "pt" then
  868. local tablica = loadAllData ("playedTime")
  869. callClientFunction(thePlayer,"SortTops","Top Played Time!",tablica,thePlayer," "," ")
  870. elseif string.lower(argument) == "hunters" then
  871. local tablica = loadAllData ("hunters")
  872. callClientFunction(thePlayer,"SortTops","Top Hunters!",tablica,thePlayer,"","")
  873. elseif string.lower(argument) == "mapbuys" or string.lower(argument) == "mb" then
  874. local tablica = loadAllData ("mapBuys")
  875. callClientFunction(thePlayer,"SortTops","Top Map Buys!",tablica,thePlayer,"","")
  876. elseif string.lower(argument) == "toptimes" or string.lower(argument) == "tt" then
  877. local tablica = loadAllData ("TopTimes")
  878. callClientFunction(thePlayer,"SortTops","Top TopTimes!",tablica,thePlayer,"","")
  879. elseif string.lower(argument) == "ddratio" then
  880. local tablica = loadAllData ("ddratio")
  881. callClientFunction(thePlayer,"SortTops","Top DD Ratio!",tablica,thePlayer,"","%")
  882. elseif string.lower(argument) == "dmratio" then
  883. local tablica = loadAllData ("dmratio")
  884. callClientFunction(thePlayer,"SortTops","Top DM Ratio!",tablica,thePlayer,"","%")
  885. elseif string.lower(argument) == "ddmap" then
  886. local allMaps = call(getResourceFromName("mapmanager"), "getMapsCompatibleWithGamemode" , getResourceFromName("race"))
  887. tablicaMap = {}
  888. for i,map in ipairs(allMaps) do
  889. if checkMapType(getResourceInfo(map, "name")) == 2 then
  890. local mapinfo = getMapInfo(map)
  891. table.insert(tablicaMap,{pName = getResourceInfo(map, "name") or "???",dType = tonumber(mapinfo.playedCount) or 0})
  892. end
  893. end
  894. callClientFunction(thePlayer,"SortTopsMaps","Top DD Map!",tablicaMap,thePlayer,"","")
  895. elseif string.lower(argument) == "dmmap" then
  896. local allMaps = call(getResourceFromName("mapmanager"), "getMapsCompatibleWithGamemode" , getResourceFromName("race"))
  897. tablicaMap = {}
  898. for i,map in ipairs(allMaps) do
  899. if checkMapType(getResourceInfo(map, "name")) == 1 then
  900. local mapinfo = getMapInfo(map)
  901. table.insert(tablicaMap,{pName = getResourceInfo(map, "name") or "???",dType = tonumber(mapinfo.playedCount) or 0})
  902. end
  903. end
  904. callClientFunction(thePlayer,"SortTopsMaps","Top DM Map!",tablicaMap,thePlayer,"","")
  905. else
  906. outputChatBox("#00AAFF# #FFFFFFERROR! Invalid argument!",thePlayer,255,255,255,true)
  907. outputChatBox("[cash,achievements,ddwins,dmwins,dds,dms,playedtime]",thePlayer,255,255,255,true)
  908. outputChatBox("[hunters,mapbuys,toptimes,ddratio,dmratio,ddmap,dmmap]",thePlayer,255,255,255,true)
  909. end
  910. else
  911. outputChatBox ("#00AAFF# #FF0000ERROR!#FFFFFF Syntax: /top [datatype]",thePlayer,255,255,255,true)
  912. end
  913. end
  914. end
  915.  
  916. function loadMapInfoAll()
  917. local rows = executeSQLQuery( 'SELECT * FROM ' .. getTableName() )
  918. g_MapInfoList = {}
  919. for i,row in ipairs(rows) do
  920. local map = getResourceFromName( row.resName )
  921. if map then
  922. local mapInfo = getMapInfo( map )
  923. mapInfo.playedCount = row.playedCount
  924. mapInfo.lastTimePlayed = row.lastTimePlayed
  925. end
  926. end
  927. end
  928. function getTableName(value)
  929. return sqlString( 'race_mapmanager_maps' )
  930. end
  931. function sqlString(value)
  932. value = tostring(value) or ''
  933. return "'" .. value:gsub( "(['])", "''" ) .. "'"
  934. end
  935. function getMapInfo( map )
  936. if not g_MapInfoList then
  937. loadMapInfoAll()
  938. end
  939. if not g_MapInfoList[map] then
  940. g_MapInfoList[map] = {}
  941. end
  942. local mapInfo = g_MapInfoList[map]
  943. if mapInfo.loadTime ~= getResourceLoadTime(map) then
  944. -- Reset or clear data that may change between loads
  945. mapInfo.loadTime = getResourceLoadTime( map )
  946. mapInfo.spawnPointCount = false
  947. end
  948. return mapInfo
  949. end
  950.  
  951. function loadAllData (datatype)
  952. local root = xmlLoadFile ("DataBase.xml")
  953. if (root) then
  954. local usersNode = xmlFindChild (root,"user",0)
  955. if (usersNode) then
  956. local allPlayers = xmlNodeGetChildren(usersNode)
  957. allPlayersData = {}
  958. nrDD = 0
  959. nrDM = 0
  960. for i,data in ipairs(allPlayers) do
  961. if datatype == "achievements" then
  962. AchCount = 0
  963. for j=1,#AchievementsName do
  964. local ac = tonumber(xmlNodeGetAttribute (data,"ac"..j..""))
  965. if ac == 1 then
  966. AchCount = AchCount + 1
  967. end
  968. end
  969. local playerName = xmlNodeGetAttribute (data,"playerName")
  970. allPlayersData[i] = {pName = playerName or "???",dType = AchCount or 0}
  971. elseif datatype == "ddratio" then
  972. local played = tonumber(xmlNodeGetAttribute (data,"mapsPlayedDD")) or 0
  973. local wins = tonumber(xmlNodeGetAttribute (data,"mapsWonDD")) or 0
  974. local ratio = 0
  975. if played == 0 and wins == 0 then
  976. ratio = 0
  977. elseif played ~= 0 and wins == 0 then
  978. ratio = 0
  979. elseif played ~= 0 and wins ~= 0 then
  980. ratio = (100/played)*wins
  981. elseif wins > played then
  982. ratio = 0
  983. end
  984. if played >= 100 then
  985. nrDD = nrDD + 1
  986. local playerName = xmlNodeGetAttribute (data,"playerName")
  987. allPlayersData[nrDD] = {pName = playerName or "???",dType = ratio or 0}
  988. end
  989. elseif datatype == "dmratio" then
  990. local played = tonumber(xmlNodeGetAttribute (data,"mapsPlayedDM")) or 0
  991. local wins = tonumber(xmlNodeGetAttribute (data,"mapsWonDM")) or 0
  992. local ratio = 0
  993. if played == 0 and wins == 0 then
  994. ratio = 0
  995. elseif played ~= 0 and wins == 0 then
  996. ratio = 0
  997. elseif played ~= 0 and wins ~= 0 then
  998. ratio = (100/played)*wins
  999. elseif wins > played then
  1000. ratio = 0
  1001. end
  1002. if played >= 100 then
  1003. nrDM = nrDM + 1
  1004. local playerName = xmlNodeGetAttribute (data,"playerName")
  1005. allPlayersData[nrDM] = {pName = playerName or "???",dType = ratio or 0}
  1006. end
  1007. else
  1008. local playerData = tonumber(xmlNodeGetAttribute (data,datatype))
  1009. local playerName = xmlNodeGetAttribute (data,"playerName")
  1010. allPlayersData[i] = {pName = playerName or "???",dType = playerData or 0}
  1011. end
  1012. end
  1013. xmlUnloadFile (root)
  1014. return allPlayersData
  1015. end
  1016. end
  1017. end
  1018.  
  1019. ------------------------------------------
  1020. -- Kick All
  1021. ------------------------------------------
  1022. function kickAllPlayers ( sourcePlayer, commandname )
  1023. if ( hasObjectPermissionTo ( sourcePlayer, "function.kickPlayer" ) ) then
  1024. outputChatBox("#00AAFF# #FFFFFFScript restarting... Auto-Reconnecting in 5 seconds!", gRoot, 255,255,255,true)
  1025. setTimer(function()
  1026. for i,pla in ipairs(getElementsByType("player")) do
  1027. redirectPlayer ( pla, "213.189.52.40",22069)
  1028. end
  1029. end, 5000,1)
  1030. end
  1031. end
  1032. addCommandHandler ( "kickAllPlayers", kickAllPlayers )
  1033. ------------------------------------------
  1034. -- Triggering
  1035. ------------------------------------------
  1036. function callClientFunction(client, funcname, ...)
  1037. local arg = { ... }
  1038. if (arg[1]) then
  1039. for key, value in next, arg do
  1040. if (type(value) == "number") then arg[key] = tostring(value) end
  1041. end
  1042. end
  1043. triggerClientEvent(client, "onServerCallsClientFunction", getResourceRootElement(getThisResource()), funcname, unpack(arg or {}))
  1044. end
  1045. function callServerFunction(funcname, ...)
  1046. local arg = { ... }
  1047. if (arg[1]) then
  1048. for key, value in next, arg do arg[key] = tonumber(value) or value end
  1049. end
  1050. loadstring("return "..funcname)()(unpack(arg))
  1051. end
  1052. addEvent("onClientCallsServerFunction", true)
  1053. addEventHandler("onClientCallsServerFunction", getResourceRootElement(getThisResource()) , callServerFunction)
  1054.  
  1055. function math.round(number, decimals, method)
  1056. decimals = decimals or 0
  1057. local factor = 10 ^ decimals
  1058. if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor
  1059. else return tonumber(("%."..decimals.."f"):format(number)) end
  1060. end
  1061.  
  1062. --------------------------------------------
  1063. -- Get alive and dead players by their STATE
  1064. --------------------------------------------
  1065. function getAliveRacePlayers()
  1066. local alivePlayers = 0
  1067. for index,player in ipairs(getElementsByType("player")) do
  1068. if getElementData(player,"state") == "alive" then
  1069. alivePlayers = alivePlayers + 1
  1070. end
  1071. end
  1072. return alivePlayers
  1073. end
  1074.  
  1075.  
  1076. function getDeadRacePlayers()
  1077. local deadPlayers = 0
  1078. for index,player in ipairs(getElementsByType("player")) do
  1079. if getElementData(player,"state") == "dead" then
  1080. deadPlayers = deadPlayers + 1
  1081. end
  1082. end
  1083. return deadPlayers
  1084. end
  1085.  
  1086. ------------------------------------------
  1087. -- Nick
  1088. ------------------------------------------
  1089. addEventHandler ("onPlayerJoin",getRootElement(),
  1090. function()
  1091. local playerName = getPlayerName(source)
  1092. savePlayerData(source,"playerName",string.gsub(playerName,"#%x%x%x%x%x%x", ""))
  1093. end)
  1094. addEventHandler("onPlayerChangeNick",getRootElement(),
  1095. function (olnick,newnick)
  1096.  
  1097. savePlayerData(source,"playerName",string.gsub(newnick,"#%x%x%x%x%x%x", ""))
  1098. end)
  1099.  
  1100. ------------------------------------------
  1101. -- PlayerNameFunctions
  1102. ------------------------------------------
  1103. function getPlayerNameWithoutColorCode (who)
  1104. local name = getPlayerName(who)
  1105. local name = string.gsub(name,'#%x%x%x%x%x%x',"")
  1106. return name
  1107. end
  1108.  
  1109. function getPlayerFromNameWithoutColorCode (name)
  1110. for i,pla in ipairs(getElementsByType("player")) do
  1111. if getPlayerNameWithoutColorCode (pla) == name then
  1112. return pla
  1113. end
  1114. end
  1115. end
  1116.  
  1117. function findPlayerByName (name)
  1118. local player = getPlayerFromName(name)
  1119. if player then return player end
  1120. for i, player in ipairs(getElementsByType("player")) do
  1121. if string.find(string.gsub(getPlayerName(player):lower(),"#%x%x%x%x%x%x", ""), name:lower(), 1, true) then
  1122. return player
  1123. end
  1124. end
  1125. return false
  1126. end
  1127.  
  1128.  
  1129.  
  1130.  
  1131. local running = false -- if race is running
  1132.  
  1133. addEvent("onClientRequestRespawn", true)
  1134. addEventHandler("onClientRequestRespawn", getRootElement(),
  1135. function(vehicleData)
  1136. -- source is the player that requested respawn.
  1137. -- spawn at the position where last saved.
  1138. triggerClientEvent(source, 'onClientCall_race', source, "Spectate.stop", 'manual')
  1139. triggerEvent('onClientRequestSpectate', source, false)
  1140. spawnPlayer(source, vehicleData.posX, vehicleData.posY, vehicleData.posZ)
  1141. local vehicle = exports.race:getPlayerVehicle(source)
  1142.  
  1143. triggerClientEvent(source, 'onClientCall_race', source, "Spectate.stop", 'manual')
  1144. setElementData(source, "race.spectating", true)
  1145. setElementData(source, "status1", "dead")
  1146. setElementData(source, "status2", "")
  1147. --setElementData(source, "state", "training")
  1148. setElementData(source, "race.finished", true)
  1149. setCameraTarget(source, source)
  1150. setElementData(vehicle, "race.collideworld", 1)
  1151. setElementData(vehicle, "race.collideothers", 0)
  1152. setElementData(source, "race.alpha", 255)
  1153. setElementData(vehicle, "race.alpha", 255)
  1154. setElementHealth(vehicle, vehicleData.health)
  1155. setElementModel(vehicle, 481) -- fix motor sound.
  1156. setElementModel(vehicle, tonumber(vehicleData.model))
  1157. setElementPosition(vehicle, vehicleData.posX, vehicleData.posY, vehicleData.posZ)
  1158. setElementRotation(vehicle, vehicleData.rotX, vehicleData.rotY, vehicleData.rotZ)
  1159. if(vehicleData.nitro ~= nil)then
  1160. addVehicleUpgrade(vehicle, tonumber(vehicleData.nitro))
  1161. end
  1162. setElementFrozen(vehicle, true)
  1163. toggleAllControls(source, true)
  1164. setVehicleLandingGearDown(vehicle, true)
  1165. setTimer(delayedRespawn, 2000, 1, source, vehicle, vehicleData)
  1166. end)
  1167.  
  1168. function delayedRespawn(player, vehicle, vehicleData)
  1169. triggerClientEvent(player, "clientUnfreezeOnReady", player, vehicle, vehicleData)
  1170. end
  1171.  
  1172. addEvent("onRaceStateChanging", true)
  1173. addEventHandler("onRaceStateChanging", getRootElement(),
  1174. function(newState, oldState)
  1175. triggerClientEvent("onClientRaceStateChanging", getRootElement(), newState, oldState)
  1176. if(newState == "Running")then
  1177. running = true
  1178. end
  1179. if(newState == "PostFinish" or newState == "NoMap")then
  1180. running = false
  1181. local player = getElementsByType("player")
  1182. for i = 1, #player do
  1183. local replaying = getElementData(player[i], "respawn.playing")
  1184. if(replaying)then
  1185. setElementData(source, "race.spectating", false)
  1186. setElementData(source, "status1", "dead")
  1187. setElementData(source, "status2", "")
  1188. setElementData(source, "race.finished", false)
  1189. end
  1190. end
  1191. end
  1192. end)
  1193.  
  1194. -- Add training mode before player has played once
  1195. addEventHandler("onElementDataChange", getRootElement(),
  1196. function(theName, oldValue)
  1197. if(getElementType(source) == "player")then
  1198. if(tostring(getElementData(source, "state")) == "waiting" and running)then
  1199. --triggerClientEvent(source, "onClientRaceStateChanging", source, "Running", "GridCountdown")
  1200. end
  1201. end
  1202. end)
  1203.  
  1204. -- Kill when respawned and gets hunter.
  1205. addEvent("onPlayerPickUpRacePickup", true)
  1206. addEventHandler("onPlayerPickUpRacePickup", getRootElement(),
  1207. function(pickupID, pickupType, vehicleModel)
  1208. if(pickupType == "vehiclechange" and vehicleModel == 425)then
  1209. local state = getElementData(source, "state") or "dead"
  1210. if(state == "dead")then
  1211. setElementHealth(source, 0)
  1212. end
  1213. end
  1214. end)
  1215.  
  1216. addEventHandler("onClientRender", getRootElement(),
  1217. function()
  1218. local player = getElementsByType("player")
  1219. for i = 1, #player do
  1220. if(getElementData(player[i], "respawn.playing"))then
  1221. local alpha = 0
  1222. if(player[i] == getLocalPlayer())then
  1223. alpha = getElementData(player[i], "race.alpha") or 255
  1224. end
  1225. setElementAlpha(player[i], alpha)
  1226. local vehicle = getPedOccupiedVehicle(player[i])
  1227. if(vehicle ~= false)then
  1228.  
  1229.  
  1230. end
  1231. end
  1232. end
  1233. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement