Guest User

CarePackage v3

a guest
Jun 2nd, 2014
587
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.27 KB | None | 0 0
  1. #include <a_samp>
  2. #include <streamer>
  3. #include <zcmd>
  4. #include <foreach>
  5.  
  6. #define CAREPACKRESPAWN 120000
  7. enum cPack {
  8. bool:CarePackageUsed,
  9. bool:CarePackageLanded,
  10. bool:PlaneMoveStage,
  11. Float:CarePackageRotation,
  12. CarePackagePlane,
  13. CarePackageFlare,
  14. CarePackageParachute,
  15. CarePackageBox,
  16. CarePackageStuff,
  17. Float:CarePackageLand[3],
  18. Text3D:CarePackageText,
  19. CarePackageInterior,
  20. CarePackageWorld,
  21. }
  22. enum cPstuff {
  23. type,
  24. id,
  25. name[26],
  26. value
  27. }
  28. new CarePackageContains[][cPstuff] = {
  29. {0,9,"Chainsaw",1},
  30. {0,22,"Colt-45",50},
  31. {0,23,"Colt-45 Silenced",50},
  32. {0,24,"Desert Eagle",50},
  33. {0,25,"Shotgun",50},
  34. {0,26,"Sawnoff Shotgun",50},
  35. {0,27,"Combat Shotgun",50},
  36. {0,28,"Micro SMG/Uzi",50},
  37. {0,29,"MP5",50},
  38. {0,30,"AK-47",50},
  39. {0,31,"M4",50},
  40. {0,32,"TEC-9",50},
  41. {0,33,"Country Rifle",50},
  42. {0,34,"Sniper Rifle",50},
  43. {0,35,"RPG",50},
  44. {0,36,"Heat Seeker",50},
  45. //{0,38,"Minigun",50},
  46. {0,37,"Flamethrower",50}
  47. };
  48. #define MAX_CARE_PACKAGES 25
  49. new pCarePackage[MAX_CARE_PACKAGES][cPack];
  50. new Iterator:CarePackages<MAX_CARE_PACKAGES>;
  51. new CarePackageDespawnTimer[MAX_CARE_PACKAGES];
  52. public OnFilterScriptInit() {
  53. print("\n--------------------------------------");
  54. print("Care Package System by EvilShadeZ");
  55. print("--------------------------------------\n");
  56. return 1;
  57. }
  58. CMD:carepackage(playerid, params[])
  59. {
  60. //if(pCarePackage[playerid][CarePackageUsed] == true) return SendClientMessage(playerid,0xFF0000FF,"Care package is already incomming");
  61. new Float:X,Float:Y,Float:Z;
  62. GetPlayerPos(playerid,Float:X,Float:Y,Float:Z);
  63. if(!CreateCarePackageForPlayer(playerid,Float:X,Float:Y,Float:Z)) return SendClientMessage(playerid,0xFF0000FF,"Care package limit reached!");
  64. return 1;
  65. }
  66. stock CreateCarePackageForPlayer(playerid,Float:X,Float:Y,Float:Z) {
  67. new carepackid;
  68. for(new i = 0; i < MAX_CARE_PACKAGES; i++) {
  69. if(pCarePackage[i][CarePackageUsed] == false) {
  70. carepackid = i;
  71. break;
  72. }
  73. if( i == MAX_CARE_PACKAGES-1) {
  74. return 0;
  75. }
  76. }
  77. Iter_Add(CarePackages,carepackid);
  78. new angle = random(360);
  79. pCarePackage[carepackid][CarePackageUsed] = true;
  80. pCarePackage[carepackid][PlaneMoveStage] = false;
  81. pCarePackage[carepackid][CarePackageFlare] = CreateDynamicObject(18728,X,Y,Z-2,0,0,0,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid),-1,250,250);
  82. pCarePackage[carepackid][CarePackageLand][0] = X;
  83. pCarePackage[carepackid][CarePackageLand][1] = Y;
  84. pCarePackage[carepackid][CarePackageLand][2] = Z-1.5;
  85. pCarePackage[carepackid][CarePackageRotation] = angle;
  86. pCarePackage[carepackid][CarePackageInterior] = GetPlayerInterior(playerid);
  87. pCarePackage[carepackid][CarePackageWorld] = GetPlayerVirtualWorld(playerid);
  88. GetXYFromPosWithAngle(X,Y,angle,300);
  89. pCarePackage[carepackid][CarePackagePlane] = CreateDynamicObject(14553,X,Y,Z+75,11.9,0,-angle,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid),-1,500,500);
  90. MoveDynamicObject(pCarePackage[carepackid][CarePackagePlane], pCarePackage[playerid][CarePackageLand][0], pCarePackage[playerid][CarePackageLand][1], pCarePackage[playerid][CarePackageLand][2]+75, 30, 11.9, 0, -angle);
  91. foreach(new b : Player) Streamer_Update(b);
  92. pCarePackage[carepackid][CarePackageLanded] = false;
  93. return 1;
  94. }
  95. public OnDynamicObjectMoved(objectid) {
  96. foreach(new i : CarePackages) {
  97. if(objectid == pCarePackage[i][CarePackagePlane]) {
  98. if(pCarePackage[i][PlaneMoveStage] == false) {
  99. pCarePackage[i][PlaneMoveStage] = true;
  100. new Float:X,Float:Y,Float:Z,Float:PlaneFlyPos[2];
  101. GetDynamicObjectPos(objectid, X, Y, Z);
  102. PlaneFlyPos[0] = pCarePackage[i][CarePackageLand][0];
  103. PlaneFlyPos[1] = pCarePackage[i][CarePackageLand][1];
  104. GetXYFromPosWithAngle(PlaneFlyPos[0],PlaneFlyPos[1],pCarePackage[i][CarePackageRotation]+180,300);
  105. MoveDynamicObject(pCarePackage[i][CarePackagePlane], PlaneFlyPos[0], PlaneFlyPos[1], pCarePackage[i][CarePackageLand][2]+75, 30, 11.9, 0, -pCarePackage[i][CarePackageRotation]);
  106. //CarePackageParachute
  107. pCarePackage[i][CarePackageParachute] = CreateDynamicObject(2903,X,Y,Z,0,0,random(360),pCarePackage[i][CarePackageWorld],pCarePackage[i][CarePackageInterior],-1,200,200);
  108. MoveDynamicObject(pCarePackage[i][CarePackageParachute], pCarePackage[i][CarePackageLand][0], pCarePackage[i][CarePackageLand][1], pCarePackage[i][CarePackageLand][2], 15, 0, 0, random(360));
  109. foreach(new b : Player) Streamer_Update(b);
  110. break;
  111. } else if(pCarePackage[i][PlaneMoveStage] == true) {
  112. DestroyDynamicObject(pCarePackage[i][CarePackagePlane]);
  113. pCarePackage[i][CarePackagePlane] = -1;
  114. foreach(new b : Player) Streamer_Update(b);
  115. break;
  116. }
  117. } else if(objectid == pCarePackage[i][CarePackageParachute]) {
  118. pCarePackage[i][CarePackageBox] = CreateDynamicObject(3013,pCarePackage[i][CarePackageLand][0], pCarePackage[i][CarePackageLand][1], pCarePackage[i][CarePackageLand][2]+0.7,0,0,random(360),GetPlayerVirtualWorld(i),GetPlayerInterior(i),-1,200,200);
  119. //CarePackageContains[][cPstuff]
  120. pCarePackage[i][CarePackageStuff] = random(sizeof(CarePackageContains));
  121. new string[128];
  122. pCarePackage[i][CarePackageLanded] = true;
  123. format(string,128,"{FFAF00}[{F3FF02}CARE PACKAGE{FFAF00}]\n{FFFFFF}%s",CarePackageContains[pCarePackage[i][CarePackageStuff]][name]);
  124. pCarePackage[i][CarePackageText] = Create3DTextLabel(string, 0x008080FF, pCarePackage[i][CarePackageLand][0], pCarePackage[i][CarePackageLand][1], pCarePackage[i][CarePackageLand][2]+1, 40.0, pCarePackage[i][CarePackageWorld], 0);
  125. CarePackageDespawnTimer[i] = SetTimerEx("DespawnCarePackage",CAREPACKRESPAWN,false,"i",i);
  126. DestroyDynamicObject(objectid);
  127. DestroyDynamicObject(pCarePackage[i][CarePackageFlare]);
  128. pCarePackage[i][CarePackageParachute] = -1;
  129. pCarePackage[i][CarePackageFlare] = -1;
  130. foreach(new b : Player) Streamer_Update(b);
  131. break;
  132. }
  133. }
  134. }
  135. forward DespawnCarePackage(i);
  136. public DespawnCarePackage(i) {
  137. DestroyDynamicObject(pCarePackage[i][CarePackageBox]);
  138. Delete3DTextLabel(pCarePackage[i][CarePackageText]);
  139. pCarePackage[i][CarePackageBox] = -1;
  140. pCarePackage[i][CarePackageUsed] = false;
  141. pCarePackage[i][CarePackageLanded] = false;
  142. if(IsValidDynamicObject(pCarePackage[i][CarePackagePlane])) DestroyDynamicObject(pCarePackage[i][CarePackagePlane]);
  143. Iter_Remove(CarePackages,i);
  144. return 1;
  145. }
  146. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  147. {
  148. if (newkeys && KEY_SECONDARY_ATTACK)
  149. {
  150. foreach(new i : CarePackages) {
  151. if(pCarePackage[i][CarePackageUsed] == true && pCarePackage[i][CarePackageLanded] == true) {
  152. if(IsPlayerInRangeOfPoint(playerid,2,pCarePackage[i][CarePackageLand][0], pCarePackage[i][CarePackageLand][1], pCarePackage[i][CarePackageLand][2])) {
  153. KillTimer(CarePackageDespawnTimer[i]);
  154. DestroyDynamicObject(pCarePackage[i][CarePackageBox]);
  155. Delete3DTextLabel(pCarePackage[i][CarePackageText]);
  156. pCarePackage[i][CarePackageBox] = -1;
  157. new string[128];
  158. format(string,sizeof(string),"{FFAF00}[{F3FF02}CARE PACKAGE{FFAF00}]{FFFFFF} You've picked up %s from care package.",CarePackageContains[pCarePackage[i][CarePackageStuff]][name]);
  159. SendClientMessage(playerid,0xFFFFFFFF,string);
  160. OnPlayerPickUpCarePackage(playerid,pCarePackage[i][CarePackageStuff]);
  161. pCarePackage[i][CarePackageUsed] = false;
  162. pCarePackage[i][CarePackageLanded] = false;
  163. if(IsValidDynamicObject(pCarePackage[i][CarePackagePlane])) DestroyDynamicObject(pCarePackage[i][CarePackagePlane]);
  164. Iter_Remove(CarePackages,i);
  165. break;
  166. }
  167. }
  168. }
  169. }
  170. return 1;
  171. }
  172. forward OnPlayerPickUpCarePackage(playerid,pickupid);
  173. public OnPlayerPickUpCarePackage(playerid,pickupid) {
  174. if(CarePackageContains[pickupid][type] == 0) GivePlayerWeapon(playerid,CarePackageContains[pickupid][id],CarePackageContains[pickupid][value]);
  175.  
  176. }
  177. GetXYFromPosWithAngle(&Float:x, &Float:y,Float:Angle,Float:distance) {
  178. x += (distance * floatsin(Angle, degrees));
  179. y += (distance * floatcos(Angle, degrees));
  180. }
Advertisement
Add Comment
Please, Sign In to add comment