⭐🚀 TkyNET | Blacklist ve Profesyonel DDoS Korumalı TeamSpeak 3 Sunucuları 🚀⭐
Sponsor Görsel
⭐ Buraya kendi metin reklamınızı vererek binlerce kişiye ulaşın! ⭐
Sponsor Görsel 2
SponsorSponsor

Sprite Duvar Arkasından Görünmeyi Kaldırma

sprite duvar arkasından görünmeyi kaldırma
Merhaba ekteki derlemede .spr yada sprite diye tanımlanan kafada çıkan o görsel duvar arkasındanda çıkıp rakibin yerini gösteriyor bunu kaldırma şansımız varmıdır rakibin kafasında yine çıksın komple kalksın istemiyorum fakat duvar arkasından gözükmesini engellemek istiyorum lütfen yardım edermisniz.
PHP Kod:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <xs>

//#define AES_EXP

#if AMXX_VERSION_NUM < 183
    #define client_disconnected client_disconnect
    #include <colorchat>
#endif

#if defined AES_EXP
    #include <aes_main>
#endif

#define PLUGIN "Duels"
#define VERSION "0.75"
#define AUTHOR "Psycrow"

#define SOUND_DUEL_ACCEPTED         "next21_duels/duel_challenge_accepted.wav"
#define SOUND_DUEL_WIN                "next21_duels/win.wav"
#define SOUND_DUEL_LOSE                "next21_duels/lose.wav"

#define SPRITE_DUEL                    "sprites/next21_duels/duel.spr"

#define DUEL_SPRITE_DISTANCE        10.0
#define DUEL_WAITING_TIME            10.0

#define Player[%1][%2]        g_player_data[%1 - 1][%2]

enum _:Player_Properties
{
    
PlrInServer,
    
PlrIsAlive,
    
PlrTeam,
    
PlrDuelReady,
    
PlrDuelWaiting,
    
PlrDuelFrags,
    
PlrDuelSprite,
    
Float: PlrDeathReasonTime,
    
Float: PlrDuelWaitingTime
}

new
g_player_data[32][Player_Properties], g_iMaxplayers, g_infoTarget,
g_forwardAddToFullPack, g_forwardCheckVisibility, g_iSpriteImpulse,
#if !defined AES_EXP
    
g_cvMoney,
#endif
g_cvFrags, g_cvReward, g_cvLosing, g_cvCompensation, g_cvSounds, Float: g_cvSprite, Float: g_cvSpriteDist

public plugin_precache()
{        
    
precache_sound(SOUND_DUEL_ACCEPTED)
    
precache_sound(SOUND_DUEL_WIN)
    
precache_sound(SOUND_DUEL_LOSE)
    
    
precache_model(SPRITE_DUEL)
}

public 
plugin_init()
{
    
register_plugin(PLUGIN, VERSION, AUTHOR)
    
    
register_cvar("cv_duels_frags", "3")
    
register_cvar("cv_duels_reward", "6000")
    
register_cvar("cv_duels_losing", "3000")
    
register_cvar("cv_duels_compensation", "3000")
    
register_cvar("cv_duels_sounds", "1")
    
register_cvar("cv_duels_sprite", "0.5")
    
register_cvar("cv_duels_sprite_dist", "40.0")

    
register_clcmd("say /duelo", "duel_check_players")
    
register_clcmd("say_team /duel", "duel_check_players")
    
    
register_clcmd("say /cikis", "unduel")
    
register_clcmd("say_team /cikis", "unduel")
    
    
register_logevent("fw_RoundStart", 2, "1=Round_Start")
    
    
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
    
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled", 1)
    
RegisterHam(Ham_Player_PreThink, "player", "fw_PlayerPreThink")
    
    
register_message(get_user_msgid("TeamInfo"), "fw_TeamInfo")
    
    
g_iMaxplayers = get_maxplayers()
    
g_infoTarget = engfunc(EngFunc_AllocString, "info_target")
    
g_iSpriteImpulse = engfunc(EngFunc_AllocString, "next21_duelsprite")
    
    
#if !defined AES_EXP
    
register_cvar("cv_duels_maxmoney","16000")
    
#endif
    
    
register_dictionary("next21_duels.txt")
}

public 
fw_RoundStart()
{
    
g_cvFrags = get_cvar_num("cv_duels_frags")
    
g_cvReward = get_cvar_num("cv_duels_reward")
    
g_cvLosing = get_cvar_num("cv_duels_losing")
    
g_cvCompensation = get_cvar_num("cv_duels_compensation")
    
g_cvSounds = get_cvar_num("cv_duels_sounds")
    
#if !defined AES_EXP
    
g_cvMoney = get_cvar_num("cv_duels_maxmoney")
    
#endif
    
    
new Float: fSpriteScale = floatmax(0.0, get_cvar_float("cv_duels_sprite"))
        
    if (
fSpriteScale > 0.0 && g_cvSprite == 0.0)
    {
        
g_forwardAddToFullPack = register_forward(FM_AddToFullPack, "fw_AddToFullPack" , 1)
        
g_forwardCheckVisibility = register_forward(FM_CheckVisibility, "fw_CheckVisibility")
        
g_cvSpriteDist = get_cvar_float("cv_duels_sprite_dist")
    }
    else if (
fSpriteScale == 0.0 && g_cvSprite > 0.0)
    {
        for (new 
i = 1; i <= g_iMaxplayers; i++)
        {
            if (!
Player[i][PlrDuelSprite])
                continue
                
            
engfunc(EngFunc_RemoveEntity, Player[i][PlrDuelSprite])
            
Player[i][PlrDuelSprite] = 0
        
}
                
        
unregister_forward(FM_AddToFullPack, g_forwardAddToFullPack)
        
unregister_forward(FM_CheckVisibility, g_forwardCheckVisibility)
    }
    else if (
fSpriteScale != g_cvSprite)
    {
        for (new 
i = 1; i <= g_iMaxplayers; i++)
            if (
Player[i][PlrDuelSprite])
                
set_pev(Player[i][PlrDuelSprite], pev_scale, fSpriteScale)
    }
    
    
g_cvSprite = fSpriteScale
}

public 
client_putinserver(id)
{
    
Player[id][PlrInServer] = 1
    Player
[id][PlrIsAlive] = 0
    Player
[id][PlrTeam] = 0
}

public 
client_disconnected(id)
{
    
Player[id][PlrInServer] = 0
    Player
[id][PlrIsAlive] = 0
    Player
[id][PlrTeam] = 0
    
    
if (Player[id][PlrDuelReady] && Player[Player[id][PlrDuelReady]][PlrInServer])
    {
        
remove_duel_sprite(id)
        
remove_duel_sprite(Player[id][PlrDuelReady])
    
        if (
is_user_connected(Player[id][PlrDuelReady]))
        {
            new 
playerName[24]
            
pev(id, pev_netname, playerName, 23)
            
            
client_print_color(Player[id][PlrDuelReady], print_team_red, "^4[%s] ^3%L",
                
PLUGIN, Player[id][PlrDuelReady], "DUEL_DISCONNECT", playerName)
            
            
compensation(Player[id][PlrDuelReady], id)
        }
        else
        {
            
Player[Player[id][PlrDuelWaiting]][PlrInServer] = 0
            Player
[Player[id][PlrDuelReady]][PlrDuelReady] = 0
            Player
[id][PlrDuelReady] = 0
        
}
    }
    
    if (
Player[id][PlrDuelWaiting] && Player[Player[id][PlrDuelWaiting]][PlrInServer])
    {    
        new 
victim = Player[id][PlrDuelWaiting], playerName[24]
        
pev(id, pev_netname, playerName, 23)
        
client_print_color(victim, print_team_red, "^4[%s] ^3%L",
            
PLUGIN, victim, "DUEL_DISCONNECT_W", playerName)
                
        
Player[id][PlrDuelWaiting] = 0
        Player
[victim][PlrDuelWaiting] = 0
        
        Player
[id][PlrDuelWaitingTime] = 0
        Player
[victim][PlrDuelWaitingTime] = 0
    
}
}

public 
fw_PlayerSpawn(id)
{
    if (!
is_user_alive(id))
        return 
HAM_IGNORED
        
    Player
[id][PlrTeam] = get_pdata_int(id, 114, 5)
    
Player[id][PlrIsAlive] = 1
    
    
if (Player[id][PlrDuelSprite])
        
set_pev(Player[id][PlrDuelSprite], pev_effects, 0)
    
    return 
HAM_IGNORED
}

public 
fw_PlayerKilled(victim, attacker)
{
    
Player[victim][PlrIsAlive] = 0
    
    
if (attacker && attacker != victim)
        
set_flag_duel(attacker, victim)
        
    if (
Player[victim][PlrDuelSprite])
        
set_pev(Player[victim][PlrDuelSprite], pev_effects, EF_NODRAW)
}

public 
fw_PlayerPreThink(id)
{
    if(
Player[id][PlrDuelWaiting] && Player[id][PlrDuelWaitingTime] <= get_gametime())
    {
        
Player[id][PlrDuelWaitingTime] = 0
        Player
[Player[id][PlrDuelWaiting]][PlrDuelWaitingTime] = 0
        
        client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING_TIME")
        
client_print_color(Player[id][PlrDuelWaiting], print_team_red, "^4[%s] ^3%L",
            
PLUGIN, Player[id][PlrDuelWaiting], "DUEL_WAITING_TIME")
        
        
Player[Player[id][PlrDuelWaiting]][PlrDuelWaiting] = 0
        Player
[id][PlrDuelWaiting] = 0
    
}
}

public 
fw_TeamInfo()
{
    new 
id = get_msg_arg_int(1)
    
    new 
team[2]
    
get_msg_arg_string(2, team, 1)
            
    switch (
team[0])
    {
        case 
'T': Player[id][PlrTeam] = 1
        
case 'C': Player[id][PlrTeam] = 2
        
case 'S': Player[id][PlrTeam] = 3
        
default: Player[id][PlrTeam] = 0
    
}
            
    new 
victim = Player[id][PlrDuelReady]
    if (
victim)
    {
        if (
Player[victim][PlrInServer])
        {
            if (
Player[id][PlrTeam] == Player[victim][PlrTeam]
                || (
Player[id][PlrTeam] != 1 && Player[id][PlrTeam] != 2))
            {
                
remove_duel_sprite(id)
                
remove_duel_sprite(victim)
            
                
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_TEAM")
                
client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_TEAM")
                
                if (
Player[id][PlrDuelFrags] < Player[victim][PlrDuelFrags])
                    
compensation(victim, id)
                else if (
Player[id][PlrDuelFrags] > Player[victim][PlrDuelFrags])
                    
compensation(id, victim)
                
                
Player[id][PlrDuelFrags] = 0
                Player
[victim][PlrDuelFrags] = 0
                
                Player
[id][PlrDuelReady] = 0
                Player
[victim][PlrDuelReady] = 0
            
}        
        }
        
        
victim = Player[id][PlrDuelWaiting]
        if (
victim && Player[victim][PlrInServer])    
        {
            if (
Player[id][PlrTeam] == Player[victim][PlrTeam]
                || (
Player[id][PlrTeam] != 1 && Player[id][PlrTeam] != 2))
            {
                
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_TEAM")
                
client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_TEAM")
                
                
Player[id][PlrDuelWaiting] = 0
                Player
[victim][PlrDuelWaiting] = 0
                
                Player
[id][PlrDuelWaitingTime] = 0
                Player
[victim][PlrDuelWaitingTime] = 0
            
}
        }
    }
}
    
public 
fw_AddToFullPack(es_state, e, ent, host, hostflags, player)
{
    if (!
ent || player || pev_valid(ent) != 2 || pev(ent, pev_impulse) != g_iSpriteImpulse)
        return 
FMRES_IGNORED
        
    
if (Player[host][PlrDuelSprite] != ent)
    {
        
set_es(es_state, ES_RenderMode, EF_NODRAW)
        return 
FMRES_IGNORED
    
}
            
    static 
iEnemy; iEnemy = Player[host][PlrDuelReady]    
    if (!
iEnemy || !Player[iEnemy][PlrIsAlive])
    {
        
set_es(es_state, ES_RenderMode, EF_NODRAW)
        return 
FMRES_IGNORED
    
}
                
    static 
Float: startPosition[3],
    
Float: endPosition[3],
    
Float: fVector[3],
    
Float: fVectorNormal[3],
    
Float: fView[3],
    
Float: endCurPosition[3]
                
    
pev(iEnemy, pev_origin, endPosition)
    
endPosition[2] += g_cvSpriteDist
        
    pev
(host, pev_origin, startPosition)
    
pev(host, pev_view_ofs, fView)
    
xs_vec_add(startPosition, fView, startPosition)
        
    
xs_vec_sub(endPosition, startPosition, fVector)
    
xs_vec_normalize(fVector, fVectorNormal)
        
    
engfunc(EngFunc_TraceLine, startPosition, endPosition, IGNORE_MONSTERS, host, 0)
    
get_tr2(0, TR_vecEndPos, endCurPosition)
        
    
xs_vec_mul_scalar(fVectorNormal, -10.0, fVector)
    
xs_vec_add(endCurPosition, fVector, endCurPosition)
        
    if (
get_distance_f(startPosition, endCurPosition) - get_distance_f(endPosition, endCurPosition) < 100.0)
    {
        
xs_vec_mul_scalar(fVectorNormal, floatmin(100.0, get_distance_f(startPosition, endCurPosition)), endCurPosition)
        
xs_vec_add(startPosition, endCurPosition, endCurPosition)
            
        
set_es(es_state, ES_Scale, get_distance_f(startPosition, endCurPosition) * 0.005 * g_cvSprite)
    }
    
    
set_es(es_state, ES_Origin, endCurPosition)

    return 
FMRES_IGNORED
}

public 
fw_CheckVisibility(ent)
{
    if (
pev(ent, pev_impulse) == g_iSpriteImpulse)
    {
        
forward_return(FMV_CELL, 1)
        return 
FMRES_SUPERCEDE
    
}
    
    return 
FMRES_IGNORED
}

public 
duel_check_players(id)
{
    if (
Player[id][PlrDuelReady])
    {
        new 
player_name[24]
        
pev(Player[id][PlrDuelReady], pev_netname, player_name, 23)
        
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_EXIST", player_name)
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_UNDUEL")
        return
    }
        
    if (
Player[id][PlrDuelWaiting])
    {
        new 
player_name[24]
        
pev(Player[id][PlrDuelWaiting], pev_netname, player_name, 23)
        
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_EXIST_W", player_name)
        return
    }
    
    if (!
Player[id][PlrTeam] || Player[id][PlrTeam] == 3)
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WRONG_TEAM")
        return        
    }
    
    new 
menuName[64]
    
format(menuName, 63, "\r%L", id, "DUEL_HEADNAME")
    
    new 
Players_Menu = menu_create(menuName, "duel_menu_handler")
    new 
s_Name[24], s_Player[4], iEnemyTeam = Player[id][PlrTeam] == 2 ? 1 : 2
        
    
for(new i = 1; i <= g_iMaxplayers; i++)
    { 
        if (!
Player[i][PlrInServer] || Player[i][PlrTeam] != iEnemyTeam || is_user_hltv(i))
            continue
        
        
pev(i, pev_netname, s_Name, 23)
        
num_to_str(i, s_Player, 3)
        
        if (
Player[i][PlrDuelReady] || Player[i][PlrDuelWaiting])
            
format(s_Name, 23, "\d%s", s_Name)
        
        
menu_additem(Players_Menu, s_Name, s_Player, 0)
    }
    
    new 
sMenuProp[3][16]
    
format(sMenuProp[0], 15, "%L", id, "MENU_NEXT")
    
format(sMenuProp[1], 15, "%L", id, "MENU_BACK")
    
format(sMenuProp[2], 15, "%L", id, "MENU_EXIT")
    
    
menu_setprop(Players_Menu, MPROP_NEXTNAME, sMenuProp[0])
    
menu_setprop(Players_Menu, MPROP_BACKNAME, sMenuProp[1])
    
menu_setprop(Players_Menu, MPROP_EXITNAME, sMenuProp[2])
    
    
menu_display(id, Players_Menu, 0)
}

public 
duel_menu_handler(id, menu, item)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    
    if(!
Player[id][PlrTeam] || Player[id][PlrTeam] == 3)
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WRONG_TEAM")
        return 
PLUGIN_HANDLED    
    
}
    
    new 
sData[6], sName[64], iAccess, iCallback
    menu_item_getinfo
(menu, item, iAccess, sData, charsmax(sData), sName, charsmax(sName), iCallback)
    
    new 
key = str_to_num(sData)
        
    if (!
Player[key][PlrInServer] || Player[id][PlrTeam] == Player[key][PlrTeam] || !Player[key][PlrTeam] || Player[key][PlrTeam] == 3)
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_ERROR_PLAYER")
        
duel_check_players(id)
        return 
PLUGIN_HANDLED
    
}
    
    if (
Player[key][PlrDuelReady] || Player[key][PlrDuelWaiting])
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WARNING_PLAYER")
        
duel_check_players(id)
        return 
PLUGIN_HANDLED
    
}
    
    new 
enemyName[24]
    
pev(key, pev_netname, enemyName, 23)
    
    
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING", enemyName)
    
Player[key][PlrDuelWaiting] = id
    Player
[id][PlrDuelWaiting] = key
    
    
new Float: gameTime = get_gametime()
    
Player[id][PlrDuelWaitingTime] = _:(gameTime + DUEL_WAITING_TIME)
    
Player[key][PlrDuelWaitingTime] = _:(gameTime + DUEL_WAITING_TIME)
    
    
menu_destroy(menu)
    
    new 
menuName[120], playerName[24]
    
pev(id, pev_netname, playerName, 23)
    
format(menuName, 119, "\r%L", key, "DUEL_CHALLENGE", playerName)
    
    new 
duel_Menu = menu_create(menuName, "duel_challenge_handler")
    
    new 
strMenuItem[64]
    
format(strMenuItem, 63, "\w%L", key, "DUEL_AGREE")
    
menu_additem(duel_Menu, strMenuItem, "1", 0)
    
format(strMenuItem, 63, "\w%L", key, "DUEL_REFUSE")
    
menu_additem(duel_Menu, strMenuItem, "2", 0)
    
    
menu_setprop(duel_Menu, MPROP_EXIT, -1)
    
menu_display(key, duel_Menu, 0)
    
    if(
is_user_bot(key))
        
duel_challenge_handler(key, duel_Menu, 0)
    
    return 
PLUGIN_CONTINUE
}

public 
duel_challenge_handler(id, menu, item)
{
    if (!
is_user_connected(id))
        return 
PLUGIN_HANDLED
    
    
new enemy = Player[id][PlrDuelWaiting]
    
    if (!
enemy)
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING_TIME")
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    
    switch(
item)
    {
        case 
0:
        {
            new 
playerName[24], enemyName[24]
            
pev(id, pev_netname, playerName, 23)
            
pev(enemy, pev_netname, enemyName, 23)
            
client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_PLAYER_AGREE", playerName)
            
client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_RULE", g_cvFrags)
            
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_RULE", g_cvFrags)
            
Player[enemy][PlrDuelReady] = id
            Player
[id][PlrDuelReady] = enemy
            
            
if (g_cvSounds)
            {
                
client_cmd(enemy, "spk %s", SOUND_DUEL_ACCEPTED)
                
client_cmd(id, "spk %s", SOUND_DUEL_ACCEPTED)
            }
            
            if (
g_cvSprite > 0.0)
            {
                
create_duel_sprite(id)
                
create_duel_sprite(enemy)
            }
        }
        case 
1:
        {
            new 
playerName[24]
            
pev(id, pev_netname, playerName, 23)
            
client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_PLAYER_REFUSE", playerName)
        }
        default:
        {
            
menu_destroy(menu)
            return 
PLUGIN_HANDLED
        
}
    }
    
    
Player[enemy][PlrDuelWaiting] = 0
    Player
[id][PlrDuelWaiting] = 0
    
    Player
[id][PlrDuelWaitingTime] = 0
    Player
[enemy][PlrDuelWaitingTime] = 0
    
    menu_destroy
(menu)
    return 
PLUGIN_HANDLED    
}

public 
unduel(id)
{
    new 
enemy = Player[id][PlrDuelReady]
    
    if(!
enemy)
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_NOEXIST")
        return
    }
    
    
remove_duel_sprite(id)
    
remove_duel_sprite(enemy)
    
    new 
playerName[24]
    
pev(id, pev_netname, playerName, 23)
    
client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_BREAK", playerName)
    
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_BREAK_V")
    
    if(
Player[id][PlrDuelFrags] < Player[enemy][PlrDuelFrags])
    {        
        if(
g_cvLosing)
        {
            
#if defined AES_EXP
            
aes_add_player_exp(id, -g_cvLosing)
            
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_ARS_BREAK_FINE", g_cvLosing)
            
#else
            
new curMoney = cs_get_user_money(id)
            new 
money = curMoney - g_cvLosing < 0 ? curMoney : g_cvLosing
            cs_set_user_money
(id, curMoney - money)
            
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_BREAK_FINE", money)
            
#endif
        
}
    }
    
    
compensation(enemy, id)
}

set_flag_duel(attacker, victim)
{        
    if(
Player[victim][PlrDuelReady] != attacker || Player[attacker][PlrDuelReady] != victim)
        return
    
    new 
attackerName[24], victimName[24]
    
pev(victim, pev_netname, victimName, 23)
    
pev(attacker, pev_netname, attackerName, 23)
    
    
Player[attacker][PlrDuelFrags]++
    
    if(
Player[attacker][PlrDuelFrags] == g_cvFrags)
    {
        
remove_duel_sprite(attacker)
        
remove_duel_sprite(victim)
    
        
client_print_color(0, print_team_red, "^4[%s] ^3%L", PLUGIN, LANG_PLAYER, "DUEL_WIN",
            
attackerName, victimName, attackerName, Player[attacker][PlrDuelFrags], Player[victim][PlrDuelFrags])
        
        if(
g_cvReward)
        {
            
#if defined AES_EXP
            
aes_add_player_exp(attacker, g_cvReward)
            
client_print_color(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_AES_REWARD", g_cvReward)
            
#else
            
new curMoney = cs_get_user_money(attacker)
            new 
money = curMoney + g_cvReward > g_cvMoney ? g_cvMoney - curMoney : g_cvReward
            cs_set_user_money
(attacker, curMoney + money)
            
client_print_color(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_REWARD", money)
            
#endif
        
}
        
        if(
g_cvLosing)
        {
            
#if defined AES_EXP
            
aes_add_player_exp(victim, -g_cvLosing)
            
client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_AES_LOOSE", g_cvLosing)
            
#else
            
new curMoney = cs_get_user_money(victim)
            new 
money = curMoney - g_cvLosing < 0 ? curMoney : g_cvLosing
            cs_set_user_money
(victim, curMoney - money)
            
client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_LOOSE", money)
            
#endif
        
}
        
        if(
g_cvSounds)
        {
            
client_cmd(attacker, "spk %s", SOUND_DUEL_WIN)
            
client_cmd(victim, "spk %s", SOUND_DUEL_LOSE)
        }
        
        
Player[attacker][PlrDuelFrags] = 0
        Player
[victim][PlrDuelFrags] = 0
        Player
[attacker][PlrDuelReady] = 0
        Player
[victim][PlrDuelReady] = 0
        
return
    }
    
    
client_print_color(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_FRAG_A",
        
g_cvFrags - Player[attacker][PlrDuelFrags])
        
    
client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_FRAG_V",
        
g_cvFrags - Player[attacker][PlrDuelFrags])
}

compensation(const id, const victim)
{
    if(
g_cvCompensation && Player[id][PlrDuelFrags] > Player[victim][PlrDuelFrags])
    {
        
#if defined AES_EXP
        
aes_add_player_exp(id, g_cvCompensation)
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_AES_COMPENSATION",
            
g_cvCompensation)
        
#else
        
new curMoney = cs_get_user_money(id)
        new 
money = curMoney + g_cvCompensation > g_cvMoney ? g_cvMoney - curMoney : g_cvCompensation
        cs_set_user_money
(id, curMoney + money)
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_COMPENSATION", money)
        
#endif
    
}
    
    
Player[id][PlrDuelFrags] = 0
    Player
[victim][PlrDuelFrags] = 0
    Player
[id][PlrDuelReady] = 0
    Player
[victim][PlrDuelReady] = 0
}

create_duel_sprite(const iPlayerId)
{
    if (
Player[iPlayerId][PlrDuelSprite])
        return 
0
        
    
new iSprite = engfunc(EngFunc_CreateNamedEntity, g_infoTarget)
            
    if (
pev_valid(iSprite) != 2)
    {
        
Player[iPlayerId][PlrDuelSprite] = 0
        server_print
("[%s] ERROR: sprite duel entities are not initialized", PLUGIN)
        return 
1
    
}
    
    
engfunc(EngFunc_SetSize, iSprite, Float: {-1.0, -1.0, -1.0} , Float: { 1.0, 1.0, 1.0 })
    
engfunc(EngFunc_SetModel, iSprite, SPRITE_DUEL)
    
engfunc(EngFunc_SetOrigin, iSprite, Float: {-8192.0, -8192.0, -8192.0})
    
    
set_pev(iSprite, pev_effects, Player[iPlayerId][PlrIsAlive] ? 0 : EF_NODRAW)
    
set_pev(iSprite, pev_renderfx, 0)
    
set_pev(iSprite, pev_rendermode, kRenderTransAdd)
    
set_pev(iSprite, pev_renderamt, 255.0)
    
set_pev(iSprite, pev_rendercolor, Float: {255.0, 255.0, 255.0})
    
set_pev(iSprite, pev_solid, SOLID_NOT)
    
set_pev(iSprite, pev_movetype, MOVETYPE_PUSHSTEP)
    
set_pev(iSprite, pev_impulse, g_iSpriteImpulse)
    
set_pev(iSprite, pev_scale, g_cvSprite)
    
    
Player[iPlayerId][PlrDuelSprite] = iSprite
    
    
return 0
}

remove_duel_sprite(const iPlayerId)
{
    if (
Player[iPlayerId][PlrDuelSprite])
    {
        
engfunc(EngFunc_RemoveEntity, Player[iPlayerId][PlrDuelSprite])
        
Player[iPlayerId][PlrDuelSprite] = 0
    
} 
RE: sprite duvar arkasından görünmeyi kaldırma
Eklentide hatalar var idi düzelttim. Bahsettiğin olayı da yaptım. Dene bakalım :
PHP Kod:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <xs>

//#define AES_EXP

#if AMXX_VERSION_NUM < 183
    #define client_disconnected client_disconnect
    #include <colorchat>
#endif

#if defined AES_EXP
    #include <aes_main>
#endif

#define PLUGIN "Duels"
#define VERSION "0.75"
#define AUTHOR "Psycrow"

#define SOUND_DUEL_ACCEPTED         "next21_duels/duel_challenge_accepted.wav"
#define SOUND_DUEL_WIN                "next21_duels/win.wav"
#define SOUND_DUEL_LOSE                "next21_duels/lose.wav"

#define SPRITE_DUEL                    "sprites/next21_duels/duel.spr"

#define DUEL_SPRITE_DISTANCE        10.0
#define DUEL_WAITING_TIME            10.0

#define Player[%1][%2]        g_player_data[%1 - 1][%2]

enum _:Player_Properties
{
    PlrInServer,
    PlrIsAlive,
    PlrTeam,
    PlrDuelReady,
    PlrDuelWaiting,
    PlrDuelFrags,
    PlrDuelSprite,
    Float: PlrDeathReasonTime,
    Float: PlrDuelWaitingTime
}

new
g_player_data[32][Player_Properties], g_iMaxplayers, g_infoTarget,
g_forwardAddToFullPack, g_forwardCheckVisibility, g_iSpriteImpulse,
#if !defined AES_EXP
    g_cvMoney,
#endif
g_cvFrags, g_cvReward, g_cvLosing, g_cvCompensation, g_cvSounds, Float: g_cvSprite, Float: g_cvSpriteDist

public plugin_precache()
{
        
    precache_sound
(SOUND_DUEL_ACCEPTED)
    precache_sound(SOUND_DUEL_WIN)
    precache_sound(SOUND_DUEL_LOSE)
    
    precache_model
(SPRITE_DUEL)
}

public 
plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_cvar
("cv_duels_frags", "3")
    register_cvar("cv_duels_reward", "6000")
    register_cvar("cv_duels_losing", "3000")
    register_cvar("cv_duels_compensation", "3000")
    register_cvar("cv_duels_sounds", "1")
    register_cvar("cv_duels_sprite", "0.5")
    register_cvar("cv_duels_sprite_dist", "40.0")

    register_clcmd("say /duelo", "duel_check_players")
    register_clcmd("say_team /duel", "duel_check_players")
    
    register_clcmd
("say /cikis", "unduel")
    register_clcmd("say_team /cikis", "unduel")
    
    register_logevent
("fw_RoundStart", 2, "1=Round_Start")
    
    RegisterHam
(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled", 1)
    RegisterHam(Ham_Player_PreThink, "player", "fw_PlayerPreThink")
    
    register_message
(get_user_msgid("TeamInfo"), "fw_TeamInfo")
    
    g_iMaxplayers 
= get_maxplayers()
    g_infoTarget = engfunc(EngFunc_AllocString, "info_target")
    g_iSpriteImpulse = engfunc(EngFunc_AllocString, "next21_duelsprite")
    
    
#if !defined AES_EXP
    register_cvar("cv_duels_maxmoney","16000")
    #endif
    
    register_dictionary
("next21_duels.txt")
}

public 
fw_RoundStart()
{
    g_cvFrags = get_cvar_num("cv_duels_frags")
    g_cvReward = get_cvar_num("cv_duels_reward")
    g_cvLosing = get_cvar_num("cv_duels_losing")
    g_cvCompensation = get_cvar_num("cv_duels_compensation")
    g_cvSounds = get_cvar_num("cv_duels_sounds")
    #if !defined AES_EXP
    g_cvMoney = get_cvar_num("cv_duels_maxmoney")
    #endif
    
    
new Float: fSpriteScale = floatmax(0.0, get_cvar_float("cv_duels_sprite"))
        
    
if (fSpriteScale > 0.0 && g_cvSprite == 0.0)
    {
        g_forwardAddToFullPack = register_forward(FM_AddToFullPack, "fw_AddToFullPack" , 1)
        g_forwardCheckVisibility = register_forward(FM_CheckVisibility, "fw_CheckVisibility")
        g_cvSpriteDist = get_cvar_float("cv_duels_sprite_dist")
    }
    else if (fSpriteScale == 0.0 && g_cvSprite > 0.0)
    {
        for (new i = 1; i <= g_iMaxplayers; i++)
        {
            if (!Player[i][PlrDuelSprite])
                continue
                
            engfunc
(EngFunc_RemoveEntity, Player[i][PlrDuelSprite])
            Player[i][PlrDuelSprite] = 0
        
}
                
        unregister_forward
(FM_AddToFullPack, g_forwardAddToFullPack)
        unregister_forward(FM_CheckVisibility, g_forwardCheckVisibility)
    }
    else if (fSpriteScale != g_cvSprite)
    {
        for (new i = 1; i <= g_iMaxplayers; i++)
            if (Player[i][PlrDuelSprite])
                set_pev(Player[i][PlrDuelSprite], pev_scale, fSpriteScale)
    }
    
    g_cvSprite 
= fSpriteScale
}

public 
client_putinserver(id)
{
    Player[id][PlrInServer] = 1
    Player
[id][PlrIsAlive] = 0
    Player
[id][PlrTeam] = 0
}

public 
client_disconnected(id)
{
    Player[id][PlrInServer] = 0
    Player
[id][PlrIsAlive] = 0
    Player
[id][PlrTeam] = 0
    
    
if (Player[id][PlrDuelReady] && Player[Player[id][PlrDuelReady]][PlrInServer])
    {
        remove_duel_sprite(id)
        remove_duel_sprite(Player[id][PlrDuelReady])
    
        
if (is_user_connected(Player[id][PlrDuelReady]))
        {
            new playerName[24]
            pev(id, pev_netname, playerName, 23)
            
            client_print_color
(Player[id][PlrDuelReady], print_team_red, "^4[%s] ^3%L",
                PLUGIN, Player[id][PlrDuelReady], "DUEL_DISCONNECT", playerName)
            
            compensation
(Player[id][PlrDuelReady], id)
        }
        else
        {
            Player[Player[id][PlrDuelWaiting]][PlrInServer] = 0
            Player
[Player[id][PlrDuelReady]][PlrDuelReady] = 0
            Player
[id][PlrDuelReady] = 0
        
}
    }
    
    
if (Player[id][PlrDuelWaiting] && Player[Player[id][PlrDuelWaiting]][PlrInServer])
    {    
        
new victim = Player[id][PlrDuelWaiting], playerName[24]
        pev(id, pev_netname, playerName, 23)
        client_print_color(victim, print_team_red, "^4[%s] ^3%L",
            PLUGIN, victim, "DUEL_DISCONNECT_W", playerName)
                
        Player
[id][PlrDuelWaiting] = 0
        Player
[victim][PlrDuelWaiting] = 0
        
        Player
[id][PlrDuelWaitingTime] = 0.0
        Player
[victim][PlrDuelWaitingTime] = 0.0
    
}
}

public 
fw_PlayerSpawn(id)
{
    if (!is_user_alive(id))
        return HAM_IGNORED
        
    Player
[id][PlrTeam] = get_pdata_int(id, 114, 5)
    Player[id][PlrIsAlive] = 1
    
    
if (Player[id][PlrDuelSprite])
        set_pev(Player[id][PlrDuelSprite], pev_effects, 0)
    
    
return HAM_IGNORED
}

public 
fw_PlayerKilled(victim, attacker)
{
    Player[victim][PlrIsAlive] = 0
    
    
if (attacker && attacker != victim)
        set_flag_duel(attacker, victim)
        
    
if (Player[victim][PlrDuelSprite])
        set_pev(Player[victim][PlrDuelSprite], pev_effects, EF_NODRAW)
}

public 
fw_PlayerPreThink(id)
{
    if(Player[id][PlrDuelWaiting] && Player[id][PlrDuelWaitingTime] <= get_gametime())
    {
        Player[id][PlrDuelWaitingTime] = 0.0
        Player
[Player[id][PlrDuelWaiting]][PlrDuelWaitingTime] = 0.0
        
        client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING_TIME")
        client_print_color(Player[id][PlrDuelWaiting], print_team_red, "^4[%s] ^3%L",
            PLUGIN, Player[id][PlrDuelWaiting], "DUEL_WAITING_TIME")
        
        Player
[Player[id][PlrDuelWaiting]][PlrDuelWaiting] = 0
        Player
[id][PlrDuelWaiting] = 0
    
}
}

public 
fw_TeamInfo()
{
    new id = get_msg_arg_int(1)
    
    
new team[2]
    get_msg_arg_string(2, team, 1)
            
    
switch (team[0])
    {
        case 'T': Player[id][PlrTeam] = 1
        
case 'C': Player[id][PlrTeam] = 2
        
case 'S': Player[id][PlrTeam] = 3
        
default: Player[id][PlrTeam] = 0
    
}
            
    
new victim = Player[id][PlrDuelReady]
    if (victim)
    {
        if (Player[victim][PlrInServer])
        {
            if (Player[id][PlrTeam] == Player[victim][PlrTeam]
                || (Player[id][PlrTeam] != 1 && Player[id][PlrTeam] != 2))
            {
                remove_duel_sprite(id)
                remove_duel_sprite(victim)
            
                client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_TEAM")
                client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_TEAM")
                
                
if (Player[id][PlrDuelFrags] < Player[victim][PlrDuelFrags])
                    compensation(victim, id)
                else if (Player[id][PlrDuelFrags] > Player[victim][PlrDuelFrags])
                    compensation(id, victim)
                
                Player
[id][PlrDuelFrags] = 0
                Player
[victim][PlrDuelFrags] = 0
                
                Player
[id][PlrDuelReady] = 0
                Player
[victim][PlrDuelReady] = 0
            
}        
        
}
        
        victim 
= Player[id][PlrDuelWaiting]
        if (victim && Player[victim][PlrInServer])    
        
{
            if (Player[id][PlrTeam] == Player[victim][PlrTeam]
                || (Player[id][PlrTeam] != 1 && Player[id][PlrTeam] != 2))
            {
                client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_TEAM")
                client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_TEAM")
                
                Player
[id][PlrDuelWaiting] = 0
                Player
[victim][PlrDuelWaiting] = 0
                
                Player
[id][PlrDuelWaitingTime] = 0.0
                Player
[victim][PlrDuelWaitingTime] = 0.0
            
}
        }
    }
}
    
public fw_AddToFullPack(es_state, e, ent, host, hostflags, player)
{
    if (!ent || player || pev_valid(ent) != 2 || pev(ent, pev_impulse) != g_iSpriteImpulse)
        return FMRES_IGNORED
        
    
if (Player[host][PlrDuelSprite] != ent)
    {
        set_es(es_state, ES_RenderMode, EF_NODRAW)
        return FMRES_IGNORED
    
}
            
    
static iEnemy; iEnemy = Player[host][PlrDuelReady]    
    
if (!iEnemy || !Player[iEnemy][PlrIsAlive])
    {
        set_es(es_state, ES_RenderMode, EF_NODRAW)
        return FMRES_IGNORED
    
}
                
    
static Float: startPosition[3],
    Float: endPosition[3],
    Float: fVector[3],
    Float: fVectorNormal[3],
    Float: fView[3],
    Float: endCurPosition[3]
                
    pev
(iEnemy, pev_origin, endPosition)
    endPosition[2] += g_cvSpriteDist
        
    pev
(host, pev_origin, startPosition)
    pev(host, pev_view_ofs, fView)
    xs_vec_add(startPosition, fView, startPosition)
        
    xs_vec_sub
(endPosition, startPosition, fVector)
    xs_vec_normalize(fVector, fVectorNormal)
        
    engfunc
(EngFunc_TraceLine, startPosition, endPosition, IGNORE_MONSTERS, host, 0)
    get_tr2(0, TR_vecEndPos, endCurPosition)
        
    xs_vec_mul_scalar
(fVectorNormal, -10.0, fVector)
    xs_vec_add(endCurPosition, fVector, endCurPosition)
        
    
if (get_distance_f(startPosition, endCurPosition) - get_distance_f(endPosition, endCurPosition) < 100.0)
    {
        xs_vec_mul_scalar(fVectorNormal, floatmin(100.0, get_distance_f(startPosition, endCurPosition)), endCurPosition)
        xs_vec_add(startPosition, endCurPosition, endCurPosition)
            
        set_es
(es_state, ES_Scale, get_distance_f(startPosition, endCurPosition) * 0.005 * g_cvSprite)
    }
    
    set_es
(es_state, ES_Origin, endCurPosition)

    return FMRES_IGNORED
}

public 
fw_CheckVisibility(ent)
{
    if (pev(ent, pev_impulse) == g_iSpriteImpulse)
    {
        forward_return(FMV_CELL, 1)
        return FMRES_SUPERCEDE
    
}
    
    
return FMRES_IGNORED
}

public 
duel_check_players(id)
{
    if (Player[id][PlrDuelReady])
    {
        new player_name[24]
        pev(Player[id][PlrDuelReady], pev_netname, player_name, 23)
        
        client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_EXIST", player_name)
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_UNDUEL")
        return
    }
        
    
if (Player[id][PlrDuelWaiting])
    {
        new player_name[24]
        pev(Player[id][PlrDuelWaiting], pev_netname, player_name, 23)
        
        client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_EXIST_W", player_name)
        return
    }
    
    
if (!Player[id][PlrTeam] || Player[id][PlrTeam] == 3)
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WRONG_TEAM")
        return        
    
}
    
    
new menuName[64]
    format(menuName, 63, "\r%L", id, "DUEL_HEADNAME")
    
    
new Players_Menu = menu_create(menuName, "duel_menu_handler")
    new s_Name[24], s_Player[4], iEnemyTeam = Player[id][PlrTeam] == 2 ? 1 : 2
        
    
for(new i = 1; i <= g_iMaxplayers; i++)
    { 
        if (!Player[i][PlrInServer] || Player[i][PlrTeam] != iEnemyTeam || is_user_hltv(i))
            continue
        
        pev
(i, pev_netname, s_Name, 23)
        num_to_str(i, s_Player, 3)
        
        
if (Player[i][PlrDuelReady] || Player[i][PlrDuelWaiting])
            format(s_Name, 23, "\d%s", s_Name)
        
        menu_additem
(Players_Menu, s_Name, s_Player, 0)
    }
    
    
new sMenuProp[3][16]
    format(sMenuProp[0], 15, "%L", id, "MENU_NEXT")
    format(sMenuProp[1], 15, "%L", id, "MENU_BACK")
    format(sMenuProp[2], 15, "%L", id, "MENU_EXIT")
    
    menu_setprop
(Players_Menu, MPROP_NEXTNAME, sMenuProp[0])
    menu_setprop(Players_Menu, MPROP_BACKNAME, sMenuProp[1])
    menu_setprop(Players_Menu, MPROP_EXITNAME, sMenuProp[2])
    
    menu_display
(id, Players_Menu, 0)
}

public 
duel_menu_handler(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    
}
    
    
if(!Player[id][PlrTeam] || Player[id][PlrTeam] == 3)
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WRONG_TEAM")
        return PLUGIN_HANDLED    
    
}
    
    
new sData[6], sName[64], iAccess, iCallback
    menu_item_getinfo
(menu, item, iAccess, sData, charsmax(sData), sName, charsmax(sName), iCallback)
    
    
new key = str_to_num(sData)
        
    
if (!Player[key][PlrInServer] || Player[id][PlrTeam] == Player[key][PlrTeam] || !Player[key][PlrTeam] || Player[key][PlrTeam] == 3)
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_ERROR_PLAYER")
        duel_check_players(id)
        return PLUGIN_HANDLED
    
}
    
    
if (Player[key][PlrDuelReady] || Player[key][PlrDuelWaiting])
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WARNING_PLAYER")
        duel_check_players(id)
        return PLUGIN_HANDLED
    
}
    
    
new enemyName[24]
    pev(key, pev_netname, enemyName, 23)
    
    client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING", enemyName)
    Player[key][PlrDuelWaiting] = id
    Player
[id][PlrDuelWaiting] = key
    
    
new Float: gameTime = get_gametime()
    Player[id][PlrDuelWaitingTime] = _:(gameTime + DUEL_WAITING_TIME)
    Player[key][PlrDuelWaitingTime] = _:(gameTime + DUEL_WAITING_TIME)
    
    menu_destroy
(menu)
    
    
new menuName[120], playerName[24]
    pev(id, pev_netname, playerName, 23)
    format(menuName, 119, "\r%L", key, "DUEL_CHALLENGE", playerName)
    
    
new duel_Menu = menu_create(menuName, "duel_challenge_handler")
    
    
new strMenuItem[64]
    format(strMenuItem, 63, "\w%L", key, "DUEL_AGREE")
    menu_additem(duel_Menu, strMenuItem, "1", 0)
    format(strMenuItem, 63, "\w%L", key, "DUEL_REFUSE")
    menu_additem(duel_Menu, strMenuItem, "2", 0)
    
    menu_setprop
(duel_Menu, MPROP_EXIT, -1)
    menu_display(key, duel_Menu, 0)
    
    
if(is_user_bot(key))
        duel_challenge_handler(key, duel_Menu, 0)
    
    
return PLUGIN_CONTINUE
}

public 
duel_challenge_handler(id, menu, item)
{
    if (!is_user_connected(id))
        return PLUGIN_HANDLED
    
    
new enemy = Player[id][PlrDuelWaiting]
    
    
if (!enemy)
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING_TIME")
        menu_destroy(menu)
        return PLUGIN_HANDLED
    
}
    
    
switch(item)
    {
        case 0:
        {
            new playerName[24], enemyName[24]
            pev(id, pev_netname, playerName, 23)
            pev(enemy, pev_netname, enemyName, 23)
            client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_PLAYER_AGREE", playerName)
            client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_RULE", g_cvFrags)
            client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_RULE", g_cvFrags)
            Player[enemy][PlrDuelReady] = id
            Player
[id][PlrDuelReady] = enemy
            
            
if (g_cvSounds)
            {
                client_cmd(enemy, "spk %s", SOUND_DUEL_ACCEPTED)
                client_cmd(id, "spk %s", SOUND_DUEL_ACCEPTED)
            }
            
            
if (g_cvSprite > 0.0)
            {
                create_duel_sprite(id)
                create_duel_sprite(enemy)
            }
        }
        case 1:
        {
            new playerName[24]
            pev(id, pev_netname, playerName, 23)
            client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_PLAYER_REFUSE", playerName)
        }
        default:
        {
            menu_destroy(menu)
            return PLUGIN_HANDLED
        
}
    }
    
    Player
[enemy][PlrDuelWaiting] = 0
    Player
[id][PlrDuelWaiting] = 0
    
    Player
[id][PlrDuelWaitingTime] = 0.0
    Player
[enemy][PlrDuelWaitingTime] = 0.0
    
    menu_destroy
(menu)
    return PLUGIN_HANDLED    
}

public 
unduel(id)
{
    new enemy = Player[id][PlrDuelReady]
    
    
if(!enemy)
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_NOEXIST")
        return
    }
    
    remove_duel_sprite
(id)
    remove_duel_sprite(enemy)
    
    
new playerName[24]
    pev(id, pev_netname, playerName, 23)
    client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_BREAK", playerName)
    client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_BREAK_V")
    
    
if(Player[id][PlrDuelFrags] < Player[enemy][PlrDuelFrags])
    {        
        
if(g_cvLosing)
        {
            #if defined AES_EXP
            aes_add_player_exp(id, -g_cvLosing)
            client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_ARS_BREAK_FINE", g_cvLosing)
            #else
            new curMoney = cs_get_user_money(id)
            new money = curMoney - g_cvLosing < 0 ? curMoney : g_cvLosing
            cs_set_user_money
(id, curMoney - money)
            client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_BREAK_FINE", money)
            #endif
        }
    }
    
    compensation
(enemy, id)
}

set_flag_duel(attacker, victim)
{
        
    
if(Player[victim][PlrDuelReady] != attacker || Player[attacker][PlrDuelReady] != victim)
        return
    
    
new attackerName[24], victimName[24]
    pev(victim, pev_netname, victimName, 23)
    pev(attacker, pev_netname, attackerName, 23)
    
    Player
[attacker][PlrDuelFrags]++
    
    
if(Player[attacker][PlrDuelFrags] == g_cvFrags)
    {
        remove_duel_sprite(attacker)
        remove_duel_sprite(victim)
    
        client_print_color
(0, print_team_red, "^4[%s] ^3%L", PLUGIN, LANG_PLAYER, "DUEL_WIN",
            attackerName, victimName, attackerName, Player[attacker][PlrDuelFrags], Player[victim][PlrDuelFrags])
        
        
if(g_cvReward)
        {
            #if defined AES_EXP
            aes_add_player_exp(attacker, g_cvReward)
            client_print_color(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_AES_REWARD", g_cvReward)
            #else
            new curMoney = cs_get_user_money(attacker)
            new money = curMoney + g_cvReward > g_cvMoney ? g_cvMoney - curMoney : g_cvReward
            cs_set_user_money
(attacker, curMoney + money)
            client_print_color(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_REWARD", money)
            #endif
        }
        
        
if(g_cvLosing)
        {
            #if defined AES_EXP
            aes_add_player_exp(victim, -g_cvLosing)
            client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_AES_LOOSE", g_cvLosing)
            #else
            new curMoney = cs_get_user_money(victim)
            new money = curMoney - g_cvLosing < 0 ? curMoney : g_cvLosing
            cs_set_user_money
(victim, curMoney - money)
            client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_LOOSE", money)
            #endif
        }
        
        
if(g_cvSounds)
        {
            client_cmd(attacker, "spk %s", SOUND_DUEL_WIN)
            client_cmd(victim, "spk %s", SOUND_DUEL_LOSE)
        }
        
        Player
[attacker][PlrDuelFrags] = 0
        Player
[victim][PlrDuelFrags] = 0
        Player
[attacker][PlrDuelReady] = 0
        Player
[victim][PlrDuelReady] = 0
        
return
    }
    
    client_print_color
(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_FRAG_A",
        g_cvFrags - Player[attacker][PlrDuelFrags])
        
    client_print_color
(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_FRAG_V",
        g_cvFrags - Player[attacker][PlrDuelFrags])
}

compensation(const id, const victim)
{
    if(g_cvCompensation && Player[id][PlrDuelFrags] > Player[victim][PlrDuelFrags])
    {
        #if defined AES_EXP
        aes_add_player_exp(id, g_cvCompensation)
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_AES_COMPENSATION",
            g_cvCompensation)
        #else
        new curMoney = cs_get_user_money(id)
        new money = curMoney + g_cvCompensation > g_cvMoney ? g_cvMoney - curMoney : g_cvCompensation
        cs_set_user_money
(id, curMoney + money)
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_COMPENSATION", money)
        #endif
    }
    
    Player
[id][PlrDuelFrags] = 0
    Player
[victim][PlrDuelFrags] = 0
    Player
[id][PlrDuelReady] = 0
    Player
[victim][PlrDuelReady] = 0
}

create_duel_sprite(const iPlayerId)
{
    if (Player[iPlayerId][PlrDuelSprite])
        return 0
        
    
new iSprite = engfunc(EngFunc_CreateNamedEntity, g_infoTarget)
            
    
if (pev_valid(iSprite) != 2)
    {
        Player[iPlayerId][PlrDuelSprite] = 0
        server_print
("[%s] ERROR: sprite duel entities are not initialized", PLUGIN)
        return 1
    
}
    
    engfunc
(EngFunc_SetSize, iSprite, Float: {-1.0, -1.0, -1.0} , Float: { 1.0, 1.0, 1.0 })
    engfunc(EngFunc_SetModel, iSprite, SPRITE_DUEL)
    engfunc(EngFunc_SetOrigin, iSprite, Float: {-8192.0, -8192.0, -8192.0})
    
    set_pev
(iSprite, pev_effects, Player[iPlayerId][PlrIsAlive] ? 0 : EF_NODRAW)
    set_pev(iSprite, pev_renderfx, 0)
    set_pev(iSprite, pev_rendermode, kRenderTransAdd)
    set_pev(iSprite, pev_renderamt, 255.0)
    set_pev(iSprite, pev_rendercolor, Float: {255.0, 255.0, 255.0})
    set_pev(iSprite, pev_solid, SOLID_BBOX)
    set_pev(iSprite, pev_movetype, MOVETYPE_PUSHSTEP)
    set_pev(iSprite, pev_impulse, g_iSpriteImpulse)
    set_pev(iSprite, pev_scale, g_cvSprite)
    
    Player
[iPlayerId][PlrDuelSprite] = iSprite
    
    
return 0
}

remove_duel_sprite(const iPlayerId)
{
    if (Player[iPlayerId][PlrDuelSprite])
    {
        engfunc(EngFunc_RemoveEntity, Player[iPlayerId][PlrDuelSprite])
        Player[iPlayerId][PlrDuelSprite] = 0
    
} 
} 
RE: sprite duvar arkasından görünmeyi kaldırma
(24-11-2021, 14:17)1kaanBEY Adlı Kullanıcıdan Alıntı: Merhaba ekteki derlemede .spr yada sprite diye tanımlanan kafada çıkan o görsel duvar arkasındanda çıkıp rakibin yerini gösteriyor bunu kaldırma şansımız varmıdır rakibin kafasında yine çıksın komple kalksın istemiyorum fakat duvar arkasından gözükmesini engellemek istiyorum lütfen yardım edermisniz.
PHP Kod:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <xs>

//#define AES_EXP

#if AMXX_VERSION_NUM < 183
    #define client_disconnected client_disconnect
    #include <colorchat>
#endif

#if defined AES_EXP
    #include <aes_main>
#endif

#define PLUGIN "Duels"
#define VERSION "0.75"
#define AUTHOR "Psycrow"

#define SOUND_DUEL_ACCEPTED         "next21_duels/duel_challenge_accepted.wav"
#define SOUND_DUEL_WIN                "next21_duels/win.wav"
#define SOUND_DUEL_LOSE                "next21_duels/lose.wav"

#define SPRITE_DUEL                    "sprites/next21_duels/duel.spr"

#define DUEL_SPRITE_DISTANCE        10.0
#define DUEL_WAITING_TIME            10.0

#define Player[%1][%2]        g_player_data[%1 - 1][%2]

enum _:Player_Properties
{
    
PlrInServer,
    
PlrIsAlive,
    
PlrTeam,
    
PlrDuelReady,
    
PlrDuelWaiting,
    
PlrDuelFrags,
    
PlrDuelSprite,
    
Float: PlrDeathReasonTime,
    
Float: PlrDuelWaitingTime
}

new
g_player_data[32][Player_Properties], g_iMaxplayers, g_infoTarget,
g_forwardAddToFullPack, g_forwardCheckVisibility, g_iSpriteImpulse,
#if !defined AES_EXP
    
g_cvMoney,
#endif
g_cvFrags, g_cvReward, g_cvLosing, g_cvCompensation, g_cvSounds, Float: g_cvSprite, Float: g_cvSpriteDist

public plugin_precache()
{        
    
precache_sound(SOUND_DUEL_ACCEPTED)
    
precache_sound(SOUND_DUEL_WIN)
    
precache_sound(SOUND_DUEL_LOSE)
    
    
precache_model(SPRITE_DUEL)
}

public 
plugin_init()
{
    
register_plugin(PLUGIN, VERSION, AUTHOR)
    
    
register_cvar("cv_duels_frags", "3")
    
register_cvar("cv_duels_reward", "6000")
    
register_cvar("cv_duels_losing", "3000")
    
register_cvar("cv_duels_compensation", "3000")
    
register_cvar("cv_duels_sounds", "1")
    
register_cvar("cv_duels_sprite", "0.5")
    
register_cvar("cv_duels_sprite_dist", "40.0")

    
register_clcmd("say /duelo", "duel_check_players")
    
register_clcmd("say_team /duel", "duel_check_players")
    
    
register_clcmd("say /cikis", "unduel")
    
register_clcmd("say_team /cikis", "unduel")
    
    
register_logevent("fw_RoundStart", 2, "1=Round_Start")
    
    
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
    
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled", 1)
    
RegisterHam(Ham_Player_PreThink, "player", "fw_PlayerPreThink")
    
    
register_message(get_user_msgid("TeamInfo"), "fw_TeamInfo")
    
    
g_iMaxplayers = get_maxplayers()
    
g_infoTarget = engfunc(EngFunc_AllocString, "info_target")
    
g_iSpriteImpulse = engfunc(EngFunc_AllocString, "next21_duelsprite")
    
    
#if !defined AES_EXP
    
register_cvar("cv_duels_maxmoney","16000")
    
#endif
    
    
register_dictionary("next21_duels.txt")
}

public 
fw_RoundStart()
{
    
g_cvFrags = get_cvar_num("cv_duels_frags")
    
g_cvReward = get_cvar_num("cv_duels_reward")
    
g_cvLosing = get_cvar_num("cv_duels_losing")
    
g_cvCompensation = get_cvar_num("cv_duels_compensation")
    
g_cvSounds = get_cvar_num("cv_duels_sounds")
    
#if !defined AES_EXP
    
g_cvMoney = get_cvar_num("cv_duels_maxmoney")
    
#endif
    
    
new Float: fSpriteScale = floatmax(0.0, get_cvar_float("cv_duels_sprite"))
        
    if (
fSpriteScale > 0.0 && g_cvSprite == 0.0)
    {
        
g_forwardAddToFullPack = register_forward(FM_AddToFullPack, "fw_AddToFullPack" , 1)
        
g_forwardCheckVisibility = register_forward(FM_CheckVisibility, "fw_CheckVisibility")
        
g_cvSpriteDist = get_cvar_float("cv_duels_sprite_dist")
    }
    else if (
fSpriteScale == 0.0 && g_cvSprite > 0.0)
    {
        for (new 
i = 1; i <= g_iMaxplayers; i++)
        {
            if (!
Player[i][PlrDuelSprite])
                continue
                
            
engfunc(EngFunc_RemoveEntity, Player[i][PlrDuelSprite])
            
Player[i][PlrDuelSprite] = 0
        
}
                
        
unregister_forward(FM_AddToFullPack, g_forwardAddToFullPack)
        
unregister_forward(FM_CheckVisibility, g_forwardCheckVisibility)
    }
    else if (
fSpriteScale != g_cvSprite)
    {
        for (new 
i = 1; i <= g_iMaxplayers; i++)
            if (
Player[i][PlrDuelSprite])
                
set_pev(Player[i][PlrDuelSprite], pev_scale, fSpriteScale)
    }
    
    
g_cvSprite = fSpriteScale
}

public 
client_putinserver(id)
{
    
Player[id][PlrInServer] = 1
    Player
[id][PlrIsAlive] = 0
    Player
[id][PlrTeam] = 0
}

public 
client_disconnected(id)
{
    
Player[id][PlrInServer] = 0
    Player
[id][PlrIsAlive] = 0
    Player
[id][PlrTeam] = 0
    
    
if (Player[id][PlrDuelReady] && Player[Player[id][PlrDuelReady]][PlrInServer])
    {
        
remove_duel_sprite(id)
        
remove_duel_sprite(Player[id][PlrDuelReady])
    
        if (
is_user_connected(Player[id][PlrDuelReady]))
        {
            new 
playerName[24]
            
pev(id, pev_netname, playerName, 23)
            
            
client_print_color(Player[id][PlrDuelReady], print_team_red, "^4[%s] ^3%L",
                
PLUGIN, Player[id][PlrDuelReady], "DUEL_DISCONNECT", playerName)
            
            
compensation(Player[id][PlrDuelReady], id)
        }
        else
        {
            
Player[Player[id][PlrDuelWaiting]][PlrInServer] = 0
            Player
[Player[id][PlrDuelReady]][PlrDuelReady] = 0
            Player
[id][PlrDuelReady] = 0
        
}
    }
    
    if (
Player[id][PlrDuelWaiting] && Player[Player[id][PlrDuelWaiting]][PlrInServer])
    {    
        new 
victim = Player[id][PlrDuelWaiting], playerName[24]
        
pev(id, pev_netname, playerName, 23)
        
client_print_color(victim, print_team_red, "^4[%s] ^3%L",
            
PLUGIN, victim, "DUEL_DISCONNECT_W", playerName)
                
        
Player[id][PlrDuelWaiting] = 0
        Player
[victim][PlrDuelWaiting] = 0
        
        Player
[id][PlrDuelWaitingTime] = 0
        Player
[victim][PlrDuelWaitingTime] = 0
    
}
}

public 
fw_PlayerSpawn(id)
{
    if (!
is_user_alive(id))
        return 
HAM_IGNORED
        
    Player
[id][PlrTeam] = get_pdata_int(id, 114, 5)
    
Player[id][PlrIsAlive] = 1
    
    
if (Player[id][PlrDuelSprite])
        
set_pev(Player[id][PlrDuelSprite], pev_effects, 0)
    
    return 
HAM_IGNORED
}

public 
fw_PlayerKilled(victim, attacker)
{
    
Player[victim][PlrIsAlive] = 0
    
    
if (attacker && attacker != victim)
        
set_flag_duel(attacker, victim)
        
    if (
Player[victim][PlrDuelSprite])
        
set_pev(Player[victim][PlrDuelSprite], pev_effects, EF_NODRAW)
}

public 
fw_PlayerPreThink(id)
{
    if(
Player[id][PlrDuelWaiting] && Player[id][PlrDuelWaitingTime] <= get_gametime())
    {
        
Player[id][PlrDuelWaitingTime] = 0
        Player
[Player[id][PlrDuelWaiting]][PlrDuelWaitingTime] = 0
        
        client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING_TIME")
        
client_print_color(Player[id][PlrDuelWaiting], print_team_red, "^4[%s] ^3%L",
            
PLUGIN, Player[id][PlrDuelWaiting], "DUEL_WAITING_TIME")
        
        
Player[Player[id][PlrDuelWaiting]][PlrDuelWaiting] = 0
        Player
[id][PlrDuelWaiting] = 0
    
}
}

public 
fw_TeamInfo()
{
    new 
id = get_msg_arg_int(1)
    
    new 
team[2]
    
get_msg_arg_string(2, team, 1)
            
    switch (
team[0])
    {
        case 
'T': Player[id][PlrTeam] = 1
        
case 'C': Player[id][PlrTeam] = 2
        
case 'S': Player[id][PlrTeam] = 3
        
default: Player[id][PlrTeam] = 0
    
}
            
    new 
victim = Player[id][PlrDuelReady]
    if (
victim)
    {
        if (
Player[victim][PlrInServer])
        {
            if (
Player[id][PlrTeam] == Player[victim][PlrTeam]
                || (
Player[id][PlrTeam] != 1 && Player[id][PlrTeam] != 2))
            {
                
remove_duel_sprite(id)
                
remove_duel_sprite(victim)
            
                
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_TEAM")
                
client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_TEAM")
                
                if (
Player[id][PlrDuelFrags] < Player[victim][PlrDuelFrags])
                    
compensation(victim, id)
                else if (
Player[id][PlrDuelFrags] > Player[victim][PlrDuelFrags])
                    
compensation(id, victim)
                
                
Player[id][PlrDuelFrags] = 0
                Player
[victim][PlrDuelFrags] = 0
                
                Player
[id][PlrDuelReady] = 0
                Player
[victim][PlrDuelReady] = 0
            
}        
        }
        
        
victim = Player[id][PlrDuelWaiting]
        if (
victim && Player[victim][PlrInServer])    
        {
            if (
Player[id][PlrTeam] == Player[victim][PlrTeam]
                || (
Player[id][PlrTeam] != 1 && Player[id][PlrTeam] != 2))
            {
                
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_TEAM")
                
client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_TEAM")
                
                
Player[id][PlrDuelWaiting] = 0
                Player
[victim][PlrDuelWaiting] = 0
                
                Player
[id][PlrDuelWaitingTime] = 0
                Player
[victim][PlrDuelWaitingTime] = 0
            
}
        }
    }
}
    
public 
fw_AddToFullPack(es_state, e, ent, host, hostflags, player)
{
    if (!
ent || player || pev_valid(ent) != 2 || pev(ent, pev_impulse) != g_iSpriteImpulse)
        return 
FMRES_IGNORED
        
    
if (Player[host][PlrDuelSprite] != ent)
    {
        
set_es(es_state, ES_RenderMode, EF_NODRAW)
        return 
FMRES_IGNORED
    
}
            
    static 
iEnemy; iEnemy = Player[host][PlrDuelReady]    
    if (!
iEnemy || !Player[iEnemy][PlrIsAlive])
    {
        
set_es(es_state, ES_RenderMode, EF_NODRAW)
        return 
FMRES_IGNORED
    
}
                
    static 
Float: startPosition[3],
    
Float: endPosition[3],
    
Float: fVector[3],
    
Float: fVectorNormal[3],
    
Float: fView[3],
    
Float: endCurPosition[3]
                
    
pev(iEnemy, pev_origin, endPosition)
    
endPosition[2] += g_cvSpriteDist
        
    pev
(host, pev_origin, startPosition)
    
pev(host, pev_view_ofs, fView)
    
xs_vec_add(startPosition, fView, startPosition)
        
    
xs_vec_sub(endPosition, startPosition, fVector)
    
xs_vec_normalize(fVector, fVectorNormal)
        
    
engfunc(EngFunc_TraceLine, startPosition, endPosition, IGNORE_MONSTERS, host, 0)
    
get_tr2(0, TR_vecEndPos, endCurPosition)
        
    
xs_vec_mul_scalar(fVectorNormal, -10.0, fVector)
    
xs_vec_add(endCurPosition, fVector, endCurPosition)
        
    if (
get_distance_f(startPosition, endCurPosition) - get_distance_f(endPosition, endCurPosition) < 100.0)
    {
        
xs_vec_mul_scalar(fVectorNormal, floatmin(100.0, get_distance_f(startPosition, endCurPosition)), endCurPosition)
        
xs_vec_add(startPosition, endCurPosition, endCurPosition)
            
        
set_es(es_state, ES_Scale, get_distance_f(startPosition, endCurPosition) * 0.005 * g_cvSprite)
    }
    
    
set_es(es_state, ES_Origin, endCurPosition)

    return 
FMRES_IGNORED
}

public 
fw_CheckVisibility(ent)
{
    if (
pev(ent, pev_impulse) == g_iSpriteImpulse)
    {
        
forward_return(FMV_CELL, 1)
        return 
FMRES_SUPERCEDE
    
}
    
    return 
FMRES_IGNORED
}

public 
duel_check_players(id)
{
    if (
Player[id][PlrDuelReady])
    {
        new 
player_name[24]
        
pev(Player[id][PlrDuelReady], pev_netname, player_name, 23)
        
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_EXIST", player_name)
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_UNDUEL")
        return
    }
        
    if (
Player[id][PlrDuelWaiting])
    {
        new 
player_name[24]
        
pev(Player[id][PlrDuelWaiting], pev_netname, player_name, 23)
        
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_EXIST_W", player_name)
        return
    }
    
    if (!
Player[id][PlrTeam] || Player[id][PlrTeam] == 3)
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WRONG_TEAM")
        return        
    }
    
    new 
menuName[64]
    
format(menuName, 63, "\r%L", id, "DUEL_HEADNAME")
    
    new 
Players_Menu = menu_create(menuName, "duel_menu_handler")
    new 
s_Name[24], s_Player[4], iEnemyTeam = Player[id][PlrTeam] == 2 ? 1 : 2
        
    
for(new i = 1; i <= g_iMaxplayers; i++)
    { 
        if (!
Player[i][PlrInServer] || Player[i][PlrTeam] != iEnemyTeam || is_user_hltv(i))
            continue
        
        
pev(i, pev_netname, s_Name, 23)
        
num_to_str(i, s_Player, 3)
        
        if (
Player[i][PlrDuelReady] || Player[i][PlrDuelWaiting])
            
format(s_Name, 23, "\d%s", s_Name)
        
        
menu_additem(Players_Menu, s_Name, s_Player, 0)
    }
    
    new 
sMenuProp[3][16]
    
format(sMenuProp[0], 15, "%L", id, "MENU_NEXT")
    
format(sMenuProp[1], 15, "%L", id, "MENU_BACK")
    
format(sMenuProp[2], 15, "%L", id, "MENU_EXIT")
    
    
menu_setprop(Players_Menu, MPROP_NEXTNAME, sMenuProp[0])
    
menu_setprop(Players_Menu, MPROP_BACKNAME, sMenuProp[1])
    
menu_setprop(Players_Menu, MPROP_EXITNAME, sMenuProp[2])
    
    
menu_display(id, Players_Menu, 0)
}

public 
duel_menu_handler(id, menu, item)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    
    if(!
Player[id][PlrTeam] || Player[id][PlrTeam] == 3)
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WRONG_TEAM")
        return 
PLUGIN_HANDLED    
    
}
    
    new 
sData[6], sName[64], iAccess, iCallback
    menu_item_getinfo
(menu, item, iAccess, sData, charsmax(sData), sName, charsmax(sName), iCallback)
    
    new 
key = str_to_num(sData)
        
    if (!
Player[key][PlrInServer] || Player[id][PlrTeam] == Player[key][PlrTeam] || !Player[key][PlrTeam] || Player[key][PlrTeam] == 3)
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_ERROR_PLAYER")
        
duel_check_players(id)
        return 
PLUGIN_HANDLED
    
}
    
    if (
Player[key][PlrDuelReady] || Player[key][PlrDuelWaiting])
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WARNING_PLAYER")
        
duel_check_players(id)
        return 
PLUGIN_HANDLED
    
}
    
    new 
enemyName[24]
    
pev(key, pev_netname, enemyName, 23)
    
    
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING", enemyName)
    
Player[key][PlrDuelWaiting] = id
    Player
[id][PlrDuelWaiting] = key
    
    
new Float: gameTime = get_gametime()
    
Player[id][PlrDuelWaitingTime] = _:(gameTime + DUEL_WAITING_TIME)
    
Player[key][PlrDuelWaitingTime] = _:(gameTime + DUEL_WAITING_TIME)
    
    
menu_destroy(menu)
    
    new 
menuName[120], playerName[24]
    
pev(id, pev_netname, playerName, 23)
    
format(menuName, 119, "\r%L", key, "DUEL_CHALLENGE", playerName)
    
    new 
duel_Menu = menu_create(menuName, "duel_challenge_handler")
    
    new 
strMenuItem[64]
    
format(strMenuItem, 63, "\w%L", key, "DUEL_AGREE")
    
menu_additem(duel_Menu, strMenuItem, "1", 0)
    
format(strMenuItem, 63, "\w%L", key, "DUEL_REFUSE")
    
menu_additem(duel_Menu, strMenuItem, "2", 0)
    
    
menu_setprop(duel_Menu, MPROP_EXIT, -1)
    
menu_display(key, duel_Menu, 0)
    
    if(
is_user_bot(key))
        
duel_challenge_handler(key, duel_Menu, 0)
    
    return 
PLUGIN_CONTINUE
}

public 
duel_challenge_handler(id, menu, item)
{
    if (!
is_user_connected(id))
        return 
PLUGIN_HANDLED
    
    
new enemy = Player[id][PlrDuelWaiting]
    
    if (!
enemy)
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING_TIME")
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    
    switch(
item)
    {
        case 
0:
        {
            new 
playerName[24], enemyName[24]
            
pev(id, pev_netname, playerName, 23)
            
pev(enemy, pev_netname, enemyName, 23)
            
client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_PLAYER_AGREE", playerName)
            
client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_RULE", g_cvFrags)
            
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_RULE", g_cvFrags)
            
Player[enemy][PlrDuelReady] = id
            Player
[id][PlrDuelReady] = enemy
            
            
if (g_cvSounds)
            {
                
client_cmd(enemy, "spk %s", SOUND_DUEL_ACCEPTED)
                
client_cmd(id, "spk %s", SOUND_DUEL_ACCEPTED)
            }
            
            if (
g_cvSprite > 0.0)
            {
                
create_duel_sprite(id)
                
create_duel_sprite(enemy)
            }
        }
        case 
1:
        {
            new 
playerName[24]
            
pev(id, pev_netname, playerName, 23)
            
client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_PLAYER_REFUSE", playerName)
        }
        default:
        {
            
menu_destroy(menu)
            return 
PLUGIN_HANDLED
        
}
    }
    
    
Player[enemy][PlrDuelWaiting] = 0
    Player
[id][PlrDuelWaiting] = 0
    
    Player
[id][PlrDuelWaitingTime] = 0
    Player
[enemy][PlrDuelWaitingTime] = 0
    
    menu_destroy
(menu)
    return 
PLUGIN_HANDLED    
}

public 
unduel(id)
{
    new 
enemy = Player[id][PlrDuelReady]
    
    if(!
enemy)
    {
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_NOEXIST")
        return
    }
    
    
remove_duel_sprite(id)
    
remove_duel_sprite(enemy)
    
    new 
playerName[24]
    
pev(id, pev_netname, playerName, 23)
    
client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_BREAK", playerName)
    
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_BREAK_V")
    
    if(
Player[id][PlrDuelFrags] < Player[enemy][PlrDuelFrags])
    {        
        if(
g_cvLosing)
        {
            
#if defined AES_EXP
            
aes_add_player_exp(id, -g_cvLosing)
            
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_ARS_BREAK_FINE", g_cvLosing)
            
#else
            
new curMoney = cs_get_user_money(id)
            new 
money = curMoney - g_cvLosing < 0 ? curMoney : g_cvLosing
            cs_set_user_money
(id, curMoney - money)
            
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_BREAK_FINE", money)
            
#endif
        
}
    }
    
    
compensation(enemy, id)
}

set_flag_duel(attacker, victim)
{        
    if(
Player[victim][PlrDuelReady] != attacker || Player[attacker][PlrDuelReady] != victim)
        return
    
    new 
attackerName[24], victimName[24]
    
pev(victim, pev_netname, victimName, 23)
    
pev(attacker, pev_netname, attackerName, 23)
    
    
Player[attacker][PlrDuelFrags]++
    
    if(
Player[attacker][PlrDuelFrags] == g_cvFrags)
    {
        
remove_duel_sprite(attacker)
        
remove_duel_sprite(victim)
    
        
client_print_color(0, print_team_red, "^4[%s] ^3%L", PLUGIN, LANG_PLAYER, "DUEL_WIN",
            
attackerName, victimName, attackerName, Player[attacker][PlrDuelFrags], Player[victim][PlrDuelFrags])
        
        if(
g_cvReward)
        {
            
#if defined AES_EXP
            
aes_add_player_exp(attacker, g_cvReward)
            
client_print_color(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_AES_REWARD", g_cvReward)
            
#else
            
new curMoney = cs_get_user_money(attacker)
            new 
money = curMoney + g_cvReward > g_cvMoney ? g_cvMoney - curMoney : g_cvReward
            cs_set_user_money
(attacker, curMoney + money)
            
client_print_color(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_REWARD", money)
            
#endif
        
}
        
        if(
g_cvLosing)
        {
            
#if defined AES_EXP
            
aes_add_player_exp(victim, -g_cvLosing)
            
client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_AES_LOOSE", g_cvLosing)
            
#else
            
new curMoney = cs_get_user_money(victim)
            new 
money = curMoney - g_cvLosing < 0 ? curMoney : g_cvLosing
            cs_set_user_money
(victim, curMoney - money)
            
client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_LOOSE", money)
            
#endif
        
}
        
        if(
g_cvSounds)
        {
            
client_cmd(attacker, "spk %s", SOUND_DUEL_WIN)
            
client_cmd(victim, "spk %s", SOUND_DUEL_LOSE)
        }
        
        
Player[attacker][PlrDuelFrags] = 0
        Player
[victim][PlrDuelFrags] = 0
        Player
[attacker][PlrDuelReady] = 0
        Player
[victim][PlrDuelReady] = 0
        
return
    }
    
    
client_print_color(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_FRAG_A",
        
g_cvFrags - Player[attacker][PlrDuelFrags])
        
    
client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_FRAG_V",
        
g_cvFrags - Player[attacker][PlrDuelFrags])
}

compensation(const id, const victim)
{
    if(
g_cvCompensation && Player[id][PlrDuelFrags] > Player[victim][PlrDuelFrags])
    {
        
#if defined AES_EXP
        
aes_add_player_exp(id, g_cvCompensation)
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_AES_COMPENSATION",
            
g_cvCompensation)
        
#else
        
new curMoney = cs_get_user_money(id)
        new 
money = curMoney + g_cvCompensation > g_cvMoney ? g_cvMoney - curMoney : g_cvCompensation
        cs_set_user_money
(id, curMoney + money)
        
client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_COMPENSATION", money)
        
#endif
    
}
    
    
Player[id][PlrDuelFrags] = 0
    Player
[victim][PlrDuelFrags] = 0
    Player
[id][PlrDuelReady] = 0
    Player
[victim][PlrDuelReady] = 0
}

create_duel_sprite(const iPlayerId)
{
    if (
Player[iPlayerId][PlrDuelSprite])
        return 
0
        
    
new iSprite = engfunc(EngFunc_CreateNamedEntity, g_infoTarget)
            
    if (
pev_valid(iSprite) != 2)
    {
        
Player[iPlayerId][PlrDuelSprite] = 0
        server_print
("[%s] ERROR: sprite duel entities are not initialized", PLUGIN)
        return 
1
    
}
    
    
engfunc(EngFunc_SetSize, iSprite, Float: {-1.0, -1.0, -1.0} , Float: { 1.0, 1.0, 1.0 })
    
engfunc(EngFunc_SetModel, iSprite, SPRITE_DUEL)
    
engfunc(EngFunc_SetOrigin, iSprite, Float: {-8192.0, -8192.0, -8192.0})
    
    
set_pev(iSprite, pev_effects, Player[iPlayerId][PlrIsAlive] ? 0 : EF_NODRAW)
    
set_pev(iSprite, pev_renderfx, 0)
    
set_pev(iSprite, pev_rendermode, kRenderTransAdd)
    
set_pev(iSprite, pev_renderamt, 255.0)
    
set_pev(iSprite, pev_rendercolor, Float: {255.0, 255.0, 255.0})
    
set_pev(iSprite, pev_solid, SOLID_NOT)
    
set_pev(iSprite, pev_movetype, MOVETYPE_PUSHSTEP)
    
set_pev(iSprite, pev_impulse, g_iSpriteImpulse)
    
set_pev(iSprite, pev_scale, g_cvSprite)
    
    
Player[iPlayerId][PlrDuelSprite] = iSprite
    
    
return 0
}

remove_duel_sprite(const iPlayerId)
{
    if (
Player[iPlayerId][PlrDuelSprite])
    {
        
engfunc(EngFunc_RemoveEntity, Player[iPlayerId][PlrDuelSprite])
        
Player[iPlayerId][PlrDuelSprite] = 0
    
} 
çok teşekkür ederim fakat duvar arkasından hala gözüküyor
Dosya Adı: Screenshot_1.png | Dosya Boyutu: 231,71 KB | 24-11-2021, 15:30
RE: sprite duvar arkasından görünmeyi kaldırma
Sorun sprite dosyanızdan kaynaklı olduğunu düşünüyorum. Farklı bir sprite dosyası kullanarak dener misin ?
RE: sprite duvar arkasından görünmeyi kaldırma
(24-11-2021, 17:18)suriyelikene Adlı Kullanıcıdan Alıntı: Sorun sprite dosyanızdan kaynaklı olduğunu düşünüyorum. Farklı bir sprite dosyası kullanarak dener misin ?
Denedim fakat duvar arkasından hertürlü gözüküyor sprite.
RE: sprite duvar arkasından görünmeyi kaldırma
Dene bakalım :
PHP Kod:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <xs>

//#define AES_EXP

#if AMXX_VERSION_NUM < 183
    #define client_disconnected client_disconnect
    #include <colorchat>
#endif

#if defined AES_EXP
    #include <aes_main>
#endif

#define PLUGIN "Duels"
#define VERSION "0.75"
#define AUTHOR "Psycrow"

#define SOUND_DUEL_ACCEPTED         "next21_duels/duel_challenge_accepted.wav"
#define SOUND_DUEL_WIN                "next21_duels/win.wav"
#define SOUND_DUEL_LOSE                "next21_duels/lose.wav"

#define SPRITE_DUEL                    "sprites/next21_duels/duel.spr"

#define DUEL_SPRITE_DISTANCE        10.0
#define DUEL_WAITING_TIME            10.0

#define Player[%1][%2]        g_player_data[%1 - 1][%2]

enum _:Player_Properties
{
    PlrInServer,
    PlrIsAlive,
    PlrTeam,
    PlrDuelReady,
    PlrDuelWaiting,
    PlrDuelFrags,
    PlrDuelSprite,
    Float: PlrDeathReasonTime,
    Float: PlrDuelWaitingTime
}

new
g_player_data[32][Player_Properties], g_iMaxplayers, g_infoTarget,
g_forwardAddToFullPack, g_forwardCheckVisibility, g_iSpriteImpulse,
#if !defined AES_EXP
    g_cvMoney,
#endif
g_cvFrags, g_cvReward, g_cvLosing, g_cvCompensation, g_cvSounds, Float: g_cvSprite, Float: g_cvSpriteDist

public plugin_precache()
{
        
    precache_sound
(SOUND_DUEL_ACCEPTED)
    precache_sound(SOUND_DUEL_WIN)
    precache_sound(SOUND_DUEL_LOSE)
    
    precache_model
(SPRITE_DUEL)
}

public 
plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_cvar
("cv_duels_frags", "3")
    register_cvar("cv_duels_reward", "6000")
    register_cvar("cv_duels_losing", "3000")
    register_cvar("cv_duels_compensation", "3000")
    register_cvar("cv_duels_sounds", "1")
    register_cvar("cv_duels_sprite", "0.5")
    register_cvar("cv_duels_sprite_dist", "40.0")

    register_clcmd("say /duelo", "duel_check_players")
    register_clcmd("say_team /duel", "duel_check_players")
    
    register_clcmd
("say /cikis", "unduel")
    register_clcmd("say_team /cikis", "unduel")
    
    register_logevent
("fw_RoundStart", 2, "1=Round_Start")
    
    RegisterHam
(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled", 1)
    RegisterHam(Ham_Player_PreThink, "player", "fw_PlayerPreThink")
    
    register_message
(get_user_msgid("TeamInfo"), "fw_TeamInfo")
    
    g_iMaxplayers 
= get_maxplayers()
    g_infoTarget = engfunc(EngFunc_AllocString, "info_target")
    g_iSpriteImpulse = engfunc(EngFunc_AllocString, "next21_duelsprite")
    
    
#if !defined AES_EXP
    register_cvar("cv_duels_maxmoney","16000")
    #endif
    
    register_dictionary
("next21_duels.txt")
}

public 
fw_RoundStart()
{
    g_cvFrags = get_cvar_num("cv_duels_frags")
    g_cvReward = get_cvar_num("cv_duels_reward")
    g_cvLosing = get_cvar_num("cv_duels_losing")
    g_cvCompensation = get_cvar_num("cv_duels_compensation")
    g_cvSounds = get_cvar_num("cv_duels_sounds")
    #if !defined AES_EXP
    g_cvMoney = get_cvar_num("cv_duels_maxmoney")
    #endif
    
    
new Float: fSpriteScale = floatmax(0.0, get_cvar_float("cv_duels_sprite"))
        
    
if (fSpriteScale > 0.0 && g_cvSprite == 0.0)
    {
        g_forwardAddToFullPack = register_forward(FM_AddToFullPack, "fw_AddToFullPack" , 1)
        g_forwardCheckVisibility = register_forward(FM_CheckVisibility, "fw_CheckVisibility")
        g_cvSpriteDist = get_cvar_float("cv_duels_sprite_dist")
    }
    else if (fSpriteScale == 0.0 && g_cvSprite > 0.0)
    {
        for (new i = 1; i <= g_iMaxplayers; i++)
        {
            if (!Player[i][PlrDuelSprite])
                continue
                
            engfunc
(EngFunc_RemoveEntity, Player[i][PlrDuelSprite])
            Player[i][PlrDuelSprite] = 0
        
}
                
        unregister_forward
(FM_AddToFullPack, g_forwardAddToFullPack)
        unregister_forward(FM_CheckVisibility, g_forwardCheckVisibility)
    }
    else if (fSpriteScale != g_cvSprite)
    {
        for (new i = 1; i <= g_iMaxplayers; i++)
            if (Player[i][PlrDuelSprite])
                set_pev(Player[i][PlrDuelSprite], pev_scale, fSpriteScale)
    }
    
    g_cvSprite 
= fSpriteScale
}

public 
client_putinserver(id)
{
    Player[id][PlrInServer] = 1
    Player
[id][PlrIsAlive] = 0
    Player
[id][PlrTeam] = 0
}

public 
client_disconnected(id)
{
    Player[id][PlrInServer] = 0
    Player
[id][PlrIsAlive] = 0
    Player
[id][PlrTeam] = 0
    
    
if (Player[id][PlrDuelReady] && Player[Player[id][PlrDuelReady]][PlrInServer])
    {
        remove_duel_sprite(id)
        remove_duel_sprite(Player[id][PlrDuelReady])
    
        
if (is_user_connected(Player[id][PlrDuelReady]))
        {
            new playerName[24]
            pev(id, pev_netname, playerName, 23)
            
            client_print_color
(Player[id][PlrDuelReady], print_team_red, "^4[%s] ^3%L",
                PLUGIN, Player[id][PlrDuelReady], "DUEL_DISCONNECT", playerName)
            
            compensation
(Player[id][PlrDuelReady], id)
        }
        else
        {
            Player[Player[id][PlrDuelWaiting]][PlrInServer] = 0
            Player
[Player[id][PlrDuelReady]][PlrDuelReady] = 0
            Player
[id][PlrDuelReady] = 0
        
}
    }
    
    
if (Player[id][PlrDuelWaiting] && Player[Player[id][PlrDuelWaiting]][PlrInServer])
    {    
        
new victim = Player[id][PlrDuelWaiting], playerName[24]
        pev(id, pev_netname, playerName, 23)
        client_print_color(victim, print_team_red, "^4[%s] ^3%L",
            PLUGIN, victim, "DUEL_DISCONNECT_W", playerName)
                
        Player
[id][PlrDuelWaiting] = 0
        Player
[victim][PlrDuelWaiting] = 0
        
        Player
[id][PlrDuelWaitingTime] = 0.0
        Player
[victim][PlrDuelWaitingTime] = 0.0
    
}
}

public 
fw_PlayerSpawn(id)
{
    if (!is_user_alive(id))
        return HAM_IGNORED
        
    Player
[id][PlrTeam] = get_pdata_int(id, 114, 5)
    Player[id][PlrIsAlive] = 1
    
    
if (Player[id][PlrDuelSprite])
        set_pev(Player[id][PlrDuelSprite], pev_effects, 0)
    
    
return HAM_IGNORED
}

public 
fw_PlayerKilled(victim, attacker)
{
    Player[victim][PlrIsAlive] = 0
    
    
if (attacker && attacker != victim)
        set_flag_duel(attacker, victim)
        
    
if (Player[victim][PlrDuelSprite])
        set_pev(Player[victim][PlrDuelSprite], pev_effects, EF_NODRAW)
}

public 
fw_PlayerPreThink(id)
{
    if(Player[id][PlrDuelWaiting] && Player[id][PlrDuelWaitingTime] <= get_gametime())
    {
        Player[id][PlrDuelWaitingTime] = 0.0
        Player
[Player[id][PlrDuelWaiting]][PlrDuelWaitingTime] = 0.0
        
        client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING_TIME")
        client_print_color(Player[id][PlrDuelWaiting], print_team_red, "^4[%s] ^3%L",
            PLUGIN, Player[id][PlrDuelWaiting], "DUEL_WAITING_TIME")
        
        Player
[Player[id][PlrDuelWaiting]][PlrDuelWaiting] = 0
        Player
[id][PlrDuelWaiting] = 0
    
}
}

public 
fw_TeamInfo()
{
    new id = get_msg_arg_int(1)
    
    
new team[2]
    get_msg_arg_string(2, team, 1)
            
    
switch (team[0])
    {
        case 'T': Player[id][PlrTeam] = 1
        
case 'C': Player[id][PlrTeam] = 2
        
case 'S': Player[id][PlrTeam] = 3
        
default: Player[id][PlrTeam] = 0
    
}
            
    
new victim = Player[id][PlrDuelReady]
    if (victim)
    {
        if (Player[victim][PlrInServer])
        {
            if (Player[id][PlrTeam] == Player[victim][PlrTeam]
                || (Player[id][PlrTeam] != 1 && Player[id][PlrTeam] != 2))
            {
                remove_duel_sprite(id)
                remove_duel_sprite(victim)
            
                client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_TEAM")
                client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_TEAM")
                
                
if (Player[id][PlrDuelFrags] < Player[victim][PlrDuelFrags])
                    compensation(victim, id)
                else if (Player[id][PlrDuelFrags] > Player[victim][PlrDuelFrags])
                    compensation(id, victim)
                
                Player
[id][PlrDuelFrags] = 0
                Player
[victim][PlrDuelFrags] = 0
                
                Player
[id][PlrDuelReady] = 0
                Player
[victim][PlrDuelReady] = 0
            
}        
        
}
        
        victim 
= Player[id][PlrDuelWaiting]
        if (victim && Player[victim][PlrInServer])    
        
{
            if (Player[id][PlrTeam] == Player[victim][PlrTeam]
                || (Player[id][PlrTeam] != 1 && Player[id][PlrTeam] != 2))
            {
                client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_TEAM")
                client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_TEAM")
                
                Player
[id][PlrDuelWaiting] = 0
                Player
[victim][PlrDuelWaiting] = 0
                
                Player
[id][PlrDuelWaitingTime] = 0.0
                Player
[victim][PlrDuelWaitingTime] = 0.0
            
}
        }
    }
}
    
public fw_AddToFullPack(es_state, e, ent, host, hostflags, player)
{
    if (!ent || player || pev_valid(ent) != 2 || pev(ent, pev_impulse) != g_iSpriteImpulse)
        return FMRES_IGNORED
        
    
if (Player[host][PlrDuelSprite] != ent)
    {
        set_es(es_state, ES_RenderMode, EF_NODRAW)
        return FMRES_IGNORED
    
}
            
    
static iEnemy; iEnemy = Player[host][PlrDuelReady]    
    
if (!iEnemy || !Player[iEnemy][PlrIsAlive])
    {
        set_es(es_state, ES_RenderMode, EF_NODRAW)
        return FMRES_IGNORED
    
}
                
    
static Float: startPosition[3],
    Float: endPosition[3],
    Float: fVector[3],
    Float: fVectorNormal[3],
    Float: fView[3],
    Float: endCurPosition[3]
                
    pev
(iEnemy, pev_origin, endPosition)
    endPosition[2] += g_cvSpriteDist
        
    pev
(host, pev_origin, startPosition)
    pev(host, pev_view_ofs, fView)
    xs_vec_add(startPosition, fView, startPosition)
        
    xs_vec_sub
(endPosition, startPosition, fVector)
    xs_vec_normalize(fVector, fVectorNormal)
        
    engfunc
(EngFunc_TraceLine, startPosition, endPosition, IGNORE_MONSTERS, host, 0)
    get_tr2(0, TR_vecEndPos, endCurPosition)
        
    xs_vec_mul_scalar
(fVectorNormal, -10.0, fVector)
    xs_vec_add(endCurPosition, fVector, endCurPosition)
        
    
if (get_distance_f(startPosition, endCurPosition) - get_distance_f(endPosition, endCurPosition) < 100.0)
    {
        xs_vec_mul_scalar(fVectorNormal, floatmin(100.0, get_distance_f(startPosition, endCurPosition)), endCurPosition)
        xs_vec_add(startPosition, endCurPosition, endCurPosition)
            
        set_es
(es_state, ES_Scale, get_distance_f(startPosition, endCurPosition) * 0.005 * g_cvSprite)
    }
    
    set_es
(es_state, ES_Origin, endCurPosition)

    return FMRES_IGNORED
}

public 
fw_CheckVisibility(ent)
{
    if (pev(ent, pev_impulse) == g_iSpriteImpulse)
    {
        forward_return(FMV_CELL, 1)
        return FMRES_SUPERCEDE
    
}
    
    
return FMRES_IGNORED
}

public 
duel_check_players(id)
{
    if (Player[id][PlrDuelReady])
    {
        new player_name[24]
        pev(Player[id][PlrDuelReady], pev_netname, player_name, 23)
        
        client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_EXIST", player_name)
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_UNDUEL")
        return
    }
        
    
if (Player[id][PlrDuelWaiting])
    {
        new player_name[24]
        pev(Player[id][PlrDuelWaiting], pev_netname, player_name, 23)
        
        client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_EXIST_W", player_name)
        return
    }
    
    
if (!Player[id][PlrTeam] || Player[id][PlrTeam] == 3)
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WRONG_TEAM")
        return        
    
}
    
    
new menuName[64]
    format(menuName, 63, "\r%L", id, "DUEL_HEADNAME")
    
    
new Players_Menu = menu_create(menuName, "duel_menu_handler")
    new s_Name[24], s_Player[4], iEnemyTeam = Player[id][PlrTeam] == 2 ? 1 : 2
        
    
for(new i = 1; i <= g_iMaxplayers; i++)
    { 
        if (!Player[i][PlrInServer] || Player[i][PlrTeam] != iEnemyTeam || is_user_hltv(i))
            continue
        
        pev
(i, pev_netname, s_Name, 23)
        num_to_str(i, s_Player, 3)
        
        
if (Player[i][PlrDuelReady] || Player[i][PlrDuelWaiting])
            format(s_Name, 23, "\d%s", s_Name)
        
        menu_additem
(Players_Menu, s_Name, s_Player, 0)
    }
    
    
new sMenuProp[3][16]
    format(sMenuProp[0], 15, "%L", id, "MENU_NEXT")
    format(sMenuProp[1], 15, "%L", id, "MENU_BACK")
    format(sMenuProp[2], 15, "%L", id, "MENU_EXIT")
    
    menu_setprop
(Players_Menu, MPROP_NEXTNAME, sMenuProp[0])
    menu_setprop(Players_Menu, MPROP_BACKNAME, sMenuProp[1])
    menu_setprop(Players_Menu, MPROP_EXITNAME, sMenuProp[2])
    
    menu_display
(id, Players_Menu, 0)
}

public 
duel_menu_handler(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    
}
    
    
if(!Player[id][PlrTeam] || Player[id][PlrTeam] == 3)
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WRONG_TEAM")
        return PLUGIN_HANDLED    
    
}
    
    
new sData[6], sName[64], iAccess, iCallback
    menu_item_getinfo
(menu, item, iAccess, sData, charsmax(sData), sName, charsmax(sName), iCallback)
    
    
new key = str_to_num(sData)
        
    
if (!Player[key][PlrInServer] || Player[id][PlrTeam] == Player[key][PlrTeam] || !Player[key][PlrTeam] || Player[key][PlrTeam] == 3)
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_ERROR_PLAYER")
        duel_check_players(id)
        return PLUGIN_HANDLED
    
}
    
    
if (Player[key][PlrDuelReady] || Player[key][PlrDuelWaiting])
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WARNING_PLAYER")
        duel_check_players(id)
        return PLUGIN_HANDLED
    
}
    
    
new enemyName[24]
    pev(key, pev_netname, enemyName, 23)
    
    client_print_color
(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING", enemyName)
    Player[key][PlrDuelWaiting] = id
    Player
[id][PlrDuelWaiting] = key
    
    
new Float: gameTime = get_gametime()
    Player[id][PlrDuelWaitingTime] = _:(gameTime + DUEL_WAITING_TIME)
    Player[key][PlrDuelWaitingTime] = _:(gameTime + DUEL_WAITING_TIME)
    
    menu_destroy
(menu)
    
    
new menuName[120], playerName[24]
    pev(id, pev_netname, playerName, 23)
    format(menuName, 119, "\r%L", key, "DUEL_CHALLENGE", playerName)
    
    
new duel_Menu = menu_create(menuName, "duel_challenge_handler")
    
    
new strMenuItem[64]
    format(strMenuItem, 63, "\w%L", key, "DUEL_AGREE")
    menu_additem(duel_Menu, strMenuItem, "1", 0)
    format(strMenuItem, 63, "\w%L", key, "DUEL_REFUSE")
    menu_additem(duel_Menu, strMenuItem, "2", 0)
    
    menu_setprop
(duel_Menu, MPROP_EXIT, -1)
    menu_display(key, duel_Menu, 0)
    
    
if(is_user_bot(key))
        duel_challenge_handler(key, duel_Menu, 0)
    
    
return PLUGIN_CONTINUE
}

public 
duel_challenge_handler(id, menu, item)
{
    if (!is_user_connected(id))
        return PLUGIN_HANDLED
    
    
new enemy = Player[id][PlrDuelWaiting]
    
    
if (!enemy)
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_WAITING_TIME")
        menu_destroy(menu)
        return PLUGIN_HANDLED
    
}
    
    
switch(item)
    {
        case 0:
        {
            new playerName[24], enemyName[24]
            pev(id, pev_netname, playerName, 23)
            pev(enemy, pev_netname, enemyName, 23)
            client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_PLAYER_AGREE", playerName)
            client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_RULE", g_cvFrags)
            client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_RULE", g_cvFrags)
            Player[enemy][PlrDuelReady] = id
            Player
[id][PlrDuelReady] = enemy
            
            
if (g_cvSounds)
            {
                client_cmd(enemy, "spk %s", SOUND_DUEL_ACCEPTED)
                client_cmd(id, "spk %s", SOUND_DUEL_ACCEPTED)
            }
            
            
if (g_cvSprite > 0.0)
            {
                create_duel_sprite(id)
                create_duel_sprite(enemy)
            }
        }
        case 1:
        {
            new playerName[24]
            pev(id, pev_netname, playerName, 23)
            client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_PLAYER_REFUSE", playerName)
        }
        default:
        {
            menu_destroy(menu)
            return PLUGIN_HANDLED
        
}
    }
    
    Player
[enemy][PlrDuelWaiting] = 0
    Player
[id][PlrDuelWaiting] = 0
    
    Player
[id][PlrDuelWaitingTime] = 0.0
    Player
[enemy][PlrDuelWaitingTime] = 0.0
    
    menu_destroy
(menu)
    return PLUGIN_HANDLED    
}

public 
unduel(id)
{
    new enemy = Player[id][PlrDuelReady]
    
    
if(!enemy)
    {
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_NOEXIST")
        return
    }
    
    remove_duel_sprite
(id)
    remove_duel_sprite(enemy)
    
    
new playerName[24]
    pev(id, pev_netname, playerName, 23)
    client_print_color(enemy, print_team_red, "^4[%s] ^3%L", PLUGIN, enemy, "DUEL_BREAK", playerName)
    client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_BREAK_V")
    
    
if(Player[id][PlrDuelFrags] < Player[enemy][PlrDuelFrags])
    {        
        
if(g_cvLosing)
        {
            #if defined AES_EXP
            aes_add_player_exp(id, -g_cvLosing)
            client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_ARS_BREAK_FINE", g_cvLosing)
            #else
            new curMoney = cs_get_user_money(id)
            new money = curMoney - g_cvLosing < 0 ? curMoney : g_cvLosing
            cs_set_user_money
(id, curMoney - money)
            client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_BREAK_FINE", money)
            #endif
        }
    }
    
    compensation
(enemy, id)
}

set_flag_duel(attacker, victim)
{
        
    
if(Player[victim][PlrDuelReady] != attacker || Player[attacker][PlrDuelReady] != victim)
        return
    
    
new attackerName[24], victimName[24]
    pev(victim, pev_netname, victimName, 23)
    pev(attacker, pev_netname, attackerName, 23)
    
    Player
[attacker][PlrDuelFrags]++
    
    
if(Player[attacker][PlrDuelFrags] == g_cvFrags)
    {
        remove_duel_sprite(attacker)
        remove_duel_sprite(victim)
    
        client_print_color
(0, print_team_red, "^4[%s] ^3%L", PLUGIN, LANG_PLAYER, "DUEL_WIN",
            attackerName, victimName, attackerName, Player[attacker][PlrDuelFrags], Player[victim][PlrDuelFrags])
        
        
if(g_cvReward)
        {
            #if defined AES_EXP
            aes_add_player_exp(attacker, g_cvReward)
            client_print_color(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_AES_REWARD", g_cvReward)
            #else
            new curMoney = cs_get_user_money(attacker)
            new money = curMoney + g_cvReward > g_cvMoney ? g_cvMoney - curMoney : g_cvReward
            cs_set_user_money
(attacker, curMoney + money)
            client_print_color(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_REWARD", money)
            #endif
        }
        
        
if(g_cvLosing)
        {
            #if defined AES_EXP
            aes_add_player_exp(victim, -g_cvLosing)
            client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_AES_LOOSE", g_cvLosing)
            #else
            new curMoney = cs_get_user_money(victim)
            new money = curMoney - g_cvLosing < 0 ? curMoney : g_cvLosing
            cs_set_user_money
(victim, curMoney - money)
            client_print_color(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_LOOSE", money)
            #endif
        }
        
        
if(g_cvSounds)
        {
            client_cmd(attacker, "spk %s", SOUND_DUEL_WIN)
            client_cmd(victim, "spk %s", SOUND_DUEL_LOSE)
        }
        
        Player
[attacker][PlrDuelFrags] = 0
        Player
[victim][PlrDuelFrags] = 0
        Player
[attacker][PlrDuelReady] = 0
        Player
[victim][PlrDuelReady] = 0
        
return
    }
    
    client_print_color
(attacker, print_team_red, "^4[%s] ^3%L", PLUGIN, attacker, "DUEL_FRAG_A",
        g_cvFrags - Player[attacker][PlrDuelFrags])
        
    client_print_color
(victim, print_team_red, "^4[%s] ^3%L", PLUGIN, victim, "DUEL_FRAG_V",
        g_cvFrags - Player[attacker][PlrDuelFrags])
}

compensation(const id, const victim)
{
    if(g_cvCompensation && Player[id][PlrDuelFrags] > Player[victim][PlrDuelFrags])
    {
        #if defined AES_EXP
        aes_add_player_exp(id, g_cvCompensation)
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_AES_COMPENSATION",
            g_cvCompensation)
        #else
        new curMoney = cs_get_user_money(id)
        new money = curMoney + g_cvCompensation > g_cvMoney ? g_cvMoney - curMoney : g_cvCompensation
        cs_set_user_money
(id, curMoney + money)
        client_print_color(id, print_team_red, "^4[%s] ^3%L", PLUGIN, id, "DUEL_COMPENSATION", money)
        #endif
    }
    
    Player
[id][PlrDuelFrags] = 0
    Player
[victim][PlrDuelFrags] = 0
    Player
[id][PlrDuelReady] = 0
    Player
[victim][PlrDuelReady] = 0
}

create_duel_sprite(const iPlayerId)
{
    if (Player[iPlayerId][PlrDuelSprite])
        return 0
        
    
new iSprite = engfunc(EngFunc_CreateNamedEntity, g_infoTarget)
            
    
if (pev_valid(iSprite) != 2)
    {
        Player[iPlayerId][PlrDuelSprite] = 0
        server_print
("[%s] ERROR: sprite duel entities are not initialized", PLUGIN)
        return 1
    
}
    
    engfunc
(EngFunc_SetSize, iSprite, Float: {-1.0, -1.0, -1.0} , Float: { 1.0, 1.0, 1.0 })
    engfunc(EngFunc_SetModel, iSprite, SPRITE_DUEL)
    engfunc(EngFunc_SetOrigin, iSprite, Float: {-8192.0, -8192.0, -8192.0})
    
    set_pev
(iSprite, pev_effects, Player[iPlayerId][PlrIsAlive] ? 0 : EF_NODRAW)
    set_pev(iSprite, pev_renderfx, 0)
    set_pev(iSprite, pev_rendermode, kRenderTransAlpha)
    set_pev(iSprite, pev_renderamt, 255.0)
    set_pev(iSprite, pev_rendercolor, Float: {255.0, 255.0, 255.0})
    set_pev(iSprite, pev_solid, SOLID_BBOX)
    set_pev(iSprite, pev_movetype, MOVETYPE_PUSHSTEP)
    set_pev(iSprite, pev_impulse, g_iSpriteImpulse)
    set_pev(iSprite, pev_scale, g_cvSprite)
    
    Player
[iPlayerId][PlrDuelSprite] = iSprite
    
    
return 0
}

remove_duel_sprite(const iPlayerId)
{
    if (Player[iPlayerId][PlrDuelSprite])
    {
        engfunc(EngFunc_RemoveEntity, Player[iPlayerId][PlrDuelSprite])
        Player[iPlayerId][PlrDuelSprite] = 0
    
} 
} 
RE: sprite duvar arkasından görünmeyi kaldırma
İstek konusu, @"suriyelikene" adlı kullanıcı tarafından 3 gün içinde çözülmüştür.
İsteği çözdüğü için suriyelikene Adlı kullanıcıya 1 rep puanı ve 1 yardım etme puanı otomatik olarak verilmiştir.
suriyelikene Adlı kullanıcı sizin dışınızda toplam 785 kişiye yardım etmiştir.

Herhangi bir konuda hata olduğunu düşünüyorsanız destek sistemi üzerinden iletişim kurabilirsiniz.

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Konuyu Okuyanlar: 1 Ziyaretçi
Task