Raised This Month: $ Target: $400
 0% 

Help: i need knife duel menu appers only once per round :)


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
wizz
Member
Join Date: Mar 2010
Old 05-29-2013 , 06:23   Help: i need knife duel menu appers only once per round :)
Reply With Quote #1

Hello people, i need that only 1 time per round can send knife duell request not spamming .. (request can only send when is 1 VS 1 and when slashing knife to wall 3 times)
Because some people spamming knife duell request
Greetings from Estonian

Heres the SMA:

PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "Knife Duel"
#define VERSION "1.0"
#define AUTHOR "Alka"

#define CBASE_CURRWPN_ENT 373
#define OFFSET_ENT_TO_INDEX 43

new const g_szKnifeSound[] = "weapons/knife_hitwall1.wav";
new const 
g_szSpawnClassname[] = "info_player_deathmatch";

new 
Float:g_fHit[33];
new 
iHitCount[33];
new 
g_iChallengedg_iChallenger;

new 
Float:g_vKnifeOrigin[2][3];
new 
bool:g_bInChallenge;
new 
bool:g_bProtect;
new 
g_iTimer;

enum _:max_cvars {
    
    
CVAR_COUNT 0,
    
CVAR_TIMER,
    
CVAR_MAXDISTANCE,
    
CVAR_PROTECTION,
    
CVAR_ANNOUNCE,
    
CVAR_RESET
};
new 
g_Pcvar[max_cvars];

new 
g_iFwdSpawn;
new 
g_iMaxPlayers;

public 
plugin_init() {
    
    
register_plugin(PLUGINVERSIONAUTHOR);
    
    
register_forward(FM_EmitSound"fwd_EmitSound"1);
    
register_forward(FM_PlayerPreThink"fwd_PlayerPreThink_post"1);
    
RegisterHam(Ham_Killed"player""fwd_Killed"1);
    
unregister_forward(FM_Spawng_iFwdSpawn1);
    
    
register_logevent("logevent_RoundEnd"2"1=Round_End""1=Round_Draw");
    
    
g_Pcvar[CVAR_COUNT] = register_cvar("kd_knifecount""3");
    
g_Pcvar[CVAR_TIMER] = register_cvar("kd_preparetime""3");
    
g_iTimer get_pcvar_num(g_Pcvar[CVAR_TIMER]);
    
g_Pcvar[CVAR_PROTECTION] = register_cvar("kd_protection""1");
    
g_Pcvar[CVAR_MAXDISTANCE] = register_cvar("kd_maxdistance""600");
    
g_Pcvar[CVAR_ANNOUNCE] = register_cvar("kd_announce""1");
    
g_Pcvar[CVAR_RESET] = register_cvar("kd_resethp""1");
    
    
g_iMaxPlayers get_maxplayers();
}

public 
plugin_precache()
    
g_iFwdSpawn register_forward(FM_Spawn"fwd_Spawn"1);

public 
client_disconnect(id)
{
    if((
id == g_iChallenged) || (id == g_iChallenger))
    {
        
g_bInChallenge false;
        
g_bProtect false;
    }
}

public 
fwd_Spawn(ent)
{
    if(!
pev_valid(ent))
        return 
FMRES_IGNORED;
    
    static 
szClassname[32];
    
pev(entpev_classnameszClassnamesizeof szClassname 1);
    
    if(
equal(szClassnameg_szSpawnClassname))
    {
        if(
vec_null(g_vKnifeOrigin[0]))
        {
            
pev(entpev_origing_vKnifeOrigin[0]);
        }
        else if(!
vec_null(g_vKnifeOrigin[0]) && vec_null(g_vKnifeOrigin[1]))
        {
            static 
Float:vTmp[3];
            
pev(entpev_originvTmp);
            
            if((
300.0 <= vector_distance(g_vKnifeOrigin[0], vTmp) < 600.0))
                
g_vKnifeOrigin[1] = vTmp;
        }
    }
    return 
FMRES_IGNORED;
}

public 
fwd_EmitSound(idchannel, const sound[])
{
    if(!
is_user_alive(id))
        return 
FMRES_IGNORED;
    
    if(!
equal(soundg_szKnifeSound))
        return 
FMRES_IGNORED;
    
    static 
Float:fGmTime;
    
fGmTime get_gametime();
    
    if((
fGmTime g_fHit[id]) >= 1.0)
    {
        
iHitCount[id] = 0;
        
g_fHit[id] = fGmTime;
    }
    ++
iHitCount[id];
    
g_fHit[id] = fGmTime;
    
    if((
iHitCount[id] >= get_pcvar_num(g_Pcvar[CVAR_COUNT])) && check_players() && !g_bInChallenge)
    {
        new 
iOpponent get_opponent(get_user_team(id));
        if(!
iOpponent)
            return 
FMRES_IGNORED;
        
        
fnChallenge(idiOpponent);
        
        
iHitCount[id] = 0;
    }
    return 
FMRES_IGNORED;
}

public 
fwd_PlayerPreThink_post(id)
{
    if(!
is_user_alive(id) || !g_bInChallenge)
        return 
FMRES_IGNORED;
    
    static 
iWpn;
    
iWpn get_pdata_cbase(idCBASE_CURRWPN_ENT);
    
    if(
pev_valid(iWpn))
    {
        if(
get_pdata_int(iWpnOFFSET_ENT_TO_INDEX) != CSW_KNIFE)
            
engclient_cmd(id"weapon_knife");
    }
    
    static 
iOpponent;
    if(
id == g_iChallenged)
        
iOpponent g_iChallenger;
    else
        
iOpponent g_iChallenged;
    
    if(!
is_user_connected(iOpponent))
        return 
FMRES_IGNORED;
    
    if((
fm_get_entity_distance(idiOpponent) >= get_pcvar_float(g_Pcvar[CVAR_MAXDISTANCE])) && g_bProtect)
    {
        static 
Float:vVel[3];
        
fm_get_speed_vector2(idiOpponent100.0vVel);
        
        
set_pev(idpev_velocityvVel);
    }
    return 
FMRES_IGNORED;
}

public 
fwd_Killed(ididattackershouldgib)
{
    if(!
get_pcvar_num(g_Pcvar[CVAR_ANNOUNCE]))
        return 
HAM_IGNORED;
    
    if(
check_players())
    {
        for(new 
<= g_iMaxPlayers i++)
        {
            if(!
is_user_alive(i))
                continue;
            
            
client_print(iprint_chat"* Sa saad vastasega noaduelli teha lüües %d korda noaga vastu seina."get_pcvar_num(g_Pcvar[CVAR_COUNT]));
        }
    }
    return 
HAM_IGNORED;
}

public 
fnChallenge(idopponent)
{
    new 
szName[32], szOppName[32];
    
get_user_name(idszNamesizeof szName 1);
    
get_user_name(opponentszOppNamesizeof szOppName 1);
    
    new 
szTitle[64];
    
formatex(szTitlesizeof szTitle 1"\r%s \ytahab noaduelli teha, nõustud?"szName);
    
    new 
iMenu menu_create(szTitle"menu_MainHandler"0);
    
menu_additem(iMenu"Jah""1"0, -1);
    
menu_additem(iMenu"Ei""2"0, -1);
    
    
menu_setprop(iMenuMPROP_EXITMEXIT_NEVER);
    
menu_display(opponentiMenu0);
    
    
client_print(0print_chat"* %s kutsus %s noaduellile."szNameszOppName);
    
    
g_iChallenger id;
    
g_iChallenged opponent;
    
g_bInChallenge true;
}

public 
menu_MainHandler(idmenuitem)
{
    if(!
is_user_connected(id))
        return 
1;
    
    new 
szData[6], iAccessiCallBack;
    
menu_item_getinfo(menuitemiAccessszDatasizeof szData 1__iCallBack);
    
    new 
iKey str_to_num(szData);
    
    new 
szName[32];
    
get_user_name(idszNamesizeof szName 1);
    
    switch(
iKey)
    {
        case 
1:
        {
            
client_print(0print_chat"* %s nõustus noaduelliga!"szName);
            
fnStartDuel();
        }
        case 
2:
        {
            
client_print(0print_chat"* %s keeldus tegemast noaduelli!"szName);
            
g_bInChallenge false;
        }
    }
    return 
1;
}

public 
fnStartDuel()
{
    if(!
is_user_connected(g_iChallenged) || !is_user_connected(g_iChallenger))
        return;
    
    
engfunc(EngFunc_SetOriging_iChallengedg_vKnifeOrigin[0]);
    
engfunc(EngFunc_SetOriging_iChallengerg_vKnifeOrigin[1]);
    
    
fm_entity_set_aim(g_iChallengedg_iChallenger0);
    
fm_entity_set_aim(g_iChallengerg_iChallenged0);
    
    
fm_set_user_godmode(g_iChallenged1);
    
fm_set_user_godmode(g_iChallenger1);
    
    if(
get_pcvar_num(g_Pcvar[CVAR_RESET]))
    {
        
set_pev(g_iChallengedpev_health100.0);
        
set_pev(g_iChallengerpev_health100.0);
    }
    
set_task(1.0"taskDuelThink"'x'""0"b"0);
    
    if(
get_pcvar_num(g_Pcvar[CVAR_PROTECTION]))
        
g_bProtect true;
}

public 
taskDuelThink()
{
    if(
g_iTimer 0)
    {
        
set_hudmessage(2551000, -1.00.306.01.00.10.91);
        
show_hudmessage(0"Valmistu: %d"g_iTimer--);
    }
    else
    {
        
set_hudmessage(2551000, -1.00.306.01.00.10.51);
        
show_hudmessage(0"Noaduell hakkas!");
        
        
g_iTimer get_pcvar_num(g_Pcvar[CVAR_TIMER]);
        
remove_task('x');
        
        for(new 
<= g_iMaxPlayers i++)
        {
            if(!
is_user_alive(i))
                continue;
            
            
fm_set_user_godmode(i0);
        }
    }
}

public 
logevent_RoundEnd()
{
    
g_bInChallenge false;
    
g_bProtect false;
}

stock fm_entity_set_aim(identbone 0)
{
    if(!
is_user_connected(id) || !pev_valid(ent))
        return 
0;
    
    new 
Float:vOrigin[3];
    
pev(entpev_originvOrigin);
    
    new 
Float:vEntOrigin[3], Float:vAngles[3];
    
    if(
bone)
        
engfunc(EngFunc_GetBonePositionidbonevEntOriginvAngles);
    else
        
pev(idpev_originvEntOrigin);
    
    
vOrigin[0] -= vEntOrigin[0];
    
vOrigin[1] -= vEntOrigin[1];
    
vOrigin[2] -= vEntOrigin[2];
    
    new 
Float:v_length;
    
v_length vector_length(vOrigin);
    
    new 
Float:vAimVector[3];
    
vAimVector[0] = vOrigin[0] / v_length;
    
vAimVector[1] = vOrigin[1] / v_length;
    
vAimVector[2] = vOrigin[2] / v_length;
    
    new 
Float:vNewAngles[3];
    
vector_to_angle(vAimVectorvNewAngles);
    
    
vNewAngles[0] *= -1;
    
    if(
vNewAngles[1] > 180.0vNewAngles[1] -= 360;
    if(
vNewAngles[1] < -180.0vNewAngles[1] += 360;
    if(
vNewAngles[1] == 180.0 || vNewAngles[1] == -180.0vNewAngles[1] = -179.9;
    
    
set_pev(idpev_anglesvNewAngles);
    
set_pev(idpev_fixangle1);
    
    return 
1;
}

stock vec_null(Float:vec[3])
{
    if(!
vec[0] && !vec[1] && !vec[2])
        return 
1;
    
    return 
0;
}

stock bool:check_players()
{
    new 
iNum[2];
    for(new 
<= g_iMaxPlayers i++)
    {
        if(!
is_user_alive(i))
            continue;
        
        if(
get_user_team(i) == 1)
            ++
iNum[0];
        else if(
get_user_team(i) == 2)
            ++
iNum[1];
    }
    if((
iNum[0] == 1) && (iNum[1] == 1))
        return 
true;
    
    return 
false;
}

stock get_opponent(team)
{
    for(new 
<= g_iMaxPlayers i++)
    {
        if(!
is_user_alive(i))
            continue;
        
        if(
get_user_team(i) == team)
            return 
i;
    }
    return 
0;
}

stock fm_set_user_godmode(indexgodmode 0)
{
    
set_pev(indexpev_takedamagegodmode == DAMAGE_NO DAMAGE_AIM);
    return 
1;
}

stock fm_get_speed_vector2(ent1ent2Float:speedFloat:new_velocity[3])
{
    if(!
pev_valid(ent1) || !pev_valid(ent2))
        return 
0;
    
    static 
Float:vOrigin1[3];
    
pev(ent1pev_originvOrigin1);
    static 
Float:vOrigin2[3];
    
pev(ent2pev_originvOrigin2);
    
    
new_velocity[0] = vOrigin2[0] - vOrigin1[0];
    
new_velocity[1] = vOrigin2[1] - vOrigin1[1];
    
new_velocity[2] = vOrigin2[2] - vOrigin1[2];
    new 
Float:fNum floatsqroot(speed speed / (new_velocity[0] * new_velocity[0] + new_velocity[1] * new_velocity[1] + new_velocity[2] * new_velocity[2]));
    
new_velocity[0] *= fNum;
    
new_velocity[1] *= fNum;
    
new_velocity[2] *= fNum;
    
    return 
1;
}

stock Float:fm_get_entity_distance(ent1ent2)
{
    if(!
pev_valid(ent1) || !pev_valid(ent2))
        return 
0.0;
    
    static 
Float:vOrigin1[3];
    
pev(ent1pev_originvOrigin1);
    static 
Float:vOrigin2[3];
    
pev(ent2pev_originvOrigin2);
    
    return 
vector_distance(vOrigin1vOrigin2);


Last edited by wizz; 05-29-2013 at 06:26.
wizz is offline
joshknifer
Veteran Member
Join Date: Jun 2011
Location: Denver, CO
Old 05-29-2013 , 12:22   Re: Help: i need knife duel menu appers only once per round :)
Reply With Quote #2

Next time search for knife duel...I requested this so I know it has been made...

https://forums.alliedmods.net/showthread.php?t=207852
__________________
joshknifer is offline
Send a message via Skype™ to joshknifer
wizz
Member
Join Date: Mar 2010
Old 05-29-2013 , 14:49   Re: Help: i need knife duel menu appers only once per round :)
Reply With Quote #3

thanks,, close this
wizz is offline
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 21:41.


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