В зоне ноу килл, наносится урон от магической палки, помогите исправить.
- Код: Выделить всё
#include < amxmodx >
#include < xs >
#include < engine >
#include < cstrike >
#include < fakemeta >
#include < hamsandwich >
#define PLUGIN "[ JB ] Magic stick"
#define VERSION "1.0"
#define AUTHOR "Opo4uMapy"
#define FIRERATE 1.8
#define HITSD 0.7
#define DAMAGE 30.0
#define DAMAGE_MULTI 3.0
#define CSW_WPN CSW_KNIFE
#define weapon "weapon_knife"
new const snd_hit[][] = { "knife_hit1.wav" }
new const snd_fire[][] = { "chill.wav" }
new const MAGIC_MODEL[][] =
{
"models/v_palka.mdl",
"models/p_palka.mdl"
}
new Float:g_flLastFireTime[33], g_HasRifle[33]
new g_sprBeam, g_sprExp, g_sprBlood, sprite_ability
const ANIM_FIRE = 1
const ANIM_DRAW = 3
const WPNKEY = 2816
public plugin_init()
{
//Authors
register_plugin(PLUGIN, VERSION, AUTHOR)
//Event
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
register_event("CurWeapon", "event_CurWeapon", "b", "1=1")
//Message
//register_message(get_user_msgid("WeapPickup"), "message_weappickup")
//Fm (Forward)
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
//Ham
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
RegisterHam(Ham_Item_Deploy, weapon, "fw_Deploy_Post", 1)
RegisterHam(Ham_Item_AddToPlayer, weapon, "fw_AddToPlayer")
RegisterHam(Ham_Weapon_SecondaryAttack, weapon, "SecondaryAttack_Pre", 0)
//register_clcmd("giv_gar", "give_rifle")
}
public plugin_precache()
{
static i
for(i = 0; i < sizeof MAGIC_MODEL; i++)
precache_model(MAGIC_MODEL[i])
g_sprBlood = precache_model("sprites/blood.spr")
g_sprBeam = precache_model("sprites/lgtning.spr")
g_sprExp = precache_model("sprites/deimosexp.spr")
sprite_ability = precache_model("sprites/green.spr")
// precache_generic("sprites/js_jb_magic_stick.txt")
// precache_generic("sprites/js_shop_item.spr")
for(i = 0; i < sizeof snd_fire; i++)
precache_sound(snd_fire[i])
for(i = 0; i < sizeof snd_hit; i++)
precache_sound(snd_hit[i])
// register_clcmd("js_jb_magic_stick", "clcmd_justserver")
}
/*
public clcmd_justserver(id)
{
engclient_cmd(id, "weapon_knife")
return PLUGIN_HANDLED
}
public message_weappickup(msg_id, msg_dest, id)
{
if(!is_user_connected(id))
return
if(get_msg_arg_int(1) == CSW_KNIFE)
{
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0,0,0}, id)
if(g_HasRifle[id])
write_string("js_jb_magic_stick")
else
write_string("weapon_knife")
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(2)
write_byte(1)
write_byte(CSW_KNIFE)
write_byte(0)
message_end()
}
}
*/
public plugin_natives ()
{
register_native("give_weapon_rifle", "native_give_weapon_add", 1)
}
public native_give_weapon_add(id)
{
give_rifle(id)
}
public event_CurWeapon(id)
{
if(!is_user_alive(id))
return
if(!g_HasRifle[id] || get_user_weapon(id) != CSW_WPN)
return
set_pev(id, pev_viewmodel2, "models/v_palka.mdl")
set_pev(id, pev_weaponmodel2, "models/p_palka.mdl")
}
public fw_PlayerKilled(victim, attacker, shouldgib)
{
if(!is_user_connected(victim))
return HAM_IGNORED
g_HasRifle[victim] = false
return HAM_HANDLED
}
public Event_NewRound()
{
for (new i = 1; i <= get_maxplayers(); i++)
{
if(!is_user_connected(i))
continue
g_HasRifle[i] = false
}
}
public SecondaryAttack_Pre(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)
if(!is_user_alive(Player))
return HAM_IGNORED
if(g_HasRifle[Player])
return HAM_SUPERCEDE
return HAM_HANDLED;
}
public give_rifle(id)
{
if(!is_user_alive(id))
return
g_HasRifle[id] = true
fm_give_item(id, weapon)
engclient_cmd(id, weapon)
if(get_user_weapon(id) == CSW_KNIFE)
{
set_pev(id, pev_viewmodel2, "models/v_palka.mdl")
set_pev(id, pev_weaponmodel2, "models/p_palka.mdl")
set_wpnanim(id, ANIM_DRAW)
}
}
public fw_CmdStart(id, handle, seed)
{
if(!is_user_alive(id))
return FMRES_IGNORED
if(!g_HasRifle[id])
return FMRES_IGNORED
if(get_user_weapon(id) != CSW_WPN)
return FMRES_IGNORED
static iButton
iButton = get_uc(handle, UC_Buttons)
if(iButton & IN_ATTACK)
{
set_uc(handle, UC_Buttons, iButton & ~IN_ATTACK)
static Float:flCurTime
flCurTime = halflife_time()
if(flCurTime - g_flLastFireTime[id] < FIRERATE)
return FMRES_IGNORED
static iWpnID
iWpnID = get_pdata_cbase(id, 373, 5)
set_pdata_float(iWpnID, 46, FIRERATE, 4)
set_pdata_float(iWpnID, 47, FIRERATE, 4)
set_pdata_float(iWpnID, 48, FIRERATE, 4)
g_flLastFireTime[id] = flCurTime
primary_attack(id)
make_punch(id, 50)
return FMRES_IGNORED
}
return FMRES_IGNORED
}
public fw_UpdateClientData_Post(id, sendweapons, handle)
{
if(!is_user_alive(id))
return FMRES_IGNORED
if(!g_HasRifle[id])
return FMRES_IGNORED
if(get_user_weapon(id) != CSW_WPN)
return FMRES_IGNORED
set_cd(handle, CD_flNextAttack, halflife_time() + 0.001)
return FMRES_HANDLED
}
public fw_Deploy_Post(wpn)
{
static id
id = fm_cs_get_weapon_ent_owner(wpn)
if(is_user_connected(id) && g_HasRifle[id])
{
set_pev(id, pev_viewmodel2, "models/v_palka.mdl")
set_pev(id, pev_weaponmodel2, "models/p_palka.mdl")
set_wpnanim(id, ANIM_DRAW)
}
return HAM_IGNORED
}
public fw_AddToPlayer(wpn, id)
{
if(!is_valid_ent(wpn) || is_user_connected(id) || entity_get_int(wpn, EV_INT_impulse) != WPNKEY)
return HAM_IGNORED
g_HasRifle[id] = true
entity_set_int(wpn, EV_INT_impulse, 0)
return HAM_IGNORED
}
public primary_attack(id)
{
set_wpnanim(id, ANIM_FIRE)
entity_set_vector(id, EV_VEC_punchangle, Float:{ -1.5, 0.0, 0.0 })
emit_sound(id, CHAN_WEAPON, snd_fire[random_num(0, sizeof snd_fire - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
static iTarget, iBody, iEndOrigin[3]
get_user_origin(id, iEndOrigin, 3)
fire_effects(id, iEndOrigin)
get_user_aiming(id, iTarget, iBody)
new iEnt = create_entity("info_target")
static Float:flOrigin[3]
IVecFVec(iEndOrigin, flOrigin)
entity_set_origin(iEnt, flOrigin)
remove_entity(iEnt)
if(is_user_alive(iTarget) && (cs_get_user_team(iTarget) != cs_get_user_team(id)))
{
if(HITSD > 0.0)
{
static Float:flVelocity[3]
get_user_velocity(iTarget, flVelocity)
xs_vec_mul_scalar(flVelocity, HITSD, flVelocity)
set_user_velocity(iTarget, flVelocity)
new iHp = pev(iTarget, pev_health)
new Float:iDamage, iBloodScale
if(iBody == HIT_HEAD)
{
iDamage = DAMAGE
iBloodScale = 10
}
else
{
iDamage = DAMAGE*DAMAGE_MULTI
iBloodScale = 25
}
if(iHp > iDamage)
{
make_blood(iTarget, iBloodScale)
set_pev(iTarget, pev_health, iHp-iDamage)
damage_effects(iTarget)
}
else if(iHp <= iDamage)
{
balls_effects(iTarget)
ExecuteHamB(Ham_Killed, iTarget, id, 2)
}
}
}
else emit_sound(id, CHAN_WEAPON, snd_hit[random_num(0, sizeof snd_hit - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
public client_putinserver(id) g_HasRifle[id] = false
public client_disconnect(id) g_HasRifle[id] = false
stock fire_effects(id, iEndOrigin[3])
{
UTIL_PlayWeaponAnimation(id, 5)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte (TE_BEAMENTPOINT)
write_short(id | 0x1000)
write_coord(iEndOrigin[0]) // Конец луча: x
write_coord(iEndOrigin[1]) // Конец луча: y
write_coord(iEndOrigin[2]) // Конец луча: z
write_short(g_sprBeam)
write_byte(0)
write_byte(5)
write_byte(1)
write_byte(30)
write_byte(40)
write_byte(255)
write_byte(0)
write_byte(0)
write_byte(1000)
write_byte(0)
message_end()
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(3)
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
write_short(g_sprExp)
write_byte(10)
write_byte(15)
write_byte(4)
message_end()
}
stock balls_effects(index)
{
static Float:flOrigin[3]
pev(index, pev_origin, flOrigin)
message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
write_byte( TE_SPRITETRAIL ) // Throws a shower of sprites or models
engfunc(EngFunc_WriteCoord, flOrigin[ 0 ]) // start pos
engfunc(EngFunc_WriteCoord, flOrigin[ 1 ])
engfunc(EngFunc_WriteCoord, flOrigin[ 2 ] + 200.0)
engfunc(EngFunc_WriteCoord, flOrigin[ 0 ]) // velocity
engfunc(EngFunc_WriteCoord, flOrigin[ 1 ])
engfunc(EngFunc_WriteCoord, flOrigin[ 2 ] + 20.0)
write_short(sprite_ability) // spr
write_byte(15) // (count)
write_byte(random_num(27,30)) // (life in 0.1's)
write_byte(2) // byte (scale in 0.1's)
write_byte(random_num(30,70)) // (velocity along vector in 10's)
write_byte(40) // (randomness of velocity in 10's)
message_end()
}
stock damage_effects(id)
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Damage"), _, id)
write_byte(0)
write_byte(0)
write_long(DMG_NERVEGAS)
write_coord(0)
write_coord(0)
write_coord(0)
message_end()
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), {0,0,0}, id)
write_short(1<<13)
write_short(1<<14)
write_short(0x0000)
write_byte(0)
write_byte(255)
write_byte(0)
write_byte(100)
message_end()
message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, id)
write_short(0xFFFF)
write_short(1<<13)
write_short(0xFFFF)
message_end()
static Float:flOrigin[3]
pev(id, pev_origin, flOrigin)
message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
write_byte( TE_SPRITETRAIL ) // Throws a shower of sprites or models
engfunc(EngFunc_WriteCoord, flOrigin[ 0 ]) // start pos
engfunc(EngFunc_WriteCoord, flOrigin[ 1 ])
engfunc(EngFunc_WriteCoord, flOrigin[ 2 ] + 200.0)
engfunc(EngFunc_WriteCoord, flOrigin[ 0 ]) // velocity
engfunc(EngFunc_WriteCoord, flOrigin[ 1 ])
engfunc(EngFunc_WriteCoord, flOrigin[ 2 ] + 20.0)
write_short(sprite_ability) // spr
write_byte(15) // (count)
write_byte(random_num(27,30)) // (life in 0.1's)
write_byte(2) // byte (scale in 0.1's)
write_byte(random_num(30,70)) // (velocity along vector in 10's)
write_byte(40) // (randomness of velocity in 10's)
message_end()
}
stock make_blood(id, scale)
{
new Float:iVictimOrigin[3]
pev(id, pev_origin, iVictimOrigin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(115)
write_coord(floatround(iVictimOrigin[0]+random_num(-20,20)))
write_coord(floatround(iVictimOrigin[1]+random_num(-20,20)))
write_coord(floatround(iVictimOrigin[2]+random_num(-20,20)))
write_short(g_sprBlood)
write_short(g_sprBlood)
write_byte(248)
write_byte(scale)
message_end()
}
stock set_wpnanim(id, anim)
{
entity_set_int(id, EV_INT_weaponanim, anim)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
write_byte(anim)
write_byte(entity_get_int(id, EV_INT_body))
message_end()
}
stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte(Sequence)
write_byte(0)
message_end()
}
stock make_punch(id, velamount)
{
static Float:flNewVelocity[3], Float:flCurrentVelocity[3]
velocity_by_aim(id, -velamount, flNewVelocity)
get_user_velocity(id, flCurrentVelocity)
xs_vec_add(flNewVelocity, flCurrentVelocity, flNewVelocity)
set_user_velocity(id, flNewVelocity)
}
stock fm_give_item(index, const item[])
{
if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
return 0
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))
if (!pev_valid(ent))
return 0
new Float:origin[3];
pev(index, pev_origin, origin)
set_pev(ent, pev_origin, origin)
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
dllfunc(DLLFunc_Spawn, ent)
new save = pev(ent, pev_solid)
dllfunc(DLLFunc_Touch, ent, index)
if(pev(ent, pev_solid) != save)
return ent
engfunc(EngFunc_RemoveEntity, ent)
return -1
}
stock fm_cs_get_weapon_ent_owner(ent)
{
if (pev_valid(ent) != 2)
return -1
return get_pdata_cbase(ent, 41, 4)
}
- Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <hamsandwich>
#define IsPlayer(%1) ( 1 <= %1 <= g_iMaxPlayers )
new const g_szClassname[ ] = "trigger_rules_watch";
enum {
JAIL,
GUNROOM,
MARIOROOM
};
enum _:CVARS {
CV_JAIL_NOKILL,
CV_JAIL_TIME,
CV_GUNROOM_NOKILL,
CV_GUNROOM_TIME,
CV_MARIOROOM_NOKILL,
CV_MARIOROOM_TIME
};
new const g_szZones[ ][ ] = {
"Jail",
"Gun room",
"Mario room"
};
new const Float:g_flOrigins[ ][ 3 ] = {
{ -405.0, 2900.0, 720.0 },
{ -486.0, -1000.0, -275.0 },
{ -405.0, 2949.0, 2422.0 }
};
new const Float:g_flAngles[ ][ 3 ] = {
{ 0.0, 270.0, 0.0 },
{ 0.0, 270.0, 0.0 },
{ 0.0, 270.0, 0.0 }
};
new g_iMaxPlayers;
new g_iCounter[ 33 ];
new bool:g_bNoKill[ 33 ];
new Float:g_flLastTouch[ 33 ];
new g_pCvars[ CVARS ], g_iCvars[ CVARS ];
public plugin_init( ) {
register_plugin( "surf_ski_2: Rules Watcher", "1.0", "xPaw" );
register_cvar( "ss2_rules_watcher", "1.0", FCVAR_SERVER | FCVAR_SPONLY );
g_iMaxPlayers = get_maxplayers( );
g_pCvars[ CV_JAIL_NOKILL ] = register_cvar( "rw_ss2_jail_nokill", "0" );
g_pCvars[ CV_JAIL_TIME ] = register_cvar( "rw_ss2_jail_time", "0" );
g_pCvars[ CV_GUNROOM_NOKILL ] = register_cvar( "rw_ss2_gunroom_nokill", "1" );
g_pCvars[ CV_GUNROOM_TIME ] = register_cvar( "rw_ss2_gunroom_time", "15" );
g_pCvars[ CV_MARIOROOM_NOKILL ] = register_cvar( "rw_ss2_marioroom_nokill", "1" );
g_pCvars[ CV_MARIOROOM_TIME ] = register_cvar( "rw_ss2_marioroom_time", "30" );
new szMap[ 11 ];
get_mapname( szMap, 10 );
if( equali( szMap, "surf_ski_2" ) ) {
CreateTrigger( JAIL, Float:{ -579.0, 2983.0, 586.0 }, Float:{ -309.0, 3288.0, 796.0 } );
CreateTrigger( GUNROOM, Float:{ -713.0, -990.0, -157.0 }, Float:{ -295.0, -651.0, 26.0 } );
CreateTrigger( MARIOROOM, Float:{ 2735.0, 193.0, -2361.0 }, Float:{ 3654.0, 1118.0, -2083.0 } );
register_touch( g_szClassname, "player", "FwdTriggerTouch" );
RegisterHam( Ham_Spawn, "player", "FwdHamPlayerSpawn", 1 );
RegisterHam( Ham_TakeDamage, "player", "FwdHamTakeDamage" );
RegisterHam( Ham_TraceAttack, "player", "FwdHamTraceAttack" );
register_event( "HLTV", "EventNewRound", "a", "1=0", "2=0" );
CacheCvars( );
}
}
public EventNewRound( )
CacheCvars( );
public FwdHamPlayerSpawn( id ) {
if( is_user_alive( id ) ) {
g_bNoKill[ id ] = false;
g_flLastTouch[ id ] = 0.0;
g_iCounter[ id ] = 0;
}
}
public FwdHamTraceAttack( id, iAttacker ) {
if( IsPlayer( iAttacker ) && g_bNoKill[ id ] && id != iAttacker ) {
if( ( g_flLastTouch[ id ] + 0.1 ) >= get_gametime( ) )
return HAM_SUPERCEDE;
else
g_bNoKill[ id ] = false;
}
return HAM_IGNORED;
}
public FwdHamTakeDamage( id, iInflictor, iAttacker ) {
if( IsPlayer( iAttacker ) && g_bNoKill[ id ] && id != iAttacker ) {
if( ( g_flLastTouch[ id ] + 0.1 ) >= get_gametime( ) )
return HAM_SUPERCEDE;
else
g_bNoKill[ id ] = false;
}
return HAM_IGNORED;
}
public FwdTriggerTouch( iEntity, id ) {
static Float:flGametime;
flGametime = get_gametime( );
if( flGametime > ( g_flLastTouch[ id ] + 1.2 ) ) {
g_iCounter[ id ] = 0;
g_flLastTouch[ id ] = flGametime;
}
else if( g_flLastTouch[ id ] < flGametime ) {
g_iCounter[ id ]++;
static iType, bool:bNoKill, iTime;
iType = entity_get_int( iEntity, EV_INT_iuser1 );
GetCvars( iType, bNoKill, iTime );
g_bNoKill[ id ] = bNoKill;
if( iTime > 0 ) {
if( g_iCounter[ id ] >= iTime ) {
if( iTime >= 5 ) {
engclient_print( id, engprint_center, "^nYou stayed more than %i seconds in%s%s.^nYou have been thrown out.", iTime, iType == MARIOROOM ? "^n" : " ", g_szZones[ iType ] );
client_cmd( id, "spk buttons/blip1" );
}
entity_set_vector( id, EV_VEC_angles, g_flAngles[ iType ] );
entity_set_int( id, EV_INT_fixangle, 1 );
entity_set_origin( id, g_flOrigins[ iType ] );
}
}
if( g_iCounter[ id ] < 5 ) {
if( iTime >= 5 )
engclient_print( id, engprint_center, "%sYou are in %s.%s^n^nYou have %i seconds to leave it!", bNoKill ? "" : "^n", g_szZones[ iType ], bNoKill ? "^nYou can't kill anyone here." : "", iTime );
else
engclient_print( id, engprint_center, "%sYou are in %s.%s", bNoKill ? "" : "^n", g_szZones[ iType ], bNoKill ? "^nYou can't kill anyone here." : "" );
}
g_flLastTouch[ id ] = flGametime + 1.0;
}
}
GetCvars( iType, &bool:bNoKill, &iTime ) {
static CvarNoKill, CvarTime;
switch( iType ) {
case JAIL: {
CvarNoKill = CV_JAIL_NOKILL;
CvarTime = CV_JAIL_TIME;
}
case GUNROOM: {
CvarNoKill = CV_GUNROOM_NOKILL;
CvarTime = CV_GUNROOM_TIME;
}
case MARIOROOM: {
CvarNoKill = CV_MARIOROOM_NOKILL;
CvarTime = CV_MARIOROOM_TIME;
}
}
bNoKill = bool:( g_iCvars[ CvarNoKill ] );
iTime = g_iCvars[ CvarTime ];
}
CacheCvars( ) {
g_iCvars[ CV_JAIL_NOKILL ] = get_pcvar_num( g_pCvars[ CV_JAIL_NOKILL ] );
g_iCvars[ CV_JAIL_TIME ] = get_pcvar_num( g_pCvars[ CV_JAIL_TIME ] );
g_iCvars[ CV_GUNROOM_NOKILL ] = get_pcvar_num( g_pCvars[ CV_GUNROOM_NOKILL ] );
g_iCvars[ CV_GUNROOM_TIME ] = get_pcvar_num( g_pCvars[ CV_GUNROOM_TIME ] );
g_iCvars[ CV_MARIOROOM_NOKILL ] = get_pcvar_num( g_pCvars[ CV_MARIOROOM_NOKILL ] );
g_iCvars[ CV_MARIOROOM_TIME ] = get_pcvar_num( g_pCvars[ CV_MARIOROOM_TIME ] );
}
CreateTrigger( iType, Float:flMins[ 3 ], Float:flMaxs[ 3 ] ) {
new iEntity = create_entity( "info_target" );
if( !is_valid_ent( iEntity ) ) {
log_amx( "There was an error with creating ^"%s^"", g_szZones[ iType ] );
return 0;
}
entity_set_string( iEntity, EV_SZ_classname, g_szClassname );
entity_set_int( iEntity, EV_INT_iuser1, iType );
entity_set_int( iEntity, EV_INT_movetype, MOVETYPE_FLY );
entity_set_int( iEntity, EV_INT_solid, SOLID_TRIGGER );
entity_set_size( iEntity, flMins, flMaxs );
return iEntity;
}