// // CPT operator / SondeerGame // This source file is (c) by Deltares. // - October 2014 // //============================================================================= // Global scores // ------------------------------------------------------------ // Created by Rui Guimaraes // © 2007, Geodelft // // Date Id Modification // 2007-03-02 gui Created // 2008-09-18 jln new version // //============================================================================= class GlobalScore extends Object config(ScoreServer); struct ScoreType{ var int ScoreValue; var string PlayerName; }; var globalconfig array TotalScores; var globalconfig float TimeForRefreshInMenu; var globalconfig string LastNotSent; function ResetScoreDetails() { local ScoreType TempST; TempST.ScoreValue=-1; TempST.PlayerName=""; TotalScores.Length=0; TotalScores.Insert(0,1); TotalScores[0]=TempST; //TO FORCE (bug in the engine) TotalScores.Length=0; SaveConfig(); } function NewNetworkScores(string MyScoresString) { log("Received string: "$MyScoresString); ResetScoreDetails(); log("Old scores deleted"); NewUpdatedScores(MyScoresString); } function NewUpdatedScores(string MyScoresString) { local Tokenizer MyToken; local array Tokens; local ScoreType TempScoreType; MyToken = new class'Tokenizer'; Tokens[0]=MyScoresString; MyToken.Create(Tokens); while(true) { MyToken.nextToken(); /*PLAYER NAME*/ if(MyToken.currentToken() == 5) { TempScoreType.PlayerName = MyToken.tokenString(); } else if(MyToken.currentToken() == 7) { log("Score String received"); break; } else { log("Type mismatch in string. Type found "$MyToken.currentToken()); break; } MyToken.nextToken(); /* PLAYER SCORE WITH OPERATOR*/ if(MyToken.currentToken() == 6) { if(MyToken.tokenString() == "-"){ MyToken.nextToken(); if(MyToken.currentToken() == 3){ TempScoreType.ScoreValue = - int(MyToken.tokenString()); } else { warn("Type mismatch in string. Type found "$MyToken.currentToken()); break; } }else if(MyToken.tokenString() == "+"){ MyToken.nextToken(); if(MyToken.currentToken() == 3){ TempScoreType.ScoreValue = int(MyToken.tokenString()); } else { warn("Type mismatch in string. Type found "$MyToken.currentToken()); break; } } else { warn("Type mismatch in string. Type found "$MyToken.currentToken()); break; } /* PLAYER SCORE WITHOUT OPERATOR*/ } else if(MyToken.currentToken() == 3){ TempScoreType.ScoreValue = int(MyToken.tokenString()); } else { warn("Type mismatch in string. Type found "$MyToken.currentToken()); break; } InsertScore(TempScoreType); } SaveConfig(); } function InsertScore(ScoreType MyScore) { local int TempLength, i; log("INSERTED "$MyScore.PlayerName$" : "$MyScore.ScoreValue); // STILL NEEDS TO BE ORDERED TempLength = TotalScores.Length; for(i = TempLength; i>=0; i--) { if(i==0) { TotalScores.Insert(i,1); TotalScores[i]=MyScore; } else if(TotalScores[i-1].ScoreValue <= MyScore.ScoreValue) { TotalScores.Insert(i,1); TotalScores[i]=MyScore; break; } } SaveConfig(); } function string ReturnNotSent() { local string TempString; TempString=LastNotSent; LastNotSent=""; SaveConfig(); return TempString; } function SaveScores(string TempScore) { LastNotSent=TempScore; SaveConfig(); } //============================================================================= // Date Id Modification // 2006-08-15 The Created this header //============================================================================= defaultproperties { TimeForRefreshInMenu=15.0 }