Advertisement
Guest User

ThanosCP

a guest
Jan 23rd, 2020
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.90 KB | None | 0 0
  1. ***Metadata***
  2. ***
  3. Script.Name = "ThanosCP";
  4. Script.AuthorLogin = "bigbang1112";
  5. Script.Description = "{{{{ThanosCP_DESCRIPTION}}}}";
  6. Script.Compatibility.Collections = ["Canyon", "Stadium", "Valley", "Lagoon"];
  7. ***
  8.  
  9. Void Problem_BlockMissing(Text _BlockName, Int3 _Coord) {
  10. declare SChProblem Problem_BlockMissing;
  11. Problem_BlockMissing.Name = "BLOCK_MISSING";
  12.  
  13. declare SChApproxBlock Block;
  14. Block.Name = _BlockName;
  15. Block.Coord = _Coord;
  16. Problem_BlockMissing.ApproxBlocks.add(Block);
  17.  
  18. Problem_BlockMissing.ShortDescription = "{{{{PROBLEM_BLOCK_MISSING}}}} - " ^ _BlockName;
  19. Problem_BlockMissing.LongDescription = "{{{{PROBLEM_BLOCK_MISSING_LONG}}}}";
  20. Problem_BlockMissing.Solutions.add(Solution("{{{{PROBLEM_BLOCK_MISSING_SOLUTION_1}}}}", "", True));
  21. Problem_BlockMissing.Solutions.add(Solution("{{{{PROBLEM_BLOCK_MISSING_SOLUTION_2}}}}", "", False));
  22. Problem_BlockMissing.Solutions.add(Solution("{{{{PROBLEM_BLOCK_MISSING_SOLUTION_3}}}}", "", True));
  23. Problem_BlockMissing.Solutions.add(Solution("{{{{PROBLEM_BLOCK_MISSING_SOLUTION_4}}}}", "", False));
  24. Problem(Problem_BlockMissing);
  25. }
  26.  
  27. Void Problem_MultilapTrack(SChWaypoint _Multilap) {
  28. declare SChProblem Problem_MultilapTrack;
  29. Problem_MultilapTrack.Name = "MULTILAP_TRACK";
  30. Problem_MultilapTrack.Waypoints.add(_Multilap);
  31. Problem_MultilapTrack.ShortDescription = "{{{{PROBLEM_MULTILAP_TRACK}}}}";
  32. Problem_MultilapTrack.LongDescription = "{{{{PROBLEM_MULTILAP_TRACK_LONG_CHECKPOINTLESS}}}}";
  33. Problem(Problem_MultilapTrack);
  34. }
  35.  
  36. Void Problem_ItemMultilap(SChItem _Item) {
  37. declare SChProblem Problem_ItemMultilap;
  38. Problem_ItemMultilap.Name = "ITEM_MULTILAP";
  39. Problem_ItemMultilap.Items.add(_Item);
  40. Problem_ItemMultilap.ShortDescription = "{{{{PROBLEM_CANNOT_ADJUST_ONELAP}}}}";
  41. Problem_ItemMultilap.LongDescription = "{{{{PROBLEM_CANNOT_ADJUST_ONELAP_LONG_CHECKPOINTLESS}}}}";
  42. Problem_ItemMultilap.Solutions.add(Solution("{{{{PROBLEM_BLOCK_MISSING_SOLUTION_1}}}}", "", True));
  43. Problem(Problem_ItemMultilap);
  44. }
  45.  
  46. Void Problem_NoCheckpoint() {
  47. declare SChProblem Problem_NoCheckpoint;
  48. Problem_NoCheckpoint.Name = "NO_CHECKPOINT";
  49. Problem_NoCheckpoint.ShortDescription = "{{{{PROBLEM_NO_CHECKPOINT}}}}";
  50. Problem_NoCheckpoint.LongDescription = "{{{{PROBLEM_NO_CHECKPOINT_LONG}}}}";
  51. Problem(Problem_NoCheckpoint);
  52. }
  53.  
  54. Void Problem_CannotRemoveCheckpoint(SChWaypoint _Checkpoint) {
  55. declare SChProblem Problem_CannotRemoveCheckpoint;
  56. Problem_CannotRemoveCheckpoint.Name = "CANNOT_REMOVE_CHECKPOINT";
  57. Problem_CannotRemoveCheckpoint.Waypoints.add(_Checkpoint);
  58. Problem_CannotRemoveCheckpoint.ShortDescription = "{{{{PROBLEM_CANNOT_REMOVE_CHECKPOINT}}}}";
  59. Problem_CannotRemoveCheckpoint.LongDescription = "{{{{PROBLEM_CANNOT_REMOVE_CHECKPOINT_LONG}}}}";
  60. Problem_CannotRemoveCheckpoint.Solutions.add(Solution("{{{{PROBLEM_CANNOT_REMOVE_CHECKPOINT_SOLUTION_1}}}}", "", True));
  61. Problem(Problem_CannotRemoveCheckpoint);
  62. }
  63.  
  64. ***Main***
  65. ***
  66. SetStatusStage("{{{{ANALYZING}}}}...");
  67. SetStatusMessage("{{{{SEARCHING_ALL_MULTILAPS}}}}...");
  68. declare Multilaps = GetMultilaps();
  69. SetStatusMessage("{{{{SEARCHING_ALL_FINISHES}}}}...");
  70. declare FinishLines = GetFinishLines();
  71. SetStatusMessage("{{{{SEARCHING_MAP_INFO}}}}...");
  72. declare MapInfo = GetMapInfo();
  73. declare Environment = MapInfo.CollectionName;
  74.  
  75. SetStatusMessage("{{{{CONSIDERING_MULTILAP_TRACK}}}}...");
  76.  
  77. declare IsOneLapWithFinish = Multilaps.count == 1 && FinishLines.count > 0 && MapInfo.TMObjective_NbLaps == 1;
  78. declare IsMultilap = Multilaps.count == 1 && !IsOneLapWithFinish;
  79.  
  80. if(IsMultilap) Problem_MultilapTrack(Multilaps[0]);
  81.  
  82. SetStatusStage("{{{{MODIFYING}}}}...");
  83.  
  84. if(IsOneLapWithFinish) {
  85. declare Multilap = Multilaps[0];
  86. if(Multilap.IsItem) Problem_ItemMultilap(Multilap.Item);
  87. else if(Multilap.IsBlock) {
  88. foreach(Relation, GetRelation_MultilapStartTwoway()[Environment]) {
  89. declare MultilapBlock = Relation[0];
  90. declare StartTwowayBlock = Relation[1];
  91. if(Multilap.Block.Name == MultilapBlock.Name) {
  92. declare Removed = RemoveSpecificBlock(Multilap.Block);
  93. if(Removed) {
  94. declare Block = PlaceBlock(StartTwowayBlock.Name, Multilap.Block.Coord, Multilap.Block.Direction);
  95. if(Block.Placed)
  96. SetStatusMessage(MultilapBlock.Name ^ " {{{{replaced_with}}}} " ^ StartTwowayBlock.Name ^ ".");
  97. else {
  98. Problem_BlockMissing(StartTwowayBlock.Name, Multilap.Block.Coord);
  99. }
  100. }
  101. }
  102. }
  103. }
  104. else {
  105.  
  106. }
  107. }
  108.  
  109. declare Checkpoints = GetCheckpoints();
  110.  
  111. if(Checkpoints.count == 0) Problem_NoCheckpoint();
  112.  
  113. SetStatusStage("{{{{MODIFYING}}}}...");
  114. SetStatusMessage("...");
  115.  
  116. declare Removed = False;
  117.  
  118. declare Counter = 0.;
  119. foreach(Checkpoint in Checkpoints) {
  120. if(Chance(.5)) {
  121. if(Checkpoint.IsBlock) {
  122. SetStatusMessage("{{{{CHECKPOINT_FOUND}}}} " ^ Checkpoint.Block.Name);
  123. Removed = RemoveSpecificBlock(Checkpoint.Block);
  124. }
  125. else if(Checkpoint.IsItem) {
  126. SetStatusMessage("{{{{CHECKPOINT_FOUND}}}} " ^ Checkpoint.Item.Position);
  127. Removed = RemoveItem(Checkpoint.Item);
  128. }
  129. SetStatusProgress(Counter/Checkpoints.count);
  130. }
  131. Counter += 1;
  132.  
  133. if(!Removed) Problem_CannotRemoveCheckpoint(Checkpoint);
  134.  
  135. yield;
  136. }
  137. ***
  138.  
  139. ***Solver***
  140. ***
  141. switch(Solver_Problem.Name) {
  142. case "CANNOT_REMOVE_CHECKPOINT": {
  143. Editor.EnableEditorInputsCustomProcessing = False;
  144.  
  145. Editor.EditMode = CMapEditorPlugin::EditMode::Erase;
  146.  
  147. declare Removed = False;
  148. while(!Removed) {
  149. declare Checkpoints = GetCheckpoints();
  150. declare Boolean Exists;
  151. foreach(Checkpoint, Checkpoints) {
  152. if(Checkpoint.IsBlock && Solver_Problem.Waypoints[0].Block.Id == Checkpoint.Block.Id)
  153. Exists = True;
  154. if(Checkpoint.IsItem && Solver_Problem.Waypoints[0].Item.Position == Checkpoint.Item.Position)
  155. Exists = True;
  156. }
  157.  
  158. if(Exists) {
  159.  
  160. }
  161. else Removed = True;
  162.  
  163. sleep(500);
  164. }
  165.  
  166. Editor.HideEditorInterface = True;
  167. Editor.EnableEditorInputsCustomProcessing = True;
  168.  
  169. Solver_Success = True;
  170. }
  171. }
  172. ***
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement