Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Run;
- interface
- implementation
- var Decl: byte;
- const
- DeffaultMoveSpeed = 0.30; //> is faster < is slow
- MouseMovementAccuracy = 0.001; // def 0.001
- MovementOffsetSpeedAdd = 0.0048; //0.0004 deffault
- CursorMaxSearch = 125;
- type
- TCheckPoints = record
- Check: boolean;
- CheckPointsId:integer;
- Pos: array[1..2] of single;
- LastPoss: single;
- TimeToActive: array[1..5] of integer;
- PlayerPos: array[1..2] of single;
- EditMode: array[1..32] of boolean;
- end;
- var
- MapCheckPoints: TStringList;
- CheckPoint: TCheckPoints;
- SpeedMovementText: single;
- function GetPiece2(text,pos:string;num:integer):string;
- var i,findpos,pos1:integer;
- begin
- findpos:=0;
- Result:='';
- for i := 1 to length(text) do begin
- if text[i]=pos then begin
- if num=0 then begin
- Result:=Copy(text,1,i-1);
- exit;
- end else
- begin
- findpos:=findpos+1;
- if findpos=num then pos1:=i+1;
- if findpos=num+1 then begin
- Result:=Copy(text,pos1,i-pos1);
- exit;
- end;
- end;
- end else
- begin
- if i=length(text) then begin
- Result:=Copy(text,pos1,length(text));
- exit;
- end;
- end;
- end;
- end;
- procedure SaveCheckPoint();
- begin
- if (CheckPoint.Check) then begin
- if (CheckPoint.CheckPointsID>MapCheckPoints.Count) then begin
- MapCheckPoints.Append('X'+floattostr(CheckPoint.Pos[1])+'Y'+floattostr(CheckPoint.Pos[2]));
- MapCheckPoints.SaveToFile(Script.Dir+'data/mapsdata/'+Game.CurrentMap);
- CheckPoint.Check:=false;
- end else
- begin
- MapCheckPoints.Insert(CheckPoint.CheckPointsID,'X'+floattostr(CheckPoint.Pos[1])+'Y'+floattostr(CheckPoint.Pos[2]));
- MapCheckPoints.Delete(CheckPoint.CheckPointsID+1);
- MapCheckPoints.SaveToFile(Script.Dir+'data/mapsdata/'+Game.CurrentMap);
- CheckPoint.Check:=false;
- end;
- end;
- end;
- function FindCheckPoint(ID: byte; MaxDistance: integer; UsingRaycast: boolean): integer;
- var i: byte; TempX, TempY, X, Y, X2, Y2, CursorMaxDist, NearestDistCursor, MaxDist, Dist: single;
- begin
- X:=Players[ID].X; Y:=Players[ID].Y;
- MaxDist:=MaxDistance*MaxDistance; CursorMaxDist:=CursorMaxSearch*CursorMaxSearch;
- Result:=-1;
- for i := 0 to MapCheckPoints.Count-1 do begin
- TempX:=strtofloat(GetPiece2(GetPiece2(MapCheckPoints[i],'X',1),'Y',0));
- TempY:=strtofloat(GetPiece2(MapCheckPoints[i],'Y',1));
- X2:=TempX; Y2:=TempY;
- if (UsingRayCast) then if Map.RayCast(X,Y-7,X2,Y2-7,false, false, true, true, 2) then continue;
- X2:=X2-Players[ID].MouseAimX; Y2:=Y2-Players[ID].MouseAimY; NearestDistCursor:=X2*X2+Y2*Y2;
- X2:=TempX; Y2:=TempY;
- X2:=X2-X; Y2:=Y2-Y; Dist:=X2*X2+Y2*Y2;
- if (NearestDistCursor<CursorMaxDist) and (Dist<MaxDist) then begin
- Result:=i;
- CursorMaxDist:=NearestDistCursor;
- end;
- end;
- end;
- function Commands(Player: TActivePlayer; Text: string): Boolean;
- var selectid:integer; TempX,TempY:single;
- begin
- if (Player.IsAdmin) then begin
- if (Text='/createcheckpoint') then begin
- if (CheckPoint.Check=false) then begin
- CheckPoint.Check:=true;
- CheckPoint.CheckPointsID:=MapCheckPoints.Count+1;
- CheckPoint.Pos[1]:=Player.X; CheckPoint.PlayerPos[1]:=Player.X;
- CheckPoint.Pos[2]:=Player.Y; CheckPoint.PlayerPos[2]:=Player.Y;
- end else CheckPoint.Check:=false;
- end;
- if (Text='/editmode') then begin
- if (CheckPoint.EditMode[Player.ID]=false) then begin
- CheckPoint.EditMode[Player.ID]:=true;
- end else CheckPoint.EditMode[Player.ID]:=false;
- end;
- if (Text='/savecheckpoint') then SaveCheckPoint();
- if (Copy(Text,1,17)='/selectcheckpoint') then begin
- selectid:=-1;
- try
- delete(Text,1,17);
- selectid:=strtoint(text)-1;
- except
- end;
- if (selectid>-1) and (selectid<MapCheckPoints.Count) then begin
- CheckPoint.Check:=true;
- CheckPoint.CheckPointsID:=selectid;
- TempX:=strtofloat(GetPiece2(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'X',1),'Y',0));
- TempY:=strtofloat(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'Y',1));
- CheckPoint.Pos[1]:=TempX; CheckPoint.PlayerPos[1]:=TempX;
- CheckPoint.Pos[2]:=TempY; CheckPoint.PlayerPos[2]:=TempY;
- end;
- end;
- if (Copy(Text,1,17)='/deletecheckpoint') then begin
- selectid:=-1;
- try
- delete(Text,1,17);
- selectid:=strtoint(text)-1;
- except
- end;
- if (selectid>-1) and (selectid<MapCheckPoints.Count) then begin
- MapCheckPoints.Delete(selectid);
- MapCheckPoints.SaveToFile(Script.Dir+'data/mapsdata/'+Game.CurrentMap);
- end;
- end;
- end;
- Result:=False;
- end;
- procedure ChangeAfter(Next: string);
- begin
- if (File.Exists(Script.Dir+'data/mapsdata/'+next)) then MapCheckPoints := File.CreateStringListFromFile(Script.Dir+'data/mapsdata/'+next) else MapCheckPoints := File.CreateStringList();
- end;
- procedure AppOnIdleSC3(Ticks: integer);
- var i:integer; TempX,TempY,TempAcc:single; kd:double;
- begin
- for i := 1 to 32 do begin
- if (Players[i].Active) and (Players[i].IsAdmin) and (CheckPoint.Check) then begin
- //--- Move Text ---\\
- if (Players[i].KeyUp) then CheckPoint.Pos[2]:=CheckPoint.Pos[2]-SpeedMovementText;
- if (Players[i].KeyCrouch) then CheckPoint.Pos[2]:=CheckPoint.Pos[2]+SpeedMovementText;
- if (Players[i].KeyLeft) then CheckPoint.Pos[1]:=CheckPoint.Pos[1]-SpeedMovementText;
- if (Players[i].KeyRight) then CheckPoint.Pos[1]:=CheckPoint.Pos[1]+SpeedMovementText;
- //--- Off Move Player ---\\
- Players[i].Move(CheckPoint.PlayerPos[1],CheckPoint.PlayerPos[2]);
- Players[i].SetVelocity(0,0);
- //--- Display Text ---\\
- 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);
- 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])
- end;
- //--- Edit Mode ---\\
- if (Players[i].Active) and (Players[i].IsAdmin) then begin
- if (CheckPoint.EditMode[i]) then begin
- //--- Mouse Move Speed Add ---\\
- if (Players[i].KeyJetpack) then begin
- if (CheckPoint.TimeToActive[1]>=10) then begin
- if CheckPoint.TimeToActive[1]=10 then begin
- CheckPoint.LastPoss:=single(Players[i].MouseAimX);
- CheckPoint.TimeToActive[1]:=CheckPoint.TimeToActive[1]+1;
- end;
- TempAcc:=CheckPoint.LastPoss-single(Players[i].MouseAimX);
- if TempAcc>MouseMovementAccuracy then SpeedMovementText:=SpeedMovementText-MovementOffsetSpeedAdd else if TempAcc<-MouseMovementAccuracy then SpeedMovementText:=SpeedMovementText+MovementOffsetSpeedAdd;
- if (SpeedMovementText<0.01) then SpeedMovementText:=0.01;
- CheckPoint.LastPoss:=single(Players[i].MouseAimX);
- Players.WorldText(MapCheckPoints.Count+4,'SpeedMove: '+FormatFloat('0.0000',SpeedMovementText),70,$33CC00,0.055,Players[i].MouseAimX-15,Players[i].MouseAimY);
- end else CheckPoint.TimeToActive[1]:=CheckPoint.TimeToActive[1]+1;
- end else CheckPoint.TimeToActive[1]:=0;
- //--- Key Save Check Point ---\\
- if (Players[i].KeyReload) and (CheckPoint.Check) then begin
- if (CheckPoint.TimeToActive[2]>=18) then begin
- SaveCheckPoint();
- Players.WorldText(MapCheckPoints.Count+5,'Save Complete :)',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
- end else
- begin
- //-- Display Save Info --\\
- kd := (CheckPoint.TimeToActive[2]/18.0)*100;
- Players.WorldText(MapCheckPoints.Count+5,'Save '+formatfloat('0.00',kd)+'% :)',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
- CheckPoint.TimeToActive[2]:=CheckPoint.TimeToActive[2]+1;
- end;
- end else CheckPoint.TimeToActive[2]:=0;
- //--- Key Get Edit ---\\
- if (Players[i].KeyShoot) and (CheckPoint.Check=false) then begin
- if (CheckPoint.TimeToActive[3]>=45) then begin
- //-- Start Edit --\\
- CheckPoint.Check:=true;
- TempX:=strtofloat(GetPiece2(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'X',1),'Y',0));
- TempY:=strtofloat(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'Y',1));
- CheckPoint.Pos[1]:=TempX; CheckPoint.PlayerPos[1]:=TempX;
- CheckPoint.Pos[2]:=TempY; CheckPoint.PlayerPos[2]:=TempY;
- Players.WorldText(MapCheckPoints.Count+6,'Start Editing :)',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
- end else
- begin
- //-- Search Check Point --\\
- CheckPoint.CheckPointsID:=FindCheckPoint(i,700,false);
- if (CheckPoint.CheckPointsID>-1) then begin
- TempX:=strtofloat(GetPiece2(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'X',1),'Y',0));
- TempY:=strtofloat(GetPiece2(MapCheckPoints[CheckPoint.CheckPointsID],'Y',1));
- //-- Display Start Edit Info --\\
- kd := (CheckPoint.TimeToActive[3]/45.0)*100;
- Players.WorldText(MapCheckPoints.Count+6,'Begin Edit '+formatfloat('0.00',kd)+'% :)',70,$CC3300,0.055,TempX-8.8,TempY-12);
- CheckPoint.TimeToActive[3]:=CheckPoint.TimeToActive[3]+1;
- end else if (CheckPoint.CheckPointsID=-1) then CheckPoint.TimeToActive[3]:=0;
- end;
- end else CheckPoint.TimeToActive[3]:=0;
- //--- Key Get Edit ---\\
- if (Players[i].KeyThrow) and (CheckPoint.Check) then begin
- if (CheckPoint.TimeToActive[4]>=18) then begin
- //-- Canceled Edit --\\
- CheckPoint.Check:=false;
- Players.WorldText(MapCheckPoints.Count+7,'Canceled Editing!',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
- end else
- begin
- //-- Display Canceled Edit Info --\\
- kd := (CheckPoint.TimeToActive[4]/18.0)*100;
- Players.WorldText(MapCheckPoints.Count+7,'Canceled Editing '+formatfloat('0.00',kd)+'%',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
- CheckPoint.TimeToActive[4]:=CheckPoint.TimeToActive[4]+1;
- end;
- end else CheckPoint.TimeToActive[4]:=0;
- if (Players[i].KeyChangeWeap) and (CheckPoint.Check=false) then begin
- if (CheckPoint.TimeToActive[5]>=25) then begin
- //-- Ket Create Checkpoint --\\
- CheckPoint.Check:=true;
- CheckPoint.CheckPointsID:=MapCheckPoints.Count+1;
- CheckPoint.Pos[1]:=Players[i].X; CheckPoint.PlayerPos[1]:=Players[i].X;
- CheckPoint.Pos[2]:=Players[i].Y; CheckPoint.PlayerPos[2]:=Players[i].Y;
- Players.WorldText(MapCheckPoints.Count+8,'Create Create Checkpoint!',70,$CC3300,0.055,CheckPoint.Pos[1]-8.8,CheckPoint.Pos[2]-12);
- end else
- begin
- //-- Display Create Checkpoint Info --\\
- kd := (CheckPoint.TimeToActive[5]/25.0)*100;
- Players.WorldText(MapCheckPoints.Count+8,'Create Checkpoint '+formatfloat('0.00',kd)+'%',70,$CC3300,0.055,Players[i].X-8.8,Players[i].Y-12);
- CheckPoint.TimeToActive[5]:=CheckPoint.TimeToActive[5]+1;
- end;
- end else CheckPoint.TimeToActive[5]:=0;
- end;
- end;
- end;
- //--- Display All Checkpoints ---\\
- for i := 0 to MapCheckPoints.Count-1 do begin
- if (CheckPoint.CheckPointsID=i) and (CheckPoint.Check) then continue;
- TempX:=strtofloat(GetPiece2(GetPiece2(MapCheckPoints[i],'X',1),'Y',0));
- TempY:=strtofloat(GetPiece2(MapCheckPoints[i],'Y',1));
- Players.WorldText(i+1,'Checkpoint '+inttostr(i+1)+'!',70,$33CC00,0.055,TempX,TempY);
- end;
- end;
- initialization
- begin
- //---Instal Script ---\\
- for Decl := 1 to 32 do Players[Decl].OnCommand := @Commands;
- Game.TickThreshold := 1;
- Map.OnAfterMapChange := @ChangeAfter;
- Game.OnClockTick := @AppOnIdleSC3;
- //-- Vars --\\
- SpeedMovementText:=DeffaultMoveSpeed;
- //--- Load Map Checkpoints ---\\
- if (File.Exists(Script.Dir+'data/mapsdata/'+Game.CurrentMap)) then MapCheckPoints := File.CreateStringListFromFile(Script.Dir+'data/mapsdata/'+Game.CurrentMap) else MapCheckPoints := File.CreateStringList();
- end;
- finalization;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement