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

mutual teleport when duelo is accepted


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Erra
Member
Join Date: Jun 2021
Old 11-23-2021 , 20:29   mutual teleport when duelo is accepted
Reply With Quote #1

Can you add a mutual teleport when the duel is accepted?

PHP Code:
#define PLUGINNAME    ""
#define VERSION        "0.3"
#define AUTHOR        "JGHG"
/*
Copyleft 2005


====================
Where I come from, if you cut the wall repeteadly with your knife it means you're challenging your last opponent to a knife duel. ;-)

I decided to automate this process.

If only you and another person on the opposite team remain in the round, you can hit a wall (or another object) with your knife, THREE TIMES in fast succession.
By this action you challenge your opponent to a knife duel. The person you challenge gets a menu where he can accept/decline your
challenge. The challenged person has 10 seconds to decide his mind, else the challenge is automatically declined, and the menu should be closed automatically.

Should a knife duel start, it works out pretty much like a round of Knife Arena: you can only use the knife (and the C4!).
As soon as the round ends the Knife Arena mode is turned off.

/JGHG


VERSIONS
========
050421    0.3 You must now slash with your knife three times in fast succession to challenge someone.
050208    0.2    Fixed seconds display.
            Bots should now respond correctly and a little human like. They will mostly accept challenges. ;-)
            Small fixes here and there. :-)
050208    0.1    First version - largely untested
*/

#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <colorchat>

#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]



// Globals above

public plugin_precache()
{
    
precache_sound("misc/OG/round_berserker")
    
precache_model("models/v_knife.mdl")
    
precache_model("models/p_knife.mdl")
}

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")
   
    
register_event("ResetHUD""event_hud_reset""be");
    
register_clcmd("fullupdate""clcmd_fullupdate") ;
    
register_event("TextMsg""event_restart_attempt""a""2=#Game_will_restart_in");

    
#if defined DEBUG
    
register_clcmd("0challenge""challengefn"ADMIN_CFG"< desafiador > < desafiado > - inicia un duelo a cuchillos")
    
#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")
   
}

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, "Sus desafios: %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)

    
ColorChat(challengerGREEN"^3[OG]^1Has desafiado a ^4%s! ^1Espere la respuesta en: ^4[%d] ^31segundos..."challenged_nameDECIDESECONDS)

    new 
menu[1024], keys MENU_KEY_1 MENU_KEY_2
    format
(menu1023"%s te ha desafiado a un duelo a cuchillos!^n^nTienes %d segundos para responder!^n^n\y1\w. Dale gil!^n\y2\w. No gracias, te la doy sin faka!"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)
        
ColorChat(0GREEN"^3[OG]^4%s ^1no respondio el duelo de ^4%s"challenged_namechallenger_name)
        
CancelAll()
    }
}

public 
client_putinserver(id) {
    
set_task(25.0"Announcement"id)

    return 
PLUGIN_CONTINUE
}

public 
Announcement(id) {
   
    
ColorChat(idGREEN"^3[OG]^1Cuando solo quedes tu y un enemigo, golpea 3 veces el cuchillo en la pared para desafiarlo.")
}

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)
    
ColorChat(0GREEN"^3[OG]^4%s ^1rechazo el duelo de ^4%s"challenged_namechallenger_name)
}

Accept() {
    
    new 
challenger_name[32], challenged_name[32]
    
get_user_name(g_challengerchallenger_name31)
    
get_user_name(g_challengedchallenged_name31)
    
set_user_health(g_challenger100);
    
set_user_health(g_challenged100);

    
ColorChat(0GREEN"^3[OG]^4%s ^1acepto el duelo de ^4%s"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")
        
    
client_cmd(0,"spk misc/OG/round_berserker")


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"Desafiador: %s, Desafiado: %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



stock chatcolor(id, const input[], any:...)
{
    static 
szMsg[191], msgSayText;
   
    if (!
msgSayText)
        
msgSayText get_user_msgid("SayText");
   
    
vformat(szMsg190input3);

    
replace_all(szMsg190"!g""^4");
    
replace_all(szMsg190"!y""^1");
    
replace_all(szMsg190"!team""^3");
   
    
message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTmsgSayText, .player id);
    
write_byte(id id 33);
    
write_string(szMsg);
    
message_end();









teleport example












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""challenged_nameDECIDESECONDS)

        new 
menu[1024], keys MENU_KEY_1 MENU_KEY_2
        format
(menu1023"%s tarafindan bir bicak duellosuna davet edildiniz!^n^nNe Yapalim? Cevaplamak için %d saniyeniz var!^n^n\y1\w. EVET!^n\y2\w. HAYIR!"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 bicak duellosu meydan okumasina yeterince hızlı cevap vermedi..."challenged_namechallenger_name)
                
CancelAll()
        }
}

public 
client_putinserver(id) {
        
set_task(25.0"Announcement"id)

        return 
PLUGIN_CONTINUE
}

public 
Announcement(id) {
        
client_print(idprint_chat"[REALTR] 1VS1 kalinca duvara 3 kere vur..")
}

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 bicak duellosu meydan okumasini geri ceviriyor..."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 bicak duellosu meydan okumasini kabul etti"challenged_namechallenger_name)
        
g_knifeArena true
        strip_user_weapons
(g_challenger)
        
strip_user_weapons(g_challenged)
        
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);

Erra is offline
Erra
Member
Join Date: Jun 2021
Old 11-25-2021 , 22:12   Re: mutual teleport when duelo is accepted
Reply With Quote #2

pls help
Erra is offline
Erra
Member
Join Date: Jun 2021
Old 11-29-2021 , 21:26   Re: mutual teleport when duelo is accepted
Reply With Quote #3

pls help sir.
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 04:10.


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