Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 11.80 KB | None | 0 0
  1. unit Run;
  2.  
  3. interface
  4.  
  5. implementation
  6. var Decl: byte;
  7.  
  8. const
  9.     DeffaultMoveSpeed = 0.30;   //> is faster < is slow
  10.     MouseMovementAccuracy = 0.001;  // def 0.001
  11.     MovementOffsetSpeedAdd = 0.0048; //0.0004 deffault
  12.     CursorMaxSearch     = 125;
  13.  
  14. type
  15.     TCheckPoints = record
  16.             Check: boolean;
  17.             CheckPointsId:integer;
  18.             Pos: array[1..2] of single;
  19.             LastPoss: single;
  20.             TimeToActive: array[1..5] of integer;
  21.             PlayerPos: array[1..2] of single;
  22.             EditMode: array[1..32] of boolean;
  23. end;
  24.  
  25. var
  26.     MapCheckPoints: TStringList;
  27.     CheckPoint: TCheckPoints;
  28.     SpeedMovementText: single;
  29.  
  30. function GetPiece2(text,pos:string;num:integer):string;
  31. var i,findpos,pos1:integer;
  32. begin
  33.     findpos:=0;
  34.     Result:='';
  35.     for i := 1 to length(text) do begin
  36.         if text[i]=pos then begin
  37.             if num=0 then begin
  38.                 Result:=Copy(text,1,i-1);
  39.                 exit;
  40.             end else
  41.             begin
  42.                 findpos:=findpos+1;
  43.                 if findpos=num then pos1:=i+1;
  44.                 if findpos=num+1 then begin
  45.                     Result:=Copy(text,pos1,i-pos1);
  46.                     exit;
  47.                 end;
  48.             end;
  49.         end else
  50.         begin
  51.             if i=length(text) then begin
  52.                 Result:=Copy(text,pos1,length(text));
  53.                 exit;
  54.             end;
  55.         end;
  56.     end;
  57. end;
  58.  
  59. procedure SaveCheckPoint();
  60. begin
  61.     if (CheckPoint.Check) then begin
  62.         if (CheckPoint.CheckPointsID>MapCheckPoints.Count) then begin
  63.             MapCheckPoints.Append('X'+floattostr(CheckPoint.Pos[1])+'Y'+floattostr(CheckPoint.Pos[2]));
  64.             MapCheckPoints.SaveToFile(Script.Dir+'data/mapsdata/'+Game.CurrentMap);
  65.             CheckPoint.Check:=false;
  66.         end else
  67.         begin
  68.             MapCheckPoints.Insert(CheckPoint.CheckPointsID,'X'+floattostr(CheckPoint.Pos[1])+'Y'+floattostr(CheckPoint.Pos[2]));
  69.             MapCheckPoints.Delete(CheckPoint.CheckPointsID+1);
  70.             MapCheckPoints.SaveToFile(Script.Dir+'data/mapsdata/'+Game.CurrentMap);
  71.             CheckPoint.Check:=false;
  72.         end;
  73.     end;
  74. end;
  75.  
  76. function FindCheckPoint(ID: byte; MaxDistance: integer; UsingRaycast: boolean): integer;
  77. var i: byte; TempX, TempY, X, Y, X2, Y2, CursorMaxDist, NearestDistCursor, MaxDist, Dist: single;
  78. begin
  79.     X:=Players[ID].X;   Y:=Players[ID].Y;
  80.     MaxDist:=MaxDistance*MaxDistance;   CursorMaxDist:=CursorMaxSearch*CursorMaxSearch;
  81.     Result:=-1;
  82.     for i := 0 to MapCheckPoints.Count-1 do begin
  83.         TempX:=strtofloat(GetPiece2(GetPiece2(MapCheckPoints[i],'X',1),'Y',0));
  84.         TempY:=strtofloat(GetPiece2(MapCheckPoints[i],'Y',1));
  85.         X2:=TempX;  Y2:=TempY;
  86.         if (UsingRayCast) then if Map.RayCast(X,Y-7,X2,Y2-7,false, false, true, true, 2) then continue;
  87.  
  88.         X2:=X2-Players[ID].MouseAimX;   Y2:=Y2-Players[ID].MouseAimY;   NearestDistCursor:=X2*X2+Y2*Y2;
  89.         X2:=TempX;  Y2:=TempY;
  90.         X2:=X2-X;   Y2:=Y2-Y;   Dist:=X2*X2+Y2*Y2;
  91.  
  92.         if (NearestDistCursor<CursorMaxDist) and (Dist<MaxDist) then begin
  93.             Result:=i;
  94.             CursorMaxDist:=NearestDistCursor;
  95.         end;
  96.     end;
  97. end;
  98.  
  99. function Commands(Player: TActivePlayer; Text: string): Boolean;
  100. var selectid:integer; TempX,TempY:single;
  101. begin
  102.     if (Player.IsAdmin) then begin
  103.         if (Text='/createcheckpoint') then begin
  104.             if (CheckPoint.Check=false) then begin
  105.                 CheckPoint.Check:=true;
  106.                 CheckPoint.CheckPointsID:=MapCheckPoints.Count+1;
  107.                 CheckPoint.Pos[1]:=Player.X; CheckPoint.PlayerPos[1]:=Player.X;
  108.                 CheckPoint.Pos[2]:=Player.Y; CheckPoint.PlayerPos[2]:=Player.Y;
  109.             end else CheckPoint.Check:=false;
  110.         end;       
  111.         if (Text='/editmode') then begin
  112.             if (CheckPoint.EditMode[Player.ID]=false) then begin
  113.                 CheckPoint.EditMode[Player.ID]:=true;
  114.             end else CheckPoint.EditMode[Player.ID]:=false;
  115.         end;
  116.         if (Text='/savecheckpoint') then SaveCheckPoint();
  117.         if (Copy(Text,1,17)='/selectcheckpoint') then begin
  118.             selectid:=-1;
  119.             try
  120.                 delete(Text,1,17);
  121.                 selectid:=strtoint(text)-1;
  122.             except
  123.             end;
  124.             if (selectid>-1) and (selectid<MapCheckPoints.Count) then begin
  125.                 CheckPoint.Check:=true;
  126.                 CheckPoint.CheckPointsID:=selectid;
  127.                 TempX:=strtofloat(GetPiece2(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'X',1),'Y',0));
  128.                 TempY:=strtofloat(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'Y',1));
  129.                 CheckPoint.Pos[1]:=TempX; CheckPoint.PlayerPos[1]:=TempX;
  130.                 CheckPoint.Pos[2]:=TempY; CheckPoint.PlayerPos[2]:=TempY;
  131.             end;
  132.         end;
  133.         if (Copy(Text,1,17)='/deletecheckpoint') then begin
  134.             selectid:=-1;
  135.             try
  136.                 delete(Text,1,17);
  137.                 selectid:=strtoint(text)-1;
  138.             except
  139.             end;
  140.             if (selectid>-1) and (selectid<MapCheckPoints.Count) then begin
  141.                 MapCheckPoints.Delete(selectid);
  142.                 MapCheckPoints.SaveToFile(Script.Dir+'data/mapsdata/'+Game.CurrentMap);
  143.             end;
  144.         end;
  145.     end;
  146.     Result:=False;
  147. end;
  148.  
  149. procedure ChangeAfter(Next: string);
  150. begin
  151.     if (File.Exists(Script.Dir+'data/mapsdata/'+next)) then MapCheckPoints := File.CreateStringListFromFile(Script.Dir+'data/mapsdata/'+next) else MapCheckPoints := File.CreateStringList();
  152. end;
  153.  
  154. procedure AppOnIdleSC3(Ticks: integer);
  155. var i:integer; TempX,TempY,TempAcc:single; kd:double;
  156. begin
  157.     for i := 1 to 32 do begin
  158.         if (Players[i].Active) and (Players[i].IsAdmin) and (CheckPoint.Check) then begin
  159.             //--- Move Text ---\\
  160.             if (Players[i].KeyUp) then CheckPoint.Pos[2]:=CheckPoint.Pos[2]-SpeedMovementText;
  161.             if (Players[i].KeyCrouch) then CheckPoint.Pos[2]:=CheckPoint.Pos[2]+SpeedMovementText;
  162.             if (Players[i].KeyLeft) then CheckPoint.Pos[1]:=CheckPoint.Pos[1]-SpeedMovementText;
  163.             if (Players[i].KeyRight) then CheckPoint.Pos[1]:=CheckPoint.Pos[1]+SpeedMovementText;
  164.             //--- Off Move Player ---\\
  165.             Players[i].Move(CheckPoint.PlayerPos[1],CheckPoint.PlayerPos[2]);
  166.             Players[i].SetVelocity(0,0);
  167.             //--- Display Text ---\\
  168.             Players.WorldText(MapCheckPoints.Count+2,'Pos X: '+FormatFloat('0.0000',CheckPoint.Pos[1])+', Pos Y: '+FormatFloat('0.0000',CheckPoint.Pos[2]),55,$FF9999,0.025,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-3.3);
  169.             if (CheckPoint.CheckPointsID>MapCheckPoints.Count) then Players.WorldText(MapCheckPoints.Count+3,'Checkpoint '+inttostr(CheckPoint.CheckPointsID)+'!',70,$33CC00,0.055,CheckPoint.Pos[1],CheckPoint.Pos[2]) else Players.WorldText(MapCheckPoints.Count+3,'Checkpoint '+inttostr(CheckPoint.CheckPointsID+1)+'!',70,$33CC00,0.055,CheckPoint.Pos[1],CheckPoint.Pos[2])
  170.         end;
  171.         //--- Edit Mode ---\\
  172.         if (Players[i].Active) and (Players[i].IsAdmin) then begin
  173.             if (CheckPoint.EditMode[i]) then begin
  174.                 //--- Mouse Move Speed Add ---\\
  175.                 if (Players[i].KeyJetpack) then begin
  176.                     if (CheckPoint.TimeToActive[1]>=10) then begin
  177.                         if CheckPoint.TimeToActive[1]=10 then begin
  178.                             CheckPoint.LastPoss:=single(Players[i].MouseAimX);
  179.                             CheckPoint.TimeToActive[1]:=CheckPoint.TimeToActive[1]+1;
  180.                         end;
  181.                         TempAcc:=CheckPoint.LastPoss-single(Players[i].MouseAimX);
  182.                         if TempAcc>MouseMovementAccuracy then SpeedMovementText:=SpeedMovementText-MovementOffsetSpeedAdd else if TempAcc<-MouseMovementAccuracy then SpeedMovementText:=SpeedMovementText+MovementOffsetSpeedAdd;
  183.                         if (SpeedMovementText<0.01) then SpeedMovementText:=0.01;
  184.                         CheckPoint.LastPoss:=single(Players[i].MouseAimX);
  185.                         Players.WorldText(MapCheckPoints.Count+4,'SpeedMove: '+FormatFloat('0.0000',SpeedMovementText),70,$33CC00,0.055,Players[i].MouseAimX-15,Players[i].MouseAimY);
  186.                     end else CheckPoint.TimeToActive[1]:=CheckPoint.TimeToActive[1]+1;
  187.                 end else CheckPoint.TimeToActive[1]:=0;
  188.                 //--- Key Save Check Point ---\\
  189.                 if (Players[i].KeyReload) and (CheckPoint.Check) then begin
  190.                     if (CheckPoint.TimeToActive[2]>=18) then begin
  191.                         SaveCheckPoint();
  192.                         Players.WorldText(MapCheckPoints.Count+5,'Save Complete :)',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
  193.                     end else
  194.                     begin
  195.                         //-- Display Save Info --\\
  196.                         kd := (CheckPoint.TimeToActive[2]/18.0)*100;
  197.                         Players.WorldText(MapCheckPoints.Count+5,'Save '+formatfloat('0.00',kd)+'% :)',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
  198.                         CheckPoint.TimeToActive[2]:=CheckPoint.TimeToActive[2]+1;
  199.                     end;
  200.                 end else CheckPoint.TimeToActive[2]:=0;
  201.                 //--- Key Get Edit ---\\
  202.                 if (Players[i].KeyShoot) and (CheckPoint.Check=false) then begin
  203.                     if (CheckPoint.TimeToActive[3]>=45) then begin
  204.                         //-- Start Edit --\\
  205.                         CheckPoint.Check:=true;
  206.                         TempX:=strtofloat(GetPiece2(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'X',1),'Y',0));
  207.                         TempY:=strtofloat(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'Y',1));
  208.                         CheckPoint.Pos[1]:=TempX; CheckPoint.PlayerPos[1]:=TempX;
  209.                         CheckPoint.Pos[2]:=TempY; CheckPoint.PlayerPos[2]:=TempY;
  210.                         Players.WorldText(MapCheckPoints.Count+6,'Start Editing :)',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
  211.                     end else
  212.                     begin
  213.                         //-- Search Check Point --\\
  214.                         CheckPoint.CheckPointsID:=FindCheckPoint(i,700,false);
  215.                         if (CheckPoint.CheckPointsID>-1) then begin
  216.                             TempX:=strtofloat(GetPiece2(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'X',1),'Y',0));
  217.                             TempY:=strtofloat(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'Y',1));
  218.                             //-- Display Start Edit Info --\\
  219.                             kd := (CheckPoint.TimeToActive[3]/45.0)*100;
  220.                             Players.WorldText(MapCheckPoints.Count+6,'Begin Edit '+formatfloat('0.00',kd)+'% :)',70,$CC3300,0.055,TempX-8.8,TempY-12);
  221.                             CheckPoint.TimeToActive[3]:=CheckPoint.TimeToActive[3]+1;
  222.                         end else if (CheckPoint.CheckPointsID=-1) then CheckPoint.TimeToActive[3]:=0;
  223.                     end;
  224.                 end else CheckPoint.TimeToActive[3]:=0;
  225.                 //--- Key Get Edit ---\\
  226.                 if (Players[i].KeyThrow) and (CheckPoint.Check) then begin
  227.                     if (CheckPoint.TimeToActive[4]>=18) then begin
  228.                         //-- Canceled Edit --\\
  229.                         CheckPoint.Check:=false;
  230.                         Players.WorldText(MapCheckPoints.Count+7,'Canceled Editing!',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
  231.                     end else
  232.                     begin
  233.                         //-- Display Canceled Edit Info --\\
  234.                         kd := (CheckPoint.TimeToActive[4]/18.0)*100;
  235.                         Players.WorldText(MapCheckPoints.Count+7,'Canceled Editing '+formatfloat('0.00',kd)+'%',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
  236.                         CheckPoint.TimeToActive[4]:=CheckPoint.TimeToActive[4]+1;
  237.                     end;
  238.                 end else CheckPoint.TimeToActive[4]:=0;
  239.                 if (Players[i].KeyChangeWeap) and (CheckPoint.Check=false) then begin
  240.                     if (CheckPoint.TimeToActive[5]>=25) then begin
  241.                         //-- Ket Create Checkpoint --\\
  242.                         CheckPoint.Check:=true;
  243.                         CheckPoint.CheckPointsID:=MapCheckPoints.Count+1;
  244.                         CheckPoint.Pos[1]:=Players[i].X; CheckPoint.PlayerPos[1]:=Players[i].X;
  245.                         CheckPoint.Pos[2]:=Players[i].Y; CheckPoint.PlayerPos[2]:=Players[i].Y;
  246.                         Players.WorldText(MapCheckPoints.Count+8,'Create Create Checkpoint!',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
  247.                     end else
  248.                     begin
  249.                         //-- Display Create Checkpoint Info --\\
  250.                         kd := (CheckPoint.TimeToActive[5]/25.0)*100;
  251.                         Players.WorldText(MapCheckPoints.Count+8,'Create Checkpoint '+formatfloat('0.00',kd)+'%',70,$CC3300,0.055,Players[i].X-8.8,Players[i].Y-12);
  252.                         CheckPoint.TimeToActive[5]:=CheckPoint.TimeToActive[5]+1;
  253.                     end;
  254.                 end else CheckPoint.TimeToActive[5]:=0;
  255.             end;
  256.         end;
  257.     end;
  258.     //--- Display All Checkpoints ---\\
  259.     for i := 0 to MapCheckPoints.Count-1 do begin
  260.         if (CheckPoint.CheckPointsID=i) and (CheckPoint.Check) then continue;
  261.         TempX:=strtofloat(GetPiece2(GetPiece2(MapCheckPoints[i],'X',1),'Y',0));
  262.         TempY:=strtofloat(GetPiece2(MapCheckPoints[i],'Y',1));
  263.         Players.WorldText(i+1,'Checkpoint '+inttostr(i+1)+'!',70,$33CC00,0.055,TempX,TempY);
  264.     end;
  265. end;
  266.  
  267. initialization
  268. begin
  269.     //---Instal Script ---\\
  270.     for Decl := 1 to 32 do Players[Decl].OnCommand := @Commands;
  271.     Game.TickThreshold := 1;
  272.     Map.OnAfterMapChange := @ChangeAfter;
  273.     Game.OnClockTick := @AppOnIdleSC3;
  274.     //-- Vars --\\
  275.     SpeedMovementText:=DeffaultMoveSpeed;
  276.     //--- Load Map Checkpoints ---\\
  277.     if (File.Exists(Script.Dir+'data/mapsdata/'+Game.CurrentMap)) then MapCheckPoints := File.CreateStringListFromFile(Script.Dir+'data/mapsdata/'+Game.CurrentMap) else MapCheckPoints := File.CreateStringList();
  278. end;
  279.  
  280. finalization;
  281. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement