Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ////////////////////////////////////////////////////////////////////////////////
- //////////////////////////Dynamic Teleport System///////////////////////////////
- //////////////////////////////////By Tony///////////////////////////////////////
- //////////////////////////////Created: 16.1.2016////////////////////////////////
- /////////////////////////Please don't remove credits////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- #include <a_samp>
- #include <zcmd>
- #include <sscanf2>
- #include <YSI\y_ini>
- #include <FileManager>
- #define DIALOG_TEDIT 32000
- #define DIALOG_KATEGORIJA 32001
- #define DIALOG_KLOKACIJU 32002
- #define DIALOG_OBRISIKAT 32003
- #define DIALOG_OBRISILOK 32004
- #define DIALOG_KORDLOKACIJE 32005
- #define DIALOG_TELE 32006
- #define DIALOG_KTELE 32007
- #define DIALOG_POMJERILOK 32008
- #define DIALOG_POMJERIKAT 32009
- #define TELE_PATH "/Lokacije/%s/%d.ini"
- #define MAX_TELE 100
- //Teleport
- enum tInfo
- {
- Ime[90],
- Float:teX,
- Float:teY,
- Float:teZ,
- Float:teA
- }
- new TeleInfo[20][MAX_TELE][tInfo];
- new Kategorija[20][90];
- new ImeKat[MAX_PLAYERS][90];
- new IDKate=-1;
- new IDLok=-1;
- new Kate=-1;
- stock udb_hash(buf[])
- {
- new length=strlen(buf);
- new s1 = 1;
- new s2 = 0;
- new n;
- for (n=0; n<length; n++)
- {
- s1 = (s1 + buf[n]) % 65521;
- s2 = (s2 + s1) % 65521;
- }
- return (s2 << 16) + s1;
- }
- stock TelePath(id,katid)
- {
- new string[128];
- format(string,sizeof(string),TELE_PATH,Kategorija[katid],id);
- return string;
- }
- stock SpremiLokacije2(id,katid)
- {
- new INI:File = INI_Open(TelePath(id-1,katid));
- INI_WriteString(File,"Ime",TeleInfo[katid][id][Ime]);
- INI_WriteFloat(File,"X",TeleInfo[katid][id][teX]);
- INI_WriteFloat(File,"Y",TeleInfo[katid][id][teY]);
- INI_WriteFloat(File,"Z",TeleInfo[katid][id][teZ]);
- INI_WriteFloat(File,"A",TeleInfo[katid][id][teA]);
- INI_Close(File);
- TeleInfo[katid][id][teX]=0;
- TeleInfo[katid][id][teY]=0;
- TeleInfo[katid][id][teZ]=0;
- TeleInfo[katid][id][teA]=0;
- return 1;
- }
- stock SpremiLokacije(id,katid)
- {
- new INI:File = INI_Open(TelePath(id,katid));
- INI_WriteString(File,"Ime",TeleInfo[katid][id][Ime]);
- INI_WriteFloat(File,"X",TeleInfo[katid][id][teX]);
- INI_WriteFloat(File,"Y",TeleInfo[katid][id][teY]);
- INI_WriteFloat(File,"Z",TeleInfo[katid][id][teZ]);
- INI_WriteFloat(File,"A",TeleInfo[katid][id][teA]);
- INI_Close(File);
- return 1;
- }
- stock SpremiKategorije()
- {
- new INI:File = INI_Open("Lokacije/Kategorije.ini");
- for(new i=0;i<20;i++)
- {
- new string[90];
- format(string,sizeof(string),"Kategorija_%d",i);
- INI_WriteString(File,string,Kategorija[i]);
- }
- INI_Close(File);
- return 1;
- }
- stock SpremiKategorije2(id)
- {
- new INI:File = INI_Open("Lokacije/Kategorije.ini");
- for(new i=id+1;i<20;i++)
- {
- new string[90];
- format(string,sizeof(string),"Kategorija_%d",i-1);
- INI_WriteString(File,string,Kategorija[i]);
- }
- INI_Close(File);
- return 1;
- }
- forward UcitajKategorije(id,name[],value[]);
- public UcitajKategorije(id,name[],value[])
- {
- new string[90];
- format(string,sizeof(string),"Kategorija_%d",id);
- INI_String(string,Kategorija[id],90);
- return 1;
- }
- forward UcitajLokacije(id,name[],value[]);
- public UcitajLokacije(id,name[],value[])
- {
- INI_String("Ime",TeleInfo[IDKate][id][Ime],90);
- INI_Float("X",TeleInfo[IDKate][id][teX]);
- INI_Float("Y",TeleInfo[IDKate][id][teY]);
- INI_Float("Z",TeleInfo[IDKate][id][teZ]);
- INI_Float("A",TeleInfo[IDKate][id][teA]);
- return 1;
- }
- forward Port(playerid);
- public Port(playerid)
- {
- TogglePlayerControllable(playerid,0);
- SetTimerEx("Unfreeze", 2000,false,"i",playerid);
- return 1;
- }
- forward Unfreeze(playerid);
- public Unfreeze(playerid)
- {
- TogglePlayerControllable(playerid, 1);
- return 1;
- }
- public OnFilterScriptExit()
- {
- for(new i=0;i<MAX_TELE;i++)
- {
- for(new a=0;a<20;a++)
- {
- if(TeleInfo[a][i][teX] != 0 && TeleInfo[a][i][teY] != 0)
- {
- SpremiLokacije(i,a);
- }
- }
- }
- return 1;
- }
- public OnFilterScriptInit()
- {
- print("////////////////////////////////////////////////////////////////////////////////");
- print("//////////////////////////Dinamican Teleport System//////////////////////////////");
- print("//////////////////////////////////By #Sikora////////////////////////////////////");
- print("//////////////////////////////Created: 16.1.2016////////////////////////////////");
- print("/////////////////////////Please don't remove credits////////////////////////////");
- print("////////////////////////////////////////////////////////////////////////////////");
- for(new j=0;j<20;j++)
- {
- strmid(Kategorija[j],"Prazno",0,strlen("Prazno"),255);
- INI_ParseFile("Lokacije/Kategorije.ini", "UcitajKategorije", .bExtra = true, .extra = j);
- for(new i = 0; i < sizeof(TeleInfo); i++)
- {
- strmid(TeleInfo[j][i][Ime],"a",0,strlen("a"),255);
- new str[128];
- format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[j],i);
- if(fexist(str))
- {
- IDKate=j;
- INI_ParseFile(str, "UcitajLokacije", .bExtra = true, .extra = i);
- }
- }
- }
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if(dialogid == DIALOG_KATEGORIJA)
- {
- new ime[90];
- if(!response) return 1;
- if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_KATEGORIJA, DIALOG_STYLE_INPUT, "Ime kategorije", "Unesite ime kategorije", "Uredu", "Odustani");
- for(new i=0;i<20;i++)
- {
- if(udb_hash(Kategorija[i]) != udb_hash(ime))
- {
- if(udb_hash(Kategorija[i]) == udb_hash("Prazno"))
- {
- new str[128];
- format(str,sizeof(str),"scriptfiles/Lokacije/%s",ime);
- if(dir_create(str))
- {
- strmid(Kategorija[i],ime,0,strlen(ime),255);
- SendClientMessage(playerid,-1,"{FF9900}[Info] {FFFFFF}Uspjesno dodana kategorija!");
- }
- else
- {
- SendClientMessage(playerid,-1,"{FF9900}[Info] {FFFFFF}Neuspjesno dodana kategorija!");
- }
- SpremiKategorije();
- break;
- }
- }else return SendClientMessage(playerid, -1, "{ff0000}[ERROR] {FFFFFF}Kategorija sa tim imenom vec postoji!");
- }
- }
- if(dialogid == DIALOG_KLOKACIJU)
- {
- new ime[90],check=0;
- if(!response) return 1;
- if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_KLOKACIJU, DIALOG_STYLE_INPUT, "Unesite ime kategorije", "Unesite ime kategorije pod koju zelite dodati ovu lokaciju!", "Uredu", "Odustani");
- for(new i=0;i<20;i++)
- {
- if(udb_hash(Kategorija[i]) == udb_hash(ime))
- {
- strmid(ImeKat[playerid],Kategorija[i],0,strlen(Kategorija[i]),255);
- ShowPlayerDialog(playerid, DIALOG_KORDLOKACIJE, DIALOG_STYLE_INPUT, "Unesite ime", "Unesite ime lokacije!", "Uredu", "Odustani");
- check=1;
- break;
- }
- }
- if(check==0) return ShowPlayerDialog(playerid, DIALOG_KLOKACIJU, DIALOG_STYLE_INPUT, "Nepostojeca kategorija", "Unesite ime kategorije pod koju zelite dodati ovu lokaciju!", "Uredu", "Odustani");
- }
- if(dialogid == DIALOG_KORDLOKACIJE)
- {
- new ime[90],j=-1;
- if(!response) return 1;
- if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_KORDLOKACIJE, DIALOG_STYLE_INPUT, "Unesite ime", "Unesite ime kategorije!", "Uredu", "Odustani");
- for(new i=0;i<sizeof(TeleInfo);i++)
- {
- for(new e=0;e<20;e++)
- {
- if(udb_hash(TeleInfo[e][i][Ime]) == udb_hash(ime))
- {
- SendClientMessage(playerid,-1,"{ff0000}[Error] {FFFFFF}To ime vec postoji!");
- return 1;
- }
- if(udb_hash(Kategorija[e]) == udb_hash(ImeKat[playerid]))
- {
- j=e;
- }
- }
- if(!fexist(TelePath(i,j)))
- {
- new Float:Poz[4];
- GetPlayerPos(playerid,Poz[0],Poz[1],Poz[2]);
- GetPlayerFacingAngle(playerid,Poz[3]);
- strmid(TeleInfo[j][i][Ime],ime,0,strlen(ime),255);
- TeleInfo[j][i][teX]=Poz[0];
- TeleInfo[j][i][teY]=Poz[1];
- TeleInfo[j][i][teZ]=Poz[2];
- TeleInfo[j][i][teA]=Poz[3];
- SpremiLokacije(i,j);
- SendClientMessage(playerid,-1,"{FF9900}[Info] {FFFFFF}Uspjesno dodana lokacija!");
- break;
- }
- }
- }
- if(dialogid == DIALOG_OBRISIKAT)
- {
- new ime[90];
- if(!response) return 1;
- if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_OBRISIKAT, DIALOG_STYLE_INPUT, "Ime", "Unesite ime kategorije koju zelite obrisati", "Uredu", "Odustani");
- for(new i=0;i<20;i++)
- {
- if(udb_hash(Kategorija[i]) == udb_hash(ime) && udb_hash(Kategorija[i]) != udb_hash("Prazno"))
- {
- new str[128];
- format(str,sizeof(str),"scriptfiles/Lokacije/%s",ime);
- for(new j=0;j<sizeof(TeleInfo);j++)
- {
- new str2[128];
- format(str2,sizeof(str2),"Lokacije/%s/%d.ini",Kategorija[i],j);
- if(fexist(str2))
- {
- TeleInfo[i][j][teX] = 0;
- TeleInfo[i][j][teY] = 0;
- TeleInfo[i][j][teZ] = 0;
- TeleInfo[i][j][teA] = 0;
- strmid(TeleInfo[i][j][Ime],"a",0,strlen("a"),255);
- fremove(str2);
- }
- }
- if(dir_delete(str))
- {
- strmid(Kategorija[i],"Prazno",0,strlen("Prazno"),255);
- SpremiKategorije2(i);
- SendClientMessage(playerid,-1,"{FF9900}[Info] {FFFFFF}Kategorija je obrisana!");
- for(new j=0;j<20;j++)
- {
- strmid(Kategorija[j],"Prazno",0,strlen("Prazno"),255);
- INI_ParseFile("Lokacije/Kategorije.ini", "UcitajKategorije", .bExtra = true, .extra = j);
- for(new eh = 0; eh < sizeof(TeleInfo); eh++)
- {
- new str3[128];
- format(str3,sizeof(str3),"Lokacije/%s/%d.ini",Kategorija[j],eh);
- if(fexist(str3))
- {
- TeleInfo[j][eh][teX] = 0;
- TeleInfo[j][eh][teY] = 0;
- TeleInfo[j][eh][teZ] = 0;
- TeleInfo[j][eh][teA] = 0;
- strmid(TeleInfo[j][eh][Ime],"a",0,strlen("a"),255);
- IDKate=j;
- INI_ParseFile(str3, "UcitajLokacije", .bExtra = true, .extra = eh);
- }
- }
- }
- }
- else
- {
- SendClientMessage(playerid,-1,"{ff0000}[ERROR] {FFFFFF}Folder ne postoji!");
- }
- break;
- }
- }
- }
- if(dialogid == DIALOG_OBRISILOK)
- {
- new ime[90],check=0;
- if(!response) return 1;
- if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_OBRISILOK, DIALOG_STYLE_INPUT, "Unesite ime", "Unesite ime lokacije!", "Uredu", "Odustani");
- for(new i=0;i<sizeof(TeleInfo);i++)
- {
- for(new a=0;a<20;a++)
- {
- if(udb_hash(TeleInfo[a][i][Ime]) == udb_hash(ime))
- {
- TeleInfo[a][i][teX] = 0;
- TeleInfo[a][i][teY] = 0;
- TeleInfo[a][i][teZ] = 0;
- TeleInfo[a][i][teA] = 0;
- strmid(TeleInfo[a][i][Ime],"a",0,strlen("a"),255);
- fremove(TelePath(i,a));
- check=1;
- new id=i;
- for(new j=id+1;j<sizeof(TeleInfo);j++)
- {
- new str[128];
- format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[a],j);
- if(fexist(str))
- {
- fremove(str);
- SpremiLokacije2(j,a);
- }
- }
- for(new k=0;k<sizeof(TeleInfo);k++)
- {
- new str[128];
- format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[a],k);
- strmid(TeleInfo[a][k][Ime],"a",0,strlen("a"),255);
- IDKate=a;
- INI_ParseFile(str, "UcitajLokacije", .bExtra = true, .extra = k);
- }
- }
- }
- }
- if(check==0) return ShowPlayerDialog(playerid, DIALOG_OBRISILOK, DIALOG_STYLE_INPUT, "Krivo ime", "Unesite ime lokacije!", "Uredu", "Odustani");
- SendClientMessage(playerid,-1,"{FF9900}[Info] {FFFFFF}Uspjesno obrisana lokacija!");
- }
- if(dialogid == DIALOG_POMJERILOK)
- {
- new ime[90],check=0;
- if(!response) return 1;
- if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_POMJERILOK, DIALOG_STYLE_INPUT, "Ime", "Unesite ime lokacije koju zelite premjestiti", "Uredu", "Odustani");
- for(new a=0;a<20;a++)
- {
- for(new i=0;i<sizeof(TeleInfo);i++)
- {
- if(udb_hash(TeleInfo[a][i][Ime]) == udb_hash(ime) && udb_hash(TeleInfo[a][i][Ime]) != udb_hash("a"))
- {
- IDKate=a;
- IDLok=i;
- ShowPlayerDialog(playerid, DIALOG_POMJERIKAT, DIALOG_STYLE_INPUT, "Ime", "Unesite ime kategorije u koju zelite premjestiti lokaciju", "Uredu", "Odustani");
- check=1;
- break;
- }
- }
- }
- if(check==0) return ShowPlayerDialog(playerid, DIALOG_POMJERILOK, DIALOG_STYLE_INPUT, "Krivo ime", "Unesite ime lokacije koju zelite premjestiti", "Uredu", "Odustani");
- }
- if(dialogid == DIALOG_POMJERIKAT)
- {
- new ime[90],check=0;
- if(!response) return 1;
- if(sscanf(inputtext,"s[90]",ime)) return ShowPlayerDialog(playerid, DIALOG_POMJERIKAT, DIALOG_STYLE_INPUT, "Ime", "Unesite ime kategorije u koju zelite premjestiti lokaciju", "Uredu", "Odustani");
- for(new e=0;e<20;e++)
- {
- if(udb_hash(Kategorija[e]) == udb_hash(ime))
- {
- for(new j=0;j<sizeof(TeleInfo);j++)
- {
- new str[128];
- format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[e],j);
- if(!fexist(str))
- {
- strmid(TeleInfo[e][j][Ime],TeleInfo[IDKate][IDLok][Ime],0,strlen(TeleInfo[IDKate][IDLok][Ime]),255);
- TeleInfo[e][j][teX]=TeleInfo[IDKate][IDLok][teX];
- TeleInfo[e][j][teY]=TeleInfo[IDKate][IDLok][teY];
- TeleInfo[e][j][teZ]=TeleInfo[IDKate][IDLok][teZ];
- TeleInfo[e][j][teA]=TeleInfo[IDKate][IDLok][teA];
- SpremiLokacije(j,e);
- check=1;
- break;
- }
- }
- }
- }
- TeleInfo[IDKate][IDLok][teX] = 0;
- TeleInfo[IDKate][IDLok][teY] = 0;
- TeleInfo[IDKate][IDLok][teZ] = 0;
- TeleInfo[IDKate][IDLok][teA] = 0;
- strmid(TeleInfo[IDKate][IDLok][Ime],"a",0,strlen("a"),255);
- fremove(TelePath(IDLok,IDKate));
- new id=IDLok;
- for(new j=id+1;j<sizeof(TeleInfo);j++)
- {
- new str[128];
- format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[IDKate],j);
- if(fexist(str))
- {
- fremove(str);
- SpremiLokacije2(j,IDKate);
- }
- }
- for(new k=0;k<sizeof(TeleInfo);k++)
- {
- new str[128];
- format(str,sizeof(str),"Lokacije/%s/%d.ini",Kategorija[IDKate],k);
- strmid(TeleInfo[IDKate][k][Ime],"a",0,strlen("a"),255);
- INI_ParseFile(str, "UcitajLokacije", .bExtra = true, .extra = k);
- }
- if(check==0) return ShowPlayerDialog(playerid, DIALOG_POMJERIKAT, DIALOG_STYLE_INPUT, "Krivo ime", "Unesite ime kategorije u koju zelite premjestiti lokaciju", "Uredu", "Odustani");
- SendClientMessage(playerid,-1,"{FF9900}[Info] {FFFFFF}Uspjesno premjestena lokacija!");
- }
- if(dialogid == DIALOG_TEDIT)
- {
- if(response)
- {
- if(listitem == 0)
- {
- ShowPlayerDialog(playerid, DIALOG_KATEGORIJA, DIALOG_STYLE_INPUT, "Ime", "Unesite ime kategorije", "Uredu", "Odustani");
- }
- if(listitem == 1)
- {
- SendClientMessage(playerid,-1,"{FF9900}[Info] {FFFFFF}Lokacija ce se spremiti na trenutnim koordinatama!");
- ShowPlayerDialog(playerid, DIALOG_KLOKACIJU, DIALOG_STYLE_INPUT, "Ime kategorije", "Unesite ime kategorije u koju zelite spremiti lokaciju!", "Uredu", "Odustani");
- }
- if(listitem == 2)
- {
- ShowPlayerDialog(playerid, DIALOG_OBRISIKAT, DIALOG_STYLE_INPUT, "Ime", "Unesite ime kategorije koju zelite obrisati", "Uredu", "Odustani");
- }
- if(listitem == 3)
- {
- ShowPlayerDialog(playerid, DIALOG_OBRISILOK, DIALOG_STYLE_INPUT, "Ime", "Unesite ime lokacije", "Uredu", "Odustani");
- }
- if(listitem == 4)
- {
- ShowPlayerDialog(playerid, DIALOG_POMJERILOK, DIALOG_STYLE_INPUT, "Ime", "Unesite ime lokacije koju zelite premjestiti", "Uredu", "Odustani");
- }
- }
- }
- if(dialogid == DIALOG_TELE)
- {
- if(response)
- {
- new id=listitem;
- if(IsPlayerInAnyVehicle(playerid))
- {
- SetVehiclePos(GetPlayerVehicleID(playerid), TeleInfo[Kate][id][teX],TeleInfo[Kate][id][teY],TeleInfo[Kate][id][teZ]);
- SetVehicleZAngle(GetPlayerVehicleID(playerid),TeleInfo[Kate][id][teA]);
- PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);
- }
- else
- {
- SetPlayerPos(playerid,TeleInfo[Kate][id][teX],TeleInfo[Kate][id][teY],TeleInfo[Kate][id][teZ]);
- SetPlayerFacingAngle(playerid, TeleInfo[Kate][id][teA]);
- }
- Port(playerid);
- new str[128];
- format(str,sizeof(str),"{FF9900}Portali ste se do {FFFFFF}%s!",TeleInfo[Kate][id][Ime]);
- SendClientMessage(playerid,-1,str);
- }
- }
- if(dialogid == DIALOG_KTELE)
- {
- if(response)
- {
- Kate=listitem;
- new info[2100];
- for(new i=0;i<MAX_TELE;i++)
- {
- if(TeleInfo[Kate][i][teX] != 0 && TeleInfo[Kate][i][teY] != 0)
- {
- new str[128];
- format(str,sizeof(str),"%s\n",TeleInfo[Kate][i][Ime]);
- strcat(info, str, sizeof(info));
- }
- }
- ShowPlayerDialog(playerid, DIALOG_TELE, DIALOG_STYLE_LIST, "Teleport", info, "Uredu", "Odustani");
- }
- }
- return 1;
- }
- CMD:ureditele(playerid,params[])
- {
- if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"[#Sikora] Samo rcon admin!");
- if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,"[#Sikora] Ne smijete biti u vozilu!");
- ShowPlayerDialog(playerid, DIALOG_TEDIT, DIALOG_STYLE_LIST, "Uredi", "Dodaj kategoriju\nDodaj lokaciju\nObrisi kategoriju\nObrisi lokaciju\nPremjesti lokaciju", "Uredu", "Odustani");
- return 1;
- }
- CMD:tele(playerid, params[])
- {
- if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid,-1,"Niste spojeni na server!");
- new info[1024];
- for(new i=0;i<20;i++)
- {
- if(udb_hash(Kategorija[i]) != udb_hash("Prazno"))
- {
- new str[128];
- format(str,sizeof(str),"%s\n",Kategorija[i]);
- strcat(info, str, sizeof(info));
- }
- }
- ShowPlayerDialog(playerid, DIALOG_KTELE, DIALOG_STYLE_LIST, "Teleport", info, "Dalje", "Odustani");
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment