Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ***Metadata***
- ***
- Script.Name = "ThanosCP";
- Script.AuthorLogin = "bigbang1112";
- Script.Description = "{{{{ThanosCP_DESCRIPTION}}}}";
- Script.Compatibility.Collections = ["Canyon", "Stadium", "Valley", "Lagoon"];
- ***
- Void Problem_BlockMissing(Text _BlockName, Int3 _Coord) {
- declare SChProblem Problem_BlockMissing;
- Problem_BlockMissing.Name = "BLOCK_MISSING";
- declare SChApproxBlock Block;
- Block.Name = _BlockName;
- Block.Coord = _Coord;
- Problem_BlockMissing.ApproxBlocks.add(Block);
- Problem_BlockMissing.ShortDescription = "{{{{PROBLEM_BLOCK_MISSING}}}} - " ^ _BlockName;
- Problem_BlockMissing.LongDescription = "{{{{PROBLEM_BLOCK_MISSING_LONG}}}}";
- Problem_BlockMissing.Solutions.add(Solution("{{{{PROBLEM_BLOCK_MISSING_SOLUTION_1}}}}", "", True));
- Problem_BlockMissing.Solutions.add(Solution("{{{{PROBLEM_BLOCK_MISSING_SOLUTION_2}}}}", "", False));
- Problem_BlockMissing.Solutions.add(Solution("{{{{PROBLEM_BLOCK_MISSING_SOLUTION_3}}}}", "", True));
- Problem_BlockMissing.Solutions.add(Solution("{{{{PROBLEM_BLOCK_MISSING_SOLUTION_4}}}}", "", False));
- Problem(Problem_BlockMissing);
- }
- Void Problem_MultilapTrack(SChWaypoint _Multilap) {
- declare SChProblem Problem_MultilapTrack;
- Problem_MultilapTrack.Name = "MULTILAP_TRACK";
- Problem_MultilapTrack.Waypoints.add(_Multilap);
- Problem_MultilapTrack.ShortDescription = "{{{{PROBLEM_MULTILAP_TRACK}}}}";
- Problem_MultilapTrack.LongDescription = "{{{{PROBLEM_MULTILAP_TRACK_LONG_CHECKPOINTLESS}}}}";
- Problem(Problem_MultilapTrack);
- }
- Void Problem_ItemMultilap(SChItem _Item) {
- declare SChProblem Problem_ItemMultilap;
- Problem_ItemMultilap.Name = "ITEM_MULTILAP";
- Problem_ItemMultilap.Items.add(_Item);
- Problem_ItemMultilap.ShortDescription = "{{{{PROBLEM_CANNOT_ADJUST_ONELAP}}}}";
- Problem_ItemMultilap.LongDescription = "{{{{PROBLEM_CANNOT_ADJUST_ONELAP_LONG_CHECKPOINTLESS}}}}";
- Problem_ItemMultilap.Solutions.add(Solution("{{{{PROBLEM_BLOCK_MISSING_SOLUTION_1}}}}", "", True));
- Problem(Problem_ItemMultilap);
- }
- Void Problem_NoCheckpoint() {
- declare SChProblem Problem_NoCheckpoint;
- Problem_NoCheckpoint.Name = "NO_CHECKPOINT";
- Problem_NoCheckpoint.ShortDescription = "{{{{PROBLEM_NO_CHECKPOINT}}}}";
- Problem_NoCheckpoint.LongDescription = "{{{{PROBLEM_NO_CHECKPOINT_LONG}}}}";
- Problem(Problem_NoCheckpoint);
- }
- Void Problem_CannotRemoveCheckpoint(SChWaypoint _Checkpoint) {
- declare SChProblem Problem_CannotRemoveCheckpoint;
- Problem_CannotRemoveCheckpoint.Name = "CANNOT_REMOVE_CHECKPOINT";
- Problem_CannotRemoveCheckpoint.Waypoints.add(_Checkpoint);
- Problem_CannotRemoveCheckpoint.ShortDescription = "{{{{PROBLEM_CANNOT_REMOVE_CHECKPOINT}}}}";
- Problem_CannotRemoveCheckpoint.LongDescription = "{{{{PROBLEM_CANNOT_REMOVE_CHECKPOINT_LONG}}}}";
- Problem_CannotRemoveCheckpoint.Solutions.add(Solution("{{{{PROBLEM_CANNOT_REMOVE_CHECKPOINT_SOLUTION_1}}}}", "", True));
- Problem(Problem_CannotRemoveCheckpoint);
- }
- ***Main***
- ***
- SetStatusStage("{{{{ANALYZING}}}}...");
- SetStatusMessage("{{{{SEARCHING_ALL_MULTILAPS}}}}...");
- declare Multilaps = GetMultilaps();
- SetStatusMessage("{{{{SEARCHING_ALL_FINISHES}}}}...");
- declare FinishLines = GetFinishLines();
- SetStatusMessage("{{{{SEARCHING_MAP_INFO}}}}...");
- declare MapInfo = GetMapInfo();
- declare Environment = MapInfo.CollectionName;
- SetStatusMessage("{{{{CONSIDERING_MULTILAP_TRACK}}}}...");
- declare IsOneLapWithFinish = Multilaps.count == 1 && FinishLines.count > 0 && MapInfo.TMObjective_NbLaps == 1;
- declare IsMultilap = Multilaps.count == 1 && !IsOneLapWithFinish;
- if(IsMultilap) Problem_MultilapTrack(Multilaps[0]);
- SetStatusStage("{{{{MODIFYING}}}}...");
- if(IsOneLapWithFinish) {
- declare Multilap = Multilaps[0];
- if(Multilap.IsItem) Problem_ItemMultilap(Multilap.Item);
- else if(Multilap.IsBlock) {
- foreach(Relation, GetRelation_MultilapStartTwoway()[Environment]) {
- declare MultilapBlock = Relation[0];
- declare StartTwowayBlock = Relation[1];
- if(Multilap.Block.Name == MultilapBlock.Name) {
- declare Removed = RemoveSpecificBlock(Multilap.Block);
- if(Removed) {
- declare Block = PlaceBlock(StartTwowayBlock.Name, Multilap.Block.Coord, Multilap.Block.Direction);
- if(Block.Placed)
- SetStatusMessage(MultilapBlock.Name ^ " {{{{replaced_with}}}} " ^ StartTwowayBlock.Name ^ ".");
- else {
- Problem_BlockMissing(StartTwowayBlock.Name, Multilap.Block.Coord);
- }
- }
- }
- }
- }
- else {
- }
- }
- declare Checkpoints = GetCheckpoints();
- if(Checkpoints.count == 0) Problem_NoCheckpoint();
- SetStatusStage("{{{{MODIFYING}}}}...");
- SetStatusMessage("...");
- declare Removed = False;
- declare Counter = 0.;
- foreach(Checkpoint in Checkpoints) {
- if(Chance(.5)) {
- if(Checkpoint.IsBlock) {
- SetStatusMessage("{{{{CHECKPOINT_FOUND}}}} " ^ Checkpoint.Block.Name);
- Removed = RemoveSpecificBlock(Checkpoint.Block);
- }
- else if(Checkpoint.IsItem) {
- SetStatusMessage("{{{{CHECKPOINT_FOUND}}}} " ^ Checkpoint.Item.Position);
- Removed = RemoveItem(Checkpoint.Item);
- }
- SetStatusProgress(Counter/Checkpoints.count);
- }
- Counter += 1;
- if(!Removed) Problem_CannotRemoveCheckpoint(Checkpoint);
- yield;
- }
- ***
- ***Solver***
- ***
- switch(Solver_Problem.Name) {
- case "CANNOT_REMOVE_CHECKPOINT": {
- Editor.EnableEditorInputsCustomProcessing = False;
- Editor.EditMode = CMapEditorPlugin::EditMode::Erase;
- declare Removed = False;
- while(!Removed) {
- declare Checkpoints = GetCheckpoints();
- declare Boolean Exists;
- foreach(Checkpoint, Checkpoints) {
- if(Checkpoint.IsBlock && Solver_Problem.Waypoints[0].Block.Id == Checkpoint.Block.Id)
- Exists = True;
- if(Checkpoint.IsItem && Solver_Problem.Waypoints[0].Item.Position == Checkpoint.Item.Position)
- Exists = True;
- }
- if(Exists) {
- }
- else Removed = True;
- sleep(500);
- }
- Editor.HideEditorInterface = True;
- Editor.EnableEditorInputsCustomProcessing = True;
- Solver_Success = True;
- }
- }
- ***
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement