Raised This Month: $32 Target: $400
 8% 

Weapon doesn't go away after spawn


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Erra
Member
Join Date: Jun 2021
Old 11-01-2021 , 02:03   Weapon doesn't go away after spawn
Reply With Quote #1

hello, in this code, after the opponent approves, we spawn mutually, but the weapon does not disappear in the knife duel.
Knife fires like AWP when I press q

PHP Code:
#define PLUGINNAME      "Automatic knife duel"
#define VERSION         "0.3"
#define AUTHOR          "JGHG"
 
#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
 
#define DEBUG
 
#if defined DEBUG
#include <amxmisc>
#endif // defined DEBUG
 
#define MENUSELECT1                             0
#define MENUSELECT2                             1
#define TASKID_CHALLENGING              2348923
#define TASKID_BOTTHINK                 3242321
#define DECIDESECONDS                   10
#define ALLOWED_WEAPONS                 2
#define KNIFESLASHES                    3 // the nr of slashes within a short amount of time until a challenge starts...
// Globals below
new g_allowedWeapons[ALLOWED_WEAPONS] = {CSW_KNIFECSW_C4}
new 
g_MAXPLAYERS
new bool:g_challenging false
new bool:g_knifeArena false
new bool:g_noChallengingForAWhile false
new g_challengemenu
new g_challenger
new g_challenged
new g_challenges[33]
 
new 
Float:g_vKnifeOrigin[2][3];
new const 
g_szSpawnClassname[] = "info_player_deathmatch";
 
enum _:max_cvars {
        
        
CVAR_COUNT 0,
        
CVAR_TIMER,
        
CVAR_MAXDISTANCE,
        
CVAR_ANNOUNCE,
        
CVAR_RESET
};
new 
g_Pcvar[max_cvars];
 
new 
g_iFwdSpawn;
new 
g_iMaxPlayers;
 
public 
plugin_modules()
{
        
require_module("fakemeta")
        
require_module("fun")
}
 
public 
plugin_precache()
{
        
g_iFwdSpawn register_forward(FM_Spawn,"fwd_Spawn",1);
}
 
public 
fwd_Spawn(ent)
{
        if(!
pev_valid(ent))
                return 
FMRES_IGNORED;
        
        static 
szClassname[32];
        
pev(ent,pev_classname,szClassname,sizeof szClassname 1);
        
        if(
equal(szClassname,g_szSpawnClassname))
        {
                if(
vec_null(g_vKnifeOrigin[0]))
                {
                        
pev(ent,pev_origin,g_vKnifeOrigin[0]);
                }
                else if(!
vec_null(g_vKnifeOrigin[0]) && vec_null(g_vKnifeOrigin[1]))
                {
                        static 
Float:vTmp[3];
                        
pev(ent,pev_origin,vTmp);
                        
                        if((
300.0 <= vector_distance(g_vKnifeOrigin[0],vTmp) < 600.0))
                                
g_vKnifeOrigin[1] = vTmp;
                }
        }
        return 
FMRES_IGNORED;
}
        
public 
forward_emitsound(const PIRATE, const Onceuponatimetherewasaverysmallnoise[], const Float:turtlewhoateabiggerturtleand, const Float:afterthatthesmallturtlegot, const veryveryverybig, const theend) {
        if (
g_noChallengingForAWhile || g_knifeArena || g_challenging || PIRATE || PIRATE g_MAXPLAYERS || !is_user_alive(PIRATE) || !equal(noise"weapons/knife_hitwall1.wav"))
                return 
FMRES_IGNORED
 
        
new team get_user_team(PIRATE), otherteam 0matchingOpponent 0
        
// Make sure exactly one person on each team is alive.
        
for (new 1<= g_MAXPLAYERSi++) {
                if (!
is_user_connected(i) || !is_user_alive(i) || PIRATE == i)
                        continue
                if (
get_user_team(i) == team) {
                        
// No fun.
                        
return FMRES_IGNORED
                
}
                else {
                        if (++
otherteam 1) {
                                
// No fun.
                                
return FMRES_IGNORED
                        
}
                        
matchingOpponent i
                
}
        }
 
        if (
matchingOpponent == 0)
                return 
FMRES_IGNORED
 
        
if (++g_challenges[PIRATE] >= KNIFESLASHES) {
                
Challenge(PIRATEmatchingOpponent)
                if (
is_user_bot(matchingOpponent)) {
                        new 
Float:val float(DECIDESECONDS)
                        if (
val 2.0)
                                
val 2.0
                        remove_task
(TASKID_BOTTHINK)
                        
set_task(random_float(1.0float(DECIDESECONDS) - 1.0), "BotDecides"TASKID_BOTTHINK)
                }
                
g_challenges[PIRATE] = 0
        
}
        else
                
set_task(1.0"decreaseChallenges"PIRATE)
 
        
//client_print(PIRATE, print_chat, "Your challenges: %d", g_challenges[PIRATE])
 
        
return FMRES_IGNORED
}
 
public 
decreaseChallenges(id) {
        if (--
g_challenges[id] < 0)
                
g_challenges[id] = 0
}
 
public 
BotDecides() {
        if (!
g_challenging)
                return
 
        if (
random_num(0,9) > 0)
                
Accept()
        else {
                
DeclineMsg()
        }
        
g_challenging false
        remove_task
(TASKID_CHALLENGING)
}
 
Challenge(challengerchallenged) {
        
g_challenger challenger
        g_challenged 
challenged
        g_challenging 
true
        
new challenger_name[32], challenged_name[32]
        
get_user_name(challengerchallenger_name31)
        
get_user_name(challengedchallenged_name31)
 
        
client_print(challengerprint_chat"You challenge %s to a knife duel! Await the answer within %d seconds..."challenged_nameDECIDESECONDS)
 
        new 
menu[1024], keys MENU_KEY_1 MENU_KEY_2
        format
(menu1023"You are challenged by %s to a knife duel!^n^nWhat will it be? You have %d seconds to answer!^n^n\y1\w. Bring it on!^n\y2\w. No, I'd rather use my boomstick!"challenger_nameDECIDESECONDS)
        
show_menu(challengedkeysmenuDECIDESECONDS"JGHG's automatic knife duel")
        
set_task(float(DECIDESECONDS), "timed_toolate"TASKID_CHALLENGING)
}
 
public 
timed_toolate() {
        if (
g_challenging) {
                new 
challenger_name[32], challenged_name[32]
                
get_user_name(g_challengerchallenger_name31)
                
get_user_name(g_challengedchallenged_name31)
                
client_print(0print_chat"%s didn't answer %s's knife duel challenge fast enough..."challenged_namechallenger_name)
                
CancelAll()
        }
}
 
public 
client_putinserver(id) {
        
set_task(25.0"Announcement"id)
 
        return 
PLUGIN_CONTINUE
}
 
public 
Announcement(id) {
        
client_print(idprint_chat"When only you and one enemy are left standing, you can challenge him to a knife duel by slashing a wall with your knife.")
}
 
public 
challenged_menu(idkey) {
        switch (
key) {
                case 
MENUSELECT1: {
                        
// Accept
                        
Accept()
                }
                case 
MENUSELECT2: {
                        
// Decline
                        
DeclineMsg()
                }
        }
        
g_challenging false
        remove_task
(TASKID_CHALLENGING)
 
        return 
PLUGIN_HANDLED
}
 
DeclineMsg() {
        new 
challenger_name[32], challenged_name[32]
        
get_user_name(g_challengerchallenger_name31)
        
get_user_name(g_challengedchallenged_name31)
        
client_print(0print_chat"%s turns down %s's knife duel challenge..."challenged_namechallenger_name)
}
 
Accept() {
        new 
challenger_name[32], challenged_name[32]
        
get_user_name(g_challengerchallenger_name31)
        
get_user_name(g_challengedchallenged_name31)
 
        
client_print(0print_chat"%s accepts %s's knife duel challenge!"challenged_namechallenger_name)
        
g_knifeArena true
        give_item
(g_challenger"weapon_knife")
        
give_item(g_challenged"weapon_knife")
        
engclient_cmd(g_challenger"weapon_knife")
        
engclient_cmd(g_challenged"weapon_knife")
        
engfunc(EngFunc_SetOrigin,g_challenged,g_vKnifeOrigin[0]);
        
engfunc(EngFunc_SetOrigin,g_challenger,g_vKnifeOrigin[1]);
        
        
fm_entity_set_aim(g_challenged,g_challenger,0);
        
fm_entity_set_aim(g_challenger,g_challenged,0);
        
        if(
get_pcvar_num(g_Pcvar[CVAR_RESET]))
        {
                
set_pev(g_challenged,pev_health,100.0);
                
set_pev(g_challenger,pev_health,100.0);
        }
}
 
public 
event_holdwpn(id) {
        if (!
g_knifeArena || !is_user_alive(id))
                return 
PLUGIN_CONTINUE
 
        
new weaponType read_data(2)
 
        for (new 
0ALLOWED_WEAPONSi++) {
                if (
weaponType == g_allowedWeapons[i])
                        return 
PLUGIN_CONTINUE
        
}
 
        
engclient_cmd(id"weapon_knife")
 
        return 
PLUGIN_CONTINUE
}
 
public 
event_roundend() {
        if (
g_challenging || g_knifeArena)
                
CancelAll()
        
g_noChallengingForAWhile true
        set_task
(4.0"NoChallengingForAWhileToFalse")
 
        return 
PLUGIN_CONTINUE
}
 
public 
NoChallengingForAWhileToFalse() {
        
g_noChallengingForAWhile false
}
 
CancelAll() {
        if (
g_challenging) {
                
g_challenging false
                
// Close menu of challenged
                
if (is_user_connected(g_challenged)) {
                        new 
usermenuuserkeys
                        get_user_menu
(g_challengedusermenuuserkeys// get user menu
 
                        // Hmm this ain't working :-/
                        
if (usermenu == g_challengemenu// Close it!
                                
show_menu(g_challenged0"blabla"// show empty menu
                
}
        }
        if (
g_knifeArena) {
                
g_knifeArena false
        
}
        
remove_task(TASKID_BOTTHINK)
        
remove_task(TASKID_CHALLENGING)
}
 
public 
event_death() {
        if (
g_challenging || g_knifeArena)
                
CancelAll()
 
        return 
PLUGIN_CONTINUE
}
 
#if defined DEBUG
public challengefn(idlevelcid) {
        if (!
cmd_access(idlevelcid3))
                return 
PLUGIN_HANDLED
 
        
new challenger[64], challenged[64]
        
read_argv(1challenger63)
        
read_argv(2challenged63)
 
        
console_print(id"challenger: %s, challenged: %s"challengerchallenged)
 
        new 
str_to_num(challenger)
        new 
str_to_num(challenged)
        
Challenge(rd)
        if (
is_user_bot(d))
                
Accept()
 
        return 
PLUGIN_HANDLED
}
#endif // defined DEBUG
 
public plugin_init() {
        
register_plugin(PLUGINNAMEVERSIONAUTHOR)
        
register_event("CurWeapon""event_holdwpn""be""1=1")
        
register_forward(FM_EmitSound"forward_emitsound")
        
g_MAXPLAYERS get_maxplayers()
 
        
g_challengemenu register_menuid("JGHG's automatic knife duel"/*"You are challenged"*/)
        
register_menucmd(g_challengemenuMENU_KEY_1 MENU_KEY_2"challenged_menu")
 
        
register_event("DeathMsg""event_death""a")
        
register_event("SendAudio""event_roundend""a""2&%!MRAD_terwin")
        
register_event("SendAudio""event_roundend""a""2&%!MRAD_ctwin")
        
register_event("SendAudio""event_roundend""a""2&%!MRAD_rounddraw")
        
unregister_forward(FM_Spawn,g_iFwdSpawn,1);
        
g_Pcvar[CVAR_COUNT] = register_cvar("kd_knifecount","3");
        
g_Pcvar[CVAR_TIMER] = register_cvar("kd_preparetime","3");
        
g_Pcvar[CVAR_MAXDISTANCE] = register_cvar("kd_maxdistance","550");
        
g_Pcvar[CVAR_ANNOUNCE] = register_cvar("kd_announce","1");
        
g_Pcvar[CVAR_RESET] = register_cvar("kd_resethp","1");
        
g_iMaxPlayers get_maxplayers();
        
        
#if defined DEBUG
        
register_clcmd("0challenge""challengefn"ADMIN_CFG"<challenger> <challenged> - start knife duel challenge")
        
#endif // defined DEBUG
 
        
new Float:maptime get_cvar_float("mp_timelimit")
        if (
maptime == 0.0)
                
maptime 15.0
 
        
new Float:anntime 60.0 5.0 // 5 minutes
        
if (maptime 5.0)
                
anntime maptime 3.0
 
        set_task
(anntime"Announcement"0""0"b")
}
 
stock fm_entity_set_aim(id,ent,bone 0)
{
        if(!
is_user_connected(id) || !pev_valid(ent))
        return 
0;
        
        new 
Float:vOrigin[3];
        
pev(ent,pev_origin,vOrigin);
        
        new 
Float:vEntOrigin[3],Float:vAngles[3];
        
        if(
bone)
                
engfunc(EngFunc_GetBonePosition,id,bone,vEntOrigin,vAngles);
        else
                
pev(id,pev_origin,vEntOrigin);
        
        
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(vAimVector,vNewAngles);
        
        
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(id,pev_angles,vNewAngles);
        
set_pev(id,pev_fixangle,1);
        
        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_get_speed_vector2(ent1,ent2,Float:speed,Float:new_velocity[3])
{
        if(!
pev_valid(ent1) || !pev_valid(ent2))
        return 
0;
        
        static 
Float:vOrigin1[3];
        
pev(ent1,pev_origin,vOrigin1);
        static 
Float:vOrigin2[3];
        
pev(ent2,pev_origin,vOrigin2);
        
        
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(ent1,ent2)
{
        if(!
pev_valid(ent1) || !pev_valid(ent2))
        return 
0.0;
        
        static 
Float:vOrigin1[3];
        
pev(ent1,pev_origin,vOrigin1);
        static 
Float:vOrigin2[3];
        
pev(ent2,pev_origin,vOrigin2);
        
        return 
vector_distance(vOrigin1,vOrigin2);


Last edited by Erra; 11-01-2021 at 02:06.
Erra 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 19:24.


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