Chaoz

In Game Teleport Maker v2.0.1 (Eng)

Sep 22nd, 2011
786
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.09 KB | None | 0 0
  1. /*
  2. ||===========Credits============||
  3. ||The_Chaoz Scripting           ||
  4. ||Wheelmandts main idea         ||
  5. ||Y_Less y_ini, sscanf plugin   ||
  6. ||Zeex zcmd                     ||
  7. ||                              ||
  8. ||==============================||*/
  9.  
  10. #define FILTERSCRIPT
  11.  
  12. #include <a_samp>
  13. #include <YSI\y_ini>
  14. #include <sscanf2>
  15. #include <zcmd>
  16.  
  17. #define PUBLIC:%0(%1)   forward %0(%1); public %0(%1)
  18.  
  19. #define MAX_TELEPORTS   1000
  20. //#define HELP//comment this line to disable help on cmds
  21. #define PATH "/TeleportsIG.sav"
  22.  
  23. enum DD{
  24.     bool:Exist=false,
  25.     Float:PP[4],
  26.     Int,
  27.     Vw,
  28.     wCar,
  29.     Priv,
  30.     Name[11],
  31.     Owner[MAX_PLAYER_NAME],
  32.     Frace[55]
  33. };
  34.  
  35. new Tp[MAX_TELEPORTS][DD];
  36. new bool:Full = false;
  37.  
  38. public OnFilterScriptInit()
  39. {
  40.     if(!fexist("/TeleportsIG.sav")){
  41.         new File:Fhnd;
  42.         Fhnd = fopen(PATH, io_write);
  43.         if(Fhnd)fclose(Fhnd);
  44.     }
  45.     for(new i; i<MAX_TELEPORTS; i++)Tp[i][Name] = "a\0\0\0\0\0\0\0\0\0";
  46.     INI_ParseFile(PATH, "LoadTeleports", .bPassTag=true);
  47.     print("\n----------------------------------------");
  48.     print("    In Game Teleport Maker v2.0.1 Loaded");
  49.     return print("----------------------------------------\n");
  50. }
  51.  
  52. public OnFilterScriptExit()
  53. {
  54.     print("\n------------------------------------------");
  55.     print("    In Game Teleport Maker v2.0.1 Unloaded");
  56.     return print("------------------------------------------\n");
  57. }
  58.  
  59. public OnPlayerCommandReceived(playerid, cmdtext[]){
  60.     printf("R- User %i use %s", playerid, cmdtext);
  61.     if(strcmp(cmdtext, "/tcrear", true, 6) && strcmp(cmdtext, "/tlista", true, 6) && strcmp(cmdtext, "/tborrar", true, 7))
  62.         CallLocalFunction("ExecuteTeleport", "si", cmdtext[1], playerid);
  63.     return 1;
  64. }
  65.  
  66. public OnPlayerCommandPerformed(playerid, cmdtext[], success){
  67.     new i;
  68.     for(; i<MAX_TELEPORTS; i++)if(!strcmp(Tp[i][Name], cmdtext[1], true))break;
  69.     if(Tp[i][Exist])success = 1;
  70.     return (success) ? (1) : (0);
  71. }
  72.  
  73. dcmd_tcreate(playerid, params[]){
  74.     if(Full)return SendClientMessage(playerid, 0xFF0000FF, "Error: No more teleports can be created.");
  75.     new name[11], Opt[2], fr[55];
  76.     if(sscanf(params, "s[11]I(0)I(0)S()[55]", name, Opt[0], Opt[1], fr)){
  77.         SendClientMessage(playerid, 0xFFFFFFFF, "Uso: /{FFFF00}tcreate {FFFF00}<name> {FFFFFF}(optional){FFFF00}<vehicle> {FFFFFF}(optional){FFFF00}<private> {FFFFFF}(optional){FFFF00}<message>");
  78.         #if defined HELP
  79.             SendClientMessage(playerid, 0xFFFF00FF, "Params:");
  80.             SendClientMessage(playerid, 0xFFFF00FF, " #Vehicle: {FFFFFF}Allow the teleport to be use with or without vehicles. ({00FF00}1{FFFFFF}={00FF00}yes{FFFFFF}/{FF0000}0{FFFFFF}={FF0000}no).");
  81.             SendClientMessage(playerid, 0xFFFF00FF, " #Private: {FFFFFF}Allow the teleport to be showed on the \"/tlist\" command.({00FF00}1{FFFFFF}={00FF00}private{FFFFFF}/{FF0000}0{FFFFFF}={FF0000}public).");
  82.             return SendClientMessage(playerid, 0xFFFF00FF, " #Message: {FFFFFF}A message to be send each time a player use the teleport.");
  83.         #else
  84.             return 1;
  85.         #endif
  86.     }
  87.     if(strlen(name) < 3)return SendClientMessage(playerid, 0xFF0000FF, "Error: The name is too short, min length is 3 characters");
  88.     new i;
  89.     for(; i<MAX_TELEPORTS; i++)if(!strcmp(Tp[i][Name], name, true) && Tp[i][Exist])return SendClientMessage(playerid, 0xFF0000FF, "Error: The teleport already exist.");
  90.     for(i=0; i<=MAX_TELEPORTS; i++)if(!Tp[i][Exist])break;
  91.     if(i==MAX_TELEPORTS){
  92.         Full=true;
  93.         if(Tp[i][Exist])return SendClientMessage(playerid, 0xFF0000FF, "Error: No more teleports can be created.");
  94.     }
  95.     new str[66];
  96.     new INI:Fhnd;
  97.     GetPlayerPos(playerid, Tp[i][PP][0], Tp[i][PP][1], Tp[i][PP][2]);
  98.     GetPlayerFacingAngle(playerid, Tp[i][PP][3]);
  99.     Tp[i][Vw] = GetPlayerVirtualWorld(playerid);
  100.     Tp[i][Int] = GetPlayerInterior(playerid);
  101.     Fhnd = INI_Open(PATH);
  102.     INI_SetTag(Fhnd, numstr(i));
  103.     INI_WriteString(Fhnd, "Name", name);
  104.     INI_WriteString(Fhnd, "Owner", pName(playerid));
  105.     INI_WriteString(Fhnd, "Frace", fr);
  106.     INI_WriteInt(Fhnd, "Car", Opt[0]);
  107.     INI_WriteInt(Fhnd, "Priv", Opt[1]);
  108.     INI_WriteFloat(Fhnd, "X", Tp[i][PP][0]);
  109.     INI_WriteFloat(Fhnd, "Y", Tp[i][PP][1]);
  110.     INI_WriteFloat(Fhnd, "Z", Tp[i][PP][2]);
  111.     INI_WriteFloat(Fhnd, "A", Tp[i][PP][3]);
  112.     INI_WriteInt(Fhnd, "vW", Tp[i][Vw]);
  113.     INI_WriteInt(Fhnd, "Int", Tp[i][Int]);
  114.     INI_Close(Fhnd);
  115.     Tp[i][Exist] = true;
  116.     Tp[i][Name] = name;
  117.     Tp[i][Owner] = pName(playerid);
  118.     Tp[i][Frace] = fr;
  119.     Tp[i][wCar] = Opt[0];
  120.     Tp[i][Priv] = Opt[1];
  121.     format(str, sizeof(str), "You have created a new teleport, type \"/%s\" to use it.", name);
  122.     return SendClientMessage(playerid, 0xFFFF00FF, str);
  123. }
  124.  
  125. dcmd_tlist(playerid, params[]){
  126.     #pragma unused params
  127.     new str[128], count, X;
  128.     for(new i; i<MAX_TELEPORTS; i++)if(Tp[i][Exist] && !Tp[i][Priv]){
  129.         X++;
  130.         count++;
  131.         if(count == 1)format(str, 128, "%s", Tp[i][Name]);
  132.         if(1 < count <= 5)format(str, 128, "%s - %s", str, Tp[i][Name]);
  133.         if(count == 6){
  134.             SendClientMessage(playerid, 0xFFFF00FF, str);
  135.             count = 0;
  136.         }
  137.     }
  138.     if(X && count)return SendClientMessage(playerid, 0xFFFF00FF, str);
  139.     return SendClientMessage(playerid, 0xFFFFFFFF, "--No teleports found--");
  140. }
  141.  
  142. dcmd_tdelete(playerid, params[])
  143. {
  144.     new name[11];
  145.     if(sscanf(params, "s[11]", name))return SendClientMessage(playerid, 0xFFFFFFFF, "Uso: /{FFFF00}tdelete <name>");
  146.     new i;
  147.     for(; i<MAX_TELEPORTS; i++)if(!strcmp(Tp[i][Name], name, true))break;
  148.     if(strcmp(Tp[i][Owner], pName(playerid), false) && !IsPlayerAdmin(playerid))return SendClientMessage(playerid, 0xFF0000FF, "Error: You can't delete this teleport.");
  149.     if(!Tp[i][Exist])return SendClientMessage(playerid, 0xFF0000FF, "Error: This teleport don't exist.");
  150.     DeleteTp(i);
  151.     return SendClientMessage(playerid, 0x00FF00FF, "Server: Teleport successfuly deleted.");
  152. }
  153.  
  154. PUBLIC:ExecuteTeleport(name[], forplayer)
  155. {
  156.     new str[128], i;
  157.     for(; i<MAX_TELEPORTS; i++)if(!strcmp(Tp[i][Name], name, true))break;
  158.     if(!Tp[i][Exist])return 0;
  159.     if(!IsPlayerInAnyVehicle(forplayer)){
  160.         SetPlayerPos(forplayer, Tp[i][PP][0], Tp[i][PP][1], Tp[i][PP][2]);
  161.         SetPlayerFacingAngle(forplayer, Tp[i][PP][3]);
  162.         SetPlayerInterior(forplayer, Tp[i][Int]);
  163.         SetPlayerVirtualWorld(forplayer, Tp[i][Vw]);
  164.         SetCameraBehindPlayer(forplayer);
  165.     }
  166.     else{
  167.         if(!Tp[i][wCar]){
  168.             SetPlayerPos(forplayer, Tp[i][PP][0], Tp[i][PP][1], Tp[i][PP][2]);
  169.             SetPlayerFacingAngle(forplayer, Tp[i][PP][3]);
  170.             SetPlayerInterior(forplayer, Tp[i][Int]);
  171.             SetPlayerVirtualWorld(forplayer, Tp[i][Vw]);
  172.             SetCameraBehindPlayer(forplayer);
  173.         }
  174.         else{
  175.             new Veh = GetPlayerVehicleID(forplayer);
  176.             SetVehiclePos(Veh, Tp[i][PP][0], Tp[i][PP][1], Tp[i][PP][2]);
  177.             SetVehicleZAngle(Veh, Tp[i][PP][3]);
  178.             PutPlayerInVehicle(forplayer, Veh, 0);
  179.             SetVehicleVirtualWorld(Veh, Tp[i][Vw]);
  180.             LinkVehicleToInterior(Veh, Tp[i][Int]);
  181.             SetCameraBehindPlayer(forplayer);
  182.         }
  183.     }
  184.     if(!strlen(Tp[i][Frace]))format(str, 128, "You have been teleported \"%s\" created by %s.", Tp[i][Name], Tp[i][Owner]);
  185.     else format(str, 128, "\"%s\" by %s.", Tp[i][Frace], Tp[i][Owner]);
  186.     return SendClientMessage(forplayer, 0xFFFF00FF, str);
  187. }
  188.  
  189. PUBLIC:LoadTeleports(tag[], name[], value[])
  190. {
  191.     new ID=strval(tag);
  192.     Tp[ID][Exist] = true;
  193.     if(!strcmp(name, "Name", true))format(Tp[ID][Name], 11, "%s", value);
  194.     if(!strcmp(name, "Owner", true))format(Tp[ID][Owner], MAX_PLAYER_NAME, "%s", value);
  195.     if(!strcmp(name, "Car", true))Tp[ID][wCar] = strval(value);
  196.     if(!strcmp(name, "Priv", true))Tp[ID][Priv] = strval(value);
  197.     if(!strcmp(name, "X", true))Tp[ID][PP][0] = floatstr(value);
  198.     if(!strcmp(name, "Y", true))Tp[ID][PP][1] = floatstr(value);
  199.     if(!strcmp(name, "Z", true))Tp[ID][PP][2] = floatstr(value);
  200.     if(!strcmp(name, "A", true))Tp[ID][PP][3] = floatstr(value);
  201.     if(!strcmp(name, "Vw", true))Tp[ID][Vw] = strval(value);
  202.     if(!strcmp(name, "Int", true))Tp[ID][Int] = strval(value);
  203.     if(ID==MAX_TELEPORTS)Full = true;
  204. }
  205.  
  206. pName(playerid)
  207. {
  208.     new name[MAX_PLAYER_NAME] = "INVALID PLAYER";
  209.     if(!IsPlayerConnected(playerid))return name;
  210.     GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  211.     return name;
  212. }
  213.  
  214. DeleteTp(T_id)
  215. {
  216.     Tp[T_id][Exist] = false;
  217.     new INI:Fhnd;
  218.     Fhnd = INI_Open(PATH);
  219.     INI_DeleteTag(Fhnd, numstr(T_id));
  220.     INI_Close(Fhnd);
  221. }
Advertisement
Add Comment
Please, Sign In to add comment