06.10.2015, 13:59
(
Последний раз редактировалось AbyssMorgan; 06.09.2017 в 06:44.
)

Controllable FreeSka City by Abyss Morgan
Video: https://www.youtube.com/watch?v=eHaGqvR1uFE
Command:
Код:
/frhelp - help command /frcity - teleport to FreeSka /frtrack - get FreeSka location /frland - lands on the water /frstart - Start in the air /frreset - reset FreeSka /frmove - move X Y Z /frgoto - goto X Y Z /frgotop - goto player /frgotomap - goto map marker /frstop - stop FreeSka
Код:
//please find tag 'Admin control' and add checks for an admin
/*
#include <streamer>
#include <mapandreas> //MapAndreas 1.2.1
public OnFilterScriptInit(){
CreateFreeSka();
return 1;
}
public OnFilterScriptExit(){
DestroyFreeSka();
return 1;
}
public OnPlayerClickMap(playerid,Float:fX,Float:fY,Float:fZ){
ClickMap[playerid][X]=fX;
ClickMap[playerid][Y]=fY;
ClickMap[playerid][Z]=fZ;
return 1;
}
*/
/****************************************************************************************************
* FreeSka City 1.0 by Abyss Morgan *
****************************************************************************************************/
stock Float:GetDistanceBetweenPoints3D(Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2){
return VectorSize(x1-x2, y1-y2, z1-z2);
}
#define FREESKA_OFF (0)
#define FREESKA_STOP (1)
#define FREESKA_MOVE (2)
#define FREESKA_UPDZ (4.5)
enum e_fsfloat {
Float:X,
Float:Y,
Float:Z,
Float:rX,
Float:rY,
Float:rZ,
SPEED
}
new FreeSka[39], FreeSkaStatus, ClickMap[MAX_PLAYERS][e_fsfloat];
forward MoveFreeSka(Float:x,Float:y,Float:z,speed,Float:rz);
forward StopFreeSka(Float:x,Float:y,Float:z);
forward ResetFreeSka();
forward CreateFreeSka();
forward DestroyFreeSka();
public MoveFreeSka(Float:x,Float:y,Float:z,speed,Float:rz){
MoveObject(FreeSka[0],x,y,z,speed,0.0,0.0,rz);
FreeSkaStatus = (FREESKA_MOVE);
return 1;
}
public StopFreeSka(Float:x,Float:y,Float:z){
FreeSkaStatus = (FREESKA_STOP);
StopObject(FreeSka[0]);
SetObjectPos(FreeSka[0],x,y,z);
return 1;
}
public ResetFreeSka(){
FreeSkaStatus = (FREESKA_OFF);
new F4[e_fsfloat];
GetObjectPos(FreeSka[0],F4[X],F4[Y],F4[Z]);
StopFreeSka(F4[X],F4[Y],F4[Z]);
SetObjectPos(FreeSka[0],835.0000,-4000.0000,FREESKA_UPDZ);
SetObjectRot(FreeSka[0],0.0,0.0,0.0);
return 1;
}
public CreateFreeSka(){
FreeSkaStatus = (FREESKA_OFF);
FreeSka[0] = CreateObject(354,0.0000000,0.0000000,0.0000000+6000.0,0.0000000,0.0000000,0.0000000);
FreeSka[1] = CreateObject(10955,0.0000000,0.0000000,5.5000000+6000.0,180.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[1],FreeSka[0],0.0000000,0.0000000,5.5000000,180.0000000,0.0000000,0.0000000,1);
FreeSka[2] = CreateObject(10955,0.0000000,0.0000000,-1.8500000+6000.0,0.0000000,0.0000000,90.0000000);
AttachObjectToObject(FreeSka[2],FreeSka[0],0.0000000,0.0000000,-1.8500000,0.0000000,0.0000000,90.0000000,1);
FreeSka[3] = CreateObject(13607,0.0000000,0.0000000,0.0000000+6000.0,0.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[3],FreeSka[0],0.0000000,0.0000000,0.0000000,0.0000000,0.0000000,0.0000000,1);
FreeSka[4] = CreateObject(13623,0.0000000,0.0000000,10.0000000+6000.0,0.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[4],FreeSka[0],0.0000000,0.0000000,10.0000000,0.0000000,0.0000000,0.0000000,1);
FreeSka[5] = CreateObject(13607,0.0000000,0.0000000,10.0000000+6000.0,0.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[5],FreeSka[0],0.0000000,0.0000000,10.0000000,0.0000000,0.0000000,0.0000000,1);
FreeSka[6] = CreateObject(13607,0.0000000,0.0000000,0.0000000+6000.0,180.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[6],FreeSka[0],0.0000000,0.0000000,0.0000000,180.0000000,0.0000000,0.0000000,1);
FreeSka[7] = CreateObject(10955,0.0000000,0.0000000,5.5000000+6000.0,180.0000000,0.0000000,90.0000000);
AttachObjectToObject(FreeSka[7],FreeSka[0],0.0000000,0.0000000,5.5000000,180.0000000,0.0000000,90.0000000,1);
FreeSka[8] = CreateObject(10955,0.0000000,0.0000000,-1.8500000+6000.0,0.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[8],FreeSka[0],0.0000000,0.0000000,-1.8500000,0.0000000,0.0000000,0.0000000,1);
FreeSka[9] = CreateObject(7236,48.0000000,48.0000000,-26.0000000+6000.0,180.0000000,15.0000000,45.0000000);
AttachObjectToObject(FreeSka[9],FreeSka[0],48.0000000,48.0000000,-26.0000000,180.0000000,15.0000000,45.0000000,1);
FreeSka[10] = CreateObject(7236,-48.0000000,-48.0000000,-26.0000000+6000.0,180.0000000,345.0000000,45.0000000);
AttachObjectToObject(FreeSka[10],FreeSka[0],-48.0000000,-48.0000000,-26.0000000,180.0000000,345.0000000,45.0000000,1);
FreeSka[11] = CreateObject(7236,-48.0000000,48.0000000,-26.0000000+6000.0,180.0000000,345.0000000,315.0000000);
AttachObjectToObject(FreeSka[11],FreeSka[0],-48.0000000,48.0000000,-26.0000000,180.0000000,345.0000000,315.0000000,1);
FreeSka[12] = CreateObject(7236,48.0000000,-48.0000000,-26.0000000+6000.0,180.0000000,15.0000000,315.0000000);
AttachObjectToObject(FreeSka[12],FreeSka[0],48.0000000,-48.0000000,-26.0000000,180.0000000,15.0000000,315.0000000,1);
FreeSka[13] = CreateObject(7236,0.0000000,0.0000000,-30.0000000+6000.0,180.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[13],FreeSka[0],0.0000000,0.0000000,-30.0000000,180.0000000,0.0000000,0.0000000,1);
FreeSka[14] = CreateObject(10755,120.0000000,120.0000000,10.0000000+6000.0,0.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[14],FreeSka[0],120.0000000,120.0000000,10.0000000,0.0000000,0.0000000,0.0000000,1);
FreeSka[15] = CreateObject(10755,120.0000000,120.0000000,-5.0000000+6000.0,180.0000000,0.0000000,90.0000000);
AttachObjectToObject(FreeSka[15],FreeSka[0],120.0000000,120.0000000,-5.0000000,180.0000000,0.0000000,90.0000000,1);
FreeSka[16] = CreateObject(10755,-120.0000000,120.0000000,10.0000000+6000.0,0.0000000,0.0000000,90.0000000);
AttachObjectToObject(FreeSka[16],FreeSka[0],-120.0000000,120.0000000,10.0000000,0.0000000,0.0000000,90.0000000,1);
FreeSka[17] = CreateObject(10755,-120.0000000,-120.0000000,10.0000000+6000.0,0.0000000,0.0000000,180.0000000);
AttachObjectToObject(FreeSka[17],FreeSka[0],-120.0000000,-120.0000000,10.0000000,0.0000000,0.0000000,180.0000000,1);
FreeSka[18] = CreateObject(10755,120.0000000,-120.0000000,10.0000000+6000.0,0.0000000,0.0000000,270.0000000);
AttachObjectToObject(FreeSka[18],FreeSka[0],120.0000000,-120.0000000,10.0000000,0.0000000,0.0000000,270.0000000,1);
FreeSka[19] = CreateObject(10755,-120.0000000,120.0000000,-5.0000000+6000.0,180.0000000,0.0000000,180.0000000);
AttachObjectToObject(FreeSka[19],FreeSka[0],-120.0000000,120.0000000,-5.0000000,180.0000000,0.0000000,180.0000000,1);
FreeSka[20] = CreateObject(10755,-120.0000000,-120.0000000,-5.0000000+6000.0,180.0000000,0.0000000,270.0000000);
AttachObjectToObject(FreeSka[20],FreeSka[0],-120.0000000,-120.0000000,-5.0000000,180.0000000,0.0000000,270.0000000,1);
FreeSka[21] = CreateObject(10755,120.0000000,-120.0000000,-5.0000000+6000.0,180.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[21],FreeSka[0],120.0000000,-120.0000000,-5.0000000,180.0000000,0.0000000,0.0000000,1);
FreeSka[22] = CreateObject(8171,60.0000000,58.0000000,13.9000000+6000.0,0.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[22],FreeSka[0],60.0000000,58.0000000,13.9000000,0.0000000,0.0000000,0.0000000,1);
FreeSka[23] = CreateObject(8171,60.0000000,-80.0000000,13.9000000+6000.0,0.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[23],FreeSka[0],60.0000000,-80.0000000,13.9000000,0.0000000,0.0000000,0.0000000,1);
FreeSka[24] = CreateObject(8171,60.0000000,58.0000000,13.9000000+6000.0,180.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[24],FreeSka[0],60.0000000,58.0000000,13.9000000,180.0000000,0.0000000,0.0000000,1);
FreeSka[25] = CreateObject(8171,60.0000000,-80.0000000,13.9000000+6000.0,180.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[25],FreeSka[0],60.0000000,-80.0000000,13.9000000,180.0000000,0.0000000,0.0000000,1);
FreeSka[26] = CreateObject(8171,-60.0000000,58.0000000,13.9000000+6000.0,0.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[26],FreeSka[0],-60.0000000,58.0000000,13.9000000,0.0000000,0.0000000,0.0000000,1);
FreeSka[27] = CreateObject(8171,-60.0000000,-80.0000000,13.9000000+6000.0,0.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[27],FreeSka[0],-60.0000000,-80.0000000,13.9000000,0.0000000,0.0000000,0.0000000,1);
FreeSka[28] = CreateObject(8171,-60.0000000,58.0000000,13.9000000+6000.0,180.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[28],FreeSka[0],-60.0000000,58.0000000,13.9000000,180.0000000,0.0000000,0.0000000,1);
FreeSka[29] = CreateObject(8171,-60.0000000,-80.0000000,13.9000000+6000.0,180.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[29],FreeSka[0],-60.0000000,-80.0000000,13.9000000,180.0000000,0.0000000,0.0000000,1);
FreeSka[30] = CreateObject(8171,0.0000000,-80.0000000,13.8000000+6000.0,0.0000000,0.0000000,90.0000000);
AttachObjectToObject(FreeSka[30],FreeSka[0],0.0000000,-80.0000000,13.8000000,0.0000000,0.0000000,90.0000000,1);
FreeSka[31] = CreateObject(8171,0.0000000,-80.0000000,13.8000000+6000.0,180.0000000,0.0000000,90.0000000);
AttachObjectToObject(FreeSka[31],FreeSka[0],0.0000000,-80.0000000,13.8000000,180.0000000,0.0000000,90.0000000,1);
FreeSka[32] = CreateObject(3816,0.0000000,-122.0000000,22.4000000+6000.0,0.0000000,0.0000000,180.0000000);
AttachObjectToObject(FreeSka[32],FreeSka[0],0.0000000,-122.0000000,22.4000000,0.0000000,0.0000000,180.0000000,1);
FreeSka[33] = CreateObject(8171,0.0000000,-50.0000000,13.7000000+6000.0,0.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[33],FreeSka[0],0.0000000,-50.0000000,13.7000000,0.0000000,0.0000000,0.0000000,1);
FreeSka[34] = CreateObject(8171,0.0000000,-120.0000000,13.8000000+6000.0,180.0000000,0.0000000,90.0000000);
AttachObjectToObject(FreeSka[34],FreeSka[0],0.0000000,-120.0000000,13.8000000,180.0000000,0.0000000,90.0000000,1);
FreeSka[35] = CreateObject(8171,0.0000000,-80.0000000,13.8000000+6000.0,180.0000000,0.0000000,90.0000000);
AttachObjectToObject(FreeSka[35],FreeSka[0],0.0000000,-80.0000000,13.8000000,180.0000000,0.0000000,90.0000000,1);
FreeSka[36] = CreateObject(8171,0.0000000,-50.0000000,13.7000000+6000.0,180.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[36],FreeSka[0],0.0000000,-50.0000000,13.7000000,180.0000000,0.0000000,0.0000000,1);
FreeSka[37] = CreateObject(13607,0.0000000,0.0000000,17.2000000+6000.0,0.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[37],FreeSka[0],0.0000000,0.0000000,17.2000000,0.0000000,0.0000000,0.0000000,1);
FreeSka[38] = CreateObject(13607,0.0000000,0.0000000,-17.0000000+6000.0,180.0000000,0.0000000,0.0000000);
AttachObjectToObject(FreeSka[38],FreeSka[0],0.0000000,0.0000000,-17.0000000,180.0000000,0.0000000,0.0000000,1);
SetObjectPos(FreeSka[0],835.0000,-4000.0000,FREESKA_UPDZ);
SetObjectRot(FreeSka[0],0.0,0.0,0.0);
return 1;
}
public DestroyFreeSka(){
StopObject(FreeSka[0]);
if(IsValidObject(FreeSka[1])) DestroyObject(FreeSka[1]);
if(IsValidObject(FreeSka[2])) DestroyObject(FreeSka[2]);
if(IsValidObject(FreeSka[3])) DestroyObject(FreeSka[3]);
if(IsValidObject(FreeSka[4])) DestroyObject(FreeSka[4]);
if(IsValidObject(FreeSka[5])) DestroyObject(FreeSka[5]);
if(IsValidObject(FreeSka[6])) DestroyObject(FreeSka[6]);
if(IsValidObject(FreeSka[7])) DestroyObject(FreeSka[7]);
if(IsValidObject(FreeSka[8])) DestroyObject(FreeSka[8]);
if(IsValidObject(FreeSka[9])) DestroyObject(FreeSka[9]);
if(IsValidObject(FreeSka[10])) DestroyObject(FreeSka[10]);
if(IsValidObject(FreeSka[11])) DestroyObject(FreeSka[11]);
if(IsValidObject(FreeSka[12])) DestroyObject(FreeSka[12]);
if(IsValidObject(FreeSka[13])) DestroyObject(FreeSka[13]);
if(IsValidObject(FreeSka[14])) DestroyObject(FreeSka[14]);
if(IsValidObject(FreeSka[15])) DestroyObject(FreeSka[15]);
if(IsValidObject(FreeSka[16])) DestroyObject(FreeSka[16]);
if(IsValidObject(FreeSka[17])) DestroyObject(FreeSka[17]);
if(IsValidObject(FreeSka[18])) DestroyObject(FreeSka[18]);
if(IsValidObject(FreeSka[19])) DestroyObject(FreeSka[19]);
if(IsValidObject(FreeSka[20])) DestroyObject(FreeSka[20]);
if(IsValidObject(FreeSka[21])) DestroyObject(FreeSka[21]);
if(IsValidObject(FreeSka[22])) DestroyObject(FreeSka[22]);
if(IsValidObject(FreeSka[23])) DestroyObject(FreeSka[23]);
if(IsValidObject(FreeSka[24])) DestroyObject(FreeSka[24]);
if(IsValidObject(FreeSka[25])) DestroyObject(FreeSka[25]);
if(IsValidObject(FreeSka[26])) DestroyObject(FreeSka[26]);
if(IsValidObject(FreeSka[27])) DestroyObject(FreeSka[27]);
if(IsValidObject(FreeSka[28])) DestroyObject(FreeSka[28]);
if(IsValidObject(FreeSka[29])) DestroyObject(FreeSka[29]);
if(IsValidObject(FreeSka[30])) DestroyObject(FreeSka[30]);
if(IsValidObject(FreeSka[31])) DestroyObject(FreeSka[31]);
if(IsValidObject(FreeSka[32])) DestroyObject(FreeSka[32]);
if(IsValidObject(FreeSka[33])) DestroyObject(FreeSka[33]);
if(IsValidObject(FreeSka[34])) DestroyObject(FreeSka[34]);
if(IsValidObject(FreeSka[35])) DestroyObject(FreeSka[35]);
if(IsValidObject(FreeSka[36])) DestroyObject(FreeSka[36]);
if(IsValidObject(FreeSka[37])) DestroyObject(FreeSka[37]);
if(IsValidObject(FreeSka[38])) DestroyObject(FreeSka[38]);
if(IsValidObject(FreeSka[0])) DestroyObject(FreeSka[0]);
return 1;
}
/****************************************************************************************************/
// FreeSka City command
/****************************************************************************************************/
CMD:frhelp(playerid){
//Admin control
SendClientMessage(playerid,0xFFFFFFFF,"{00AAFF}FreeSka command:");
SendClientMessage(playerid,0xFFFFFFFF,"{00AAFF}/frtrack /frland /frstart /frreset");
SendClientMessage(playerid,0xFFFFFFFF,"{00AAFF}/frmove /frgoto /frgotop /frgotomap /frstop");
return 1;
}
CMD:frcity(playerid,params[]){
new F4[e_fsfloat];
GetObjectPos(FreeSka[0],F4[X],F4[Y],F4[Z]);
GetObjectRot(FreeSka[0],F4[rX],F4[rY],F4[rZ]);
if(!strcmp(params,"in",true)){
SetPlayerPos(playerid,F4[X],F4[Y],F4[Z]-2.0);
SetPlayerFacingAngle(playerid,F4[rZ]);
SetPlayerVirtualWorld(playerid,0);
SetPlayerInterior(playerid,0);
GameTextForPlayer(playerid,"~b~FreeSka City",2500,1);
} else if(!strcmp(params,"out",true)){
SetPlayerPos(playerid,F4[X],F4[Y],F4[Z]+20.0);
SetPlayerFacingAngle(playerid,F4[rZ]);
SetPlayerVirtualWorld(playerid,0);
SetPlayerInterior(playerid,0);
GameTextForPlayer(playerid,"~b~FreeSka City",2500,1);
} else {
SendClientMessage(playerid,0xB01010FF,"››› Use: /frcity <in/out>");
}
return 1;
}
CMD:frreset(playerid){
//Admin control
ResetFreeSka();
FreeSkaStatus = (FREESKA_OFF);
SendClientMessage(playerid,0xFFFFFFFF,"{00AAFF}FreeSka City has been reset");
return 1;
}
CMD:frstop(playerid){
//Admin control
if(FreeSkaStatus == (FREESKA_OFF)) return SendClientMessage(playerid,0xB01010FF,"››› FreeSka City is not ready");
new F4[e_fsfloat];
GetObjectPos(FreeSka[0],F4[X],F4[Y],F4[Z]);
if(FreeSkaStatus == (FREESKA_MOVE)){
StopFreeSka(F4[X],F4[Y],F4[Z]);
SendClientMessage(playerid,0xFFFFFFFF,"{00AAFF}Stopped FreeSka City");
} else {
SendClientMessage(playerid,0xB01010FF,"››› FreeSka City is stopped");
}
return 1;
}
CMD:frmove(playerid,params[]){
//Admin control
if(FreeSkaStatus == (FREESKA_OFF)) return SendClientMessage(playerid,0xB01010FF,"››› FreeSka City is not ready");
if(isnull(params)) return SendClientMessage(playerid,0xB01010FF,"››› Use: /frmove <speed> <X> <Y> <Z> <A>");
new buffer[256], F4[e_fsfloat], F5[e_fsfloat], Float:tmpz;
sscanf(params,"dF(0)F(0)F(0)F(0)",F4[SPEED],F4[X],F4[Y],F4[Z],F4[rZ]);
if(F4[SPEED]<1 || F4[SPEED]>50) return SendClientMessage(playerid,0xB01010FF,"››› The speed must be within range 1-50");
if(!IsObjectMoving(FreeSka[0])){
FreeSkaStatus = (FREESKA_STOP);
}
if(FreeSkaStatus != (FREESKA_MOVE)){
GetObjectPos(FreeSka[0],F5[X],F5[Y],F5[Z]);
GetObjectRot(FreeSka[0],F5[rX],F5[rY],F5[rZ]);
if(F4[X]+F5[X]>18000 || F4[X]+F5[X]<-18000 || F4[Y]+F5[Y]>18000 ||F4[Y]+F5[Y]<-18000 || F4[Z]+F5[Z]>10000 || F4[Z]+F5[Z]<-80) return SendClientMessage(playerid,0xB01010FF,"››› Location must be within range -18000,-18000,-80 18000,18000,10000");
MapAndreas_FindZ_For2DCoord(F5[X]+F4[X],F5[Y]+F4[Y],tmpz);
if(F5[Z]+F4[Z] < tmpz+100){
F4[Z] = tmpz+100.0;
}
new Float:distance = GetDistanceBetweenPoints3D(F5[X],F5[Y],F5[Z],F5[X]+F4[X],F5[Y]+F4[Y],F5[Z]+F4[Z]);
format(buffer,sizeof buffer,"{00AAFF}You have chosen a destination location FreeSka {89C1FA}(%.4f,%.4f,%.4f,%.4f){00AAFF} distance %.2f meters",F5[X]+F4[X],F5[Y]+F4[Y],F5[Z]+F4[Z],F5[rZ]+F4[rZ],distance);
SendClientMessage(playerid,0xFFFFFFFF,buffer);
MoveFreeSka(F5[X]+F4[X],F5[Y]+F4[Y],F4[Z],F4[SPEED],F5[rZ]+F4[rZ]);
} else {
SendClientMessage(playerid,0xB01010FF,"››› FreeSka is in motion");
}
return 1;
}
CMD:frgoto(playerid,params[]){
//Admin control
if(FreeSkaStatus == (FREESKA_OFF)) return SendClientMessage(playerid,0xB01010FF,"››› FreeSka City is not ready");
if(isnull(params)) return SendClientMessage(playerid,0xB01010FF,"››› Use: /frgoto <speed> <X> <Y> <Z> <A>");
new buffer[256], F4[e_fsfloat], F5[e_fsfloat], Float:tmpz;
sscanf(params,"dF(-2139095040)F(-2139095040)F(-2139095040)F(-2139095040)",F4[SPEED],F4[X],F4[Y],F4[Z],F4[rZ]);
if(F4[SPEED]<1 || F4[SPEED]>50) return SendClientMessage(playerid,0xB01010FF,"››› The speed must be within range 1-50");
GetObjectPos(FreeSka[0],F5[X],F5[Y],F5[Z]);
GetObjectRot(FreeSka[0],F5[rX],F5[rY],F5[rZ]);
if(F4[X] == -2139095040) F4[X] = F5[X];
if(F4[Y] == -2139095040) F4[Y] = F5[Y];
if(F4[Z] == -2139095040) F4[Z] = F5[Z];
if(F4[rZ] == -2139095040) F4[rZ] = F5[rZ];
if(!IsObjectMoving(FreeSka[0])){
FreeSkaStatus = (FREESKA_STOP);
}
if(FreeSkaStatus != (FREESKA_MOVE)){
if(F4[X]>18000 || F4[X]<-18000 || F4[Y]>18000 || F4[Y]<-18000 || F4[Z]>10000 || F4[Z]<-80) return SendClientMessage(playerid,0xB01010FF,"››› Location must be within range -18000,-18000,-80 18000,18000,10000");
MapAndreas_FindZ_For2DCoord(F4[X],F4[Y],tmpz);
if(F4[Z] < tmpz+100){
F4[Z] = tmpz+100.0;
}
new Float:distance = GetDistanceBetweenPoints3D(F4[X],F4[Y],F4[Z],F5[X],F5[Y],F5[Z]);
format(buffer,sizeof buffer,"{00AAFF}You have chosen a destination location FreeSka {89C1FA}(%.4f,%.4f,%.4f,%.4f){00AAFF} distance %.2f meters",F4[X],F4[Y],F4[Z],F4[rZ],distance);
SendClientMessage(playerid,0xFFFFFFFF,buffer);
MoveFreeSka(F4[X],F4[Y],F4[Z],F4[SPEED],F4[rZ]);
} else {
SendClientMessage(playerid,0xB01010FF,"››› FreeSka is in motion");
}
return 1;
}
CMD:frgotomap(playerid,params[]){
//Admin control
if(FreeSkaStatus == (FREESKA_OFF)) return SendClientMessage(playerid,0xB01010FF,"››› FreeSka City is not ready");
if(isnull(params)) return SendClientMessage(playerid,0xB01010FF,"››› Use: /frgotomap <speed> (Mark on the map a destination)");
new buffer[256], F4[e_fsfloat], F5[e_fsfloat], Float:tmpz;
sscanf(params,"d",F4[SPEED]);
if(F4[SPEED]<1 || F4[SPEED]>50) return SendClientMessage(playerid,0xB01010FF,"››› The speed must be within range 1-50");
if(!IsObjectMoving(FreeSka[0])){
FreeSkaStatus = (FREESKA_STOP);
}
if(FreeSkaStatus != (FREESKA_MOVE)){
GetObjectPos(FreeSka[0],F5[X],F5[Y],F5[Z]);
MapAndreas_FindZ_For2DCoord(ClickMap[playerid][X],ClickMap[playerid][Y],tmpz);
if(F4[Z] < tmpz+100){
F4[Z] = tmpz+100.0;
}
new Float:distance = GetDistanceBetweenPoints3D(F5[X],F5[Y],F5[Z],ClickMap[playerid][X],ClickMap[playerid][Y],F4[Z]);
format(buffer,sizeof buffer,"{00AAFF}You have chosen a destination location FreeSka {89C1FA}(%.4f,%.4f,%.4f,%.4f){00AAFF} distance %.2f meters",ClickMap[playerid][X],ClickMap[playerid][Y],F4[Z],F4[rZ],distance);
SendClientMessage(playerid,0xFFFFFFFF,buffer);
MoveFreeSka(ClickMap[playerid][X],ClickMap[playerid][Y],F4[Z],F4[SPEED],F4[rZ]);
} else {
SendClientMessage(playerid,0xB01010FF,"››› FreeSka is in motion");
}
return 1;
}
CMD:frgotop(playerid,params[]){
//Admin control
if(FreeSkaStatus == (FREESKA_OFF)) return SendClientMessage(playerid,0xB01010FF,"››› FreeSka City is not ready");
if(isnull(params)) return SendClientMessage(playerid,0xB01010FF,"››› Use: /frgotop <speed> <playerid>");
new buffer[256], F4[e_fsfloat], F5[e_fsfloat], userid, Float:tmpz;
sscanf(params,"dd",F4[SPEED],userid);
if(F4[SPEED]<1 || F4[SPEED]>50) return SendClientMessage(playerid,0xB01010FF,"››› The speed must be within range 1-50");
if(!IsPlayerConnected(userid)) return SendClientMessage(playerid,0xB01010FF,"››› There is no such player");
if(!IsObjectMoving(FreeSka[0])){
FreeSkaStatus = (FREESKA_STOP);
}
if(FreeSkaStatus != (FREESKA_MOVE)){
GetObjectPos(FreeSka[0],F5[X],F5[Y],F5[Z]);
GetObjectRot(FreeSka[0],F5[rX],F5[rY],F5[rZ]);
GetPlayerPos(userid,F4[X],F4[Y],F4[Z]);
MapAndreas_FindZ_For2DCoord(F4[X],F4[Y],tmpz);
if(F4[Z] < tmpz+100){
F4[Z] = tmpz+100.0;
}
new Float:distance = GetDistanceBetweenPoints3D(F4[X],F4[Y],F4[Z],F5[X],F5[Y],F5[Z]);
format(buffer,sizeof buffer,"{00AAFF}You have chosen a destination location FreeSka {89C1FA}(%.4f,%.4f,%.4f,%.4f){00AAFF} distance %.2f meters",F4[X],F4[Y],F4[Z],F5[rZ],distance);
SendClientMessage(playerid,0xFFFFFFFF,buffer);
MoveFreeSka(F4[X],F4[Y],F4[Z],F4[SPEED],F5[rZ]);
} else {
SendClientMessage(playerid,0xB01010FF,"››› FreeSka is in motion");
}
return 1;
}
CMD:frland(playerid){
//Admin control
if(FreeSkaStatus == (FREESKA_OFF)) return SendClientMessage(playerid,0xB01010FF,"››› FreeSka City is not ready");
new F5[e_fsfloat];
if(FreeSkaStatus != (FREESKA_OFF)){
GetObjectPos(FreeSka[0],F5[X],F5[Y],F5[Z]);
StopFreeSka(F5[X],F5[Y],F5[Z]);
GetObjectPos(FreeSka[0],F5[X],F5[Y],F5[Z]);
GetObjectRot(FreeSka[0],F5[rX],F5[rY],F5[rZ]);
MapAndreas_FindZ_For2DCoord(F5[X],F5[Y],F5[Z]);
if(F5[Z] != 0.0) return SendClientMessage(playerid,0xB01010FF,"››› He has to land on the water");
MoveFreeSka(F5[X],F5[Y],FREESKA_UPDZ,5,F5[rZ]);
FreeSkaStatus = (FREESKA_OFF);
SendClientMessage(playerid,0xFFFFFFFF,"{00AAFF}FreeSka City landed");
} else {
SendClientMessage(playerid,0xB01010FF,"››› FreeSka City is already on the water");
}
return 1;
}
CMD:frstart(playerid){
//Admin control
new F5[e_fsfloat];
if(FreeSkaStatus == (FREESKA_OFF)){
GetObjectPos(FreeSka[0],F5[X],F5[Y],F5[Z]);
GetObjectRot(FreeSka[0],F5[rX],F5[rY],F5[rZ]);
MoveFreeSka(F5[X],F5[Y],F5[Z]+100,5,F5[rZ]);
FreeSkaStatus = (FREESKA_STOP);
SendClientMessage(playerid,0xFFFFFFFF,"{00AAFF}FreeSka City took off");
} else {
SendClientMessage(playerid,0xB01010FF,"››› FreeSka City is already in the air");
}
return 1;
}
CMD:frtrack(playerid,params[]){
new buffer[256], F4[e_fsfloat], F5[e_fsfloat];
GetObjectPos(FreeSka[0],F5[X],F5[Y],F5[Z]);
GetObjectRot(FreeSka[0],F5[rX],F5[rY],F5[rZ]);
if(FreeSkaStatus != (FREESKA_OFF)) if(!IsObjectMoving(FreeSka[0])){
FreeSkaStatus = (FREESKA_STOP);
}
new fsstatus[32];
if(FreeSkaStatus == (FREESKA_STOP)){
fsstatus = "standing";
}
if(FreeSkaStatus == (FREESKA_MOVE)){
fsstatus = "it's moving";
}
if(FreeSkaStatus == (FREESKA_OFF)){
fsstatus = "landed";
}
GetPlayerPos(playerid,F4[X],F4[Y],F4[Z]);
new Float:distance = GetDistanceBetweenPoints3D(F4[X],F4[Y],F4[Z],F5[X],F5[Y],F5[Z]);
format(buffer,sizeof buffer,"{00AAFF}FreeSka %s w location {00AAFF}(%.4f,%.4f,%.4f,%.4f){89C1FA} distance %.2f meters",fsstatus,F5[X],F5[Y],F5[Z],F5[rZ],distance);
SendClientMessage(playerid,0xFFFFFFFF,buffer);
return 1;
}
//EOF


Exactly what Pottus said !