Vuk7

Interior include by Vuk

Jan 15th, 2017
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 9.28 KB | None | 0 0
  1. /*
  2. ================================================================================
  3. --------------------------------------------------------------------------------
  4.                         Interior include
  5.                                   by Vuk
  6.                         ||English version||
  7. --------------------------------------------------------------------------------
  8. Default max interior is 50.
  9. Need to set ResetPlayerInterior(playerid); in OnPlayerConnect!
  10. If you need more than 50 interieors above #include <a_samp> type #define MAX_INTERIORS_CHANGE enter the number of required interiors
  11. --------------------------------------------------------------------------------
  12. Functions:
  13. InteriorLP(id); - update interior's text label
  14. CreateInterior(id,name[],Float:enterx,Float:entery,Float:enterz,Float:enteraz,Float:exitx,Float:exity,Float:exitz,Float:exitaz,interiorin,vwin,interiorout,vwout) - create interior
  15. PortPlayerInInterior(playerid,interiorid); - port player in interior
  16. PortPlayerOutOfInterior(playerid,interiorid); - port player out of interior
  17. GetPlayerInteriorID(playerid); - return player's interior id
  18. IsPlayerInInterior(playerid); - return true if is player in interior, return false if player isn't in interior
  19. DestroyInterior(id); - destroyng interior
  20. ResetPlayerInterior(playerid); - reseting player interior id
  21. ChangeInteriorName(interiorid,name[]); - change interiors name
  22. IsInteriorExist(interiorid); - return true if interior exist, return false if interior do not exist
  23. --------------------------------------------------------------------------------
  24. Callbacks:
  25. OnInteriorCreated(id,name[],Float:enterx,Float:entery,Float:enterz,Float:enteraz,Float:exitx,Float:exity,Float:exitz,Float:exitaz,interiorin,vwin,interiorout,vwout)
  26. OnPlayerTryToEnterInInterior(playerid,interiorid) - If in this function reutrn 0 player will not enter in the interior
  27. OnPlayerEnterInInterior(playerid,interiorid)
  28. OnPlayerTryToExitInInterior(playerid,interiorid) - If in this function reutrn 0 player will not exit from the interior
  29. OnPlayerExitFromInterior(playerid,interiorid)
  30. OnInteriorsNameChanged(interiorid,name[])
  31. --------------------------------------------------------------------------------
  32. ================================================================================
  33. */
  34.  
  35. #if defined _interior_included
  36.   #endinput
  37. #endif
  38.  
  39. #define _interior_included
  40. #pragma library interior
  41.  
  42. #if defined MAX_INTERIORS_CHANGE
  43. #define MAX_INTERIORS MAX_INTERIORS_CHANGE
  44. #else
  45. #define MAX_INTERIORS 50
  46. #endif
  47.  
  48.  
  49. #include <a_samp>
  50.  
  51. #define PRESSED(%0) \
  52.     (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  53.  
  54. forward OnInteriorCreated(id,name[],Float:enterx,Float:entery,Float:enterz,Float:enteraz,Float:exitx,Float:exity,Float:exitz,Float:exitaz,interiorin,vwin,interiorout,vwout);
  55. forward OnPlayerTryToEnterInInterior(playerid,interiorid);
  56. forward OnPlayerEnterInInterior(playerid,interiorid);
  57. forward OnPlayerTryToExitInInterior(playerid,interiorid);
  58. forward OnPlayerExitFromInterior(playerid,interiorid);
  59. forward OnInteriorDestroyed(interiorid);
  60. forward OnInteriorsNameChanged(interiorid,name[]);
  61.  
  62. enum iInfo
  63. {
  64.     iID,
  65.     iName[24],
  66.     Float:iX,
  67.     Float:iY,
  68.     Float:iZ,
  69.     Float:iAZ,
  70.     Float:iXX,
  71.     Float:iYY,
  72.     Float:iZZ,
  73.     Float:iAZZ,
  74.     iInteriorIn,
  75.     iVWIN,
  76.     iInterorOut,
  77.     iVWOUT,
  78.     iUsing,
  79.     iPickup,
  80.     iPickupp
  81. }
  82. new InteriorInfo[MAX_INTERIORS][iInfo];
  83. new Text3D:iText[MAX_INTERIORS];
  84. new InInterior[MAX_PLAYERS]=-1;
  85.  
  86. stock InteriorLP(id)
  87. {
  88.     new str[200];
  89.     format(str,sizeof(str),"[ %s ]",InteriorInfo[id][iName]);
  90.     Update3DTextLabelText(iText[id], -1, str);
  91.     return 1;
  92. }
  93.  
  94. stock CreateInterior(id,name[],Float:enterx,Float:entery,Float:enterz,Float:enteraz,Float:exitx,Float:exity,Float:exitz,Float:exitaz,interiorin,vwin,interiorout,vwout)
  95. {
  96.     if(id > MAX_INTERIORS)
  97.     {
  98.         print("[ERROR]");
  99.         printf("Interior %d was not created because id is bigger of max interiors!",id);
  100.         return -1;
  101.     }
  102.     if(InteriorInfo[id][iUsing] == 1)
  103.     {
  104.         print("[ERROR]");
  105.         printf("Interior %d was not created because alredy exist interior with this id!",id);
  106.         return -1;
  107.     }
  108.     strmid(InteriorInfo[id][iName], name, 0, strlen(name), 24);
  109.     InteriorInfo[id][iID] = id;
  110.     InteriorInfo[id][iX] = enterx;
  111.     InteriorInfo[id][iY] = entery;
  112.     InteriorInfo[id][iZ] = enterz;
  113.     InteriorInfo[id][iAZ] = enteraz;
  114.     InteriorInfo[id][iXX] = exitx;
  115.     InteriorInfo[id][iYY] = exity;
  116.     InteriorInfo[id][iZZ] = exitz;
  117.     InteriorInfo[id][iAZZ] = exitaz;
  118.     InteriorInfo[id][iInteriorIn] = interiorin;
  119.     InteriorInfo[id][iVWIN] = vwin;
  120.     InteriorInfo[id][iInterorOut] = interiorout;
  121.     InteriorInfo[id][iVWOUT] = interiorout;
  122.     InteriorInfo[id][iUsing] = 1;
  123.     iText[id] = Create3DTextLabel("Created", -1,InteriorInfo[id][iX], InteriorInfo[id][iY], InteriorInfo[id][iZ], 20.0, InteriorInfo[id][iVWIN], 1);
  124.     InteriorLP(id);
  125.     InteriorInfo[id][iPickup] = CreatePickup(1239, 1, InteriorInfo[id][iX], InteriorInfo[id][iY], InteriorInfo[id][iZ], InteriorInfo[id][iVWIN]);
  126.     InteriorInfo[id][iPickupp] = CreatePickup(1239, 1, InteriorInfo[id][iXX], InteriorInfo[id][iYY], InteriorInfo[id][iZZ], InteriorInfo[id][iVWOUT]);
  127.     //OnInteriorCreated(id,name[],Float:enterx,Float:entery,Float:enterz,Float:enteraz,Float:exitx,Float:exity,Float:exitz,Float:exitaz,interiorin,vwin,interiorout,vwout);
  128.     CallLocalFunction("OnInteriorCreated", "dsffffffffdddd", id,name,enterx,entery,enterz,enteraz,exitx,exity,exitz,exitaz,interiorin,vwin,interiorout,vwout);
  129.     return id;
  130. }
  131.  
  132. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  133. {
  134.     if(PRESSED(KEY_SECONDARY_ATTACK))
  135.     {
  136.         if(!IsPlayerInAnyVehicle(playerid))
  137.         {
  138.             for(new i=0;i<MAX_INTERIORS;i++)
  139.             {
  140.                 if(InteriorInfo[i][iUsing] == 1)
  141.                 {
  142.                     if(!IsPlayerInInterior(playerid))
  143.                     {
  144.                         if(IsPlayerInRangeOfPoint(playerid,2.0,InteriorInfo[i][iX], InteriorInfo[i][iY], InteriorInfo[i][iZ]))
  145.                         {
  146.                             //OnPlayerTryToEnterInInterior(playerid,InteriorInfo[i][iID]);
  147.                             new rt;
  148.                             rt = CallLocalFunction("OnPlayerTryToEnterInInterior", "dd",playerid,InteriorInfo[i][iID]);
  149.                             if(rt == 0) return 1;
  150.                             PortPlayerInInterior(playerid,InteriorInfo[i][iID]);
  151.                             //OnPlayerEnterInInterior(playerid,InteriorInfo[i][iID]);
  152.                             CallLocalFunction("OnPlayerEnterInInterior", "dd",playerid,InteriorInfo[i][iID]);
  153.                         }
  154.                     }
  155.                     else if(IsPlayerInInterior(playerid))
  156.                     {
  157.                         if(IsPlayerInRangeOfPoint(playerid,2.0,InteriorInfo[i][iXX], InteriorInfo[i][iYY], InteriorInfo[i][iZZ]))
  158.                         {
  159.                             //OnPlayerTryToExitInInterior(playerid,InteriorInfo[i][iID]);
  160.                             new rtt;
  161.                             rtt = CallLocalFunction("OnPlayerTryToExitInInterior", "dd",playerid,InteriorInfo[i][iID]);
  162.                             if(rtt == 0) return 1;
  163.                             PortPlayerOutOfInterior(playerid,GetPlayerInteriorID(playerid));
  164.                             //OnPlayerExitFromInterior(playerid,InteriorInfo[i][iID]);
  165.                             CallLocalFunction("OnPlayerExitFromInterior", "dd",playerid,InteriorInfo[i][iID]);
  166.                         }
  167.                     }
  168.                 }
  169.             }
  170.         }
  171.     }
  172.     return 1;
  173. }
  174.  
  175. stock PortPlayerInInterior(playerid,interiorid)
  176. {
  177.     SetPlayerPos(playerid,InteriorInfo[interiorid][iXX],InteriorInfo[interiorid][iYY],InteriorInfo[interiorid][iZZ]);
  178.     SetPlayerFacingAngle(playerid,InteriorInfo[interiorid][iAZZ]);
  179.     SetPlayerVirtualWorld(playerid,InteriorInfo[interiorid][iVWOUT]);
  180.     SetPlayerInterior(playerid,InteriorInfo[interiorid][iInterorOut]);
  181.     InInterior[playerid]=interiorid;
  182.     return 1;
  183. }
  184.  
  185. stock PortPlayerOutOfInterior(playerid,interiorid)
  186. {
  187.     SetPlayerPos(playerid,InteriorInfo[interiorid][iX],InteriorInfo[interiorid][iY],InteriorInfo[interiorid][iZ]);
  188.     SetPlayerFacingAngle(playerid,InteriorInfo[interiorid][iAZ]);
  189.     SetPlayerVirtualWorld(playerid,InteriorInfo[interiorid][iVWIN]);
  190.     SetPlayerInterior(playerid,InteriorInfo[interiorid][iInteriorIn]);
  191.     InInterior[playerid]=-1;
  192.     return 1;
  193. }
  194.  
  195. stock GetPlayerInteriorID(playerid) return InInterior[playerid];
  196.  
  197. stock IsPlayerInInterior(playerid) { if(GetPlayerInteriorID(playerid) == -1) { return false; } else { return true; } }
  198.  
  199. stock DestroyInterior(id)
  200. {
  201.     if(InteriorInfo[id][iUsing] == 0)
  202.     {
  203.         print("[ERROR]");
  204.         printf("Interior %d do not exist!",id);
  205.         return -1;
  206.     }
  207.     strmid(InteriorInfo[id][iName], "Destroyed", 0, strlen("Destroyed"), 24);
  208.     InteriorInfo[id][iX] = 0.0;
  209.     InteriorInfo[id][iY] = 0.0;
  210.     InteriorInfo[id][iZ] = 0.0;
  211.     InteriorInfo[id][iAZ] = 0.0;
  212.     InteriorInfo[id][iXX] = 0.0;
  213.     InteriorInfo[id][iYY] = 0.0;
  214.     InteriorInfo[id][iZZ] = 0.0;
  215.     InteriorInfo[id][iAZZ] = 0.0;
  216.     InteriorInfo[id][iInteriorIn] = 0;
  217.     InteriorInfo[id][iVWIN] = 0;
  218.     InteriorInfo[id][iInterorOut] = 0;
  219.     InteriorInfo[id][iVWOUT] = 0;
  220.     InteriorInfo[id][iUsing] = 0;
  221.     Delete3DTextLabel(iText[id]);
  222.     DestroyPickup(InteriorInfo[id][iPickup]);
  223.     DestroyPickup(InteriorInfo[id][iPickupp]);
  224.     printf("Interior %d destroyed!",id);
  225.     //OnInteriorDestroyed(id);
  226.     CallLocalFunction("OnInteriorDestroyed", "d",id);
  227.     return 1;
  228. }
  229.  
  230. stock ResetPlayerInterior(playerid) return InInterior[playerid]=-1;
  231.  
  232. stock ChangeInteriorName(interiorid,name[])
  233. {
  234.     strmid(InteriorInfo[interiorid][iName], name, 0, strlen(name), 24);
  235.     InteriorLP(interiorid);
  236.     CallLocalFunction("OnInteriorsNameChanged","ds",interiorid,name);
  237.     return 1;
  238. }
  239.  
  240. stock IsInteriorExist(interiorid) { if(InteriorInfo[interiorid][iUsing] == 0) { return false; } else { return true; } }
Advertisement
Add Comment
Please, Sign In to add comment