#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <hamsandwich>
#include <ColorChat>
#include <dhudmessage>
#pragma semicolon 1
// JUMPING
#define MINIMUM_FALL_SPEED 300
#define MAXIMUM_DAMAGE_FROM_JUMP 70.0
//STANDING
#define DAMAGE 6.0
#define DELAY 0.5
//Doar fisiere .WAV
new const g_szSounds[ ][ ] =
{
"misc/own_dominating1.wav","misc/own_dominating2.wav",
"misc/own_dominating3.wav","misc/own_humiliation.wav",
"misc/own_freza.wav","misc/own_yasuck.wav",
"misc/own_ownage.wav","misc/own_power.wav",
"misc/own_whoa.wav","misc/own_fuck.wav",
"misc/own_yeahbaby.wav"
};
new bool:IsOnLadder[33];
new amx_headsplash;
new Float:falling_speed[33];
new Float:damage_after[33][33];
new Float:message_after[33][33];
new sprite_blood;
new sprite_bloodspray;
public plugin_precache()
{
for( new i = 0; i < sizeof ( g_szSounds ); i++ )
precache_sound( g_szSounds[ i ] );
sprite_blood = precache_model("sprites/blood.spr");
sprite_bloodspray = precache_model("sprites/bloodspray.spr");
}
public plugin_init()
{
register_plugin("Hns Ownage", "1.0", "potatis_invalido & Askhanar");
amx_headsplash = register_cvar("amx_hnsown", "1"); // Register the on/off cvar.
register_forward(FM_Touch, "fwd_Owning");
register_forward(FM_PlayerPreThink,"fwdPlayerPreThink");
}
public fwdPlayerPreThink(id)
{
if( is_user_alive( id ) )
{
pev(id, pev_flFallVelocity, falling_speed[id]);
IsOnLadder[ id ] = ( pev(id, pev_movetype) == MOVETYPE_FLY ) ? true : false;
}
}
public fwd_Owning(touched, toucher) {
// NOTE: The toucher is the player standing/falling on top of the other (touched) player's head.
if(!is_user_alive(toucher) || !is_user_alive(touched)) // The touching players can't be dead.
return FMRES_IGNORED;
if(!get_pcvar_num(amx_headsplash)) // If the plugin is disabled, stop messing with things.
return FMRES_IGNORED;
if(cs_get_user_team(toucher) == CS_TEAM_CT
|| cs_get_user_team(toucher) == cs_get_user_team(touched))
return FMRES_IGNORED;
if( IsOnLadder[ toucher ] || IsOnLadder[ touched ] )// Touching players cand be on ladder.
return FMRES_IGNORED;
static Float:OwnedOrigin[3],Float:OwnerOrigin[3];
pev(touched, pev_origin, OwnedOrigin);
pev(toucher, pev_origin, OwnerOrigin);
new Float:OwnDistance = OwnerOrigin[2] - OwnedOrigin[2];
new Float:NeededDistance;
if(is_in_duck(touched) && !is_in_duck(toucher)
|| !is_in_duck(touched) && is_in_duck(toucher) )
NeededDistance = 54.0;
if(is_in_duck(touched) && is_in_duck(toucher) )
NeededDistance = 36.0;
if(!is_in_duck(touched) && !is_in_duck(toucher) )
NeededDistance = 72.0;
if( OwnDistance >= NeededDistance && damage_after[toucher][touched] <= get_gametime())
{
if(falling_speed[toucher] >= MINIMUM_FALL_SPEED) // If the toucher is falling in the required speed or faster, then landing on top of the touched's head, do some damage to the touched. MUHAHAHAHAHA!!!
{
new Float:damage = ((falling_speed[toucher] - MINIMUM_FALL_SPEED + 30) * (falling_speed[toucher] - MINIMUM_FALL_SPEED + 30)) / 1300;
if(damage > MAXIMUM_DAMAGE_FROM_JUMP) // Make shure that the touched player don't take too much damage.
damage = MAXIMUM_DAMAGE_FROM_JUMP;
damage_player(touched, toucher, damage); // Damage or kill the touched player.
damage_after[toucher][touched] = 0.0; // Reset.
MessageAndEffects( touched, toucher );
ShakeScreen(touched);
FadeScreen(touched);
new iPlayers[32];
static iPlayersNum;
get_players( iPlayers, iPlayersNum, "ch" );
if( !iPlayersNum )
return FMRES_IGNORED;
static id, i;
for( i = 0; i < iPlayersNum; i++ )
{
id = iPlayers[ i ];
if( is_user_alive( id ) )
continue;
if( pev(id, pev_iuser2 ) == touched )
{
ShakeScreen(id);
FadeScreen(id);
}
}
}
else
{
damage_after[toucher][touched] = get_gametime() + DELAY;
damage_player(touched, toucher, DAMAGE); // Damage or kill the touched player.
MessageAndEffects( touched, toucher );
ShakeScreen(touched);
FadeScreen(touched);
static iPlayers[ 32 ];
static iPlayersNum;
get_players( iPlayers, iPlayersNum, "ch" );
if( !iPlayersNum )
return FMRES_IGNORED;
static id, i;
for( i = 0; i < iPlayersNum; i++ )
{
id = iPlayers[ i ];
if( is_user_alive( id ) )
continue;
if( pev(id, pev_iuser2 ) == touched )
{
ShakeScreen(id);
FadeScreen(id);
}
}
}
}
return FMRES_IGNORED;
}
public damage_player(pwned, pwnzor, Float:damage) // Damages or kills a player. Home made HAX
{
new health = get_user_health(pwned);
if(get_user_team(pwned) == get_user_team(pwnzor)) // If both players are in the same team, reduce the damage.
damage /= 1.4;
new CsArmorType:armortype;
cs_get_user_armor(pwned, armortype);
if(armortype == CS_ARMOR_VESTHELM)
damage *= 0.7;
if(health > damage)
{
new pwned_origin[3];
get_user_origin(pwned, pwned_origin);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY); // BLOOOOOOOOOOOD!!
write_byte(TE_BLOODSPRITE);
write_coord(pwned_origin[0]+8);
write_coord(pwned_origin[1]);
write_coord(pwned_origin[2]+26);
write_short(sprite_bloodspray);
write_short(sprite_blood);
write_byte(248);
write_byte(4);
message_end();
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "trigger_hurt"));
if(!ent)
return;
new value[16];
float_to_str(damage * 2, value, sizeof value - 1);
set_kvd(0, KV_ClassName, "trigger_hurt");
set_kvd(0, KV_KeyName, "dmg");
set_kvd(0, KV_Value, value);
set_kvd(0, KV_fHandled, 0);
dllfunc(DLLFunc_KeyValue, ent, 0);
num_to_str(DMG_GENERIC, value, sizeof value - 1);
set_kvd(0, KV_ClassName, "trigger_hurt");
set_kvd(0, KV_KeyName, "damagetype");
set_kvd(0, KV_Value, value);
set_kvd(0, KV_fHandled, 0);
dllfunc(DLLFunc_KeyValue, ent, 0);
set_kvd(0, KV_ClassName, "trigger_hurt");
set_kvd(0, KV_KeyName, "origin");
set_kvd(0, KV_Value, "8192 8192 8192");
set_kvd(0, KV_fHandled, 0);
dllfunc(DLLFunc_KeyValue, ent, 0);
dllfunc(DLLFunc_Spawn, ent);
set_pev(ent, pev_classname, "head_splash");
dllfunc(DLLFunc_Touch, ent, pwned);
engfunc(EngFunc_RemoveEntity, ent);
}
else
{
new pwned_origin[3];
get_user_origin(pwned, pwned_origin);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY); // BLOOOOOOOOOOOD!!
write_byte(TE_BLOODSPRITE);
write_coord(pwned_origin[0]+8);
write_coord(pwned_origin[1]);
write_coord(pwned_origin[2]+26);
write_short(sprite_bloodspray);
write_short(sprite_blood);
write_byte(248);
write_byte(12);
message_end();
set_pev(pwned, pev_frags, float(get_user_frags(pwned) + 1));
user_silentkill(pwned);
make_deathmsg(pwnzor, pwned, 1, "his/her feet :)");
if(get_user_team(pwnzor) != get_user_team(pwned)) // If it was a team kill, the pwnzor's money should get reduced instead of increased.
{
set_pev(pwnzor, pev_frags, float(get_user_frags(pwnzor) + 1));
cs_set_user_money(pwnzor, cs_get_user_money(pwnzor) + 300);
}
else
{
set_pev(pwnzor, pev_frags, float(get_user_frags(pwnzor) - 1));
cs_set_user_money(pwnzor, cs_get_user_money(pwnzor) - 300);
}
message_begin(MSG_ALL, get_user_msgid("ScoreInfo")); // Fixes the scoreboard.
write_byte(pwnzor);
write_short(get_user_frags(pwnzor));
write_short(cs_get_user_deaths(pwnzor));
write_short(0);
write_short(get_user_team(pwnzor));
message_end();
message_begin(MSG_ALL, get_user_msgid("ScoreInfo"));
write_byte(pwned);
write_short(get_user_frags(pwned));
write_short(cs_get_user_deaths(pwned));
write_short(0);
write_short(get_user_team(pwned));
message_end();
set_pev(pwned, pev_frags, float(get_user_frags(pwned) - 1));
}
}
MessageAndEffects( touched, toucher )
{
if( message_after[touched][toucher] <= get_gametime( ) )
{
client_cmd( 0, "spk ^"%s^"", g_szSounds[ random( sizeof( g_szSounds ) ) ] );
set_hudmessage( 0, 255, 255, -1.0, 0.20, 0, 0.0, 2.0, 0.0, 1.0, -1);
show_hudmessage(0, "%s OWNED %s",get_name(toucher),get_name(touched));
ColorChat(0,RED,"^x04[CS1]^x03 %s^x01 OWNED^x03 %s^x01 !",get_name(toucher),get_name(touched));
message_after[touched][toucher] = get_gametime( ) + 5.0;
}
}
stock get_name(id) {
new name[32];
get_user_name(id,name,31);
return name;
}
ShakeScreen(id) {
message_begin(MSG_ONE,get_user_msgid("ScreenShake"),{0,0,0},id);
write_short(1<<13);
write_short(1<<13);
write_short(1<<13);
message_end();
}
FadeScreen(id) {
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, id);
write_short(floatround(4096.0 * 1.0, floatround_round));
write_short(floatround(4096.0 * 1.0, floatround_round));
write_short(0x0000);
write_byte(255);
write_byte(0);
write_byte(0);
write_byte(110);
message_end();
}
stock bool:is_in_duck(entity) {
if(!pev_valid(entity)) return false;
static Float:absmin[3], Float:absmax[3];
pev(entity, pev_absmin, absmin);
pev(entity, pev_absmax, absmax);
absmin[2]+=64.0;
if(absmin[2] < absmax[2]) return false;
return true;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/