Advertisement
Guest User

Untitled

a guest
Jul 27th, 2014
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.74 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <zombieplague>
  3. #include <fakemeta>
  4. #include <engine>
  5. #include <fun>
  6. #include <hamsandwich>
  7. #include <zmvip>
  8.  
  9. /* L4D Tank Zombie
  10. by x[L]eoNNN
  11.  
  12. #Description :
  13.  
  14. this is a Zombie Class of Famous Game, "L4d" with the ability to throw rocks at enemies,
  15. either killing him, infecting taking life, etc. (controlled by a cvar)
  16.  
  17. #Cvars :
  18.  
  19. zp_tank_rockspeed 700 // Rock Speed Launched by Tank
  20. zp_tank_rockdamage 70 // damage done by the rock
  21. zp_tank_rockreward 1 // Ammo Pack's Reward by touching the enemy with the rock
  22. zp_tank_rockmode 1 // Rock Mode :
  23. 1 = Take Damage
  24. 2 = Killing
  25. 3 = Infect
  26. 4 = Bad Aim
  27. zp_tank_rock_energynesesary 20 // energy nesesary to launch a rock
  28.  
  29. #Changelog :
  30.  
  31. v1.0: public release
  32. v1.1: print messages changed to hudmessages (for spam), fix time reload bug,add effect touching rock
  33. v1.2: fix a survivor bugs', To break an entity "func_breakable" when the rock touches the entity,
  34. fix a problem with logs : native error : get_user_origin.
  35. */
  36. new const zclass_name[] = { "L4D Tank Zombie" }
  37. new const zclass_info[] = { "Launch Rocks" }
  38. new const zclass_model[] = { "zml_zombi" }
  39. new const zclass_clawmodel[] = { "v_zml_bunny.mdl" }
  40. const zclass_health = 1800
  41. const zclass_speed = 240
  42. const Float:zclass_gravity = 1.0
  43. const Float:zclass_knockback = 1.0
  44.  
  45. new g_L4dTank
  46.  
  47. new g_trailSprite, rockmodel
  48. new g_trail[] = "sprites/xbeam3.spr"
  49. new rock_model[] = "models/rockgibs.mdl"
  50. new rock_model2[] = "models/rockgibs.mdl"
  51. new tank_rocklaunch[] = "zombie_plague/tank_rocklaunch.wav"
  52.  
  53.  
  54. new g_power[33]
  55.  
  56. new cvar_rock_damage, cvar_rock_reward, cvar_rockmode, cvar_rockEnergyNesesary, cvar_rock_speed, cvar_reloadpower
  57.  
  58. public plugin_init()
  59. {
  60. register_plugin("[ZP] Zombie Class: L4D Tank Zombie", "1.2", "x[L]eoNNN")
  61.  
  62. cvar_rock_speed = register_cvar("zp_tank_rockspeed", "700")
  63. cvar_rock_damage = register_cvar("zp_tank_rockdamage", "70")
  64. cvar_rock_reward = register_cvar("zp_tank_rockreward", "1")
  65. cvar_rockmode = register_cvar("zp_tank_rockmode", "1")
  66. cvar_rockEnergyNesesary = register_cvar("zp_tank_rock_energynesesary", "20")
  67. cvar_reloadpower = register_cvar("zp_tank_reload_power", "1")
  68. register_touch("rock_ent","*","RockTouch")
  69. register_forward(FM_CmdStart, "CmdStart" )
  70. }
  71.  
  72. public plugin_precache()
  73. {
  74. g_L4dTank = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
  75. g_trailSprite = precache_model(g_trail)
  76. rockmodel = precache_model(rock_model)
  77. precache_sound(tank_rocklaunch)
  78. }
  79. public zp_user_infected_pre(id) {
  80. if(zv_get_user_flags(id) == 0) {
  81. if(zp_get_user_next_class(id) == g_L4dTank) {
  82. zp_set_user_zombie_class(id, 0)
  83. client_print(id, print_center, "Your selected class in only for *VIP* members")
  84. client_print(id, print_chat, "Your selected class in only for *VIP* members. Changed to default zombie class.")
  85. }
  86. }
  87. }
  88.  
  89. public zp_user_infected_post ( id, infector )
  90. {
  91. if (zp_get_user_zombie_class(id) == g_L4dTank)
  92. {
  93. print_chatColor(id, "\g[ZP]\n You Are A \gL4D Tank\n, You Cant Launch Rock With \tIN_USE [+E]")
  94. g_power[id] = get_pcvar_num(cvar_rockEnergyNesesary)
  95. set_task(get_pcvar_float(cvar_reloadpower), "power1", id, _, _, "b")
  96. }
  97. }
  98.  
  99. public CmdStart( const id, const uc_handle, random_seed )
  100. {
  101. if(!is_user_alive(id))
  102. return FMRES_IGNORED;
  103.  
  104. if(!zp_get_user_zombie(id) || zp_get_user_nemesis(id))
  105. return FMRES_IGNORED;
  106.  
  107. new button = pev(id, pev_button)
  108. new oldbutton = pev(id, pev_oldbuttons)
  109.  
  110. if (zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_L4dTank))
  111. if(oldbutton & IN_USE && !(button & IN_USE))
  112. {
  113. if(g_power[id] >= get_pcvar_num(cvar_rockEnergyNesesary))
  114. {
  115. MakeRock(id)
  116. emit_sound(id, CHAN_STREAM, tank_rocklaunch, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  117. g_power[id] = 0
  118. }
  119. else
  120. {
  121. set_hudmessage(255, 0, 0, 0.0, 0.6, 0, 6.0, 3.0)
  122. show_hudmessage(id, "[ZP] Energy Nesesary To Launch Rock [%d] || You Energy [%d]", get_pcvar_num(cvar_rockEnergyNesesary), g_power[id])
  123. }
  124.  
  125. }
  126.  
  127. return FMRES_IGNORED
  128. }
  129.  
  130. public power1(id)
  131. {
  132. g_power[id] += 1
  133.  
  134. if( g_power[id] > get_pcvar_num(cvar_rockEnergyNesesary) )
  135. {
  136. g_power[id] = get_pcvar_num(cvar_rockEnergyNesesary)
  137. }
  138. }
  139.  
  140. public RockTouch( RockEnt, Touched )
  141. {
  142. if ( !pev_valid ( RockEnt ) )
  143. return
  144.  
  145. static Class[ 32 ]
  146. entity_get_string( Touched, EV_SZ_classname, Class, charsmax( Class ) )
  147. new Float:origin[3]
  148.  
  149. pev(Touched,pev_origin,origin)
  150.  
  151. if( equal( Class, "player" ) )
  152. if (is_user_alive(Touched))
  153. {
  154. if(!zp_get_user_zombie(Touched))
  155. {
  156. new TankKiller = entity_get_edict( RockEnt, EV_ENT_owner )
  157.  
  158. switch(get_pcvar_num(cvar_rockmode))
  159. {
  160. case 1: // Health
  161. {
  162. new iHealth = get_user_health(Touched)
  163.  
  164. if( iHealth >= 1 && iHealth <= get_pcvar_num(cvar_rock_damage))
  165. {
  166. ExecuteHamB( Ham_Killed, Touched, TankKiller, 0 )
  167. print_chatColor(TankKiller, "\g[ZP]\n You Receive \t%d\n Ammo Packs To Reach a Rock a Enemy", get_pcvar_num(cvar_rock_reward))
  168. zp_set_user_ammo_packs(TankKiller, zp_get_user_ammo_packs(TankKiller) + get_pcvar_num(cvar_rock_reward))
  169. }
  170. else
  171. {
  172. set_user_health(Touched, get_user_health(Touched) - get_pcvar_num(cvar_rock_damage))
  173. print_chatColor(TankKiller, "\g[ZP]\n You Receive \t%d\n Ammo Packs To Reach a Rock a Enemy", get_pcvar_num(cvar_rock_reward))
  174. zp_set_user_ammo_packs(TankKiller, zp_get_user_ammo_packs(TankKiller) + get_pcvar_num(cvar_rock_reward))
  175. }
  176. }
  177. case 2: // Kill
  178. {
  179. if(zp_get_user_survivor(Touched))
  180. return
  181.  
  182. ExecuteHamB( Ham_Killed, Touched, TankKiller, 0 )
  183. zp_set_user_ammo_packs(TankKiller, zp_get_user_ammo_packs(TankKiller) + get_pcvar_num(cvar_rock_reward))
  184. print_chatColor(TankKiller, "\g[ZP]\n You Receive \t%d\n Ammo Packs To Reach a Rock a Enemy", get_pcvar_num(cvar_rock_reward))
  185. }
  186. case 3: //infect
  187. {
  188. if(zp_get_user_survivor(Touched))
  189. return
  190.  
  191. zp_infect_user(Touched, TankKiller, 1, 1)
  192. print_chatColor(TankKiller, "\g[ZP]\n You Receive \t%d\n Ammo Packs To Reach a Rock a Enemy", get_pcvar_num(cvar_rock_reward))
  193. zp_set_user_ammo_packs(TankKiller, zp_get_user_ammo_packs(TankKiller) + get_pcvar_num(cvar_rock_reward))
  194.  
  195. }
  196. case 4: //BadAim
  197. {
  198. new Float:vec[3] = {100.0,100.0,100.0}
  199.  
  200. entity_set_vector(Touched,EV_VEC_punchangle,vec)
  201. entity_set_vector(Touched,EV_VEC_punchangle,vec)
  202. entity_set_vector(Touched,EV_VEC_punchangle,vec)
  203.  
  204. print_chatColor(TankKiller, "\g[ZP]\n You Receive \t%d\n Ammo Packs To Reach a Rock a Enemy", get_pcvar_num(cvar_rock_reward))
  205. zp_set_user_ammo_packs(TankKiller, zp_get_user_ammo_packs(TankKiller) + get_pcvar_num(cvar_rock_reward))
  206. set_task(1.50, "EndVictimAim", Touched)
  207. }
  208. }
  209. }
  210. }
  211.  
  212. if(equal(Class, "func_breakable") && entity_get_int(Touched, EV_INT_solid) != SOLID_NOT)
  213. force_use(RockEnt, Touched)
  214.  
  215. remove_entity(RockEnt)
  216.  
  217. if(!is_user_alive(Touched))
  218. return
  219.  
  220. static origin1[3]
  221. get_user_origin(Touched, origin1)
  222.  
  223. message_begin(MSG_BROADCAST,SVC_TEMPENTITY, origin1);
  224. write_byte(TE_BREAKMODEL);
  225. write_coord(origin1[0]);
  226. write_coord(origin1[1]);
  227. write_coord(origin1[2] + 24);
  228. write_coord(16);
  229. write_coord(16);
  230. write_coord(16);
  231. write_coord(random_num(-50,50));
  232. write_coord(random_num(-50,50));
  233. write_coord(25);
  234. write_byte(10);
  235. write_short(rockmodel);
  236. write_byte(10);
  237. write_byte(25);
  238. write_byte(0x01);
  239. message_end();
  240. }
  241.  
  242. public EndVictimAim(Touched)
  243. {
  244. new Float:vec[3] = {-100.0,-100.0,-100.0}
  245. entity_set_vector(Touched,EV_VEC_punchangle,vec)
  246. entity_set_vector(Touched,EV_VEC_punchangle,vec)
  247. entity_set_vector(Touched,EV_VEC_punchangle,vec)
  248. }
  249.  
  250. public MakeRock(id)
  251. {
  252.  
  253. new Float:Origin[3]
  254. new Float:Velocity[3]
  255. new Float:vAngle[3]
  256.  
  257. new RockSpeed = get_pcvar_num(cvar_rock_speed)
  258.  
  259. entity_get_vector(id, EV_VEC_origin , Origin)
  260. entity_get_vector(id, EV_VEC_v_angle, vAngle)
  261.  
  262. new NewEnt = create_entity("info_target")
  263.  
  264. entity_set_string(NewEnt, EV_SZ_classname, "rock_ent")
  265.  
  266. entity_set_model(NewEnt, rock_model2)
  267.  
  268. entity_set_size(NewEnt, Float:{-1.5, -1.5, -1.5}, Float:{1.5, 1.5, 1.5})
  269.  
  270. entity_set_origin(NewEnt, Origin)
  271. entity_set_vector(NewEnt, EV_VEC_angles, vAngle)
  272. entity_set_int(NewEnt, EV_INT_solid, 2)
  273.  
  274. entity_set_int(NewEnt, EV_INT_rendermode, 5)
  275. entity_set_float(NewEnt, EV_FL_renderamt, 200.0)
  276. entity_set_float(NewEnt, EV_FL_scale, 1.00)
  277.  
  278. entity_set_int(NewEnt, EV_INT_movetype, 5)
  279. entity_set_edict(NewEnt, EV_ENT_owner, id)
  280.  
  281. velocity_by_aim(id, RockSpeed , Velocity)
  282. entity_set_vector(NewEnt, EV_VEC_velocity ,Velocity)
  283.  
  284. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  285. write_byte(TE_BEAMFOLLOW)
  286. write_short(NewEnt)
  287. write_short(g_trailSprite)
  288. write_byte(10)
  289. write_byte(10)
  290. write_byte(255)
  291. write_byte(0)
  292. write_byte(0)
  293. write_byte(200)
  294. message_end()
  295.  
  296. return PLUGIN_HANDLED
  297. }
  298.  
  299. stock print_chatColor(const id,const input[], any:...)
  300. {
  301. new msg[191], players[32], count = 1;
  302. vformat(msg,190,input,3);
  303. replace_all(msg,190,"\g","^4");// green
  304. replace_all(msg,190,"\n","^1");// normal
  305. replace_all(msg,190,"\t","^3");// team
  306.  
  307. if (id) players[0] = id; else get_players(players,count,"ch");
  308. for (new i=0;i<count;i++)
  309. if (is_user_connected(players[i]))
  310. {
  311. message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
  312. write_byte(players[i]);
  313. write_string(msg);
  314. message_end();
  315. }
  316. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement