HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <cstrike>
  3. #include <engine>
  4.  
  5. new const PLUGIN[] = "Jetpack Lite";
  6. new const VERSION[] = "1.0";
  7. new const AUTHOR[] = "v3x";//Magyarosította: pocok5
  8.  
  9. new const CVAR_JP_ACTIVE[] = "jp_active";
  10. new const CVAR_JP_COST[] = "jp_cost";
  11. new const CVAR_JP_MAX[] = "jp_max";
  12. new const CVAR_JP_SPEED[] = "jp_speed";
  13. new const CVAR_JP_TRAIL[] = "jp_trail";
  14. new const CVAR_JP_DOD[] = "jp_dropondeath";
  15.  
  16. new JP_SOUND[] = "jetpack.wav";
  17.  
  18. new flame , smoke;
  19. new bool:has_jp[33];
  20. new bool:has_started;
  21. new frame[33];
  22. new current_jps;
  23.  
  24. public plugin_init() {
  25. register_plugin(PLUGIN , VERSION , AUTHOR);
  26.  
  27. register_clcmd("say /jetpack" , "ClCmd_BuyJP");
  28. register_clcmd("jetpack" , "ClCmd_BuyJP");
  29. register_clcmd("say /dropjp" , "drop_jp");
  30. register_clcmd("dropjp" , "drop_jp");
  31. //register_clcmd("amx_givejp" , "ClCmd_GiveJP");
  32.  
  33. register_cvar(CVAR_JP_ACTIVE , "1");
  34. register_cvar(CVAR_JP_COST , "2500");
  35. register_cvar(CVAR_JP_MAX , "4");
  36. register_cvar(CVAR_JP_SPEED , "500");
  37. register_cvar(CVAR_JP_TRAIL , "1");
  38. register_cvar(CVAR_JP_DOD , "1");
  39.  
  40. register_event("DeathMsg" , "Event_DeathMsg" , "a");
  41. register_event("HLTV" , "did_not_start" , "a" , "1=0" , "2=0");
  42.  
  43. register_logevent("did_start" , 2 , "1=Round_Start");
  44.  
  45. register_touch("jetpack" , "player" , "mmm_touchy");
  46.  
  47. set_task(300.0 , "Advertise");
  48. }
  49.  
  50. public Advertise() {
  51. if(get_cvar_num(CVAR_JP_ACTIVE)) {
  52. client_print(0 , print_chat, "* A Jetpack vételhez írd a chatbe /jetpack");
  53. }
  54. set_task(300.0 , "Advertise");
  55. }
  56.  
  57. public did_not_start() {
  58. has_started = false;
  59. new ent = -1;
  60. while((ent = find_ent_by_class(ent , "jetpack")) != 0) {
  61. remove_entity(ent);
  62. }
  63. current_jps = 0;
  64. new aPlayers[32] , iNum , i;
  65. get_players(aPlayers , iNum);
  66. for(i = 1; i <= iNum; i++) {
  67. if(has_jp[aPlayers[i]]) {
  68. current_jps++;
  69. }
  70. }
  71. }
  72.  
  73. public did_start() {
  74. has_started = true;
  75. }
  76.  
  77. public client_connect(id) {
  78. has_jp[id] = false;
  79. }
  80.  
  81. public client_disconnect(id) {
  82. has_jp[id] = false;
  83. }
  84.  
  85. public plugin_precache() {
  86. smoke = precache_model("sprites/lightsmoke.spr");
  87. flame = precache_model("sprites/rjet1.spr"); // bm1, rjet1, stmbal1, WXplo1, xsmoke1, lightsmoke
  88. precache_model("models/p_egon.mdl");
  89. precache_model("models/w_egon.mdl");
  90. precache_sound(JP_SOUND);
  91. }
  92.  
  93. public client_PreThink(id) {
  94. if(!get_cvar_num(CVAR_JP_ACTIVE)) {
  95. return PLUGIN_CONTINUE;
  96. }
  97. if(!is_user_connected(id) || !is_user_alive(id)) {
  98. return PLUGIN_CONTINUE;
  99. }
  100. if(!(get_user_button(id) & IN_JUMP)) {
  101. return PLUGIN_CONTINUE;
  102. }
  103. if(!has_started || !has_jp[id]) {
  104. return PLUGIN_CONTINUE;
  105. }
  106. new Float:fAim[3] , Float:fVelocity[3];
  107. VelocityByAim(id , get_cvar_num(CVAR_JP_SPEED) , fAim);
  108.  
  109. fVelocity[0] = fAim[0];
  110. fVelocity[1] = fAim[1];
  111. fVelocity[2] = fAim[2];
  112.  
  113. set_user_velocity(id , fVelocity);
  114.  
  115. entity_set_int(id , EV_INT_gaitsequence , 6);
  116.  
  117. emit_sound(id , CHAN_VOICE , JP_SOUND , 1.0 , ATTN_NORM , 0 , PITCH_NORM);
  118.  
  119. if(frame[id] >= 3) {
  120. frame[id] = 0;
  121. if(get_cvar_num(CVAR_JP_TRAIL)) {
  122. smoke_effect(id);
  123. }
  124. entity_set_string(id , EV_SZ_weaponmodel , "models/p_egon.mdl");
  125. }
  126. frame[id]++;
  127.  
  128. return PLUGIN_CONTINUE;
  129. }
  130.  
  131. public smoke_effect(id) {
  132. new origin[3];
  133. get_user_origin(id, origin, 0);
  134. origin[2] = origin[2] - 10;
  135.  
  136. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  137. write_byte(17);
  138. write_coord(origin[0]);
  139. write_coord(origin[1]);
  140. write_coord(origin[2]);
  141. write_short((get_cvar_num(CVAR_JP_TRAIL) == 1) ? smoke : flame);
  142. write_byte(10);
  143. write_byte(115);
  144. message_end();
  145. }
  146.  
  147. public Event_DeathMsg() {
  148. if(get_cvar_num(CVAR_JP_DOD)) {
  149. drop_jp(read_data(2));
  150. } else {
  151. has_jp[read_data(2)] = false;
  152. }
  153. }
  154.  
  155. public ClCmd_BuyJP(id) {
  156. if(!get_cvar_num(CVAR_JP_ACTIVE)) {
  157. client_print(id , print_chat , "[AMXX] Elnézést, de a Jetpack pillanatnyilag ki van kapcsolva");
  158. return PLUGIN_HANDLED;
  159. }
  160.  
  161. if(!is_user_alive(id)) {
  162. client_print(id , print_chat , "[AMXX] Nemvehetsz Jetpackot amíg halott vagy!");
  163. return PLUGIN_HANDLED;
  164. }
  165.  
  166. if(has_jp[id]) {
  167. client_print(id , print_chat , "[AMXX] Neked már van Jetpackod!");
  168. return PLUGIN_HANDLED;
  169. }
  170.  
  171. if(current_jps >= get_cvar_num(CVAR_JP_MAX)) {
  172. client_print(id , print_chat , "[AMXX] Nemvehetsz több Jetpackot, mivel már elérték a limitet!");
  173. return PLUGIN_HANDLED;
  174. }
  175.  
  176. new iMoney = cs_get_user_money(id) - get_cvar_num(CVAR_JP_COST);
  177.  
  178. if(iMoney < 0) {
  179. client_print(id , print_chat , "[AMXX] Nincs elég pénzed! Ára: $%d" , get_cvar_num(CVAR_JP_COST));
  180. return PLUGIN_HANDLED;
  181. }
  182.  
  183. cs_set_user_money(id , iMoney , 1);
  184.  
  185. has_jp[id] = true;
  186.  
  187. client_print(id , print_chat , "[AMXX] A Jetpack használatájoz használd az Ugrást+CTRL-t");
  188. client_print(id , print_chat , "[AMXX] A Jetpack eldobásához írrd be hogy /dropjp a chatbe");
  189.  
  190. emit_sound(id , CHAN_VOICE , "items/gunpickup2.wav" , 1.0 , ATTN_NORM , 0 , PITCH_NORM);
  191.  
  192. current_jps++;
  193.  
  194. return PLUGIN_HANDLED;
  195. }
  196.  
  197. public drop_jp(id) {
  198. if(!has_jp[id]) return PLUGIN_HANDLED;
  199.  
  200. new Float:fAim[3] , Float:fOrigin[3];
  201. VelocityByAim(id , 64 , fAim);
  202. entity_get_vector(id , EV_VEC_origin , fOrigin);
  203.  
  204. fOrigin[0] += fAim[0];
  205. fOrigin[1] += fAim[1];
  206.  
  207. new jp = create_entity("info_target");
  208.  
  209. entity_set_string(jp , EV_SZ_classname , "jetpack");
  210. entity_set_model(jp , "models/w_egon.mdl");
  211.  
  212. entity_set_size(jp , Float:{-16.0,-16.0,-16.0} , Float:{16.0,16.0,16.0});
  213.  
  214. entity_set_int(jp , EV_INT_solid , 1);
  215. entity_set_int(jp , EV_INT_movetype , 6);
  216.  
  217. entity_set_vector(jp , EV_VEC_origin , fOrigin);
  218.  
  219. has_jp[id] = false;
  220.  
  221. return PLUGIN_HANDLED;
  222. }
  223.  
  224. public mmm_touchy(jp , id) {
  225. if(!is_user_alive(id)) return PLUGIN_CONTINUE;
  226. if(has_jp[id]) return PLUGIN_CONTINUE;
  227.  
  228. has_jp[id] = true;
  229.  
  230. emit_sound(id , CHAN_VOICE , "items/gunpickup2.wav" , 1.0 , ATTN_NORM , 0 , PITCH_NORM);
  231.  
  232. remove_entity(jp);
  233.  
  234. return PLUGIN_CONTINUE;
  235. }