// September 2015 // Levee Patroller / Dijk Patrouille // This source file is (c) by Deltares. This source file is open source but only available to select users. Do not redistribute without written permission of Stichting Deltares, Delft, The Netherlands. // This header has been automatically generated. //=========================================================================================== // Action center for mid game; so, for reporting and stuff. // Because there are so many different conversations and texts involved, // and so much game information needed, this class is really huge. // ------------------------------------------------------------------------------------------ // Created by Maarten Wesselius // © 2007, Geodelft // // Date Id Modification // 2007-04-10 wsl Class created (code moved here from MenuActionCenter) // 2007-05-31 wsl Added some comments, removed old log statements // 2007-06-15 wsl changed storeSignalInformation regarding bCalled, added logs // 2007-06-19 wsl only when warning is of type correcting, AC refuses other calls // commented away handling of this situation from state Checking & Correcting // 2007-06-21 wsl when assessment changed but observations didn't in state Stable, // go to state Correcting instead of Checking // 2007-06-21 wsl changed the checks made for changed observations in getInformation // 2007-06-22 wsl check for changes taken out of branch // 2007-06-22 wsl in storeSignalInformation some changes are made to ChangedSignals instead of Signals // 2007-06-22 wsl every time an assessment is given by the user, ConvState.AmountOfAssessments++ // 2007-06-22 wsl changes check takes missing answers into account // 2007-06-22 wsl added bCallRefused and related code // 2007-07-18 Wsl in state Checking and Stable, answers in combobox are dependent of previous assessment // 2007-08-27 Wsl removed all occurrences of bStableSet (not used), formatted and commented HangupButtonClicked() // 2007-08-27 Wsl made text for second warning; made new text for calling AC for nothing; fixed timer bug in state Checking // 2008-01-28 Wsl added missing statement to state checking regarding bMovingToWarning //=========================================================================================== class MenuActionCenterStandard extends MenuActionCenter; var array ChangedSignals; // the signals that had something about them changed, // so the signals relevant for this conversation var bool bCallRefused; // starts as false, set to true if the player's call to the AC // was refused because player has to correct some other failure first //============================================================================= //This function takes care of getting all the information needed to run the menu properly // // Date Id Modification // 2006-10-07 The Fixed compiler error in GetInformation // 2006-12-05 Bas Fixed multiple 'nullpointers' (Accessed None) // 2008-01-30 Zmr When con_correcting a new signal is seen as changed signal //============================================================================= function GetInformation() { local int i,j; local SignalReport mostRecentReport; local ConversationState.ConvState currentState; //log("|## GetInformation() ##"); // get map name if(ConvState[ConvState.Length-1].Map == "") { ConvState[ConvState.Length-1].Map = GeoPC.level.title; } // get player name ConvState[ConvState.Length-1].PlayerName = GeoPC.PlayerReplicationInfo.GetHumanReadableName(); // execute this when the player is nearby a marker (so when calling from a red marker); // get all signals, get mechanism, failure state, location name if(GeoPC.NearByMarker != none) { Signals = GeoPC.NearByMarker.Signals; ConvState[ConvState.Length-1].DiagnosedMechanism = GeoPC.NearByMarker.Mechanism; if(GeoPC.NearByMarker.LTile != none) { ConvState[ConvState.Length-1].StateOfFailure = (GeoPC.NearByMarker.LTile).CurrentState; } else { ConvState[ConvState.Length-1].StateOfFailure = STA_NONE; } if(GeoPC.NearByMarker.GlobalLocation.LocationSign != none) { if(GeoPC.Dutch) { ConvState[ConvState.Length-1].Location = GeoPC.NearByMarker.GlobalLocation.LocationSign.NL_LocationName; } else { ConvState[ConvState.Length-1].Location = GeoPC.NearByMarker.GlobalLocation.LocationSign.EN_LocationName; } } else { ConvState[ConvState.Length-1].Location = ""; } } else { ConvState[ConvState.Length-1].StateOfFailure = STA_NONE; ConvState[ConvState.Length-1].Location = ""; } // Copy some values of the last ConvState to current one to get assessmentsame, assessment, diagnosis player, conversation state if(ConvState.Length > 1) { // this is not the first conversation at this marker, so able to copy previous values ConvState[ConvState.Length-1].AssessmentSame = ConvState[ConvState.Length-2].AssessmentSame; ConvState[ConvState.Length-1].Assessment = ConvState[ConvState.Length-2].Assessment; ConvState[ConvState.Length-1].AmountOfAssessments = ConvState[ConvState.Length-2].AmountOfAssessments; // get the last state from the previous ConvState and use it as the first state for the current, new ConvState ConvState[ConvState.Length-1].ConversationStates.Remove(0,ConvState[ConvState.Length-1].ConversationStates.Length); ConvState[ConvState.Length-1].ConversationStates.Insert(0,1); ConvState[ConvState.Length-1].ConversationStates[0] = ConvState[ConvState.Length-2].ConversationStates[ConvState[ConvState.Length-2].ConversationStates.Length-1]; /*the diagnosis of the player * probably wrong because, it will always keep the diagnosis of the first ConversationState even when a player changes his opinion of the mechanism of the failure. ConvState[ConvState.Length-1].DiagnosedMechanism = ConvState[ConvState.Length-2].DiagnosedMechanism; */ // find out how many times in a row the player has corrected/checked a signal // this is used later to go to state Stable when player reported signal twice as being not serious. j = 0; reportCount = 0; for(i = 0; i < ConvState[ConvState.Length-1].ConversationStates.Length; i++) { if(ConvState[ConvState.Length-1].ConversationStates[i] == Con_Correcting || ConvState[ConvState.Length-1].ConversationStates[i] == Con_Checking) { j++; if(reportCount < j) { reportCount = j; } } else { j = 0; } } } // check for changes in the most recent signalreports of all Signals log("=============CHECK FOR CHANGES========================="); log("total number of signals: "$Signals.Length); for(i = 0; i < Signals.Length; i++) { // debugging output for this signal (display the values of all those booleans) mostRecentReport = Signals[i].SignalReports[Signals[i].SignalReports.Length - 1]; log("Signals["$i$"]("$Signals[i].SignalType$"):"); log(" SignalReport bChanged = "$mostRecentReport.bChanged); log("Signals["$i$"]("$Signals[i].SignalType$"): bCalled = "$Signals[i].bCalled); log(" SignalReport bCalled = "$mostRecentReport.bCalled); log("Signals["$i$"]("$Signals[i].SignalType$"): bApproved = "$Signals[i].bApproved); log(" SignalReport bApproved = "$mostRecentReport.bApproved); log("Signals["$i$"]("$Signals[i].SignalType$"): bReported = "$Signals[i].bReported); log(" SignalReport bReported = "$mostRecentReport.bReported); currentState = ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1]; if(currentState == Con_Correcting) { // for state Correcting, to see if the player changed his/her observations, it is sufficient to check if (s)he // edited the previously made report that couldn't be approved before or made a new report. This is sufficient // because bChanged can only be true given that bCalled is true and bApproved is false. if(mostRecentReport.bChanged) { // when the report observations have been changed while the AC has not approved // the report yet, add this Signal to changed Signals ChangedSignals.Insert(ChangedSignals.Length, 1); ChangedSignals[ChangedSignals.Length - 1] = Signals[i]; log("result: in state Correcting and bChanged so observations changed or a new one added"); } // it is also necessary to check whether the player has added new observations. For this it is only necessary to check whether // the signal has been called already. When not called the signal is new if(!mostRecentReport.bCalled) { // when the report observations have been changed while the AC has not approved // the report yet, add this Signal to changed Signals ChangedSignals.Insert(ChangedSignals.Length, 1); ChangedSignals[ChangedSignals.Length - 1] = Signals[i]; log("result: in state Correcting and not called so new observations in observations changed"); } } else if(currentState == Con_Reporting || currentState == Con_Checking || currentState == Con_Stable) { // for these three states, to see if the player changed his/her observations, it is sufficient // to check if the most recent report was not yet approved by the AC. This is sufficient // because if this is true, it means that either it is a new report, or the player already // called about this report but there were answers missing, and now the player calls again // (having presumably filled in all answers this time). It also means that bChanged and bReported must be false. if(!mostRecentReport.bApproved) { ChangedSignals.Insert(ChangedSignals.Length, 1); ChangedSignals[ChangedSignals.Length - 1] = Signals[i]; log("result: either in state Reporting, Checking or Stable and !bApproved so observations changed"); } } // for the other states (Warning, Measure, Diagnosis) the information if the player changed his/her // observations since the last call is not relevant (not used). } if(ChangedSignals.Length > 0) { bSignalChanged = true; } // check for missing answers in all the signals for(i = 0; i < Signals.Length; i++) { if(!bMissingAnswers && missingAnswers(Signals[i]) > 0) { bMissingAnswers = true; } } log("============ RESULT OF CHANGES CHECK =================="); log("length of ChangedSignals = "$ChangedSignals.length); log("bSignalChanged = "$bSignalChanged); log("bMissingAnswers = "$bMissingAnswers); log(""); //HowSeriousStruct with reasons why it is that serious if(Signals.Length == 0 || bMissingAnswers) { HSeriousStruct.States = STA_NONE; } else { HSeriousStruct = DataObject.HowSerious(Signals, GeoPC); //if(HSeriousStruct.ReasonNot_NotSerious.Length > 0) log("GetInfo62"@HSeriousStruct.ReasonNot_NotSerious[0]); //if(HSeriousStruct.ReasonNot_Serious.Length > 0) log("GetInfo62"@HSeriousStruct.ReasonNot_Serious[0]); //if(HSeriousStruct.ReasonNot_VerySerious.Length > 0) log("GetInfo62"@HSeriousStruct.ReasonNot_VerySerious[0]); } GLD = new class'GeoLevelDetails'; //check if the player is allowed to take measures/make a diagnosis MayTakeMeasures = GLD.TakeMeasures; MayMakeDiagnoses = GLD.MakeDiagnoses; //if player may take measures and didn't make a diagnosis yet, a diagnosis is required if(MayTakeMeasures && ConvState[ConvState.Length-1].DiagnosedMechanism == FM_None) { diagnosisRequired = true; } //if player may not make a diagnosis, it's not required for the player to make a diagnosis if(!MayMakeDiagnoses) { diagnosisRequired = false; } /*log("Signals.Length:"@Signals.Length); log("MayTakeMeasures:"@MayTakeMeasures); log("MayMakeDiagnoses:"@MayMakeDiagnoses); log("ConvState.Length:"@ConvState.Length); log("ConvState[ConvState.Length - 1].ConversationStates.Length:"@ConvState[ConvState.Length - 1].ConversationStates.Length); if(ConvState.Length > 1) { log("ConvState[ConvState.Length - 1].ConversationStates[]"); log("PlayerName:"@ConvState[ConvState.Length-1].PlayerName); log("Location:"@ConvState[ConvState.Length-1].Location); log("Mechanism:"@ConvState[ConvState.Length-1].Mechanism); log("reportCount:"@reportCount); log("ChangedSignals.Length:"@ChangedSignals.Length); log("bSignalChanged:"@bSignalChanged); log("AssessmentSame:"@ConvState[ConvState.Length-1].AssessmentSame); log("Assessment:"@ConvState[ConvState.Length-1].Assessment); log("DiagnosisPlayer:"@ConvState[ConvState.Length-1].DiagnosisPlayer); log("ConversationStates.Length:"@ConvState[ConvState.Length-2].ConversationStates.Length); log("ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1]:"@ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1]); } log("## EOF GetInformation() ##");*/ } function CalcNewLines() { local int tmp,i; local array TempString; local WarningMessage tmpMsg; local ConversationState.ConvState currentState; currentState = ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1]; bCallRefused = false; log("bMovingToWarning = "$GeoPC.bMovingToWarning); log("This is MenuActionCenterStandard"); if(ConvState[ConvState.Length-1].ConversationFinished) { // next line button invisible, hang up button appears // Strange BUG, for some reason C8 becomes unclickable when C3 // is made invisible; that's why it's disabled instead Controls[3].MenuState = MSAT_Disabled; Controls[8].setVisibility(true); storeSignalInformation(ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1]); } else if(GeoPC.bMovingToWarning // player is expected to react since (s)he got a remember call && GeoPC.wMsg.warningType == false // so, warningmessage of type correcting && GeoPC.NearByMarker != none && !GeoPC.wMsg.isSameMarker(GeoPC.NearByMarker)) { /* 13-10-2006 Bas - edited by Wsl 2007-06-19 ========================================== Called AC from wrong Marker: When a player is in State Correcting for some failure and has already received a Correction message by the AC, the player was ordered to move towards a specific location. When the player tries to report something to the AC and it's not the report assigned to this Correction message, the player is told he's not at the right location; he should first correct the one from the message. This is only done once; if the player calls again after this, this will not be told to him/her again and (s)he will be able to report the other failure anyway */ TempString.Insert(0,4); TempString[0] = CurrentLanguage.getValue("1"); //I didn't use the hashtable because I need the map and location name from two different RedMarker objects. -bas if(GeoPC.Dutch){ TempString[1] = ConvState[ConvState.Length-1].PlayerName$": Hallo, Actiecentrum. Ik heb het eerder geconstateerde schadebeeld bij"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Location@"in"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Map@"opnieuw geobserveerd."; TempString[2] = DataObject.NL_AC$":"@"Prima, maar jij zou toch eerst je observaties dan wel je inschatting over het schadebeeld"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Location@"in"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Map@"aanpassen? Doe dit eerst en breng ons daarna op de hoogte van dit schadebeeld. Dag!"; }else{ TempString[1] = ConvState[ConvState.Length-1].PlayerName$": Hi, Action Center, I observed again the earlier reported damage at"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Location@"in"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Map$"."; TempString[2] = DataObject.EN_AC$": Excellent, but weren't you supposed to adapt your observations or your assessment of the damage at"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Location@"in"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Map$"? Do this first and tell us afterwards about this damage. Bye!"; } TempString[3] = CurrentLanguage.getValue("6.2-B"); // GeoPC.bMovingToWarning set to false. This is done to make sure that if // the player calls again immediately after, this does not happen again. GeoPC.bMovingToWarning = false; bCallRefused = true; ConvState[ConvState.Length-1].ConversationFinished = true; } else if(bMissingAnswers && currentState != Con_Reporting) { /* 13-10-2006 Bas =============== For every state except Reporting it's necessary to check if all answers are filled out. (State Reporting has it's own mechanism to check if all answers are answered.) 31-05-2007 wsl =============== In the conversation that follows, the player is instructed to first make sure all answers are filled in, and then call back. */ TempString.Insert(0,8); TempString[0]= CurrentLanguage.getValue("1"); TempString[1]= CurrentLanguage.getValue("2.1-A"); TempString[2]= CurrentLanguage.getValue("3.1-A"); if(nothingAnswered()) { // all answers for all signals are missing TempString[3] = sigContainingString()$"."; TempString[4] = CurrentLanguage.getValue("3.1-E"); } else { // some answers for some signals are missing TempString[3]= SamenvattingSchadebeeld(); TempString[4]= MissingInSignals(); } TempString[5]= CurrentLanguage.getValue("4.1-C"); TempString[6]= CurrentLanguage.getValue("5.1-C"); TempString[7]= CurrentLanguage.getValue("6.1-C"); ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = currentState; ConvState[ConvState.Length-1].ConversationFinished = true; } else if(GeoPC.bRememberWarning || GeoPC.bCorrectionWarning) { /* Bas: ============= STATE WARNING ============= I'M USING CON_CORRECTING AND CON_CHECKING INSTEAD, COMBINED WITH BOOLEANS FROM GEOPC. wsl: Which means that the booleans GeoPC.bRememberWarning, GeoPC.bCorrectionWarning and GeoPC.bMovingToWarning make up the state Warning instead of a ConvState being set to Con_Warning. */ // insert texts that are the same for both kinds of warnings TempString.Insert(0,6); TempString[0] = CurrentLanguage.getValue("1"); TempString[1] = CurrentLanguage.getValue("2.2"); TempString[5] = CurrentLanguage.getValue("6.2-B"); // make a new ConvState to put the next state in, which will be either Checking or Correcting ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); if(GeoPC.bRememberWarning) { /* 18-09-2006 Bas =============== REMEMBERWARNING =============== This is the handler for a remember message. It is instead of con_warning. Appears when the AC orders the player to inspect the situation again at a later time. The player has 5 minutes to go back to the marker and make a new report and call the AC, whether the situation changed or not. When the player doesn't call within 5 minutes the player receives a remember warning. */ // player tells AC (s)he forgot to check, AC tells player to do check and call back TempString[2] = CurrentLanguage.getValue("3.2-B"); TempString[3] = CurrentLanguage.getValue("4.2-A1"); if(GeoPC.wMsg.currentTime > -70) { // first reminder for checking TempString[4] = CurrentLanguage.getValue("5.1-E"); } else { // second reminder for checking TempString[4] = CurrentLanguage.getValue("5.1-E-2"); } // switch to state Checking ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Checking; } else { /* 18-09-2006 Bas ================= CORRECTIONWARNING ================= This is the handler for a correction message. It is instead of con_warning. Appears when the player's report wasn't approved by the AC. The player has 2 minutes to return to the damage situation and make a new report and call the AC. If not, the correction message appears to the player. */ // player tells AC (s)he forgot to correct, AC tells player to do correct and call back TempString[2] = CurrentLanguage.getValue("3.2-A"); TempString[3] = CurrentLanguage.getValue("4.2-A2"); if(GeoPC.wMsg.currentTime > -70) { // first reminder for correcting TempString[4] = CurrentLanguage.getValue("5.2"); } else { // second reminder for correcting TempString[4] = CurrentLanguage.getValue("5.2-2"); } // switch to state Correcting ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Correcting; } ConvState[ConvState.Length-1].ConversationFinished = true; } else if(currentState == Con_Checking) { /* 21-09-2006 Bas ============== STATE CHECKING ============== The AC orders the player to keep an eye out on the situation and to return to it regularly. After 5 minutes a remember message appears when the player didn't call the AC. */ if(GeoPC.bMovingToWarning) { /* I THINK THIS SHOULD NO LONGER BE HERE; IT'S HANDLED AROUND LINE 260 // player already got a warning message, wMsg is set if(GeoPC.wMsg.warningType == false && GeoPC.NearByMarker != none && !GeoPC.wMsg.isSameMarker(GeoPC.NearByMarker)) { // the player is not at the marker corresponding to the warning message; // AC warns the player he's at the wrong location TempString.Insert(0,4); TempString[0] = CurrentLanguage.getValue("1"); //I didn't use the hashtable because I need the map and location name from two different RedMarker objects. -bas if(GeoPC.Dutch){ TempString[1] = ConvState[ConvState.Length-1].PlayerName$": Hallo, Actiecentrum. Ik heb het eerder geconstateerde schadebeeld bij"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Location@"in"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Map@"opnieuw geobserveerd."; TempString[2] = DataObject.NL_AC$":"@"Prima, maar jij zou toch eerst het schadebeeld"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Location@"in"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Map@"controleren? Doe dit eerst en breng ons daarna op de hoogte van dit schadebeeld. Dag!"; }else{ TempString[1] = ConvState[ConvState.Length-1].PlayerName$": Hi, Action Center, I observed again the earlier reported damage at"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Location@"in"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Map$"."; TempString[2] = DataObject.EN_AC$": Excellent, but weren’t you supposed to check the damage at"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Location@"in"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Map$"? Do this first and tell us afterwards about this damage. Bye!"; } TempString[3] = CurrentLanguage.getValue("6.2-B"); GeoPC.bMovingToWarning = false; ConvState[ConvState.Length-1].ConversationFinished = true; } */ tmpMsg = GeoPC.wMsg; } else { // player didn't get any warning, he's in time, wMsg is not set so use tmpMsg as warning // other warningmessage timers will not be paused tmpMsg = GeoPC.getNearbyWarning(); } // ConversationFinished would be true only in the case that player calls from wrong marker if(Controls[7].bVisible && Answers[0] == CurrentLanguage.getValue("4.31") && !ConvState[ConvState.Length-1].ConversationFinished) { // player just gave a checking-assessment through the answer-combobox (C7) // player tells assessment ConvState[ConvState.length - 1].AmountOfAssessments = ConvState[ConvState.length - 1].AmountOfAssessments + 1; TempString.Insert(0,3); tmp = moComboBox(Controls[7]).GetIndex(); TempString[0] = ConvState[ConvState.Length-1].PlayerName$":"@Answers[tmp]; HideQuestion(); // A new ConvState is added to the ConversationStates to store all information of this particular conversation // save in the new ConvState whether the assessment matches that of the AC ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); if(tmp == HSeriousStruct.States){ ConvState[ConvState.Length-1].AssessmentSame = true; }else{ ConvState[ConvState.Length-1].AssessmentSame = false; } // save the assessment made in the new ConvState and Signals if(tmp == 0) { // keep assessment the same SetAssessmentInSignals(ConvState[ConvState.Length-1].Assessment); } else if(Answers.length == 3 && tmp == 1) { // assessment serious chosen (2nd out of 3) ConvState[ConvState.Length-1].Assessment = STA_Relevant; SetAssessmentInSignals(STA_Relevant); } else { ConvState[ConvState.Length-1].Assessment = STA_Critical; SetAssessmentInSignals(STA_Critical); } if(!bSignalChanged && (tmp == 1 || tmp == 2)) { // player changed assessment to serious or very serious without having changed the observations // AC says "how could it have gotten if the observations haven't changed?" TempString[1] = CurrentLanguage.getValue("5.4-C1"); if(ConvState[ConvState.Length-1].Assessment == STA_Relevant) { // assessment serious chosen (2nd out of 3) if(GeoPC.Dutch){ TempString[1] = TempString[1]@"ernstig"@CurrentLanguage.getValue("5.4-C2"); }else{ TempString[1] = TempString[1]@"serious"@CurrentLanguage.getValue("5.4-C2"); } } else { if(GeoPC.Dutch){ TempString[1] = TempString[1]@"zeer ernstig"@CurrentLanguage.getValue("5.4-C2"); }else{ TempString[1] = TempString[1]@"very serious"@CurrentLanguage.getValue("5.4-C2"); } } TempString[2] = CurrentLanguage.getValue("6.2-A"); // go to state Correcting ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Correcting; ConvState[ConvState.Length-1].ConversationFinished = true; // the remember message now becomes a correction message tmpMsg.setType(false); //reset correction message, and start counting after menu is closed tmpMsg.resetTimer(true); //update Messages GeoPC.Messages[GeoPC.wMsgIndex] = tmpMsg; } else { if(ConvState[ConvState.Length - 1].Assessment == STA_Reportable && HSeriousStruct.States == STA_Reportable) { //5.4-A correct assessment of being stable at not serious TempString[1] = CurrentLanguage.getValue("5.4-A"); TempString[2] = CurrentLanguage.getValue("6.2-A"); // go to state Stable ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Stable; ConvState[ConvState.Length-1].ConversationFinished = true; if(GeoPC.bMovingToWarning) { //unpause the timers of the other Warningmessages GeoPC.pauseWarnings(false); } //remove remember message for this marker/mechanism GeoPC.removeWarning(GeoPC.NearbyMarker); } else if(ConvState[ConvState.Length-1].Assessment == STA_Relevant && HSeriousStruct.States == STA_Relevant) { //5.4-E correct assessment of being serious TempString[1] = CurrentLanguage.getValue("5.4-E"); TempString[2] = CurrentLanguage.getValue("6.2-A"); // go to state Checking ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Checking; ConvState[ConvState.Length-1].ConversationFinished = true; /// jln - 14-11-2008 REMOVED, to get less messages? //reset remember message, and start counting after menu is closed // tmpMsg.resetTimer(true); //update GeoPC.Messages // GeoPC.Messages[GeoPC.wMsgIndex] = tmpMsg; // added! GeoPC.removeWarning(GeoPC.NearbyMarker); } else if(ConvState[ConvState.Length-1].Assessment == STA_Critical && HSeriousStruct.States == STA_Critical) { //5.4-G correct assessment of being very serious if(diagnosisRequired) { //5.4-G diagnosis required if(MayTakeMeasures){ TempString[1] = CurrentLanguage.getValue("5.4-G2"); }else{ TempString[1] = CurrentLanguage.getValue("5.4-G1"); } TempString[2] = CurrentLanguage.getValue("6.2-B"); // go to state Diagnosis ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Diagnosis; ConvState[ConvState.Length-1].ConversationFinished = true; } else { //5.4-F diagnosis not required or given if(MayTakeMeasures){ TempString[1] = CurrentLanguage.getValue("5.4-F2"); TempString[2] = CurrentLanguage.getValue("6.2-B"); }else{ TempString[1] = CurrentLanguage.getValue("5.4-F1"); TempString[2] = CurrentLanguage.getValue("6.2-A"); } // go to state Measure ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Measure; ConvState[ConvState.Length-1].ConversationFinished = true; } if(GeoPC.bMovingToWarning) { //unpause the timers of the other Warningmessages GeoPC.pauseWarnings(false); } //remove remember message for this marker/mechanism GeoPC.removeWarning(GeoPC.NearbyMarker); } else { //5.4-B wrong assessment //tell player the assessment of the AC TempString[1] = CurrentLanguage.getValue("5.4-B1"); // tell why player is wrong if(ConvState[ConvState.Length-1].Assessment == STA_Reportable) { for(i = 0; i < HSeriousStruct.ReasonNot_NotSerious.Length; i++) TempString[1] = TempString[1]$"||"$HSeriousStruct.ReasonNot_NotSerious[i]; } else if(ConvState[ConvState.Length-1].Assessment == STA_Relevant) { for(i = 0; i < HSeriousStruct.ReasonNot_Serious.Length; i++) TempString[1] = TempString[1]$"||"$HSeriousStruct.ReasonNot_Serious[i]; } else if(ConvState[ConvState.Length-1].Assessment == STA_Critical) { for(i = 0; i < HSeriousStruct.ReasonNot_VerySerious.Length; i++) TempString[1] = TempString[1]$"||"$HSeriousStruct.ReasonNot_VerySerious[i]; } TempString[1] = TempString[1]$"||"$CurrentLanguage.getValue("5.4-B2"); TempString[2] = CurrentLanguage.getValue("6.2-B"); // go to state Correcting ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Correcting; ConvState[ConvState.Length-1].ConversationFinished = true; //change remember message to correction message GeoPC.wMsg.setType(false); //reset correction message, and start counting after menu is closed GeoPC.wMsg.resetTimer(true); //update GeoPC.Messages GeoPC.Messages[GeoPC.wMsgIndex] = tmpMsg; //other warningmessage timers are still paused, first correct this one before unpausing } } if(GeoPC.bMovingToWarning) { GeoPC.bMovingToWarning = false; } } else if(!ConvState[ConvState.Length-1].ConversationFinished) { // we're at the start of a new conversation instead of right after the player making an assessment // (ConversationFinished would be true in the case that player calls from wrong marker) TempString.Insert(0,3); TempString[0] = CurrentLanguage.getValue("1"); if(bSignalChanged) { // player changed the last report for this signal, so changed his observations if(ConvState[ConvState.Length-1].DiagnosedMechanism == FM_None) { // observations changed - no diagnosis // tell AC the changes in observations TempString[1] = CurrentLanguage.getValue("2.3-D1"); TempString[1] = TempString[1]$getSignalSummary(ChangedSignals); } else { // observations changed - diagnosis // tell AC the changes in observations and tell AC the diagnosis made TempString[1] = CurrentLanguage.getValue("2.3-D1"); TempString[1] = TempString[1]$getSignalSummary(ChangedSignals); TempString[1] = TempString[1]$"||"$CurrentLanguage.getValue("2.3-D2"); } } else { // player did not change his observations if(ConvState[ConvState.Length-1].DiagnosedMechanism == FM_None) { // observations not changed - no diagnosis TempString[1] = CurrentLanguage.getValue("2.3-A"); } else { // observations not changed - tell diagnosis TempString[1] = CurrentLanguage.getValue("2.3-B"); } } TempString[2] = CurrentLanguage.getValue("3.4"); // offer options in combobox, depending on previous assessment of failure state AskQuestion = true; Answers.Remove(0,Answers.Length); AnswersInBox.Remove(0,AnswersInBox.Length); if(ConvState[ConvState.Length-1].Assessment == STA_Reportable) { /* player correctly said it was not serious before. offer options: - the situation is stable (meaning still not serious) - it has become worse (meaning serious) - it has become very serious */ Answers.Insert(0,3); Answers[0] = CurrentLanguage.getValue("4.31"); Answers[1] = CurrentLanguage.getValue("4.32"); Answers[2] = CurrentLanguage.getValue("4.33"); AnswersInBox.Insert(0,3); AnswersInBox[0] = CurrentLanguage.getValue("4.31Box"); AnswersInBox[1] = CurrentLanguage.getValue("4.32Box"); AnswersInBox[2] = CurrentLanguage.getValue("4.33Box"); } else if(ConvState[ConvState.Length-1].Assessment == STA_Relevant) { /* player correctly said it was serious before. offer options: - the situation is stable (meaning still serious) - it has become very serious */ Answers.Insert(0,2); Answers[0] = CurrentLanguage.getValue("4.31"); Answers[1] = CurrentLanguage.getValue("4.33"); AnswersInBox.Insert(0,2); AnswersInBox[0] = CurrentLanguage.getValue("4.31Box"); AnswersInBox[1] = CurrentLanguage.getValue("4.33Box"); } else { /* player correctly said it was very serious before. this will however not lead to going to state checking but to state diagnosis or state measure, so this will never be reached i think. -Wsl */ /* It is reached. This bug was reported bij jln.-Zmr - Place a red marker - Call action center - You will be asked to mark it on the map, because you didn't do that. - Use the map, and place it - Call action center - You will be asked to diagnose - Diagnose - Call action center - You will be asked for seriousness / measure - When you get permission to do so, place the measure - The other Levee guy will give you some information that it might not be a good measure - Call Action center again - You will be asked for "seriousness" again... and the menu is without options, and it will keep you in the menu since there is no way to exit. */ /* player correctly said it was very serious before. offer options: - the situation is stable (meaning still not serious) - it has become worse (meaning serious) - it has become very serious */ Answers.Insert(0,3); Answers[0] = CurrentLanguage.getValue("4.31"); Answers[1] = CurrentLanguage.getValue("4.32"); Answers[2] = CurrentLanguage.getValue("4.33"); AnswersInBox.Insert(0,3); AnswersInBox[0] = CurrentLanguage.getValue("4.31Box"); AnswersInBox[1] = CurrentLanguage.getValue("4.32Box"); AnswersInBox[2] = CurrentLanguage.getValue("4.33Box"); } } } else if(currentState == Con_Correcting) { /* 21-09-2006 Bas ================ STATE CORRECTING ================ The AC orders the player to return to the signal location and he has to make sure his/her observation is right. Then call the AC. A correction-warningmessage appears in two minutes if the player didn't return to the damage. */ //Player called the AC so set bCalled //if(GeoPC.NearByMarker.Signals.Length > 0) //GeoPC.NearByMarker.Signals[GeoPC.NearByMarker.Signals.Length-1].bCalled = true; if(GeoPC.bMovingToWarning) { /* I THINK THIS SHOULD NO LONGER BE HERE; IT'S HANDLED AROUND LINE 260 //player already got a warning message, wMsg is set //other warningmessage timers will be paused if(GeoPC.wMsg.warningType == false && GeoPC.NearByMarker != None && !GeoPC.wMsg.isSameMarker(GeoPC.NearByMarker)) { // Warn the player he's at the wrong location! TempString.Insert(0,4); TempString[0] = CurrentLanguage.getValue("1"); //I didn't use the hashtable because I need the map and location name from two different RedMarker objects. -bas if(GeoPC.Dutch){ TempString[1] = ConvState[ConvState.Length-1].PlayerName$": Hallo, Actiecentrum. Ik heb het eerder geconstateerde schadebeeld bij"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Location@"in"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Map@"opnieuw geobserveerd."; TempString[2] = DataObject.NL_AC$":"@"Prima, maar jij zou toch eerst het schadebeeld"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Location@"in"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Map@"controleren? Doe dit eerst en breng ons daarna op de hoogte van dit schadebeeld. Dag!"; }else{ TempString[1] = ConvState[ConvState.Length-1].PlayerName$": Hi, Action Center, I observed again the earlier reported damage at"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Location@"in"@GeoPC.NearByMarker.ConvState[GeoPC.NearByMarker.ConvState.Length - 1].Map$"."; TempString[2] = DataObject.EN_AC$": Excellent, but weren’t you supposed to check the damage at"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Location@"in"@GeoPC.wMsg.warningMarker.ConvState[GeoPC.wMsg.warningMarker.ConvState.Length - 1].Map$"? Do this first and tell us afterwards about this damage. Bye!"; } TempString[3] = CurrentLanguage.getValue("6.2-B"); GeoPC.bMovingToWarning = false; ConvState[ConvState.Length-1].ConversationFinished = true; }*/ tmpMsg = GeoPC.wMsg; } else { //player didn't get any warning, he's in time, wMsg is not set //other warningmessage timers are not paused tmpMsg = GeoPC.getNearbyWarning(); } // ConversationFinished would be true only in the case that player calls from wrong marker if(Controls[7].bVisible && Answers[0] == CurrentLanguage.getValue("4.1-D1") && !ConvState[ConvState.Length-1].ConversationFinished) { //AC asked player about assessment ConvState[ConvState.length - 1].AmountOfAssessments = ConvState[ConvState.length - 1].AmountOfAssessments + 1; TempString.Insert(0,3); tmp = moComboBox(Controls[7]).GetIndex(); TempString[0] = ConvState[ConvState.Length-1].PlayerName$":"@Answers[tmp]; HideQuestion(); ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); if(tmp == HSeriousStruct.States) { ConvState[ConvState.Length-1].AssessmentSame = true; } else { ConvState[ConvState.Length-1].AssessmentSame = false; } if(tmp == 0) { ConvState[ConvState.Length-1].Assessment = STA_Reportable; SetAssessmentInSignals(STA_Reportable); } else if(tmp == 1) { ConvState[ConvState.Length-1].Assessment = STA_Relevant; SetAssessmentInSignals(STA_Relevant); } else if(tmp == 2) { ConvState[ConvState.Length-1].Assessment = STA_Critical; SetAssessmentInSignals(STA_Critical); } if(tmp != HSeriousStruct.States) { //wrong assessment if(tmp == 0) { //reportable incorrect if(reportCount > 1 && ConvState[ConvState.Length-2].Assessment == STA_Reportable) { //second time the player reports reportable //5.3-I Stable incorrect RUISTABLE TempString[1] = CurrentLanguage.getValue("5.3-I1"); //tell why not reportable for(i = 0; i < HSeriousStruct.ReasonNot_NotSerious.Length; i++) TempString[1] = TempString[1]$"||"$HSeriousStruct.ReasonNot_NotSerious[i]; TempString[1] = TempString[1]$"||"$CurrentLanguage.getValue("5.3-I2"); TempString[2] = CurrentLanguage.getValue("6.2-A"); // go to state Stable ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Stable; ConvState[ConvState.Length-1].ConversationFinished = true; if(GeoPC.bMovingToWarning) { //unpause other warningmessage timers GeoPC.pauseWarnings(false); } //remove correction message for this signal GeoPC.removeWarning(GeoPC.NearbyMarker); } else { //first time //5.3-A Correction wrong reportable TempString[1] = CurrentLanguage.getValue("5.3-A1"); //tell why not reportable for(i = 0; i < HSeriousStruct.ReasonNot_NotSerious.Length; i++) TempString[1] = TempString[1]$"||"$HSeriousStruct.ReasonNot_NotSerious[i]; TempString[1] = TempString[1]$"||"$CurrentLanguage.getValue("5.3-B2"); TempString[2] = CurrentLanguage.getValue("6.2-A"); // go to state Checking ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Checking; ConvState[ConvState.Length-1].ConversationFinished = true; if(GeoPC.bMovingToWarning) { //unpause other warningmessage timers GeoPC.pauseWarnings(false); } //change correction message to remember message tmpMsg.setType(true); //reset message, and start counting after menu is closed tmpMsg.resetTimer(true); //update Messages GeoPC.Messages[GeoPC.wMsgIndex] = tmpMsg; } } else if(tmp == 1) { //5.3-B correction wrong relevant TempString[1] = CurrentLanguage.getValue("5.3-B1"); //tell why not relevant for(i = 0; i < HSeriousStruct.ReasonNot_Serious.Length; i++) TempString[1] = TempString[1]$"||"$HSeriousStruct.ReasonNot_Serious[i]; TempString[1] = TempString[1]$"||"$CurrentLanguage.getValue("5.3-B2"); TempString[2] = CurrentLanguage.getValue("6.2-A"); // go to state Checking ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Checking; ConvState[ConvState.Length-1].ConversationFinished = true; if(GeoPC.bMovingToWarning) { //unpause other warningmessage timers GeoPC.pauseWarnings(false); } //change correction message to remember message tmpMsg.setType(true); //reset message, and start counting after menu is closed tmpMsg.resetTimer(true); //update Messages GeoPC.Messages[GeoPC.wMsgIndex] = tmpMsg; } else if(tmp == 2) { //critical incorrect TempString[1] = CurrentLanguage.getValue("5.3-D1"); //tell why not reportable for(i = 0; i < HSeriousStruct.ReasonNot_VerySerious.Length; i++) TempString[1] = TempString[1]$"||"$HSeriousStruct.ReasonNot_VerySerious[i]; if(diagnosisRequired) { //5.3-D diagnosis required if(MayTakeMeasures){ TempString[1] = TempString[1]$"||"$CurrentLanguage.getValue("5.3-D3"); }else{ TempString[1] = TempString[1]$"||"$CurrentLanguage.getValue("5.3-D2"); } TempString[2] = CurrentLanguage.getValue("6.2-B"); // go to state Diagnosis ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Diagnosis; ConvState[ConvState.Length-1].ConversationFinished = true; } else { if(MayTakeMeasures){ TempString[1] = TempString[1]$"||"$CurrentLanguage.getValue("5.3-C3"); TempString[2] = CurrentLanguage.getValue("6.2-B"); }else{ TempString[1] = TempString[1]$"||"$CurrentLanguage.getValue("5.3-C2"); TempString[2] = CurrentLanguage.getValue("6.2-A"); } // go to state Measure ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Measure; ConvState[ConvState.Length-1].ConversationFinished = true; } if(GeoPC.bMovingToWarning) { //unpause other warningmessage timers GeoPC.pauseWarnings(false); } //remove correction message for this signal GeoPC.removeWarning(GeoPC.NearbyMarker); } } else { //right assessment if(tmp == 0) { //reportable correct if(reportCount > 1 && ConvState[ConvState.Length-2].Assessment == STA_Reportable) { //second time the player reports reportable //5.3-J Stable correct RUISTABLE TempString[1] = CurrentLanguage.getValue("5.3-J"); TempString[2] = CurrentLanguage.getValue("6.2-A"); // go to state Stable ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Stable; ConvState[ConvState.Length-1].ConversationFinished = true; if(GeoPC.bMovingToWarning) { //unpause other warningmessage timers GeoPC.pauseWarnings(false); } //remove correction message for this signal GeoPC.removeWarning(GeoPC.NearbyMarker); } else { //first time //5.3-E reportable correct TempString[1] = CurrentLanguage.getValue("5.3-E"); TempString[2] = CurrentLanguage.getValue("6.2-A"); // go to state Checking ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Checking; ConvState[ConvState.Length-1].ConversationFinished = true; if(GeoPC.bMovingToWarning) { //unpause other warningmessage timers GeoPC.pauseWarnings(false); } //change correction message to remember message tmpMsg.setType(true); //reset message, and start counting after menu is closed tmpMsg.resetTimer(true); //update Messages GeoPC.Messages[GeoPC.wMsgIndex] = tmpMsg; } } else if(tmp == 1) { //5.3-F relevant correct TempString[1] = CurrentLanguage.getValue("5.3-F"); TempString[2] = CurrentLanguage.getValue("6.2-A"); // go to state Checking ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Checking; ConvState[ConvState.Length-1].ConversationFinished = true; if(GeoPC.bMovingToWarning) { //unpause other warningmessage timers GeoPC.pauseWarnings(false); } /// jln - 14-11-2008 Removed as test, to get less messages: //change correction message to remember message // tmpMsg.setType(true); //reset message, and start counting after menu is closed // tmpMsg.resetTimer(true); //update Messages // GeoPC.Messages[GeoPC.wMsgIndex] = tmpMsg; // added! GeoPC.removeWarning(GeoPC.NearbyMarker); } else if(tmp == 2) { //5.3-H critical correct if(diagnosisRequired) { //5.3-H correct - diagnosis required if(MayTakeMeasures){ TempString[0] = CurrentLanguage.getValue("5.3-H2"); }else{ TempString[0] = CurrentLanguage.getValue("5.3-H1"); } TempString[1] = CurrentLanguage.getValue("6.2-B"); // go to state Diagnosis ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Diagnosis; ConvState[ConvState.Length-1].ConversationFinished = true; } else { //5.3-G correct - diagnosis not required or given if(MayTakeMeasures){ TempString[0] = CurrentLanguage.getValue("5.3-G2"); TempString[1] = CurrentLanguage.getValue("6.2-B"); }else{ TempString[0] = CurrentLanguage.getValue("5.3-G1"); TempString[1] = CurrentLanguage.getValue("6.2-A"); } // go to state Measure ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Measure; ConvState[ConvState.Length-1].ConversationFinished = true; } if(GeoPC.bMovingToWarning) { //unpause other warningmessage timers GeoPC.pauseWarnings(false); } //remove correction message for this signal GeoPC.removeWarning(GeoPC.NearbyMarker); } } if(GeoPC.bMovingToWarning) { GeoPC.bMovingToWarning = false; } } else if(!ConvState[ConvState.Length-1].ConversationFinished) { // we're at the start of a new conversation instead of right after the player making an assessment // (ConversationFinished would be true in the case that player calls from wrong marker) TempString.Insert(0,3); TempString[0] = CurrentLanguage.getValue("1"); if(bSignalChanged) { if(ConvState[ConvState.Length-1].DiagnosedMechanism == FM_None) { //changed - no diagnosis TempString[1] = CurrentLanguage.getValue("2.3-D1"); TempString[1] = TempString[1]$getSignalSummary(ChangedSignals); } else { //changed - diagnosis TempString[1] = CurrentLanguage.getValue("2.3-D1"); TempString[1] = TempString[1]$getSignalSummary(ChangedSignals); TempString[1] = TempString[1]$"||"$CurrentLanguage.getValue("2.3-D2"); } } else { if(ConvState[ConvState.Length-1].DiagnosedMechanism == FM_None) { //not changed - no diagnosis TempString[1] = CurrentLanguage.getValue("2.3-A"); } else { //diagnosis TempString[1] = CurrentLanguage.getValue("2.3-B"); } } TempString[2] = CurrentLanguage.getValue("3.3"); //Ask player if the situation has changed AskQuestion = true; Answers.Remove(0,Answers.Length); Answers.Insert(0,3); Answers[0] = CurrentLanguage.getValue("4.1-D1"); Answers[1] = CurrentLanguage.getValue("4.1-D2"); Answers[2] = CurrentLanguage.getValue("4.1-D3"); AnswersInBox.Remove(0,AnswersInBox.Length); AnswersInBox.Insert(0,3); AnswersInBox[0] = CurrentLanguage.getValue("4.1-D1"); AnswersInBox[1] = CurrentLanguage.getValue("4.1-D2"); AnswersInBox[2] = CurrentLanguage.getValue("4.1-D3Box"); } } else if(currentState == Con_Reporting) { /* Originally by Maarten van Zomeren 20-09-2006 Bas =============== REPORTING STATE =============== Maarten van Zomeren created it, I rewrote/changed it. In this is the default state. The player calls the AC in order to get the report approved. AC decides the assessment is right or wrong. */ if(ConvState[ConvState.Length-1].Location == "") { //no location TempString.Insert(0,6); TempString[0] = CurrentLanguage.getValue("1");; TempString[1] = CurrentLanguage.getValue("2.1-B"); TempString[2] = CurrentLanguage.getValue("3.1-B"); TempString[3] = CurrentLanguage.getValue("4.1-B"); if(ConvState.Length>1){ //not the first time the player didn't specify the location TempString[4]= CurrentLanguage.getValue("5.1-B"); }else{ TempString[4]= CurrentLanguage.getValue("5.1-A"); } TempString[5] = CurrentLanguage.getValue("6.1-C"); ConvState[ConvState.Length-1].ConversationFinished = true; } else { //player knows location if(Signals.Length == 0) { //there's no report TempString.Insert(0,6); TempString[0] = CurrentLanguage.getValue("1"); TempString[1] = CurrentLanguage.getValue("2.1-A"); TempString[2] = CurrentLanguage.getValue("3.1-A"); TempString[3] = CurrentLanguage.getValue("4.1-E"); TempString[4] = CurrentLanguage.getValue("5.1-I"); TempString[5] = CurrentLanguage.getValue("6.1-C"); ConvState[ConvState.Length-1].ConversationFinished = true; } else { //the player has a report if (bMissingAnswers) { //player didn't answer all questions TempString.Insert(0,8); TempString[0]= CurrentLanguage.getValue("1"); TempString[1]= CurrentLanguage.getValue("2.1-A"); TempString[2]= CurrentLanguage.getValue("3.1-A"); if(nothingAnswered()){ TempString[3] = sigContainingString()$"."; TempString[4] = CurrentLanguage.getValue("3.1-E"); }else{ TempString[3]= SamenvattingSchadebeeld(); TempString[4]= MissingInSignals(); } TempString[5]= CurrentLanguage.getValue("4.1-C"); TempString[6]= CurrentLanguage.getValue("5.1-C"); TempString[7]= CurrentLanguage.getValue("6.1-C"); ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); // state stays Reporting ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Reporting; ConvState[ConvState.Length-1].ConversationFinished = true; } else { if(Controls[7].bVisible) { ConvState[ConvState.length - 1].AmountOfAssessments = ConvState[ConvState.length - 1].AmountOfAssessments + 1; TempString.Insert(0,3); tmp = moComboBox(Controls[7]).GetIndex(); TempString[0]= ConvState[ConvState.Length-1].PlayerName$":"@Answers[tmp]; HideQuestion(); if(tmp == 0 && HSeriousStruct.States == STA_Reportable) { //5.1-E reportable correct TempString[1]= CurrentLanguage.getValue("5.1-E"); TempString[2]= CurrentLanguage.getValue("6.1-B"); ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Checking; ConvState[ConvState.Length-1].AssessmentSame = true; ConvState[ConvState.Length-1].Assessment = STA_Reportable; SetAssessmentInSignals(STA_Reportable); //add a remember message, and start counting after the menu is closed GeoPC.addTimer(true, true); } else if(tmp == 1 && HSeriousStruct.States == STA_Relevant) { //5.1-F relevant correct TempString[1]= CurrentLanguage.getValue("5.1-F"); TempString[2]= CurrentLanguage.getValue("6.1-B"); ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Checking; ConvState[ConvState.Length-1].AssessmentSame = true; ConvState[ConvState.Length-1].Assessment = STA_Relevant; SetAssessmentInSignals(STA_Relevant); //add a remember message, and start counting after the menu is closed GeoPC.addTimer(true, true); } else if(tmp == 2 && HSeriousStruct.States == STA_Critical) { //5.1-J Critical correct if(diagnosisRequired) { if(MayTakeMeasures){ TempString[1] = CurrentLanguage.getValue("5.1-J2"); }else{ TempString[1] = CurrentLanguage.getValue("5.1-J1"); } TempString[2] = CurrentLanguage.getValue("6.2-B"); ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Diagnosis; } else { if(MayTakeMeasures){ TempString[1] = CurrentLanguage.getValue("5.1-G2"); TempString[2] = CurrentLanguage.getValue("6.2-B"); }else{ TempString[1] = CurrentLanguage.getValue("5.1-G1"); TempString[2] = CurrentLanguage.getValue("6.2-A"); } ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Measure; } ConvState[ConvState.Length-1].AssessmentSame = true; ConvState[ConvState.Length-1].Assessment = STA_Critical; SetAssessmentInSignals(STA_Critical); } else if(tmp != HSeriousStruct.States) { //5.1-H reporting incorrect TempString[1]= CurrentLanguage.getValue("5.1-H1"); //tell player why assessment is wrong if(tmp == 0){ ConvState[ConvState.Length-1].Assessment = STA_Reportable; SetAssessmentInSignals(STA_Reportable); for(i = 0; i < HSeriousStruct.ReasonNot_NotSerious.Length; i++) TempString[1] = TempString[1]$"||"$HSeriousStruct.ReasonNot_NotSerious[i]; }else if(tmp == 1){ ConvState[ConvState.Length-1].Assessment = STA_Relevant; SetAssessmentInSignals(STA_Relevant); for(i = 0; i < HSeriousStruct.ReasonNot_Serious.Length; i++) TempString[1] = TempString[1]$"||"$HSeriousStruct.ReasonNot_Serious[i]; }else if(tmp == 2){ ConvState[ConvState.Length-1].Assessment = STA_Critical; SetAssessmentInSignals(STA_Critical); for(i = 0; i < HSeriousStruct.ReasonNot_VerySerious.Length; i++) TempString[1] = TempString[1]$"||"$HSeriousStruct.ReasonNot_VerySerious[i]; } TempString[1] = TempString[1]$"||"$CurrentLanguage.getValue("5.1-H2"); TempString[2] = CurrentLanguage.getValue("6.2-B"); ConvState[ConvState.Length-1].AssessmentSame = false; ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Correcting; //add a correction message, and start counting after the menu is closed GeoPC.addTimer(false, true); } ConvState[ConvState.Length-1].ConversationFinished = true; } else { //Signal complete, location complete TempString.Insert(0,5); TempString[0]= CurrentLanguage.getValue("1"); TempString[1]= CurrentLanguage.getValue("2.1-A"); TempString[2]= CurrentLanguage.getValue("3.1-A"); TempString[3]= SamenvattingSchadebeeld(); if(ConvState[ConvState.Length-1].DiagnosedMechanism != FM_None) { //the player does have a diagnose, tell the AC what it is. TempString[3] = TempString[3] $ "||"$ CurrentLanguage.getValue("4.1-F6"); } TempString[4] = CurrentLanguage.getValue("3.1-C"); AskQuestion = true; Answers.Remove(0,Answers.Length); Answers.Insert(0,3); Answers[0] = CurrentLanguage.getValue("4.1-D1"); Answers[1] = CurrentLanguage.getValue("4.1-D2"); Answers[2] = CurrentLanguage.getValue("4.1-D3"); AnswersInBox.Remove(0,AnswersInBox.Length); AnswersInBox.Insert(0,3); AnswersInBox[0] = CurrentLanguage.getValue("4.1-D1"); AnswersInBox[1] = CurrentLanguage.getValue("4.1-D2"); AnswersInBox[2] = CurrentLanguage.getValue("4.1-D3Box"); } } } } } else if(currentState == Con_Warning) { /* 2007-05-31 wsl: See line 94, that's basically where the warning state is handled. */ } else if(currentState == Con_Stable) { /* ============ STATE STABLE ============ 2006-10-05 Bas Started with adding functionality 2006-10-06 Bas finished */ if(Controls[7].bVisible) { ConvState[ConvState.length - 1].AmountOfAssessments = ConvState[ConvState.length - 1].AmountOfAssessments + 1; TempString.Insert(0,1); tmp = moComboBox(Controls[7]).GetIndex(); TempString[0]= ConvState[ConvState.Length-1].PlayerName$":"@Answers[tmp]; HideQuestion(); ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); if(tmp == 0) { // player has nothing to tell; still stable (whether that was not serious or serious) // so the value for assessment is already set right SetAssessmentInSignals(ConvState[ConvState.Length-1].Assessment); // conversation goes "we don't have time, go talk to the birds" TempString.Insert(1,2); TempString[1] = CurrentLanguage.getValue("5.8-A"); TempString[2] = CurrentLanguage.getValue("6.4-A"); // go to (stay in) state Stable ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Stable; } else { // assessment has changed to very serious or to serious TempString.Insert(1,3); if(!bSignalChanged) { // assessment was changed, but observations were unchanged TempString[1] = CurrentLanguage.getValue("3.7-B"); TempString[2] = CurrentLanguage.getValue("5.8-B1"); if(Answers.length == 3 && tmp == 1) { if(GeoPC.Dutch){ TempString[2] = TempString[2]@"ernstig"@CurrentLanguage.getValue("5.8-B2"); }else{ TempString[2] = TempString[2]@"serious"@CurrentLanguage.getValue("5.8-B2"); } } else { if(GeoPC.Dutch){ TempString[2] = TempString[2]@"zeer ernstig"@CurrentLanguage.getValue("5.8-B2"); }else{ TempString[2] = TempString[2]@"very serious"@CurrentLanguage.getValue("5.8-B2"); } } TempString[3] = CurrentLanguage.getValue("6.4-D"); // go to state Correcting ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Correcting; //add a correction message, and start counting after the menu is closed GeoPC.addTimer(false, true); } else { // assessment was changed and observations too TempString[1] = CurrentLanguage.getValue("4.6-B")$getSignalSummary(ChangedSignals); if(tmp == HSeriousStruct.States) { //right assessment if(Answers.length == 3 && tmp == 1) { // relevant correct ConvState[ConvState.Length-1].Assessment = STA_Relevant; SetAssessmentInSignals(STA_Relevant); TempString[2] = CurrentLanguage.getValue("5.8-E"); TempString[3] = CurrentLanguage.getValue("6.2-B"); // go to state Checking ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Checking; } else { // critical correct; well done, now action is required ConvState[ConvState.Length-1].Assessment = STA_Critical; SetAssessmentInSignals(STA_Critical); if(diagnosisRequired) { if(MayTakeMeasures){ TempString[2] = CurrentLanguage.getValue("5.8-G2"); }else{ TempString[2] = CurrentLanguage.getValue("5.8-G1"); } TempString[3] = CurrentLanguage.getValue("6.2-B"); // go to state Diagnosis ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Diagnosis; } else { if(MayTakeMeasures){ TempString[2] = CurrentLanguage.getValue("5.8-F2"); TempString[2] = CurrentLanguage.getValue("6.2-B"); }else{ TempString[2] = CurrentLanguage.getValue("5.8-F1"); TempString[2] = CurrentLanguage.getValue("6.2-A"); } // go to state Measure ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Measure; } } } else { // wrong assessment (for the observations made, that is) TempString[2] = CurrentLanguage.getValue("5.8-C1"); if(Answers.length == 3 && tmp == 1) { // assessment changed to serious (2 out of 3) ConvState[ConvState.Length-1].Assessment = STA_Relevant; SetAssessmentInSignals(STA_Relevant); for(i = 0; i < HSeriousStruct.ReasonNot_Serious.Length; i++) TempString[2] = TempString[2]$"||"$HSeriousStruct.ReasonNot_Serious[i]; } else { ConvState[ConvState.Length-1].Assessment = STA_Critical; SetAssessmentInSignals(STA_Critical); for(i = 0; i < HSeriousStruct.ReasonNot_VerySerious.Length; i++) TempString[2] = TempString[2]$"||"$HSeriousStruct.ReasonNot_VerySerious[i]; } TempString[2] = TempString[2]$"||"$CurrentLanguage.getValue("5.8-C2"); TempString[3] = CurrentLanguage.getValue("6.2-B"); // go to state Correcting ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Correcting; //add a correction message, and start counting after the menu is closed GeoPC.addTimer(false, true); } } } ConvState[ConvState.Length-1].ConversationFinished = true; } else { // quite standard start of conversation TempString.Insert(0,3); TempString[0] = CurrentLanguage.getValue("1"); TempString[1] = CurrentLanguage.getValue("2.5"); TempString[2] = CurrentLanguage.getValue("3.7-A"); // offer options in combobox, depending on previous assessment of failure state AskQuestion = true; Answers.Remove(0,Answers.Length); AnswersInBox.Remove(0,AnswersInBox.Length); if(ConvState[ConvState.Length-1].Assessment == STA_Reportable) { /* player said it was stable in phase not_serious offer options: - nothing to say - it has become worse (meaning serious) - it has become very serious */ Answers.Insert(0,3); Answers[0] = CurrentLanguage.getValue("4.6-A1"); Answers[1] = CurrentLanguage.getValue("4.6-A2"); Answers[2] = CurrentLanguage.getValue("4.6-A3"); AnswersInBox.Insert(0,3); AnswersInBox[0] = CurrentLanguage.getValue("4.6-A1"); AnswersInBox[1] = CurrentLanguage.getValue("4.6-A2"); AnswersInBox[2] = CurrentLanguage.getValue("4.6-A3Box"); } else if(ConvState[ConvState.Length-1].Assessment == STA_Relevant) { /* player said it was stable in phase serious offer options: - nothing to say - it has become very serious */ Answers.Insert(0,2); Answers[0] = CurrentLanguage.getValue("4.6-A1"); Answers[1] = CurrentLanguage.getValue("4.6-A3"); AnswersInBox.Insert(0,2); AnswersInBox[0] = CurrentLanguage.getValue("4.6-A1"); AnswersInBox[1] = CurrentLanguage.getValue("4.6-A3Box"); } else { /* player said it was stable in phase very_serious which is a rather absurd situation. This should be impossible, or the AC should say something like "hang up now and take measures fast!" */ } } } else if(currentState == Con_Measure) { /* ============= STATE MEASURE ============= Either the player or the AC should take a measure for this failure (at least, if the information provided by the player is correct!). If the failure is not very serious or if the measure chosen by the player is the wrong one, go back to state Checking. In all other cases, the rest of the conversation regarding taking the measures will take place in MenuMeasureAC. Note that the player (in the case (s)he should choose the measure) was already told to take measures in the previous conversation! After the right measure is taken and the failure is 'saved', the state will remain state Measure, but the conversations will just say 'good work' etc. */ if(GeoPC.NearByMarker.MeasureTaken.bMeasureEffective) { // the right measure was taken already // the AC shortly congratulates you TempString.Insert(0,6); TempString[0] = CurrentLanguage.getValue("1"); TempString[1] = CurrentLanguage.getValue("2.2"); if(MayTakeMeasures) { TempString[2] = CurrentLanguage.getValue("3.8-A"); }else{ TempString[2] = CurrentLanguage.getValue("3.8-B"); } TempString[3] = CurrentLanguage.getValue("4.7"); TempString[4] = CurrentLanguage.getValue("5.9"); TempString[5] = CurrentLanguage.getValue("6.6"); } else { // the right measure still has to be taken if(MayTakeMeasures) { // player has to choose which measure to take. So (s)he should take measures // through MenuMeasure, which will then result in MenuMeasureAC. // if the player calls the AC instead, (s)he is asked if he did already take // the measure - ehm, no - then do it! TempString.Insert(0,6); TempString[0] = CurrentLanguage.getValue("1"); TempString[1] = CurrentLanguage.getValue("2.6"); TempString[2] = CurrentLanguage.getValue("5.5-G"); TempString[3] = CurrentLanguage.getValue("4.1-B"); TempString[4] = CurrentLanguage.getValue("5.5-H"); TempString[5] = CurrentLanguage.getValue("6.4-C"); } else { //only the ac can take measures if((GeoPC.NearByMarker.LTile) != none) { // there is indeed a failure here if((GeoPC.NearByMarker.LTile).CurrentState == STA_Critical) { // The failure is very serious // AC calls and tells they went to the failure and fixed it. TempString.Insert(0,4); TempString[0] = CurrentLanguage.getValue("1"); TempString[1] = CurrentLanguage.getValue("2.2"); TempString[2] = CurrentLanguage.getValue("3.5-C"); TempString[3] = CurrentLanguage.getValue("6.3-B"); } else { //The failure aint very serious. Taking a measure is not necessary at all! TempString.Insert(0,6); TempString[0] = CurrentLanguage.getValue("1"); TempString[1] = CurrentLanguage.getValue("2.2"); TempString[2] = CurrentLanguage.getValue("3.5-A"); TempString[3] = CurrentLanguage.getValue("4.4-A"); TempString[4] = CurrentLanguage.getValue("5.5-A1"); TempString[4] = TempString[4]$"||"$WhyFailureNotAsExpected(STA_Critical); TempString[4] = TempString[4]$"||"$CurrentLanguage.getValue("5.5-A2"); TempString[5] = CurrentLanguage.getValue("6.3-A"); // go back to state Checking ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Checking; } } else { //There is no failure here. Taking a measure is not necessary at all! TempString.Insert(0,6); TempString[0] = CurrentLanguage.getValue("1"); TempString[1] = CurrentLanguage.getValue("2.2"); TempString[2] = CurrentLanguage.getValue("3.5-A"); TempString[3] = CurrentLanguage.getValue("4.4-A"); TempString[4] = CurrentLanguage.getValue("5.5-A3")@CurrentLanguage.getValue("5.5-A2"); TempString[5] = CurrentLanguage.getValue("6.3-A"); // go back to state Checking ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Checking; } } } ConvState[ConvState.Length-1].ConversationFinished = true; } else if(currentState == Con_Diagnosis) { /* =============== STATE DIAGNOSIS =============== The player has already filled in a number of signals which say that measures are needed. */ TempString.Insert(0,4); if(ConvState[ConvState.Length-1].DiagnosedMechanism == FM_None) { // The player did not make an diagnosis yet... // prompt user to do that first TempString[0] = CurrentLanguage.getValue("1"); TempString[1] = CurrentLanguage.getValue("2.4-B"); TempString[2] = CurrentLanguage.getValue("5.7-C"); TempString[3] = CurrentLanguage.getValue("6.5"); } else { // The player made an diagnosis, now he may take action... if(MayTakeMeasures) { // the player is allowed to take measures TempString[0] = CurrentLanguage.getValue("1"); TempString[1] = CurrentLanguage.getValue("2.4-A"); TempString[2] = CurrentLanguage.getValue("5.7-B"); TempString[3] = CurrentLanguage.getValue("6.5"); } else { // The player is not allowed to take measures TempString[0] = CurrentLanguage.getValue("1"); TempString[1] = CurrentLanguage.getValue("2.4-A"); TempString[2] = CurrentLanguage.getValue("5.7-A"); TempString[3] = CurrentLanguage.getValue("6.5"); } // go to state Measure ConvState[ConvState.Length-1].ConversationStates.Insert(ConvState[ConvState.Length-1].ConversationStates.Length,1); ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.Length-1] = Con_Measure; } ConvState[ConvState.Length-1].ConversationFinished = true; } //Add the tempString array to the Lines array tmp = Lines.Length; Lines.Insert(tmp,TempString.Length); for(i=0;i 1) { oldState = ConvState[ConvState.Length-2].ConversationStates[ConvState[ConvState.Length-2].ConversationStates.Length-1]; } log(""); log("============= storeSignalInformation ================"); log("oldState = "$oldState); log("newState = "$newState); // there has been called, so set bCalled = true for every Signal discussed in this conversation (ChangedSignals) // and for every last SignalReport of those Signals for(i = 0; i < ChangedSignals.Length; i++) { /* THIS CODE WAS HERE BEFORE BUT WHY??? if(ConvState.Length > 1 && oldState == Con_Correcting && !Signals[i].bCalled) { Signals[i].bCalled = false; Signals[i].SignalReports[Signals[i].SignalReports.Length - 1].bCalled = false; } else {*/ ChangedSignals[i].bCalled = true; log("bCalled set to true for ChangedSignals"); ChangedSignals[i].SignalReports[ChangedSignals[i].SignalReports.Length - 1].bCalled = true; } if(bCallRefused) { // the player's call to the AC was refused because player has to correct some other failure first for(i = 0; i < ChangedSignals.Length; i++) { ChangedSignals[i].bApproved = false; ChangedSignals[i].bReported = false; log("call was refused, so bApproved and bReported set to false for ChangedSignals"); ChangedSignals[i].SignalReports[ChangedSignals[i].SignalReports.Length - 1].bApproved = false; ChangedSignals[i].SignalReports[ChangedSignals[i].SignalReports.Length - 1].bReported = false; } } else if(bMissingAnswers) { // there are some answers missing so all discussed signals (ChangedSignals) that have // missing answers are not approved, and reported incorrectly for(i = 0; i < ChangedSignals.Length; i++) { if(missingAnswers(ChangedSignals[i])>0) { ChangedSignals[i].bApproved = false; ChangedSignals[i].bReported = false; ChangedSignals[i].SignalReports[ChangedSignals[i].SignalReports.Length - 1].bApproved = false; ChangedSignals[i].SignalReports[ChangedSignals[i].SignalReports.Length - 1].bReported = false; } } log("bMissingAnswers was true, bApproved and bReported set to false for ChangedSignals"); } else if(newState == Con_Checking || newState == Con_Stable || newState == Con_Measure) { // new state is state checking/stable/takingmeasure, so discussed signals (ChangedSignals) // are approved, and signals are reported correctly if(oldState == Con_Correcting && ChangedSignals.length == 0) { // in this, case you had to correct either the observations or the assessment. // there were no changed signals, so it must have been the assessment that was changed. // So, since the ChangedSignals-array isn't there, simply all Signals are set for(i = 0; i < Signals.Length; i++) { Signals[i].bApproved = true; Signals[i].bReported = true; log("bApproved and bReported set to true for ALL Signals"); Signals[i].SignalReports[Signals[i].SignalReports.Length - 1].bApproved = true; Signals[i].SignalReports[Signals[i].SignalReports.Length - 1].bReported = true; } } else { for(i = 0; i < ChangedSignals.Length; i++) { ChangedSignals[i].bApproved = true; ChangedSignals[i].bReported = true; log("bApproved and bReported set to true for ALL Signals"); ChangedSignals[i].SignalReports[ChangedSignals[i].SignalReports.Length - 1].bApproved = true; ChangedSignals[i].SignalReports[ChangedSignals[i].SignalReports.Length - 1].bReported = true; } } } else if(newState == Con_Correcting) { // new state is state correct, so the signals for which you changed your observations // (ChangedSignals) are not approved and reported incorrectly. // also, because the current report will be saved as the new original report, // bChanged must be true so that if you call back immediately, you didn't change your observations for(i = 0; i < ChangedSignals.Length; i++) { ChangedSignals[i].bApproved = false; ChangedSignals[i].bReported = false; log("bApproved and bReported set to false for ChangedSignals"); ChangedSignals[i].SignalReports[ChangedSignals[i].SignalReports.Length - 1].bApproved = false; ChangedSignals[i].SignalReports[ChangedSignals[i].SignalReports.Length - 1].bReported = false; GeoPC.NearbyMarker.SaveSignalOriginal2(ChangedSignals[i]); ChangedSignals[i].SignalReports[ChangedSignals[i].SignalReports.Length - 1].bChanged = false; } } else if(newState == Con_Diagnosis) { // new state is state diagnosis, so all signals are now approved, but a // diagnosis is required, so not reported correctly for(i = 0; i < Signals.Length; i++) { Signals[i].bApproved = true; Signals[i].bReported = false; log("bApproved set to true, bReported set to false for Signal["$i$"]"); Signals[i].SignalReports[Signals[i].SignalReports.Length - 1].bApproved = true; Signals[i].SignalReports[Signals[i].SignalReports.Length - 1].bReported = false; } } log("=== end of storeSignalInformation ==="); log(""); GeoPC.NearByMarker.Signals = Signals; count = 0; for(i = 0; i < Signals.Length; i++) { count += Signals[i].SignalReports.Length; } if(GeoPC.NearByMarker != none) GeoPC.geoFb.logConversation(newState, GeoPC.NearByMarker.name, HSeriousStruct.states, ConvState[ConvState.Length-1].Assessment, count); } //============================================================================= // Date Id Modification // 2006-11-10 Bas Created this header and rewrote function // 2007-04-10 wsl moved from MenuActionCenter to here // // returns a summary of the damage (that's what the dutch means) //============================================================================= function String SamenvattingSchadebeeld() { local string returner; if(Signals.Length == 1) { returner = sigContainingString() $ CurrentLanguage.getValue("4.1-A7") $ getSignalSummary(Signals); } else { returner = sigContainingString() $ CurrentLanguage.getValue("4.1-A5") $ getSignalSummary(Signals); } return returner; } //============================================================================= // Date Id Modification // 2006-11-10 Bas Created this header and rewrote function // 2006-11-13 Bas Fixed small bug, added HowMichSignals functionality // 2007-04-10 wsl moved from MenuActionCenter to here // 2008-01-30 Zmr When con_correcting and one signal it is introduced // // Used by SamenvattingSchadebeeld() to assemble a summary for the damage // When a signal has no answered questions the summary for that signal won't be // printed. //============================================================================= function String getSignalSummary(array sigArray){ local string returner; local int i,reports; local array HowMuchFailure, HowMuchSignals; HowMuchFailure.Insert(0,12); HowMuchSignals.Insert(0,12); for(i = 0; i < HowMuchFailure.Length; i++) { HowMuchFailure[i] = -1; HowMuchSignals[i] = -1; } for(i = 0;i < sigArray.Length; i++) HowMuchSignals[Signals[i].SignalType]++; returner = ""; for(i = 0; i < sigArray.Length; i++){ //don't print summary when there are no answered questions HowMuchFailure[sigArray[i].SignalType]++; if(!nothingAnsweredSignal(i)){ if(HowMuchSignals[sigArray[i].SignalType] == 0){ reports = -1; }else{ reports = HowMuchFailure[sigArray[i].SignalType]; } if(ConvState[ConvState.Length-1].ConversationStates[ConvState[ConvState.Length-1].ConversationStates.length-1] != Con_Reporting && ChangedSignals.length == 1) { returner = returner $ "|"$DataObject.GetAllAnswersSentences(sigArray[i],sigArray[i].SignalReports.Length-1,GeoPC,reports,false); }else { returner = returner $ "|"$DataObject.GetAllAnswersSentences(sigArray[i],sigArray[i].SignalReports.Length-1,GeoPC,reports,(ChangedSignals.length == 1)); } } } return returner; } //============================================================================= // Date Id Modification // 2006-11-10 Bas Created this header/function // 2007-04-10 wsl moved from MenuActionCenter to here // // returns something like: // "Het schadebeeld bevat 1 signaal: grasbekleding" // "The damage consists of 1 signal: grass revetment" // // used by missingAnswers handling in State_Reporting and SamenvattingSchadebeeld() // NOTE: don't forget to add the '.' at the end of the string... //============================================================================= function string sigContainingString(){ local string returner; local int i; returner = CurrentLanguage.getValue("4.1-A1") @ Signals.Length; if(Signals.Length == 1){ returner = returner @ CurrentLanguage.getValue("4.1-A6"); }else{ returner = returner @ CurrentLanguage.getValue("4.1-A2"); } for(i=0;i HowMuchFailure,HowMuchSignals,aTemp; local bool bFirst; local int i,j,k; local array MissingStrings; bFirst = true; k = 0; HowMuchFailure.Insert(0,12); HowMuchSignals.Insert(0,12); for(i = 0; i < HowMuchFailure.Length; i++) { HowMuchFailure[i] = -1; HowMuchSignals[i] = -1; } for(i = 0;i < Signals.Length; i++) HowMuchSignals[Signals[i].SignalType]++; for(i = 0;i < Signals.Length; i++){ aTemp = DataObject.GetAllAnswers(Signals[i],Signals[i].SignalReports.Length-1); MissingStrings = DataObject.GetAllQuestionMissingStrings(Signals[i].SignalType, GeoPC.Dutch); HowMuchFailure[Signals[i].SignalType]++; for(j = 0; j < aTemp.Length; j++){ if(aTemp[j] == -1){ //question isn't answered! k++; if(bFirst){ //this is the first question that's not answered if(GeoPC.Dutch){ if(HowMuchSignals[Signals[i].SignalType] == 0) //there's only one signal of this type returner = returner$"||"$DataObject.NL_About@DataObject.NL_Het@DataObject.Lower(Signals[i].NL_DamageName)@DataObject.NL_Signal$":"; else //there are more than one signal of this type returner = returner$"||"$DataObject.NL_About@DataObject.NL_Het@DataObject.NL_TelWoorden[HowMuchFailure[Signals[i].SignalType]]@DataObject.Lower(Signals[i].NL_DamageName)@DataObject.NL_Signal$":"; }else{ if(HowMuchSignals[Signals[i].SignalType] == 0) returner = returner$"||"$DataObject.EN_About@DataObject.EN_Het@DataObject.Lower(Signals[i].EN_DamageName)@DataObject.EN_Signal$":"; else returner = returner$"||"$DataObject.EN_About@DataObject.EN_Het@DataObject.EN_TelWoorden[HowMuchFailure[Signals[i].SignalType]]@DataObject.Lower(Signals[i].EN_DamageName)@DataObject.EN_Signal$":"; } bFirst = false; } returner = returner$"| - "@MissingStrings[j]; } } bFirst = true; } if(k == 1){ //there's only one question not answered returner = CurrentLanguage.getValue("3.1-D1")$returner; }else if(k > 1){ //more than one questions answered returner = CurrentLanguage.getValue("3.1-D2")$returner; } return returner; } // the returned string contains a representation of the reasons why the failure is not expectedstate function String WhyFailureNotAsExpected(GeoEnums.GeoStates expectedstate ) { local int i,j; local array failureSignals,tempSignals; local signal failureSignal; local GeoEnums.GeoStates failureState; local SignalStringData.HowSeriousStruct HSeriousStruct; local string returner; returner = ""; if(GeoPC.NearByMarker.LTile !=none) { failureState = (GeoPC.NearByMarker.LTile).CurrentState; //log("failurestate: "$failureState); failureSignals = (GeoPC.NearByMarker.LTile).Signals; for(i = 0;i0) { tempSignals.Insert(0,1); tempSignals[0] = failureSignal; } } if(tempSignals.Length>0) { HSeriousStruct = DataObject.HowSerious(tempSignals, GeoPC); if(expectedstate == STA_Reportable) { HSeriousStruct.ReasonNot_VerySerious = HSeriousStruct.ReasonNot_NotSerious; //log("starep:"@HSeriousStruct.ReasonNot_VerySerious[0]); }else if(expectedstate == STA_Relevant) { HSeriousStruct.ReasonNot_VerySerious = HSeriousStruct.ReasonNot_Serious; //log("starel:"@HSeriousStruct.ReasonNot_VerySerious[0]); }else if(expectedstate == STA_Critical) { //log("stacrit:"@HSeriousStruct.ReasonNot_VerySerious[0]); }else if(expectedstate == STA_NONE) { HSeriousStruct.ReasonNot_VerySerious.Remove(1,HSeriousStruct.ReasonNot_VerySerious.Length-1); HSeriousStruct.ReasonNot_VerySerious[0]=""; //log("stanone:"@HSeriousStruct.ReasonNot_VerySerious[0]); } for(i=0;i MeasuresPossible; local Measure MeasureToTake; local int i; if(RMarker.LTile != none) { if(RMarker.LTile.CurrentState == STA_Critical) { MeasuresPossible = (RMarker.LTile).Measures; for(i=0;i