HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <hamsandwich>
  3. #include <zombieplague>
  4. #include <fakemeta>
  5. /* WereWolf Zombie
  6. by x[L]eoNNN
  7.  
  8. #Description :
  9.  
  10. this is a Zombie Class of Famous Game, "L4d" with the ability to throw rocks at enemies,
  11. either killing him, infecting taking life, etc. (controlled by a cvar)
  12.  
  13. this is a Zombie Class that is Werewolf, alone which can be killed by silver bullets
  14. that are bought extra item
  15.  
  16. #Cvars :
  17.  
  18. zp_sb_oneround 1 // one round bullets
  19. zp_silver_bullets 30 // silver bullets
  20. zp_werewolf_killreward_enable 1 // 1 = enable ammo packs reward / 0 = disable
  21. zp_werewolf_killreward 4 // ammo packs reward for kill a werewolf
  22. zp_sb_effect 1 // silver bullets effect
  23. zp_werewolf_howling 1 // enable werewolf howling
  24. zp_werewolf_howling_time 5.0 // werewolf howling time
  25. zp_werewolf_howling_dontmove 1 // dont move in howling
  26.  
  27. #Changelog :
  28.  
  29. v1.0: public release
  30.  
  31. */
  32. new const zclass_name[] = { "WereWolf" } // name
  33. new const zclass_info[] = { "Only it can be killed by silver bullets" } // description
  34. new const zclass_model[] = { "zm_werewolf" } // model
  35. new const zclass_clawmodel[] = { "v_werewolf.mdl" } // claw model
  36. const zclass_health = 800 // health
  37. const zclass_speed = 200 // speed
  38. const Float:zclass_gravity = 1.0 // gravity
  39. const Float:zclass_knockback = 0.6 // knockback
  40.  
  41. new const howling_sounds[][] = { "zm_werewolf/werewolf1.wav", "zm_werewolf/werewolf2.wav" }
  42. new const silver_bullets_sprite[] = "sprites/dot.spr" // silver bullets sprite
  43.  
  44. new cvar_oneround, cvar_sb, cvar_rewardenable, cvar_reward, cvar_sb_effect, cvar_howling, cvar_dontmove,
  45. cvar_howlingtime, cvar_lasthowling, cvar_damage
  46.  
  47. new g_SBItemID, g_SBSpr, g_werewolf
  48. new bool: g_PlayerHaveSB[33], g_SilverBullets[33]
  49. new Float:g_last_howling[33]
  50.  
  51. public plugin_init()
  52. {
  53. register_plugin("[ZP] Zombie Class: Werewolf Zombie", "1.0", "xLeoNNN")
  54. register_event("CurWeapon", "event_CurWeapon", "be", "1=1", "3>0")
  55.  
  56. RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
  57. RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
  58. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  59.  
  60. register_forward(FM_CmdStart, "CmdStart" )
  61.  
  62. g_SBItemID = zp_register_extra_item("Buy Silver Bullets", 15, ZP_TEAM_HUMAN)
  63.  
  64. cvar_oneround = register_cvar("zp_sb_oneround", "1")
  65. cvar_sb = register_cvar("zp_silver_bullets", "30")
  66. cvar_rewardenable = register_cvar("zp_werewolf_killreward_enable", "1")
  67. cvar_reward = register_cvar("zp_werewolf_killreward", "4")
  68. cvar_sb_effect = register_cvar("zp_sb_effect", "1")
  69. cvar_howling = register_cvar("zp_werewolf_howling", "1")
  70. cvar_howlingtime = register_cvar("zp_werewolf_howling_time", "5.0")
  71. cvar_dontmove = register_cvar("zp_werewolf_howling_dontmove", "1")
  72. cvar_lasthowling = register_cvar( "zp_werewolf_last_howling_time", "20.0" )
  73. cvar_damage = register_cvar("zp_werewolf_damage","0.5")
  74. }
  75.  
  76. public plugin_precache()
  77. {
  78. g_werewolf = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
  79. g_SBSpr = precache_model(silver_bullets_sprite)
  80. static i
  81. for(i = 0; i < sizeof howling_sounds; i++)
  82. precache_sound(howling_sounds[i])
  83. }
  84.  
  85.  
  86. public zp_user_infected_post ( id, infector )
  87. {
  88. if (zp_get_user_zombie_class(id) == g_werewolf)
  89. {
  90. print_chatColor(id, "\g[ZP]\n Kivalasztottad a \gVerfarkas\n fajt, csak ezust golyoval tudnak megolni!!")
  91. }
  92. g_PlayerHaveSB[id] = false
  93. g_SilverBullets[id] = false
  94. }
  95.  
  96. public zp_user_humanized_post(id)
  97. {
  98. g_PlayerHaveSB[id] = false
  99. g_SilverBullets[id] = false
  100. }
  101.  
  102. public zp_extra_item_selected(id, itemid)
  103. {
  104. if (itemid == g_SBItemID)
  105. {
  106. print_chatColor(id, "\g[ZP]\n Vettel ezust golyokat!Meg tudod olni a \gverfarkasokat\n!!!")
  107. g_PlayerHaveSB[id] = true
  108. g_SilverBullets[id] = get_pcvar_num(cvar_sb)
  109. }
  110. }
  111.  
  112. public fw_PlayerKilled(victim, attacker, shouldgib)
  113. {
  114. g_PlayerHaveSB[victim] = false
  115. g_SilverBullets[victim] = false
  116.  
  117. if(g_PlayerHaveSB[attacker] && zp_get_user_zombie_class(victim) == g_werewolf)
  118. {
  119. if(get_pcvar_num(cvar_rewardenable))
  120. {
  121. print_chatColor(attacker, "\g[ZP]\n Kaptal \t%d\n loszercsomagot mert megoltel egy verfarkast!", get_pcvar_num(cvar_reward))
  122. zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + get_pcvar_num(cvar_reward))
  123. }
  124. }
  125. }
  126.  
  127. public client_connect(id)
  128. {
  129. g_PlayerHaveSB[id] = false
  130. g_SilverBullets[id] = false
  131. }
  132.  
  133. public client_disconnect(id)
  134. {
  135. g_PlayerHaveSB[id] = false
  136. g_SilverBullets[id] = false
  137. }
  138.  
  139. public fw_PlayerSpawn_Post(id)
  140. {
  141. if (!is_user_alive(id))
  142. return;
  143.  
  144. if(get_pcvar_num(cvar_oneround))
  145. {
  146. g_PlayerHaveSB[id] = false
  147. g_SilverBullets[id] = false
  148. }
  149. }
  150.  
  151. public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
  152. {
  153. if(!g_PlayerHaveSB[attacker] && zp_get_user_zombie_class(victim) == g_werewolf)
  154. {
  155. new Float: dmg;
  156.  
  157. dmg = get_pcvar_float(cvar_damage)
  158.  
  159. SetHamParamFloat(4, damage*dmg)
  160. return HAM_SUPERCEDE
  161. }
  162. else
  163. if(get_user_weapon(attacker) == CSW_KNIFE)
  164. if(zp_get_user_zombie_class(victim) == g_werewolf)
  165. return HAM_SUPERCEDE
  166.  
  167. return HAM_IGNORED
  168. }
  169.  
  170. public CmdStart( const id, const uc_handle, random_seed )
  171. {
  172. if(!is_user_alive(id))
  173. return FMRES_IGNORED;
  174.  
  175. if(!zp_get_user_zombie(id) || zp_get_user_nemesis(id))
  176. return FMRES_IGNORED;
  177.  
  178. new button = pev(id, pev_button)
  179. new oldbutton = pev(id, pev_oldbuttons)
  180.  
  181. if (zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_werewolf)
  182. {
  183. if(oldbutton & IN_RELOAD && !(button & IN_RELOAD))
  184. {
  185. if( get_gametime() - g_last_howling[id] < get_pcvar_float(cvar_lasthowling))
  186. {
  187. print_chatColor(id, "\g[ZP]\n Varnod kell %.f0 masodpercet hogy ujra uvolthess!", get_pcvar_float(cvar_lasthowling) - (get_gametime() - g_last_howling[id]))
  188. return PLUGIN_HANDLED
  189. }
  190.  
  191. g_last_howling[id] = get_gametime()
  192.  
  193. if(get_pcvar_num(cvar_howling))
  194. {
  195. emit_sound(id, CHAN_STREAM, howling_sounds[random_num(0, sizeof howling_sounds - 1)], 1.0, ATTN_NORM, 0, PITCH_HIGH )
  196. if(get_pcvar_num(cvar_dontmove))
  197. {
  198. set_pev(id , pev_velocity , { 0.0 , 0.0 , 0.0 } )
  199. set_pev(id, pev_flags, pev(id, pev_flags) | FL_FROZEN)
  200. set_task(get_pcvar_float(cvar_howlingtime), "set_vel", id)
  201. }
  202. }
  203. }
  204. }
  205. return FMRES_IGNORED
  206. }
  207.  
  208. public set_vel(id)
  209. set_pev(id , pev_flags , pev(id , pev_flags) & ~FL_FROZEN)
  210.  
  211. public event_CurWeapon(id)
  212. {
  213. new buttons = pev(id, pev_button)
  214. new oldbuttons = pev(id, pev_oldbuttons)
  215.  
  216. if(buttons & IN_ATTACK || oldbuttons & IN_ATTACK)
  217. {
  218. if (g_SilverBullets[id] > 0 && g_PlayerHaveSB[id] )
  219. {
  220. if(get_pcvar_num(cvar_sb_effect))
  221. {
  222. static Origin[3], Origin2[3]
  223. get_user_origin(id, Origin, 1)
  224. get_user_origin(id, Origin2, 4)
  225.  
  226. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  227. write_byte (0)
  228. write_coord(Origin[0])
  229. write_coord(Origin[1])
  230. write_coord(Origin[2])
  231. write_coord(Origin2[0])
  232. write_coord(Origin2[1])
  233. write_coord(Origin2[2])
  234. write_short(g_SBSpr)
  235. write_byte(1)
  236. write_byte(5)
  237. write_byte(2)
  238. write_byte(10)
  239. write_byte(0)
  240. write_byte(132)
  241. write_byte(132)
  242. write_byte(132)
  243. write_byte(200)
  244. write_byte(150)
  245. message_end()
  246. }
  247.  
  248. g_SilverBullets[id]--
  249. }
  250. }
  251. if(g_SilverBullets[id] <= 0)
  252. {
  253. g_PlayerHaveSB[id] = false
  254. g_SilverBullets[id] = 0
  255. }
  256. }
  257.  
  258.  
  259. stock print_chatColor(const id,const input[], any:...)
  260. {
  261. new msg[191], players[32], count = 1;
  262. vformat(msg,190,input,3);
  263. replace_all(msg,190,"\g","^4");// zold
  264. replace_all(msg,190,"\n","^1");// normal
  265. replace_all(msg,190,"\t","^3");// csapatszin
  266.  
  267. if (id) players[0] = id; else get_players(players,count,"ch");
  268. for (new i=0;i<count;i++)
  269. if (is_user_connected(players[i]))
  270. {
  271. message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
  272. write_byte(players[i]);
  273. write_string(msg);
  274. message_end();
  275. }
  276. }
  277. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  278. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1034\\ f0\\ fs16 \n\\ par }
  279. */
  280.