Advertisement
Guest User

One command, one file, LoadEntrances.

a guest
Sep 4th, 2011
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.97 KB | None | 0 0
  1. #define FILTERSCRIPT
  2. #include <a_samp>
  3.  
  4. /*
  5. One command, one file, an easy way to do entrances/exits.
  6. A Tutorial and FilterScript by Jack Leslie.
  7.  
  8. Credits:
  9. Tutorial on SA-MP Forums: Jack Leslie
  10. Coding: Jack Leslie, apart from the split stock.
  11.         I, Jack Leslie, did not code all of the
  12.         coding involved in the use of the
  13.         LoadEntrances, I however did some if it.
  14.        
  15.         The person who did the original coding of
  16.         it is unknown, so I cannot give credits
  17.         to that person.
  18.        
  19.         If you do know who it is, please tell me
  20.         on the SA-MP forums so I can add credit
  21.         onto the tutorial post.
  22.  
  23. The idea for "/door": dowster from SA-MP forums.
  24. */
  25.  
  26.  
  27.  
  28. //============================================================================//
  29. stock split(const strsrc[], strdest[][], delimiter)
  30. {
  31.     new i, li;
  32.     new aNum;
  33.     new len;
  34.     while(i <= strlen(strsrc)){
  35.         if(strsrc[i]==delimiter || i==strlen(strsrc)){
  36.             len = strmid(strdest[aNum], strsrc, li, i, 128);
  37.             strdest[aNum][len] = 0;
  38.             li = i+1;
  39.             aNum++;
  40.         }
  41.         i++;
  42.     }
  43.     return 1;
  44. }
  45. //============================================================================//
  46. enum entrancestats { outside_icon , Float:outside_x , Float:outside_y , Float:outside_z , Float:outside_a , outside_i , outside_w , inside_icon , Float:inside_x , Float:inside_y , Float:inside_z , Float:inside_a , inside_i , inside_w , opens , closes }
  47. new Entrances[100][entrancestats];
  48. new EntranceRef[sizeof(Entrances)][2];
  49. //============================================================================//
  50. stock LoadEntrances()
  51. {
  52.     new File:file = fopen("entrances.cfg",io_read);
  53.     if(file)
  54.     {
  55.         new
  56.             line[512],
  57.             parts[16][32],
  58.             commentpos = -1,
  59.             count
  60.         ;
  61.         for(new i = 0;i < sizeof(Entrances);i++)
  62.         {
  63.             if(EntranceRef[i][0]) DestroyPickup(EntranceRef[i][0]);
  64.             if(EntranceRef[i][1]) DestroyPickup(EntranceRef[i][1]);
  65.             Entrances[i][outside_icon] = 0;
  66.             Entrances[i][outside_x] = 0;
  67.             Entrances[i][outside_y] = 0;
  68.             Entrances[i][outside_z] = 0;
  69.             Entrances[i][outside_a] = 0;
  70.             Entrances[i][outside_i] = 0;
  71.             Entrances[i][outside_w] = 0;
  72.             Entrances[i][inside_icon] = 0;
  73.             Entrances[i][inside_x] = 0;
  74.             Entrances[i][inside_y] = 0;
  75.             Entrances[i][inside_z] = 0;
  76.             Entrances[i][inside_a] = 0;
  77.             Entrances[i][inside_i] = 0;
  78.             Entrances[i][inside_w] = 0;
  79.         }
  80.         while(fread(file,line) && count < sizeof(Entrances))
  81.         {
  82.             commentpos = strfind(line,"//",true);
  83.  
  84.             if(commentpos != 0)
  85.             {
  86.                 if(commentpos != -1) strmid(line,line,0,commentpos);
  87.                 split(line,parts,',');
  88.                 Entrances[count][outside_icon] = strval(parts[0]);
  89.                 Entrances[count][outside_x] = floatstr(parts[1]);
  90.                 Entrances[count][outside_y] = floatstr(parts[2]);
  91.                 Entrances[count][outside_z] = floatstr(parts[3]);
  92.                 Entrances[count][outside_a] = floatstr(parts[4]);
  93.                 Entrances[count][outside_i] = strval(parts[5]);
  94.                 Entrances[count][outside_w] = strval(parts[6]);
  95.                 Entrances[count][inside_icon] = strval(parts[7]);
  96.                 Entrances[count][inside_x] = floatstr(parts[8]);
  97.                 Entrances[count][inside_y] = floatstr(parts[9]);
  98.                 Entrances[count][inside_z] = floatstr(parts[10]);
  99.                 Entrances[count][inside_a] = floatstr(parts[11]);
  100.                 Entrances[count][inside_i] = strval(parts[12]);
  101.                 Entrances[count][inside_w] = strval(parts[13]);
  102.                 EntranceRef[count][0] = CreatePickup(
  103.                     Entrances[count][outside_icon],
  104.                     23,
  105.                     Entrances[count][outside_x],
  106.                     Entrances[count][outside_y],
  107.                     Entrances[count][outside_z],
  108.                     Entrances[count][outside_w]
  109.                 );
  110.                 EntranceRef[count][1] = CreatePickup(
  111.                     Entrances[count][inside_icon],
  112.                     23,
  113.                     Entrances[count][inside_x],
  114.                     Entrances[count][inside_y],
  115.                     Entrances[count][inside_z],
  116.                     Entrances[count][inside_w]
  117.                 );
  118.                 count++;
  119.             }
  120.         }
  121.         return 1;
  122.     }
  123.     return 0;
  124. }
  125. //============================================================================//
  126.  
  127. public OnFilterScriptInit()
  128. {
  129.     LoadEntrances();
  130.     return 1;
  131. }
  132.  
  133. public OnFilterScriptExit()
  134. {
  135.     return 1;
  136. }
  137.  
  138. public OnPlayerCommandText(playerid, cmdtext[])
  139. {
  140.     if (strcmp(cmdtext, "/door", true) == 0)
  141.     {
  142.         for(new i = 0;i < sizeof(EntranceRef);i++)
  143.         {
  144.             if(
  145.                 IsPlayerInRangeOfPoint(playerid,2,Entrances[i][outside_x],Entrances[i][outside_y],Entrances[i][outside_z])
  146.                 &&
  147.                 GetPlayerVirtualWorld(playerid) == Entrances[i][outside_w]
  148.                 )
  149.                     {
  150.                         SetPlayerPos(playerid,Entrances[i][inside_x],Entrances[i][inside_y],Entrances[i][inside_z]);
  151.                         SetPlayerFacingAngle(playerid,Entrances[i][inside_a]);
  152.                         SetPlayerInterior(playerid,Entrances[i][inside_i]);
  153.                         SetPlayerVirtualWorld(playerid,Entrances[i][inside_w]);
  154.                         SetCameraBehindPlayer(playerid);
  155.                         return 1;
  156.                     }
  157.                 }
  158.         for(new i = 0;i < sizeof(EntranceRef);i++)
  159.                 {
  160.                     if(
  161.                             IsPlayerInRangeOfPoint(playerid,2,Entrances[i][inside_x],Entrances[i][inside_y],Entrances[i][inside_z])
  162.                             &&
  163.                             GetPlayerVirtualWorld(playerid) == Entrances[i][inside_w]
  164.                     )
  165.                     {
  166.                         SetPlayerPos(playerid,Entrances[i][outside_x],Entrances[i][outside_y],Entrances[i][outside_z]);
  167.                         SetPlayerFacingAngle(playerid,Entrances[i][outside_a]);
  168.                         SetPlayerInterior(playerid,Entrances[i][outside_i]);
  169.                         SetPlayerVirtualWorld(playerid,Entrances[i][outside_w]);
  170.                         return 1;
  171.                     }
  172.                 }
  173.         return 1;
  174.     }
  175.     if(strcmp(cmdtext, "/reloade", true) == 0)
  176.     {
  177.         if(IsPlayerAdmin(playerid))
  178.         {
  179.             LoadEntrances();
  180.             SendClientMessage(playerid, -1, "Entrances reloaded!");
  181.             return 1;
  182.         }
  183.     }
  184.     return 0;
  185. }
  186.  
  187. public OnPlayerPickUpPickup(playerid, pickupid)
  188. {
  189.     for(new i = 0;i < sizeof(EntranceRef);i++)
  190.     {
  191.         if(
  192.             IsPlayerInRangeOfPoint(playerid,2,Entrances[i][outside_x],Entrances[i][outside_y],Entrances[i][outside_z])
  193.             &&
  194.             GetPlayerVirtualWorld(playerid) == Entrances[i][outside_w]
  195.         )
  196.         {
  197.             GameTextForPlayer(playerid, "~w~Type ~r~/door~w~ to go inside", 5000, 5);
  198.             return 1;
  199.         }
  200.     }
  201.     for(new i = 0;i < sizeof(EntranceRef);i++)
  202.     {
  203.         if(
  204.             IsPlayerInRangeOfPoint(playerid,2,Entrances[i][inside_x],Entrances[i][inside_y],Entrances[i][inside_z])
  205.             &&
  206.             GetPlayerVirtualWorld(playerid) == Entrances[i][inside_w]
  207.         )
  208.         {
  209.             GameTextForPlayer(playerid, "~w~Type ~r~/door~w~ to go outside", 5000, 5);
  210.             return 1;
  211.         }
  212.     }
  213.     return 1;
  214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement