Advertisement
Guest User

Untitled

a guest
Feb 3rd, 2016
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.28 KB | None | 0 0
  1. #if defined _editarea_included_
  2.     #endinput
  3. #endif
  4. #define _editarea_included_
  5.  
  6. #include a_samp.inc
  7.  
  8.  
  9. //---------------------------------------------------//
  10. //  PlayerEditArea v1.0 by  Patryk "Maku" Makowski  //
  11. //---------------------------------------------------//
  12.  
  13.  
  14. /*
  15.     PlayerEditArea(playerid, areaid);
  16.     IsPlayerEditArea(playerid);
  17.     OnPlayerEditAreaFinish(playerid, areaid, Float:minx, Float:maxx, Float:miny, Float:maxy, success);
  18.     OnPlayerEditAreaUpdate(playerid, areaid, Float:minx, Float:maxx, Float:miny, Float:maxy);
  19. */
  20. #define UNDEFINED_EDITAREA -1
  21.  
  22. #define EDITAREA_REASON_SUCCESS 1
  23. #define EDITAREA_REASON_FAIL 0
  24. #define EDITAREA_REASON_CANCEL 2
  25.  
  26. #define EDITAREA_FINISHKEY KEY_SECONDARY_ATTACK
  27. #define EDITAREA_CANCELKEY  KEY_JUMP
  28.  
  29. #define EDITAREA_OBJECTID 1318
  30. #define EDITAREA_CAMERACHANGE (60.0)
  31.  
  32. forward OnPlayerEditAreaFinish(playerid, areaid, Float:minx, Float:maxx, Float:miny, Float:maxy, success);
  33. forward OnPlayerEditAreaUpdate(playerid, areaid, Float:minx, Float:maxx, Float:miny, Float:maxy);
  34.  
  35. static PlayerObjects_EA[MAX_PLAYERS][40];
  36. static PlayerEdit_EA[MAX_PLAYERS] = {UNDEFINED_EDITAREA,...};
  37. static Float:PlayerArea_EA[MAX_PLAYERS][2];
  38.  
  39. stock IsPlayerEditArea(playerid)
  40. {
  41.     if(PlayerEdit_EA[playerid] == -1) return false;
  42.    
  43.     return true;
  44. }
  45.  
  46. public OnPlayerDisconnect(playerid, reason)
  47. {
  48.     if(PlayerEdit_EA[playerid] != UNDEFINED_EDITAREA) EditAreaFinish_(playerid, PlayerEdit_EA[playerid], 0.0,0.0, EDITAREA_REASON_FAIL);
  49.  
  50.     CallLocalFunction("EDAREA_OnPlayerDisconnect", "ii", playerid, reason);
  51.     return 1;
  52. }
  53.  
  54. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  55. {
  56.     if(PlayerEdit_EA[playerid] != UNDEFINED_EDITAREA)
  57.     {
  58.         if(newkeys & EDITAREA_CANCELKEY)
  59.         {
  60.             new Float:x, Float:y, Float:z;
  61.             GetPlayerPos(playerid, x,y,z);
  62.             EditAreaFinish_(playerid, PlayerEdit_EA[playerid], x,y, EDITAREA_REASON_CANCEL);
  63.             return 1;
  64.         }
  65.         if(newkeys & EDITAREA_FINISHKEY)
  66.         {      
  67.             new Float:x, Float:y, Float:z;
  68.             GetPlayerPos(playerid, x,y,z);
  69.             EditAreaFinish_(playerid, PlayerEdit_EA[playerid], x,y, EDITAREA_REASON_SUCCESS);
  70.             return 1;
  71.         }
  72.     }
  73.     CallLocalFunction("EDAREA_OnPlayerKeyStateChange", "iii", playerid, newkeys, oldkeys);
  74.     return 1;
  75. }
  76.  
  77. public OnPlayerStateChange(playerid, newstate, oldstate)
  78. {
  79.     if(newstate != PLAYER_STATE_ONFOOT && PlayerEdit_EA[playerid] != UNDEFINED_EDITAREA)
  80.     {
  81.         EditAreaFinish_(playerid, PlayerEdit_EA[playerid], 0.0,0.0, EDITAREA_REASON_FAIL);
  82.     }
  83.     CallLocalFunction("EDAREA_OnPlayerStateChange", "iii", playerid, newstate, oldstate);
  84.     return 1;
  85. }
  86.  
  87. stock EditAreaFinish_(playerid, areaid, Float:x, Float:y, success)
  88. {
  89.     for(new i; i < 40; i++) DestroyPlayerObject(playerid, PlayerObjects_EA[playerid][i]);
  90.    
  91.     new Float:minx, Float:miny, Float:maxx, Float:maxy;
  92.     if(PlayerArea_EA[playerid][0] > x) {
  93.         minx = x;
  94.         maxx = PlayerArea_EA[playerid][0];
  95.     } else {
  96.         minx = PlayerArea_EA[playerid][0];
  97.         maxx = x;
  98.     }
  99.     if(PlayerArea_EA[playerid][1] > y) {
  100.         miny = y;
  101.         maxy = PlayerArea_EA[playerid][1];
  102.     } else {
  103.         miny = PlayerArea_EA[playerid][1];
  104.         maxy = y;
  105.     }
  106.        
  107.     PlayerEdit_EA[playerid] = UNDEFINED_EDITAREA;
  108.     CallLocalFunction("OnPlayerEditAreaFinish", "iiffffi", playerid, areaid, minx, maxx, miny, maxy, success);
  109.     return 1;
  110. }
  111.  
  112. stock PlayerEditArea(playerid, areaid)
  113. {
  114.     if(!IsPlayerConnected(playerid) || areaid < 0 || areaid == UNDEFINED_EDITAREA) return 0;
  115.     if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return 0;
  116.     if(PlayerEdit_EA[playerid] != UNDEFINED_EDITAREA) return 0;
  117.    
  118.     PlayerEdit_EA[playerid] = areaid;
  119.    
  120.     new Float:ER_z;
  121.     GetPlayerPos(playerid, PlayerArea_EA[playerid][0], PlayerArea_EA[playerid][1], ER_z);
  122.  
  123.     PlayerObjects_EA[playerid][0] = CreatePlayerObject(playerid, EDITAREA_OBJECTID, PlayerArea_EA[playerid][0], PlayerArea_EA[playerid][1], ER_z + 0.75, 0.0, 0.0, 0.0, 500.0);
  124.     return 1;
  125. }
  126.  
  127. public OnPlayerUpdate(playerid)
  128. {
  129.     if(PlayerEdit_EA[playerid] != UNDEFINED_EDITAREA)
  130.     {
  131.         for(new i; i < 40; i++) if(IsValidPlayerObject(playerid, PlayerObjects_EA[playerid][i])) DestroyPlayerObject(playerid, PlayerObjects_EA[playerid][i]);
  132.        
  133.         new Float:x, Float:y, Float:z;
  134.         new Float:minx, Float:miny, Float:maxx, Float:maxy;
  135.         GetPlayerPos(playerid, x,y,z);
  136.         if(PlayerArea_EA[playerid][0] > x) {
  137.             minx = x;
  138.             maxx = PlayerArea_EA[playerid][0];
  139.         } else {
  140.             minx = PlayerArea_EA[playerid][0];
  141.             maxx = x;
  142.         }
  143.         if(PlayerArea_EA[playerid][1] > y) {
  144.             miny = y;
  145.             maxy = PlayerArea_EA[playerid][1];
  146.         } else {
  147.             miny = PlayerArea_EA[playerid][1];
  148.             maxy = y;
  149.         }
  150.         for(new i; i < 10; i++)
  151.         {
  152.             PlayerObjects_EA[playerid][i] = CreatePlayerObject(playerid, EDITAREA_OBJECTID, minx + (((maxx - minx) * 0.1) * i), miny, z + 0.75, 0.0, 0.0, 0.0, 500.0);
  153.                         PlayerObjects_EA[playerid][i+10] = CreatePlayerObject(playerid, EDITAREA_OBJECTID, minx + (((maxx - minx) * 0.1) * i), maxy, z + 0.75, 0.0, 0.0, 0.0, 500.0);
  154.             PlayerObjects_EA[playerid][i+20] = CreatePlayerObject(playerid, EDITAREA_OBJECTID, minx, maxy - (((maxy - miny) * 0.1) * i), z + 0.75, 0.0, 0.0, 0.0, 500.0);
  155.             PlayerObjects_EA[playerid][i+30] = CreatePlayerObject(playerid, EDITAREA_OBJECTID, maxx, maxy - (((maxy - miny) * 0.1) * i), z + 0.75, 0.0, 0.0, 0.0, 500.0);
  156.         }
  157.    
  158.         CallLocalFunction("OnPlayerEditAreaUpdate", "iiffff", playerid, PlayerEdit_EA[playerid], minx, maxx, miny, maxy);
  159.     }
  160.     CallLocalFunction("EDAREA_OnPlayerUpdate", "i", playerid);
  161.     return 1;
  162. }
  163.  
  164. #if defined _ALS_OnPlayerUpdate
  165.     #undef OnPlayerUpdate
  166. #else
  167.     #define _ALS_OnPlayerUpdate
  168. #endif
  169. #define OnPlayerUpdate EDAREA_OnPlayerUpdate
  170. forward EDAREA_OnPlayerUpdate(playerid);
  171.  
  172. #if defined _ALS_OnPlayerDisconnect
  173.     #undef OnPlayerDisconnect
  174. #else
  175.     #define _ALS_OnPlayerDisconnect
  176. #endif
  177. #define OnPlayerDisconnect EDAREA_OnPlayerDisconnect
  178. forward EDAREA_OnPlayerDisconnect(playerid, reason);
  179.  
  180.  
  181. #if defined _ALS_OnPlayerStateChange
  182.     #undef OnPlayerStateChange
  183. #else
  184.     #define _ALS_OnPlayerStateChange
  185. #endif
  186. #define OnPlayerStateChange EDAREA_OnPlayerStateChange
  187. forward EDAREA_OnPlayerStateChange(playerid, newstate, oldstate);
  188.  
  189.  
  190. #if defined _ALS_OnPlayerKeyStateChange
  191.     #undef OnPlayerKeyStateChange
  192. #else
  193.     #define _ALS_OnPlayerKeyStateChange
  194. #endif
  195. #define OnPlayerKeyStateChange EDAREA_OnPlayerKeyStateChange
  196. forward EDAREA_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement