|
124 | 124 | #Struct SPlayer { |
125 | 125 | Text login; |
126 | 126 | Text nickname; |
| 127 | + Text firstTime; |
| 128 | + Text bestTime; |
127 | 129 | } |
128 | 130 | #Struct SBoardJsonResponse { |
129 | 131 | SPlayer[] Players; |
|
177 | 179 | declare persistent Text[][Integer] Pe_LocalTokensIds for Map; |
178 | 180 | declare persistent Text[][Integer] Pe_PlayerPos for Map; |
179 | 181 | declare persistent Integer[Integer] P_PlayerRaceStartTime for Map; |
| 182 | + declare persistent Integer[Integer] P_PlayerQuestStartTime for Map; |
180 | 183 | declare persistent Text[Integer] P_QuestMapUid for Map; |
181 | 184 | |
182 | 185 | Per_LocalTokensCollected[G_QuestId] = []; |
183 | 186 | Pe_LocalTokensIds[G_QuestId] = []; |
184 | 187 | Pe_PlayerPos[G_QuestId] = []; |
185 | 188 | P_PlayerRaceStartTime[G_QuestId] = 0; |
| 189 | + P_PlayerQuestStartTime[G_QuestId] = 0; |
186 | 190 | P_QuestMapUid[G_QuestId] = ""; |
187 | 191 | } |
188 | 192 | |
|
204 | 208 | if (nbPlayers >= 1) { |
205 | 209 | declare Text QuestTitleToDisplay = TextLib::Replace(QuestTitleList, "[count]", nbPlayers ^ " " ^ PluralPlayers); |
206 | 210 | Message.SetText(Message.Value ^ QuestTitleToDisplay ^ "\n"); |
207 | | - if (CurPage == 1) Message.SetText(Message.Value ^ "$iNote: This list is cached 10 minutes.$z\n"); |
| 211 | + if (CurPage == 1) Message.SetText(Message.Value ^ "$nNote: This list is cached 10 minutes, ordered by first completion date.$z\n"); |
208 | 212 | } else { |
209 | | - Message.SetText(Message.Value ^ QuestTitleEmptyList ^ "\n$iNote: This list is cached 10 minutes.$z"); |
| 213 | + Message.SetText(Message.Value ^ QuestTitleEmptyList ^ "\n$nNote: This list is cached 10 minutes.$z"); |
210 | 214 | } |
211 | 215 | for(i, StartPos, MaxLimit) |
212 | 216 | { |
|
219 | 223 | { |
220 | 224 | declare Text RankDisplay = TextLib::ToText(i+1); |
221 | 225 | if (i < 9) RankDisplay = "0" ^ TextLib::ToText(i+1); |
222 | | - Message.SetText(Message.Value ^ "\t\t\t\t\t\t\t$fff#" ^ RankDisplay ^ ":$g\t\t" ^ playersList[i].nickname ^ "$z $fff(" ^ playersList[i].login ^ ")\n"); |
| 226 | + Message.SetText(Message.Value ^ "$fff#" ^ RankDisplay ^ ":$g\t" ^ playersList[i].nickname ^ "$z $fff(" ^ playersList[i].login ^ ") in " ^ playersList[i].firstTime ^ " (PB: " ^ playersList[i].bestTime ^ ")\n"); |
223 | 227 | } |
224 | 228 | } |
225 | 229 | } |
|
261 | 265 | declare persistent Text[][Integer] Pe_LocalTokensIds for Map; |
262 | 266 | declare persistent Text[][Integer] Pe_PlayerPos for Map; |
263 | 267 | declare persistent Integer[Integer] P_PlayerRaceStartTime for Map; |
| 268 | + declare persistent Integer[Integer] P_PlayerQuestStartTime for Map; |
264 | 269 | declare persistent Text[Integer] P_QuestMapUid for Map; |
265 | 270 | declare persistent Boolean DebugMode for Map; |
266 | 271 | G_QuestId = '.htmlentities($QuestId, ENT_XML1).'; |
|
346 | 351 | if (P_QuestMapUid[G_QuestId] == "") P_QuestMapUid[G_QuestId] = "'.htmlentities($QuestInfo["map_uid"], ENT_XML1).'"; |
347 | 352 | if (DebugMode) log("MapUid for quest " ^ TextLib::ToText(G_QuestId) ^ " set to: " ^ P_QuestMapUid[G_QuestId]); |
348 | 353 | P_PlayerRaceStartTime[G_QuestId] = GUIPlayer.'.$startTimeVar.'; |
| 354 | + P_PlayerQuestStartTime[G_QuestId] = GameTime; |
349 | 355 | |
350 | 356 | // Check if the MapUid matches |
351 | 357 | if (P_QuestMapUid[G_QuestId] != Map.MapInfo.MapUid) { |
|
382 | 388 | } |
383 | 389 | else |
384 | 390 | { |
385 | | - Message.SetText(QuestFullDesc ^ "\n\nHave fun!\n\nNote: You need to complete the quest in the same race from where you started it. If you restart (e.g. by pressing del), you\'ll need to start the quest again. Several quests can be done in the same race."); |
| 391 | + Message.SetText(QuestFullDesc ^ "\n\nHave fun!\n\n$nNote: You need to complete the quest in the same race from where you started it. If you restart (e.g. by pressing del), you\'ll need to start the quest again. Several quests can be done in the same race.$z"); |
386 | 392 | } |
387 | 393 | |
388 | 394 | // Log all tokens for quest if debug activated |
|
440 | 446 | if (P_QuestMapUid[G_QuestId] == "") P_QuestMapUid[G_QuestId] = "'.htmlentities($QuestInfo["map_uid"], ENT_XML1).'"; |
441 | 447 | if (DebugMode) log("MapUid for quest " ^ TextLib::ToText(G_QuestId) ^ " set to: " ^ P_QuestMapUid[G_QuestId]); |
442 | 448 | P_PlayerRaceStartTime[G_QuestId] = GUIPlayer.'.$startTimeVar.'; |
| 449 | + P_PlayerQuestStartTime[G_QuestId] = GameTime; |
443 | 450 | |
444 | 451 | // Check if the MapUid matches |
445 | 452 | if (P_QuestMapUid[G_QuestId] != Map.MapInfo.MapUid) { |
|
506 | 513 | // Log all tokens for quest if debug activated |
507 | 514 | declare Text Pe_PlayerPosString = LogMissingTokens(); |
508 | 515 | |
| 516 | + // Get quest completion time |
| 517 | + declare Integer QuestCompletionTime = GameTime - P_PlayerQuestStartTime[G_QuestId]; |
| 518 | + |
509 | 519 | declare CHttpRequest request; |
510 | 520 | if (DebugMode) log("Quest " ^ TextLib::ToText(G_QuestId) ^ " completed. Processing..."); |
511 | | - request = Http.CreateGet("'.$urlToRequest.'UpdateQuest.php?QuestId=" ^ TextLib::ToText(G_QuestId) ^ "&Login=" ^ LocalUser.Login ^ "&UserName=" ^ LocalUser.Name ^ "&Positions=" ^ TextLib::URLEncode(Pe_PlayerPosString) ^ "&MapUid=" ^ P_QuestMapUid[G_QuestId] ^ "&" ^ Now); |
| 521 | + request = Http.CreateGet("'.$urlToRequest.'UpdateQuest.php?QuestId=" ^ TextLib::ToText(G_QuestId) ^ "&Login=" ^ LocalUser.Login ^ "&UserName=" ^ LocalUser.Name ^ "&Positions=" ^ TextLib::URLEncode(Pe_PlayerPosString) ^ "&MapUid=" ^ P_QuestMapUid[G_QuestId] ^ "&Time=" ^ TextLib::ToText(QuestCompletionTime) ^ "&" ^ Now); |
512 | 522 | clearPersistentData(); |
513 | 523 | wait(request.IsCompleted); |
514 | 524 | if (DebugMode) { |
|
0 commit comments