Advertisement
Guest User

PlayerEditRange

a guest
Jan 25th, 2015
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.13 KB | None | 0 0
  1. #if defined _editrange_included_
  2.     #endinput
  3. #endif
  4. #define _editrange_included_
  5.  
  6. #include a_samp.inc
  7.  
  8.  
  9. //---------------------------------------------------//
  10. //  PlayerEditRange v1.0 by  Patryk "Maku" Makowski  //
  11. //---------------------------------------------------//
  12.  
  13.  
  14. /*
  15.     PlayerEditRange(playerid, rangeid);
  16.     IsPlayerEditRange(playerid);
  17.     OnPlayerEditRangeFinish(playerid, rangeid, Float:range, success);
  18.     OnPlayerEditRangeUpdate(playerid, rangeid, Float:range);
  19. */
  20. #define UNDEFINED_EDITRANGE -1
  21.  
  22. #define EDITRANGE_REASON_SUCCESS 1
  23. #define EDITRANGE_REASON_FAIL 0
  24. #define EDITRANGE_REASON_CANCEL 2
  25.  
  26. #define EDITRANGE_UPKEY KEY_FIRE
  27. #define EDITRANGE_DOWNKEY KEY_HANDBRAKE /*= KEY_AIM*/
  28. #define EDITRANGE_FASTKEY KEY_SPRINT
  29. #define EDITRANGE_FINISHKEY KEY_SECONDARY_ATTACK
  30. #define EDITRANGE_CANCELKEY  KEY_JUMP
  31.  
  32. #define EDITRANGE_OBJECTID 19133
  33. #define EDITRANGE_CAMERACHANGE (60.0)
  34.  
  35. forward OnPlayerEditRangeFinish(playerid, rangeid, Float:range, success);
  36. forward OnPlayerEditRangeUpdate(playerid, rangeid, Float:range);
  37.  
  38. static PlayerObjects_ER[MAX_PLAYERS][20];
  39. static PlayerEdit_ER[MAX_PLAYERS] = {UNDEFINED_EDITRANGE,...};
  40. static Float:PlayerRange_ER[MAX_PLAYERS] = {0.0, ...};
  41.  
  42. stock IsPlayerEditRange(playerid)
  43. {
  44.     if(PlayerEdit_ER[playerid] == -1) return false;
  45.    
  46.     return true;
  47. }
  48.  
  49. public OnPlayerDisconnect(playerid, reason)
  50. {
  51.     if(PlayerEdit_ER[playerid] != UNDEFINED_EDITRANGE) EditRangeFinish_(playerid, PlayerEdit_ER[playerid], PlayerRange_ER[playerid], EDITRANGE_REASON_FAIL);
  52.  
  53.     CallLocalFunction("EDRANGE_OnPlayerDisconnect", "ii", playerid, reason);
  54.     return 1;
  55. }
  56.  
  57. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  58. {
  59.     if(PlayerEdit_ER[playerid] != UNDEFINED_EDITRANGE)
  60.     {
  61.         if(newkeys & EDITRANGE_UPKEY)
  62.         {
  63.             PlayerRange_ER[playerid] += 0.5;
  64.             if(newkeys & EDITRANGE_FASTKEY) PlayerRange_ER[playerid] += 1.5;
  65.            
  66.             new Float:ER_x, Float:ER_y, Float:ER_z;
  67.             GetPlayerPos(playerid, ER_x, ER_y, ER_z);
  68.             new Float:angle = 360.0;
  69.        
  70.             if(PlayerRange_ER[playerid] > EDITRANGE_CAMERACHANGE)
  71.             {
  72.                 SetPlayerCameraPos(playerid,
  73.                     ER_x + (PlayerRange_ER[playerid] * floatsin(-random(360), degrees)),
  74.                     ER_y + (PlayerRange_ER[playerid] * floatcos(-random(360), degrees)),
  75.                     1.0 + ER_z);
  76.                    
  77.             }else SetPlayerCameraPos(playerid, ER_x, ER_y, 0.5 + ER_z + PlayerRange_ER[playerid] * 2);
  78.            
  79.             SetPlayerCameraLookAt(playerid, ER_x, ER_y, ER_z);     
  80.        
  81.             for(new i; i < 20; i++) {
  82.                 DestroyPlayerObject(playerid, PlayerObjects_ER[playerid][i]);
  83.  
  84.                 PlayerObjects_ER[playerid][i] = CreatePlayerObject(playerid, EDITRANGE_OBJECTID,
  85.                     ER_x + (PlayerRange_ER[playerid] * floatsin(-angle, degrees)),
  86.                     ER_y + (PlayerRange_ER[playerid] * floatcos(-angle, degrees)),
  87.                     ER_z + 0.5, 0.0, 0.0, 0.0, PlayerRange_ER[playerid] + 50.0);
  88.                
  89.                 angle -= 18.0;
  90.             }
  91.             CallLocalFunction("OnPlayerEditRangeUpdate", "iif", playerid, PlayerEdit_ER[playerid], PlayerRange_ER[playerid]);
  92.             return 1;
  93.         }
  94.         if(newkeys & EDITRANGE_DOWNKEY && PlayerRange_ER[playerid] > 1.0)
  95.         {
  96.             PlayerRange_ER[playerid] -= 0.5;
  97.             if(newkeys & EDITRANGE_FASTKEY) PlayerRange_ER[playerid] -= 1.5;
  98.             if(PlayerRange_ER[playerid] < 1.0) PlayerRange_ER[playerid] = 1.0;
  99.  
  100.             new Float:ER_x, Float:ER_y, Float:ER_z;
  101.             GetPlayerPos(playerid, ER_x, ER_y, ER_z);
  102.             new Float:angle = 360.0;
  103.            
  104.             if(PlayerRange_ER[playerid] > EDITRANGE_CAMERACHANGE)
  105.             {
  106.                 SetPlayerCameraPos(playerid,
  107.                     ER_x + (PlayerRange_ER[playerid] * floatsin(-random(360), degrees)),
  108.                     ER_y + (PlayerRange_ER[playerid] * floatcos(-random(360), degrees)),
  109.                     1.0 + ER_z);
  110.                    
  111.             }else SetPlayerCameraPos(playerid, ER_x, ER_y, 0.5 + ER_z + PlayerRange_ER[playerid] * 2);
  112.            
  113.             SetPlayerCameraLookAt(playerid, ER_x, ER_y, ER_z)
  114.            
  115.             for(new i; i < 20; i++) {
  116.                 DestroyPlayerObject(playerid, PlayerObjects_ER[playerid][i]);
  117.                                
  118.                 PlayerObjects_ER[playerid][i] = CreatePlayerObject(playerid, EDITRANGE_OBJECTID,
  119.                     ER_x + (PlayerRange_ER[playerid] * floatsin(-angle, degrees)),
  120.                     ER_y + (PlayerRange_ER[playerid] * floatcos(-angle, degrees)),
  121.                     ER_z + 0.5, 0.0, 0.0, 0.0);
  122.                
  123.                 angle -= 18.0;
  124.             }
  125.             CallLocalFunction("OnPlayerEditRangeUpdate", "iif", playerid, PlayerEdit_ER[playerid], PlayerRange_ER[playerid]);
  126.             return 1;
  127.         }
  128.         if(newkeys & EDITRANGE_CANCELKEY)
  129.         {
  130.             EditRangeFinish_(playerid, PlayerEdit_ER[playerid], PlayerRange_ER[playerid], EDITRANGE_REASON_CANCEL);
  131.             return 1;
  132.         }
  133.         if(newkeys & EDITRANGE_FINISHKEY)
  134.         {      
  135.             EditRangeFinish_(playerid, PlayerEdit_ER[playerid], PlayerRange_ER[playerid], EDITRANGE_REASON_SUCCESS);
  136.             return 1;
  137.         }
  138.     }
  139.     CallLocalFunction("ERANGE_OnPlayerKeyStateChange", "iii", playerid, newkeys, oldkeys);
  140.     return 1;
  141. }
  142.  
  143. public OnPlayerStateChange(playerid, newstate, oldstate)
  144. {
  145.     if(newstate != PLAYER_STATE_ONFOOT && PlayerEdit_ER[playerid] != UNDEFINED_EDITRANGE)
  146.     {
  147.         EditRangeFinish_(playerid, PlayerEdit_ER[playerid], PlayerRange_ER[playerid], EDITRANGE_REASON_FAIL);
  148.     }
  149.     CallLocalFunction("EDRANGE_OnPlayerStateChange", "iii", playerid, newstate, oldstate);
  150.     return 1;
  151. }
  152.  
  153. stock EditRangeFinish_(playerid, rangeid, Float:range, success)
  154. {
  155.     for(new i; i < 20; i++) DestroyPlayerObject(playerid, PlayerObjects_ER[playerid][i]);
  156.                
  157.     TogglePlayerControllable(playerid, true);
  158.     PlayerEdit_ER[playerid] = UNDEFINED_EDITRANGE;
  159.     CallLocalFunction("OnPlayerEditRangeFinish", "iifi", playerid, rangeid, Float:range, success);
  160.     SetCameraBehindPlayer(playerid);
  161.     return 1;
  162. }
  163.  
  164. stock PlayerEditRange(playerid, rangeid)
  165. {
  166.     if(!IsPlayerConnected(playerid) || rangeid < 0 || rangeid == UNDEFINED_EDITRANGE) return 0;
  167.     if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return 0;
  168.     if(PlayerEdit_ER[playerid] != UNDEFINED_EDITRANGE) return 0;
  169.    
  170.     TogglePlayerControllable(playerid, false);
  171.     PlayerEdit_ER[playerid] = rangeid;
  172.     PlayerRange_ER[playerid] = 1.0;
  173.    
  174.     new Float:ER_x, Float:ER_y, Float:ER_z;
  175.     GetPlayerPos(playerid, ER_x, ER_y, ER_z);
  176.     new Float:angle = 360.0;
  177.     for(new i; i < 20; i++)
  178.     {              
  179.         PlayerObjects_ER[playerid][i] = CreatePlayerObject(playerid, EDITRANGE_OBJECTID,
  180.             ER_x + (PlayerRange_ER[playerid] * floatsin(-angle, degrees)),
  181.             ER_y + (PlayerRange_ER[playerid] * floatcos(-angle, degrees)),
  182.             ER_z + 0.5, 0.0, 0.0, 0.0);
  183.                
  184.         angle -= 18.0;
  185.     }
  186.    
  187.     SetPlayerCameraPos(playerid, ER_x, ER_y,  0.5 + ER_z + PlayerRange_ER[playerid] * 2);
  188.     SetPlayerCameraLookAt(playerid, ER_x, ER_y, ER_z);
  189.     return 1;
  190. }
  191.  
  192. #if defined _ALS_OnPlayerDisconnect
  193.     #undef OnPlayerDisconnect
  194. #else
  195.     #define _ALS_OnPlayerDisconnect
  196. #endif
  197. #define OnPlayerDisconnect EDRANGE_OnPlayerDisconnect
  198. forward EDRANGE_OnPlayerDisconnect(playerid, reason);
  199.  
  200.  
  201. #if defined _ALS_OnPlayerStateChange
  202.     #undef OnPlayerStateChange
  203. #else
  204.     #define _ALS_OnPlayerStateChange
  205. #endif
  206. #define OnPlayerStateChange EDRANGE_OnPlayerStateChange
  207. forward EDRANGE_OnPlayerStateChange(playerid, newstate, oldstate);
  208.  
  209.  
  210. #if defined _ALS_OnPlayerKeyStateChange
  211.     #undef OnPlayerKeyStateChange
  212. #else
  213.     #define _ALS_OnPlayerKeyStateChange
  214. #endif
  215. #define OnPlayerKeyStateChange ERANGE_OnPlayerKeyStateChange
  216. forward ERANGE_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement