Raised This Month: $12 Target: $400
 3% 

Swarm classes


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
edga85
BANNED
Join Date: Jan 2009
Old 10-19-2009 , 12:36   Swarm classes
Reply With Quote #1

How i need to do that swarm had classes?
Like these, but this has made for plague how to change for Swarm?
PHP Code:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <zombieplague> 
#include <fun>
new const sprite_grenade_glass[] = { "models/glassgibs.mdl" }
new const 
grenade_frost_break[][] = { "warcraft3/impalelaunch1.wav" }
new const 
grenade_frost_player[][] = { "warcraft3/impalehit.wav" }
const 
BREAK_GLASS 0x01
const UNIT_SECOND = (1<<12)
const 
FFADE_IN 0x0000
new dano_multiplicado[33]
new 
witch_dmg
new const zclass14_name[] = { "Zombie Witch" }
new const 
zclass14_info[] = { "(Paralyze & 2x More Damage)" }
new const 
zclass14_model[] = { "zm_witch" }
new const 
zclass14_clawmodel[] = { "v_knife_witch.mdl" }
const 
zclass14_health 1600
const zclass14_speed 230
const Float:zclass14_gravity 0.9
const Float:zclass14_knockback 0.9
new g_zclass14
new cvar_freezedurationg_glassSprg_msgScreenFadecvar_humangravity
new g_frozen[33]
new 
g_zombie[33]
new Array:
g_zclass_grav
new g_zombieclass[33]
new 
cvar_nemgravity
new cvar_survgravity
public plugin_init()
{
register_forward(FM_PlayerPreThink"fw_PlayerPreThink")
register_event("HLTV""event_new_round""a""1=0""2=0")
register_event("DeathMsg""event_DeathMsg""a");
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage")
witch_dmg register_cvar("zp_witch_damage""2.0")
cvar_freezeduration get_cvar_pointer("zp_frost_duration")
cvar_humangravity get_cvar_pointer("zp_human_gravity")
cvar_nemgravity get_cvar_pointer("zp_nem_gravity")
cvar_survgravity get_cvar_pointer("zp_surv_gravity")
g_msgScreenFade get_user_msgid("ScreenFade")
}
public 
plugin_precache()
{
register_plugin("[ZP] Zombie Class: Witch""1.2""Bummps")

new 
i

for (0sizeof grenade_frost_breaki++)
engfunc(EngFunc_PrecacheSoundgrenade_frost_break[i])

for (
0sizeof grenade_frost_playeri++)
engfunc(EngFunc_PrecacheSoundgrenade_frost_player[i])

g_glassSpr engfunc(EngFunc_PrecacheModelsprite_grenade_glass)
g_zclass14 zp_register_zombie_class(zclass14_namezclass14_infozclass14_modelzclass14_clawmodelzclass14_healthzclass14_speedzclass14_gravityzclass14_knockback)
}
public 
client_connect(id)
{
dano_multiplicado[id] = false
remove_freeze
(id)
}
public 
event_new_round(id)
{
dano_multiplicado[id] = false
remove_freeze
(id)
}
public 
client_disconnect(id)
{
dano_multiplicado[id] = false
remove_freeze
(id)
}
public 
event_DeathMsg(id)
{
dano_multiplicado[id] = false
remove_freeze
(id)
}
public 
zp_user_humanized_post(id)
{
dano_multiplicado[id] = false
remove_freeze
(id)
}
public 
zp_user_humanized_pre(id)
{
dano_multiplicado[id] = false
remove_freeze
(id)
}
public 
fw_PlayerPreThink(id)
{
if (!
is_user_alive(id))
return;
if (
g_frozen[id])
{
set_pev(idpev_velocityFloat:{0.0,0.0,0.0})
set_pev(idpev_maxspeed1.0
}
}
public 
zp_user_infected_post(idinfector)

if (
zp_get_user_zombie_class(id) == g_zclass14
{
dano_multiplicado[id] = true


public 
fw_TakeDamage(victiminflictorattackerFloat:damage)
{
if ( 
is_user_aliveattacker ) && get_user_weapon(attacker) == CSW_KNIFE && dano_multiplicado[attacker] && zp_get_user_zombie_class(attacker) == g_zclass14 && g_zombie[attacker] )

SetHamParamFloat(4damage get_pcvar_floatwitch_dmg ) )
frost_victim(victim)
}
}
public 
frost_victim(victim)
{
if (!
is_user_alive(victim) || g_frozen[victim])
return;
#if defined HANDLE_MODELS_ON_SEPARATE_ENT
fm_set_rendering(g_ent_playermodel[victim], kRenderFxGlowShell0100200kRenderNormal25)
#else
fm_set_rendering(victimkRenderFxGlowShell0100200kRenderNormal25)
#endif
engfunc(EngFunc_EmitSoundvictimCHAN_BODYgrenade_frost_player[random_num(0sizeof grenade_frost_player 1)], 1.0ATTN_NORM0PITCH_NORM)
static 
Float:freezeduration
freezeduration 
get_pcvar_float(cvar_freezeduration)
message_begin(MSG_ONE_UNRELIABLEg_msgScreenFade_victim)
write_short(UNIT_SECOND*1)
write_short(floatround(UNIT_SECOND*freezeduration))
write_short(FFADE_IN)
write_byte(0)
write_byte(50
write_byte(200)
write_byte(100)
message_end()
if (
pev(victimpev_flags) & FL_ONGROUND)
set_pev(victimpev_gravity999999.9)
else
set_pev(victimpev_gravity0.000001)
g_frozen[victim] = true;
set_task(freezeduration"remove_freeze"victim)
}
public 
remove_freeze(id)
{
if (!
g_frozen[id] || !is_user_alive(id))
return;
g_frozen[id] = false;
if (
zp_get_user_nemesis(id))
{
set_pev(idpev_gravityget_pcvar_float(cvar_nemgravity))
}
if (
zp_get_user_survivor(id))
{
set_pev(idpev_gravityget_pcvar_float(cvar_survgravity))
}
if (
g_zombie[id])
{
set_pev(idpev_gravityFloat:ArrayGetCell(g_zclass_gravg_zombieclass[id]))
}
else
{
set_pev(idpev_gravityget_pcvar_float(cvar_humangravity))
}
engfunc(EngFunc_EmitSoundidCHAN_BODYgrenade_frost_break[random_num(0sizeof grenade_frost_break 1)], 1.0ATTN_NORM0PITCH_NORM)
#if defined HANDLE_MODELS_ON_SEPARATE_ENT
fm_set_rendering(g_ent_playermodel[id])
#else
fm_set_rendering(id)
#endif
static Float:origin2F[3]
pev(idpev_originorigin2F)
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYorigin2F0)
write_byte(TE_BREAKMODEL
engfunc(EngFunc_WriteCoordorigin2F[0]) 
engfunc(EngFunc_WriteCoordorigin2F[1]) 
engfunc(EngFunc_WriteCoordorigin2F[2]+24.0
write_coord(16
write_coord(16
write_coord(16
write_coord(random_num(-5050)) 
write_coord(random_num(-5050)) 
write_coord(25
write_byte(10
write_short(g_glassSpr
write_byte(10
write_byte(25
write_byte(BREAK_GLASS
message_end()
}
stock fm_set_rendering(entityfx kRenderFxNone255255255render kRenderNormalamount 16)
{
static 
Float:color[3]
color[0] = float(r)
color[1] = float(g)
color[2] = float(b)

set_pev(entitypev_renderfxfx)
set_pev(entitypev_rendercolorcolor)
set_pev(entitypev_rendermoderender)
set_pev(entitypev_renderamtfloat(amount))
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1046\\ f0\\ fs16 \n\\ par }
*/ 
PHP Code:
#include <amxmodx> 
#include <zombieplague>
#include <fakemeta>
#include <engine>
#include <fun>
#define PLUGINNAME "[ZP] Class Boomer"
#define VERSION "1.2.2"
#define AUTHOR "tii"
new g_zclass_boomerg_maxplayers
spr_smoke_steam1,cvar_max_damage,cvar_damage_radius,mdl_gib_legbone,
mdl_gib_flesh,mdl_gib_meat,mdl_gib_head,spr_blood_drop,spr_blood_spray
new bool:lamuerteexplosiva[33] = false
new g_sndExplode[] = "weapons/c4_explode1.wav"
new spr_zerogxplode
new gmsgDeathMsg,gmsgScoreInfo,mdl_gib_lung,mdl_gib_spine
new const zclass_name[] = { "Boomer" }
new const 
zclass_info[] = { "Explode after die" }
new const 
zclass_model[] = { "zboomer" }
new const 
zclass_clawmodel[] = { "v_knife_zombie.mdl" }
const 
zclass_health 2020
const zclass_speed 200
const Float:zclass_gravity 1.0
const Float:zclass_knockback 0.2
public plugin_init(){ 
register_plugin(PLUGINNAMEVERSIONAUTHOR)
register_event("DeathMsg""boomer_death""a")
cvar_max_damage register_cvar("zp_bomer_maxdmg","200")
cvar_damage_radius register_cvar("zp_bomer_raius","350")
g_maxplayers get_maxplayers() 
gmsgDeathMsg get_user_msgid("DeathMsg")
gmsgScoreInfo get_user_msgid("ScoreInfo")
}
public 
plugin_precache() 
{
g_zclass_boomer zp_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_healthzclass_speedzclass_gravityzclass_knockback
mdl_gib_lung precache_model("models/GIB_Lung.mdl")
mdl_gib_meat precache_model("models/GIB_B_Gib.mdl")
mdl_gib_head precache_model("models/GIB_Skull.mdl")
mdl_gib_flesh precache_model("models/Fleshgibs.mdl")
mdl_gib_spine precache_model("models/GIB_B_Bone.mdl")
mdl_gib_legbone precache_model("models/GIB_Legbone.mdl")
precache_sound("weapons/mortarhit.wav")
spr_blood_drop precache_model("sprites/blood.spr")
spr_blood_spray precache_model("sprites/bloodspray.spr")
spr_zerogxplode precache_model("sprites/zerogxplode.spr")
spr_smoke_steam1 precache_model("sprites/steam1.spr")
precache_sound(g_sndExplode
spr_zerogxplode precache_model("sprites/zerogxplode.spr")
precache_model("models/w_egon.mdl")

public 
zp_user_infected_post(playerinfector)
{
if (
zp_get_user_zombie_class(player) == g_zclass_boomer) {
lamuerteexplosiva[player] = true
client_print
(playerprint_chat"[ZP] Explode after die!"
}

public 
zp_user_humanized_post(player)
{
lamuerteexplosiva[player] = false
}
public 
boomer_death() { 
new 
attacker read_data(1)
new 
victim read_data(2)
if(
lamuerteexplosiva[victim]) { 
static 
victim_name[33]
static 
attacker_name[33]
get_user_name(victimvictim_namesizeof victim_name -1)
get_user_name(attackerattacker_namesizeof attacker_name -1)
new 
Float:origin[3], origin2[3]
entity_get_vector(victim,EV_VEC_origin,origin)
origin2[0] = floatround(origin[0])
origin2[1] = floatround(origin[1])
origin2[2] = floatround(origin[2]) 
for (new 
id2id2 <= g_maxplayersid2++)
{
if (
zp_get_user_zombie_class(id2) == g_zclass_boomer && zp_get_user_zombie(id2) && !zp_get_user_nemesis(id2))

emit_sound(victimCHAN_WEAPON"weapons/mortarhit.wav"1.00.50PITCH_NORM)
emit_sound(victimCHAN_VOICE"weapons/mortarhit.wav"1.00.50PITCH_NORM

for (new 
18e++) {
// Random Explosion 8 Times
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
write_byte(TE_SPRITE)
write_coord(origin2[0] + random_num(-60,60))
write_coord(origin2[1] + random_num(-60,60))
write_coord(origin2[2] +128)
write_short(spr_zerogxplode)
write_byte(random_num(30,65))
write_byte(255)
message_end()

}
for (new 
13e++) {
// Random Smoke 3 Times
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
write_byte(TE_SMOKE)
write_coord(origin2[0])
write_coord(origin2[1])
write_coord(origin2[2] + 256)
write_short(spr_smoke_steam1)
write_byte(random_num(80,150))
write_byte(random_num(5,10))
message_end()
}

// Create the burn decal
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
write_coord(origin2[0])
write_coord(origin2[1])
write_coord(origin2[2])
write_short(0
write_byte(random_num(46,48)) // decal
message_end()
new 
Max_Damage get_pcvar_num(cvar_max_damage)
new 
Damage_Radius get_pcvar_num(cvar_damage_radius
new 
PlayerPos[3], DistanceDamage
for (new 132i++) {
if (
is_user_alive(i) == 1) {
get_user_origin(iPlayerPos)
Distance get_distance(PlayerPosorigin2)
if (
Distance <= Damage_Radius) { // Screenshake Radius

message_begin(MSG_ONEget_user_msgid("ScreenShake"), {0,0,0}, i// Shake Screen
write_short(1<<14)
write_short(1<<14)
write_short(1<<14)
message_end()
Damage Max_Damage floatround(floatmul(float(Max_Damage), floatdiv(float(Distance), float(Damage_Radius))))
//if(!zp_get_user_zombie(id2) && !zp_get_user_nemesis(id2))
do_victim(i,victim,Damage,0)
}

}

}
}
}
lamuerteexplosiva[victim] = false
}
}
public 
do_victim (victim,attacker,Damage,team_kill) {
new 
namek[32],namev[32],authida[35],authidv[35],teama[32],teamv[32]
get_user_name(victim,namev,31)
get_user_name(attacker,namek,31)
get_user_authid(victim,authidv,34)
get_user_authid(attacker,authida,34)
get_user_team(victim,teamv,31)
get_user_team(attacker,teama,31)
if(
Damage >= get_user_health(victim)) {
if(
get_cvar_num("mp_logdetail") == 3) {

log_message("^"%s<%d><%s><%s>^" attacked ^"%s<%d><%s><%s>^" with ^"bomber^" (hit ^"chest^") (Damage ^"%d^") (health ^"0^")",
namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),authidv,teamv,Damage)

}
client_print(attacker,print_chat,"[AMXX] You killed %s with that bomber",namev)
client_print(victim,print_chat,"[AMXX] You were killed by %s's bomber",namek)
if(
team_kill == 0) {

set_user_frags(attacker,get_user_frags(attacker) + )

}

set_msg_block(gmsgDeathMsg,BLOCK_ONCE)
set_msg_block(gmsgScoreInfo,BLOCK_ONCE)
user_kill(victim,1)
replace_dm(attacker,victim,0)
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"bomber^"",
namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),authidv,teamv)
if (
Damage 100) {

new 
iOrigin[3]
get_user_origin(victim,iOrigin)
set_user_rendering(victim,kRenderFxNone,0,0,0,kRenderTransAlpha,0)
fx_gib_explode(iOrigin,3)
fx_blood_large(iOrigin,5)
fx_blood_small(iOrigin,15)
iOrigin[2] = iOrigin[2] - 20
set_user_origin
(victim,iOrigin)
}

}
else {
set_user_health(victim,get_user_health(victim) - Damage )
if(
get_cvar_num("mp_logdetail") == 3) {

log_message("^"%s<%d><%s><%s>^" attacked ^"%s<%d><%s><%s>^" with ^"bomber^" (hit ^"chest^") (Damage ^"%d^") (health ^"%d^")",
namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),authidv,teamv,Damage,get_user_health(victim))

}
client_print(attacker,print_chat,"[AMXX] You hurt %s with that bomber",namev)
client_print(victim,print_chat,"[AMXX] You were hurt by %s's bomber",namek)
}

}
public 
client_disconnect(id
{
lamuerteexplosiva[id] = false

public 
client_putinserver(id
{
lamuerteexplosiva[id] = false

public 
replace_dm (id,tid,tbody) {
//Update killers scorboard with new info
message_begin(MSG_ALL,gmsgScoreInfo)
write_byte(id)
write_short(get_user_frags(id))
write_short(get_user_deaths(id))
write_short(0)
write_short(get_user_team(id))
message_end()
//Update victims scoreboard with correct info
message_begin(MSG_ALL,gmsgScoreInfo)
write_byte(tid)
write_short(get_user_frags(tid))
write_short(get_user_deaths(tid))
write_short(0)
write_short(get_user_team(tid))
message_end()
//Headshot Kill
if (tbody == 1) {
message_beginMSG_ALLgmsgDeathMsg,{0,0,0},0)
write_byte(id)
write_byte(tid)
write_string(" missile")
message_end()

}
//Normal Kill
else {

message_beginMSG_ALLgmsgDeathMsg,{0,0,0},0)
write_byte(id)
write_byte(tid)
write_byte(0)
write_string("missile")
message_end()

}
return 
PLUGIN_CONTINUE

}
static 
fx_blood_small (origin[3],num) {

// Small splash
for (new 0numj++) {

message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(origin[0]+random_num(-100,100))
write_coord(origin[1]+random_num(-100,100))
write_coord(origin[2]-36)

write_byte(random_num(190,197)) // Blood decals
message_end()

}

}
static 
fx_blood_large (origin[3],num) {

// Large splash
for (new 0numi++) {

message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(origin[0] + random_num(-50,50))
write_coord(origin[1] + random_num(-50,50))
write_coord(origin[2]-36)
write_byte(random_num(204,205)) // Blood decals

message_end()

}

}
static 
fx_gib_explode (origin[3],num) {

new 
flesh[3], xyz
flesh
[0] = mdl_gib_flesh
flesh
[1] = mdl_gib_meat
flesh
[2] = mdl_gib_legbone

// Gib explosion
// Head
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(mdl_gib_head)
write_byte(0)
write_byte(500)
message_end()

// Spine
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(mdl_gib_spine)
write_byte(0)
write_byte(500)
message_end()

// Lung
for(new 0random_num(1,2); i++) {

message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(mdl_gib_lung)
write_byte(0)
write_byte(500)
message_end()

}

// Parts, 5 times
for(new 05i++) {

message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(flesh[random_num(0,2)])
write_byte(0)
write_byte(500)
message_end()

}

// Blood
for(new 0numi++) {

random_num(-100,100)
random_num(-100,100)
random_num(0,100)

for(new 
05j++) {

message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BLOODSPRITE)
write_coord(origin[0]+(x*j))
write_coord(origin[1]+(y*j))
write_coord(origin[2]+(z*j))
write_short(spr_blood_spray)
write_short(spr_blood_drop)
write_byte(248)
write_byte(15)
message_end()

}

}


PHP Code:
/*
* -----------------------------------
* -----[ZP] Zombie Class: Smoker-----
* -----------------------------------
* ------Author: 4eRT (aka pff)-------
* -----------------------------------
* About:
* When Left4Dead came out i immediately thought about Zombie Class Smoker plugin.
* More later(few days ago) I was playing on Superhero Server when i found Scorpion hero.
* So it was the way to create this plugin.
* -----------------------------------
* Discription:
* Smoker is another zombie class for zombie plague like Smoker in L4D.
* He can drags humans by holding "V" like /\...yeah, like Smoker. If Smoker receives
* 300 damage by human drag ends. If he falls or hurts more 25 dmg drag ends to.
* Drag speed, max drags, cooldown, autobind, drag teammates & damage to stop
* may be customized by Cvars.
* -----------------------------------
* Credits:
* yang - great thanks for his Scorpion superhero plugin where I borrow harpoon&drag code.
* 5c0r-|3i0 - for his converted Smoker sounds.
* Anggara_nothing - for rewritting Entvars_Set_Vector from Vexd_Utilities to engine. but not very useful :/
* xPaw - really thx for help optimization plugin. For Entity_Set_Vector.
* frk_14 - for his Smoker model. (hope you finish it ^^)
* -----------------------------------
* Cvars:
* zp_smoker_maxdrags 10 // how many times Smoker can drag player to himself? def=10
* zp_smoker_dragspeed 160 // speed of dragging player to Smoker def=160
* zp_smoker_cooldown 5 // time in sec before you can use drag again. def=5
* zp_smoker_mates 0 // can Smoker drag teammates to? 1=yes 0=no def=0
* zp_smoker_bind 1 // autobind key V to +drag. 0=no autobind 1=autobind (v) def=1
* zp_smoker_dmg2stop 75 // damage to stop dragging def=75
* -----------------------------------
* History(beta):
* 0.0 (14.04.09)
* Most of code converted from sh_scorpion. Added 3 cvars.
* 0.1 (15.04.09)
* Added cooldown, autobind, damage to stop and its cvars.
* 0.1 (16.04.09)
* Beta testing. First view works perfectly...<- It was wrong belief...>_<
* 0.2 (17.04.09)
* Entvars_Set_Vector now uses engine, not Vexd_Utilities.inc
* 0.3 (19.04.09)
* Fixed cooldown. Now it works more stably. Reduced minimum drag distance.
* 0.3.1 (21.04.09)
* Cooldown works more, more stably. After re-infecting Smoker can use drag
* X times(cvar_maxdrags) if drags left when he was zombie last time.
* Hope i've fixed dragging teammates. Please test it and say: does it work?
* Added Smoker model(+modelT.mdl precacher).
* -----------------------------------
* PS:
* It's my second useful plugin for amxx so...
*/
#include <amxmodx>
#include <zombieplague>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#define PLUGIN "[ZP] Class Smoker"
#define VERSION "0.3.1"
#define AUTHOR "4eRT"
//Main Class, modelT & Sprite Beam
new g_zclass_smokerg_Line
new const generic_models[][] = { "models/player/zombie_smoker/zombie_smokerT.mdl" 
//Sounds
new g_sndMiss[] = "zombie_plague/Smoker_TongueHit_miss.wav"
new g_sndDrag[] = "zombie_plague/Smoker_TongueHit_drag.wav"
//Some vars
new g_hooked[33], g_hooksLeft[33]
new 
Float:g_lastHook[33]
//Cvars
new cvar_maxdragscvar_dragspeedcvar_cooldowncvar_dmg2stopcvar_matescvar_bind
//Smoker Atributes
new const zclass_name[] = { "Smoker" }
new const 
zclass_info[] = { "Can drag players" }
new const 
zclass_model[] = { "zombie_smoker" }
new const 
zclass_clawmodel[] = { "v_knife_zombie.mdl" }
const 
zclass_health 1400
const zclass_speed 190
const Float:zclass_gravity 1.0
const Float:zclass_knockback 1.0
public plugin_init()
{
cvar_dragspeed register_cvar("zp_smoker_dragspeed""160")
cvar_maxdrags register_cvar("zp_smoker_maxdrags""10")
cvar_cooldown register_cvar("zp_smoker_cooldown""5")
cvar_dmg2stop register_cvar("zp_smoker_dmg2stop""75")
cvar_mates register_cvar("zp_smoker_mates""0")
cvar_bind register_cvar("zp_smoker_bind""1")
register_event("ResetHUD""newSpawn""b")
register_event("DeathMsg""smoker_death""a")
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage")
register_clcmd("+drag","drag_start"ADMIN_USER"bind ^"key^" ^"+drag^"")
register_clcmd("-drag","drag_end")
}
public 
plugin_precache()
{
register_plugin(PLUGINVERSIONAUTHOR)
g_zclass_smoker zp_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_healthzclass_speedzclass_gravityzclass_knockback)
precache_sound(g_sndDrag)
precache_sound(g_sndMiss)
g_Line precache_model("sprites/zbeam4.spr")

for (new 
0sizeof generic_modelsi++)
precache_model(generic_models[i])
}
public 
zp_user_infected_post(idinfector)
{
if (
zp_get_user_zombie_class(id) == g_zclass_smoker) {
g_hooksLeft[id] = get_pcvar_num(cvar_maxdrags)
new 
mode get_pcvar_num(cvar_bind)

if (
mode == 1) {
client_cmd(id"bind v ^"+drag^"")
client_print(idprint_chat"[ZP] To drag player to youself hold ^'^'V^'^'")
}
if (
mode == 0) {
client_print(idprint_chat"[ZP] To drag player to youself (bind ^'^'key^'^' ^'^'+drag^'^') hold binded key")
}
}
}
public 
newSpawn(id)
{
g_lastHook[id] = get_gametime()

beam_remove(id)
if (
g_hooked[id])
drag_end(id)
}
public 
drag_start(id// starts drag, checks if player is Smoker, checks cvars
{
if (
zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_smoker) {

static 
Float:cdown
cdown 
get_pcvar_float(cvar_cooldown)

if (!
is_user_alive(id)) {
client_print(idprint_chat"[ZP] You can't drag if you are dead!")
return
}
if (
g_hooksLeft[id] <= 0) {
client_print(idprint_chat"[ZP] You can't drag anymore!")
return
}

if (
get_gametime() - g_lastHook[id] < cdown) {
client_print(idprint_chat"[ZP] Wait %.fsec. to drag again!"get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id]))
return
}
if (
g_hooksLeft[id] > 0) {
g_hooksLeft[id]--
client_print(idprint_chat"[ZP] You can drag player to youself %d time%s"g_hooksLeft[id], (g_hooksLeft[id] < 2) ? "" "s")
}
new 
hooktargetbody
get_user_aiming
(idhooktargetbody)

if (
is_user_alive(hooktarget)) {
if (
get_user_team(hooktarget) != get_user_team(id)) {
g_hooked[id] = hooktarget
emit_sound
(hooktargetCHAN_BODYg_sndDrag1.0ATTN_NORM0PITCH_HIGH)
} else {
if (
get_user_team(hooktarget) == get_user_team(id)) {
if (
get_pcvar_num(cvar_mates) == 0) {
client_print(idprint_chat"[ZP] You can't drag teammates!")
return
}
if (
get_pcvar_num(cvar_mates) == 1) {
g_hooked[id] = hooktarget
emit_sound
(hooktargetCHAN_BODYg_sndDrag1.0ATTN_NORM0PITCH_HIGH)
}
} else {
g_hooked[id] = 33
noTarget
(id)
emit_sound(hooktargetCHAN_BODYg_sndMiss1.0ATTN_NORM0PITCH_HIGH)
return
}
}
new 
parm[2]
parm[0] = id
parm
[1] = hooktarget

set_task
(0.1"smoker_reelin"idparm2"b")
harpoon_target(parm)
} else {
g_hooked[id] = 33
noTarget
(id)
emit_sound(hooktargetCHAN_BODYg_sndMiss1.0ATTN_NORM0PITCH_HIGH)
}
} else {
return
}
}
public 
smoker_reelin(parm[]) // dragging player to smoker
{
new 
id parm[0]
new 
victim parm[1]
if (!
g_hooked[id])
return
if (!
is_user_alive(victim)) {
drag_end(id)
return
}
new 
Float:fl_Velocity[3]
new 
idOrigin[3], vicOrigin[3]
get_user_origin(victimvicOrigin)
get_user_origin(ididOrigin)
new 
distance get_distance(idOriginvicOrigin)
if (
distance 1) {
new 
Float:fl_Time distance get_pcvar_float(cvar_dragspeed)
fl_Velocity[0] = (idOrigin[0] - vicOrigin[0]) / fl_Time
fl_Velocity
[1] = (idOrigin[1] - vicOrigin[1]) / fl_Time
fl_Velocity
[2] = (idOrigin[2] - vicOrigin[2]) / fl_Time
} else {
fl_Velocity[0] = 0.0
fl_Velocity
[1] = 0.0
fl_Velocity
[2] = 0.0
}
entity_set_vector(victimEV_VEC_velocityfl_Velocity//<- rewritten. now uses engine
}
public 
drag_end(id// drags end function
{
g_hooked[id] = 0
beam_remove
(id)
remove_task(id)

if (
get_gametime() - g_lastHook[id] <= get_pcvar_float(cvar_cooldown) + 0.08) {
return
} else {
g_lastHook[id] = get_gametime()
}
}
public 
smoker_death() // if smoker dies drag off
{
new 
id read_data(2)

beam_remove(id)

if (
g_hooked[id])
drag_end(id)
}
public 
fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type// if take damage drag off
{
if (
victim == attacker || !is_user_connected(attacker)) {
if (
damage 25) {
drag_end(victim)
return 
HAM_IGNORED;
}
}

if (
get_user_team(attacker) != get_user_team(victim)) {
if (
damage get_pcvar_num(cvar_dmg2stop)) {
drag_end(victim)
return 
HAM_IGNORED;
}
}

return 
HAM_IGNORED;
}
public 
client_disconnect(id// if client disconnects drag off
{
if (
id <= || id 32)
return

if (
g_hooked[id])
drag_end(id)
}
public 
harpoon_target(parm[]) // set beam (ex. tongue:) if target is player
{
new 
id parm[0]
new 
hooktarget parm[1]
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
write_byte(8// TE_BEAMENTS
write_short(id)
write_short(hooktarget)
write_short(g_Line// sprite index
write_byte(0// start frame
write_byte(0// framerate
write_byte(200// life
write_byte(8// width
write_byte(1// noise
write_byte(155// r, g, b
write_byte(155// r, g, b
write_byte(55// r, g, b
write_byte(90// brightness
write_byte(10// speed
message_end()
}
public 
noTarget(id// set beam if target isn't player
{
new 
endorigin[3]
get_user_origin(idendorigin3)
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
write_byteTE_BEAMENTPOINT ); // TE_BEAMENTPOINT
write_short(id)
write_coord(endorigin[0])
write_coord(endorigin[1])
write_coord(endorigin[2])
write_short(g_Line// sprite index
write_byte(0// start frame
write_byte(0// framerate
write_byte(200// life
write_byte(8// width
write_byte(1// noise
write_byte(155// r, g, b
write_byte(155// r, g, b
write_byte(55// r, g, b
write_byte(75// brightness
write_byte(0// speed
message_end()
}
public 
beam_remove(id// remove beam
{
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
write_byte(99//TE_KILLBEAM
write_short(id//entity
message_end()
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/ 
</SPAN></SPAN></SPAN>
Attached Files
File Type: sma Get Plugin or Get Source (zp_zclass_witch.sma - 493 views - 6.2 KB)
File Type: sma Get Plugin or Get Source (zp_zclass_smoker.sma - 494 views - 10.5 KB)
File Type: sma Get Plugin or Get Source (zp_zclass_boomer.sma - 486 views - 11.5 KB)
edga85 is offline
Send a message via Skype™ to edga85
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 15:17.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode