Русское сообщество по скриптингу

Проблема с отображением "W" модели  [Решено]

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

Проблема с отображением "W" модели

Сообщение L1ga » 27 ноя 2022, 14:52

Добрый день, проблема заключается в том, что когда через VIP меню берешь оружие, в руках отображается нормально, но когда выкидываешь его на землю, то модель показывает вообще другое оружие, а если поднимаешь его опять - то опять показывает правильно. Не могу понять в чем проблема. (скажу сразу, только начинаю изучать скрипт, разбираюсь плохо).
Были взяты как образец 2 плагина на оружие Ак-47 и М4А1, по примеру так же сделал на оружие: XM1014, SG550, SG552, M3, AUG.
Вот пример:
1) Ак-47 в руках
Вы должны зарегистрироваться, чтобы видеть ссылки.
2) Ак-47 на земле
Вы должны зарегистрироваться, чтобы видеть ссылки.

Скрипт для АК-47
Код: Выделить всё
#define DAMAGE 1.5                        
const    COST = 15000                        
const    VIPCOST 
= 0                        
const giAllowedRound 
= 2                                                
#define BUYCMD                            
#define ACCESS_FLAG ADMIN_LEVEL_G

new AK_V_MODEL[] = "models/biohazard/gold_weap/v_ak47.mdl"     // view weapon model
new AK_P_MODEL[] = "models/biohazard/gold_weap/p_ak47.mdl"    // player weapon model
new AK_W_MODEL[] = "models/biohazard/gold_weap/w_ak47.mdl"    // world weapon model


#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <colorchat>

new bool:g_HasAk[33] = false
new bool
:g_bHasGA[33] = false
new g_is_connected
[33]
new bool: g_BotsRegistered
new giCounter

#if defined BUYTIME
new Float:g_GameTime
#endif

#define is_valid_player(%1) (1 <= %1 <= 32)
#define AK 3333

// offsets
const XO_WEAPON = 4
const XO_CBASEPLAYER 
= 5
const MAX_ITEM_TYPES 
= 6
const m_pPlayer 
= 41
const m_pNext 
= 42
const m_iId 
= 43
const m_rgpPlayerItems_CWeaponBox 
= 34
const m_rgpPlayerItems_CBasePlayer 
= 367

#define PLUGIN_NAME "Gold Ak-47"
#define PLUGIN_VERSION "1.0.0" 
#define PLUGIN_AUTHOR "L1ga"

public plugin_precache()
{
    precache_model(AK_V_MODEL);
    precache_model(AK_P_MODEL);
    precache_model(AK_W_MODEL);
}

public plugin_init()
{

    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    
    
// mapcheck
    new mapname[4]
    get_mapname(mapname, 3)
    if(equali(mapname, "de_") || equali(mapname, "cs_"))
    {
#if defined BUYCMD
        register_clcmd( "buy_ak47", "buyAk47")
#endif        
        register_event( "TextMsg", "Event_NewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" )
        register_event ( "HLTV", "ev_RoundStart", "a", "1=0", "2=0" )
        register_event("DeathMsg", "Death", "a")

        register_forward(FM_SetModel, "fw_SetModel")

        RegisterHam(Ham_Item_Deploy, "weapon_ak47" , "Fwd_ItemDeploy_Weap_Post", .Post = 1 )
        RegisterHam(Ham_Item_AttachToPlayer, "weapon_ak47", "fw_Item_AttachToPlayer" )
        RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
    }
    else
        pause
("a")
}
public client_connect(id)
{
    g_HasAk[id] = true
    g_bHasGA
[id] = false
    g_is_connected
[id] = true
}

public client_disconnect(id)
{
    g_HasAk[id] = true
    g_bHasGA
[id] = false
    g_is_connected
[id] = false
}

public Event_NewGame()
{
    new iPlayers[32], iNum
    get_players 
( iPlayers, iNum )

    for ( --iNum; iNum >= 0; --iNum )
    {
        g_HasAk[iPlayers[iNum]] = false
        g_bHasGA
[iPlayers[iNum]] = false
    
}
    giCounter = 0
}

public ev_RoundStart ()
{
    new iPlayers[32], iNum
    get_players 
( iPlayers, iNum )

    for ( --iNum; iNum >= 0; --iNum )
        g_bHasGA[iPlayers[iNum]] = false
#if defined BUYTIME
    g_GameTime = get_gametime()
#endif
    giCounter++
}

// register CZ bots with ham

public client_authorized(id)
{
    if(!g_BotsRegistered && is_user_bot(id))
    {
        set_task(0.1, "register_bots", id);
    }
}

public register_bots(id)
{
    if(!g_BotsRegistered && g_is_connected[id])
    {
        RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage");
        g_BotsRegistered = true;
    }
}

public Death()
{
    g_HasAk[read_data(2)] = false
    g_bHasGA
[read_data(2)] = false
}

public buyAk47(id)
{
// check if the player is in the buyzone
#if defined INBUYZONE
    if(!cs_get_user_buyzone(id))
    {
        ColorChat(id, GREEN,"[VIP] Вы вне зоны закупки!")
        return PLUGIN_HANDLED
    
}
#endif
// check buying time
#if defined BUYTIME
    new Float:buytime = get_cvar_float("mp_buytime") * 60.0;
    new Float:timepassed = get_gametime() - g_GameTime;

    if(floatcmp(timepassed , buytime) == 1)
    {
        client_print(id, print_center,"%0.f seconds have passed. You can't buy anything now!",buytime)
        return PLUGIN_HANDLED
    
}
#endif

    if(!is_user_alive(id))
    {    
        ColorChat
(id, GREEN,"[VIP] Доступно только для живых игроков!")
        return PLUGIN_HANDLED
    
}
    if(giCounter < giAllowedRound)
    {
        ColorChat(id, GREEN,"[VIP] Золотые оружия доступны со 2 раунда!")
        return PLUGIN_HANDLED
    
}
    else
    
{
        if(get_user_flags(id)& ACCESS_FLAG )
        {
            if(cs_get_user_money(id) < VIPCOST )
            {
        ColorChat(id, GREEN,"[VIP] У вас нехватает денег!")
        return PLUGIN_HANDLED
            
}
            else
                
{
                    cs_set_user_money(id , cs_get_user_money(id) - VIPCOST , 1);
                    giveak47(id)
                }
        }
        else
            
{
                if(cs_get_user_money(id) < COST )
                {
                ColorChat(id, GREEN, "[VIP] У вас нехватает денег!")
                    return PLUGIN_HANDLED
                
}
                else
                    
{
                        cs_set_user_money(id , cs_get_user_money(id) - COST , 1);
                        giveak47(id)
                    }
            }
    }    
    return PLUGIN_CONTINUE
}

public giveak47(id)
{
    Player_DropWeapons (id, 1)
    g_HasAk[id] = true
    ham_give_weapon
(id, "weapon_ak47")
    
    engclient_cmd
(id, "weapon_ak47")
}

public Fwd_ItemDeploy_Weap_Post(ent)
{
    new iPlayer = get_pdata_cbase(ent, m_pPlayer, XO_WEAPON);

    if (g_HasAk[iPlayer])
    {
        set_pev(iPlayer, pev_viewmodel2, AK_V_MODEL);
        set_pev(iPlayer, pev_weaponmodel2, AK_P_MODEL);
    }

    return HAM_IGNORED;
}

public fw_Item_AttachToPlayer (ent, id)
{
    if ( pev (ent, pev_impulse)==AK)
        g_HasAk[id] = true

    Fwd_ItemDeploy_Weap_Post
(ent )
    return HAM_IGNORED
}

public fw_SetModel ( ent, model[] )
{
    if ( pev_valid ( ent ) != 2 )
        return FMRES_IGNORED

    if 
( strlen ( model ) < 8 )
        return FMRES_IGNORED

    if 
( model[7] != 'w' || model[8] != '_' )
        return FMRES_IGNORED

    static sClassName
[32]
    pev ( ent, pev_classname, sClassName, charsmax ( sClassName ) )
    
    if 
( !equal ( sClassName, "weaponbox" ) )
        return FMRES_IGNORED

    new id 
= pev ( ent, pev_owner )

    if ( pev_valid ( id ) != 2 )
        return FMRES_IGNORED
    
    for 
(new i, iItem; i < MAX_ITEM_TYPES; i++)
    {
        iItem = get_pdata_cbase ( ent, m_rgpPlayerItems_CWeaponBox + i, XO_WEAPON )
        
        if 
( pev_valid ( iItem ) == 2 && pev(iItem, pev_impulse)==AK)
        {
            g_HasAk[id] = true
            engfunc 
( EngFunc_SetModel, ent, AK_W_MODEL )
            return FMRES_SUPERCEDE
        
}
    }
    return FMRES_IGNORED
}


public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
    if(!g_is_connected[attacker])
        return HAM_IGNORED;

    if (!(damage_bits & DMG_BULLET))
        return HAM_IGNORED;

    if (pev_valid(victim) != 2)
        return HAM_IGNORED;

    if(get_user_weapon(attacker) != CSW_AK47)
        return HAM_IGNORED;

    if(g_HasAk[attacker])
        SetHamParamFloat(4, damage * DAMAGE);

    return HAM_IGNORED;
}

stock Player_DropWeapons(const iPlayer, const iSlot)
{
    new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, XO_CBASEPLAYER);

    while (pev_valid(iItem) == 2)
    {
        pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName));
        engclient_cmd(iPlayer, "drop", szWeaponName);

        iItem = get_pdata_cbase(iItem, m_pNext, XO_WEAPON);
    }
}

stock ham_give_weapon(id,weapon[])
{
    if(!equal(weapon,"weapon_",7)) return 0;

    new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
    if(!pev_valid(wEnt)) return 0;

    set_pev(wEnt,pev_spawnflags,SF_NORESPAWN);
    dllfunc(DLLFunc_Spawn,wEnt);
    
    if
(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
    {
        if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
        return 0;
    }

    ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id);

    ExecuteHamB(Ham_GiveAmmo, id, 300, "762nato", 300);

    set_pev(wEnt, pev_impulse, AK)

    return 1;
}
 


Скрипт для XM1014
Код: Выделить всё
#define DAMAGE 1.5                        
const    COST = 8000                        
const    VIPCOST 
= 0                        
const giAllowedRound 
= 2                                                
#define BUYCMD                            
#define ACCESS_FLAG ADMIN_LEVEL_G

new XM1014_V_MODEL[] = "models/biohazard/gold_weap/v_xm1014.mdl"     // view weapon model
new XM1014_P_MODEL[] = "models/biohazard/gold_weap/p_xm1014.mdl"    // player weapon model
new XM1014_W_MODEL[] = "models/biohazard/gold_weap/w_xm1014.mdl"    // world weapon model


#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <colorchat>

new bool:g_Hasxm1014[33] = false
new bool
:g_bHasGA[33] = false
new g_is_connected
[33]
new bool: g_BotsRegistered
new giCounter

#if defined BUYTIME
new Float:g_GameTime
#endif

#define is_valid_player(%1) (1 <= %1 <= 32)
#define XM1014 3333

// offsets
const XO_WEAPON = 4
const XO_CBASEPLAYER 
= 5
const MAX_ITEM_TYPES 
= 6
const m_pPlayer 
= 41
const m_pNext 
= 42
const m_iId 
= 43
const m_rgpPlayerItems_CWeaponBox 
= 34
const m_rgpPlayerItems_CBasePlayer 
= 367

#define PLUGIN_NAME "Gold xm1014"
#define PLUGIN_VERSION "1.0.0" 
#define PLUGIN_AUTHOR "L1ga"

public plugin_precache()
{
    precache_model(XM1014_V_MODEL);
    precache_model(XM1014_P_MODEL);
    precache_model(XM1014_W_MODEL);
}

public plugin_init()
{

    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    
    
// mapcheck
    new mapname[4]
    get_mapname(mapname, 3)
    if(equali(mapname, "de_") || equali(mapname, "cs_"))
    {
#if defined BUYCMD
        register_clcmd( "buy_xm1014", "buyXM1014")
#endif        
        register_event( "TextMsg", "Event_NewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" )
        register_event ( "HLTV", "ev_RoundStart", "a", "1=0", "2=0" )
        register_event("DeathMsg", "Death", "a")

        register_forward(FM_SetModel, "fw_SetModel")

        RegisterHam(Ham_Item_Deploy, "weapon_xm1014" , "Fwd_ItemDeploy_Weap_Post", .Post = 1 )
        RegisterHam(Ham_Item_AttachToPlayer, "weapon_xm1014", "fw_Item_AttachToPlayer" )
        RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
    }
    else
        pause
("a")
}
public client_connect(id)
{
    g_Hasxm1014[id] = false
    g_bHasGA
[id] = false
    g_is_connected
[id] = true
}

public client_disconnect(id)
{
    g_Hasxm1014[id] = false
    g_bHasGA
[id] = false
    g_is_connected
[id] = false
}

public Event_NewGame()
{
    new iPlayers[32], iNum
    get_players 
( iPlayers, iNum )

    for ( --iNum; iNum >= 0; --iNum )
    {
        g_Hasxm1014[iPlayers[iNum]] = false
        g_bHasGA
[iPlayers[iNum]] = false
    
}
    giCounter = 0
}

public ev_RoundStart ()
{
    new iPlayers[32], iNum
    get_players 
( iPlayers, iNum )

    for ( --iNum; iNum >= 0; --iNum )
        g_bHasGA[iPlayers[iNum]] = false
#if defined BUYTIME
    g_GameTime = get_gametime()
#endif
    giCounter++
}

// register CZ bots with ham

public client_authorized(id)
{
    if(!g_BotsRegistered && is_user_bot(id))
    {
        set_task(0.1, "register_bots", id);
    }
}

public register_bots(id)
{
    if(!g_BotsRegistered && g_is_connected[id])
    {
        RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage");
        g_BotsRegistered = true;
    }
}

public Death()
{
    g_Hasxm1014[read_data(2)] = false
    g_bHasGA
[read_data(2)] = false
}

public buyXM1014(id)
{
// check if the player is in the buyzone
#if defined INBUYZONE
    if(!cs_get_user_buyzone(id))
    {
        ColorChat(id, GREEN,"[VIP] ^1Вы вне зоны закупки!")
        return PLUGIN_HANDLED
    
}
#endif
// check buying time
#if defined BUYTIME
    new Float:buytime = get_cvar_float("mp_buytime") * 60.0;
    new Float:timepassed = get_gametime() - g_GameTime;

    if(floatcmp(timepassed , buytime) == 1)
    {
        client_print(id, print_center,"%0.f seconds have passed. You can't buy anything now!",buytime)
        return PLUGIN_HANDLED
    
}
#endif

    if(!is_user_alive(id))
    {    
        ColorChat
(id, GREEN,"[VIP] ^1Доступно Только для Живых Игроков!")
        return PLUGIN_HANDLED
    
}
    if(giCounter < giAllowedRound)
    {
        ColorChat(id, GREEN,"[VIP] ^1Золотые оружия доступны со 2 раунда!")
        return PLUGIN_HANDLED
    
}
    else
    
{
        if(get_user_flags(id)& ACCESS_FLAG )
        {
            if(cs_get_user_money(id) < VIPCOST )
            {
        ColorChat(id, GREEN,"[VIP] ^1Увас нехватает Денег!")
        return PLUGIN_HANDLED
            
}
            else
                
{
                    cs_set_user_money(id , cs_get_user_money(id) - VIPCOST , 1);
                    givexm1014(id)
                }
        }
        else
            
{
                if(cs_get_user_money(id) < COST )
                {
                ColorChat(id, GREEN, "[VIP] ^1Увас нехватает Денег!")
                    return PLUGIN_HANDLED
                
}
                else
                    
{
                        cs_set_user_money(id , cs_get_user_money(id) - COST , 1);
                        givexm1014(id)
                    }
            }
    }    
    return PLUGIN_CONTINUE
}

public givexm1014(id)
{
    Player_DropWeapons (id, 1)
    g_Hasxm1014[id] = true
    ham_give_weapon
(id, "weapon_xm1014")
    
    engclient_cmd
(id, "weapon_xm1014")
}

public Fwd_ItemDeploy_Weap_Post(ent)
{
    new iPlayer = get_pdata_cbase(ent, m_pPlayer, XO_WEAPON);

    if (g_Hasxm1014[iPlayer])
    {
        set_pev(iPlayer, pev_viewmodel2, XM1014_V_MODEL);
        set_pev(iPlayer, pev_weaponmodel2, XM1014_P_MODEL);
    }

    return HAM_IGNORED;
}

public fw_Item_AttachToPlayer (ent, id)
{
    if ( pev (ent, pev_impulse)==XM1014)
        g_Hasxm1014[id] = true

    Fwd_ItemDeploy_Weap_Post
(ent )
    return HAM_IGNORED
}

public fw_SetModel ( ent, model[] )
{
    if ( pev_valid ( ent ) != 2 )
        return FMRES_IGNORED

    if 
( strlen ( model ) < 8 )
        return FMRES_IGNORED

    if 
( model[7] != 'w' || model[8] != '_' )
        return FMRES_IGNORED

    static sClassName
[32]
    pev ( ent, pev_classname, sClassName, charsmax ( sClassName ) )
    
    if 
( !equal ( sClassName, "weaponbox" ) )
        return FMRES_IGNORED

    new id 
= pev ( ent, pev_owner )

    if ( pev_valid ( id ) != 2 )
        return FMRES_IGNORED
    
    for 
(new i, iItem; i < MAX_ITEM_TYPES; i++)
    {
        iItem = get_pdata_cbase ( ent, m_rgpPlayerItems_CWeaponBox + i, XO_WEAPON )
        
        if 
( pev_valid ( iItem ) == 2 && pev(iItem, pev_impulse)==XM1014)
        {
            g_Hasxm1014[id] = false
            engfunc 
( EngFunc_SetModel, ent, XM1014_W_MODEL )
            return FMRES_SUPERCEDE
        
}
    }
    return FMRES_IGNORED
}


public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
    if(!g_is_connected[attacker])
        return HAM_IGNORED;

    if (!(damage_bits & DMG_BULLET))
        return HAM_IGNORED;

    if (pev_valid(victim) != 2)
        return HAM_IGNORED;

    if(get_user_weapon(attacker) != CSW_XM1014)
        return HAM_IGNORED;

    if(g_Hasxm1014[attacker])
        SetHamParamFloat(4, damage * DAMAGE);

    return HAM_IGNORED;
}

stock Player_DropWeapons(const iPlayer, const iSlot)
{
    new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, XO_CBASEPLAYER);

    while (pev_valid(iItem) == 2)
    {
        pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName));
        engclient_cmd(iPlayer, "drop", szWeaponName);

        iItem = get_pdata_cbase(iItem, m_pNext, XO_WEAPON);
    }
}

stock ham_give_weapon(id,weapon[])
{
    if(!equal(weapon,"weapon_",7)) return 0;

    new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
    if(!pev_valid(wEnt)) return 0;

    set_pev(wEnt,pev_spawnflags,SF_NORESPAWN);
    dllfunc(DLLFunc_Spawn,wEnt);
    
    if
(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
    {
        if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
        return 0;
    }

    ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id);

    ExecuteHamB(Ham_GiveAmmo, id, 128, "KBPOWER_BUCKSHOT", 128);

    set_pev(wEnt, pev_impulse, XM1014)

    return 1;
}
 


3) М4А1 в руках
Вы должны зарегистрироваться, чтобы видеть ссылки.
4) М4А1 на земле (W)
Вы должны зарегистрироваться, чтобы видеть ссылки.

Скрипт для М4А1
Код: Выделить всё
#define DAMAGE 1.5
const    COST = 15000                        
const    VIPCOST 
= 0                        
const giAllowedRound 
= 2                    
#define BUYCMD                            
#define ACCESS_FLAG ADMIN_LEVEL_B

new M4A1_V_MODEL[] = "models/biohazard/gold_weap/v_m4a1.mdl" // view weapon model
new M4A1_P_MODEL[] = "models/biohazard/gold_weap/p_m4a1.mdl"    // player weapon model
new M4A1_W_MODEL[] = "models/biohazard/gold_weap/w_m4a1.mdl"    // world weapon model


#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <colorchat>

new bool:g_HasM4a1[33] = false
new bool
:g_bHasGA[33] = false
new g_is_connected
[33]
new bool: g_BotsRegistered
new giCounter

#if defined BUYTIME
new Float:g_GameTime
#endif

#define is_valid_player(%1) (1 <= %1 <= 32)
#define M4 4444

// offsets
const XO_WEAPON = 4
const XO_CBASEPLAYER 
= 5
const MAX_ITEM_TYPES 
= 6
const m_pPlayer 
= 41
const m_pNext 
= 42
const m_iId 
= 43
const m_rgpPlayerItems_CWeaponBox 
= 34
const m_rgpPlayerItems_CBasePlayer 
= 367

#define PLUGIN_NAME "Gold M4A1"        
#define PLUGIN_VERSION "1.0.0"                  
#define PLUGIN_AUTHOR "L1ga"             

public plugin_precache()
{
    precache_model(M4A1_V_MODEL);
    precache_model(M4A1_P_MODEL);
    precache_model(M4A1_W_MODEL);
}

public plugin_init()
{

    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    
    
// mapcheck
    new mapname[4]
    get_mapname(mapname, 3)
    if(equali(mapname, "de_") || equali(mapname, "cs_"))
    {
#if defined BUYCMD
        register_clcmd( "buy_m4a1", "buyM4a1")
#endif    
        register_event( "TextMsg", "Event_NewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" )
        register_event ( "HLTV", "ev_RoundStart", "a", "1=0", "2=0" )
        register_event("DeathMsg", "Death", "a")

        register_forward(FM_SetModel, "fw_SetModel")

        RegisterHam(Ham_Item_Deploy, "weapon_m4a1" , "Fwd_ItemDeploy_Weap_Post", .Post = 1 )
        RegisterHam(Ham_Item_AttachToPlayer, "weapon_m4a1", "fw_Item_AttachToPlayer" )
        RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
    }
    else
        pause
("a")
}
public client_connect(id)
{
    g_HasM4a1[id] = false
    g_bHasGA
[id] = false
    g_is_connected
[id] = true
}

public client_disconnect(id)
{
    g_HasM4a1[id] = false
    g_bHasGA
[id] = false
    g_is_connected
[id] = false
}

public Event_NewGame()
{
    new iPlayers[32], iNum
    get_players 
( iPlayers, iNum )

    for ( --iNum; iNum >= 0; --iNum )
    {
        g_HasM4a1[iPlayers[iNum]] = false
        g_bHasGA
[iPlayers[iNum]] = false
    
}
    giCounter = 0
}

public ev_RoundStart ()
{
    new iPlayers[32], iNum
    get_players 
( iPlayers, iNum )

    for ( --iNum; iNum >= 0; --iNum )
        g_bHasGA[iPlayers[iNum]] = false
#if defined BUYTIME
    g_GameTime = get_gametime()
#endif
    giCounter++
}

// register CZ bots with ham

public client_authorized(id)
{
    if(!g_BotsRegistered && is_user_bot(id))
    {
        set_task(0.1, "register_bots", id);
    }
}

public register_bots(id)
{
    if(!g_BotsRegistered && g_is_connected[id])
    {
        RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage");
        g_BotsRegistered = true;
    }
}

public Death()
{
    g_HasM4a1[read_data(2)] = false
    g_bHasGA
[read_data(2)] = false
}

public buyM4a1(id)
{
// check if the player is in the buyzone
#if defined INBUYZONE
    if(!cs_get_user_buyzone(id))
    {
        ColorChat(id, GREEN,"[VIP] ^1¬ы вне зоны закупки!")
        return PLUGIN_HANDLED
    
}
#endif
// check buying time
#if defined BUYTIME
    new Float:buytime = get_cvar_float("mp_buytime") * 60.0;
    new Float:timepassed = get_gametime() - g_GameTime;

    if(floatcmp(timepassed , buytime) == 1)
    {
        client_print(id, print_center,"%0.f seconds have passed. You can't buy anything now!",buytime)
        return PLUGIN_HANDLED
    
}
#endif

    if(!is_user_alive(id))
    {    
        ColorChat
(id, GREEN,"[VIP] ^1ƒоступно “олько дл¤ ∆ивых »гроков!")
        return PLUGIN_HANDLED
    
}
    if(giCounter < giAllowedRound)
    {
        ColorChat(id, GREEN,"[VIP] ^1«олотые оружи¤ доступны со 2 раунда!")
        return PLUGIN_HANDLED
    
}
    else
    
{
        if(get_user_flags(id)& ACCESS_FLAG )
        {
            if(cs_get_user_money(id) < VIPCOST )
            {
                ColorChat(id, GREEN, "[VIP] ^1”вас нехватает ƒенег!")
                return PLUGIN_HANDLED
            
}
            else
                
{
                    cs_set_user_money(id , cs_get_user_money(id) - VIPCOST , 1);
                    givem4a1(id)
                }
        }
        else
            
{
                if(cs_get_user_money(id) < COST )
                {
                ColorChat(id, GREEN, "[VIP] ^1”вас нехватает ƒенег!")
                    return PLUGIN_HANDLED
                
}
                else
                    
{
                        cs_set_user_money(id , cs_get_user_money(id) - COST , 1);
                        givem4a1(id)
                    }
            }
    }    
    return PLUGIN_CONTINUE
}

public givem4a1(id)
{
    Player_DropWeapons (id, 1)
    g_HasM4a1[id] = true
    ham_give_weapon
(id, "weapon_m4a1")
    
    engclient_cmd
(id, "weapon_m4a1")
}

public Fwd_ItemDeploy_Weap_Post(ent)
{
    new iPlayer = get_pdata_cbase(ent, m_pPlayer, XO_WEAPON);

    if (g_HasM4a1[iPlayer])
    {
        set_pev(iPlayer, pev_viewmodel2, M4A1_V_MODEL)
        set_pev(iPlayer, pev_weaponmodel2, M4A1_P_MODEL)
    }

    return HAM_IGNORED;
}

public fw_Item_AttachToPlayer (ent, id)
{
    if ( pev (ent, pev_impulse)==M4)
        g_HasM4a1[id] = true

    Fwd_ItemDeploy_Weap_Post
(ent )
    return HAM_IGNORED
}

public fw_SetModel ( ent, model[] )
{
    if ( pev_valid ( ent ) != 2 )
        return FMRES_IGNORED

    if 
( strlen ( model ) < 8 )
        return FMRES_IGNORED

    if 
( model[7] != 'w' || model[8] != '_' )
        return FMRES_IGNORED

    static sClassName
[32]
    pev ( ent, pev_classname, sClassName, charsmax ( sClassName ) )
    
    if 
( !equal ( sClassName, "weaponbox" ) )
        return FMRES_IGNORED

    new id 
= pev ( ent, pev_owner )

    if ( pev_valid ( id ) != 2 )
        return FMRES_IGNORED
    
    for 
(new i, iItem; i < MAX_ITEM_TYPES; i++)
    {
        iItem = get_pdata_cbase ( ent, m_rgpPlayerItems_CWeaponBox + i, XO_WEAPON )
        
        if 
( pev_valid ( iItem ) == 2 && pev(iItem, pev_impulse)==M4)
        {
            g_HasM4a1[id] = false
            engfunc 
( EngFunc_SetModel, ent, M4A1_W_MODEL )
            return FMRES_SUPERCEDE
        
}
    }
    return FMRES_IGNORED
}


public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
    if(!g_is_connected[attacker])
        return HAM_IGNORED;

    if (!(damage_bits & DMG_BULLET))
        return HAM_IGNORED;

    if (pev_valid(victim) != 2)
        return HAM_IGNORED;

    if(get_user_weapon(attacker) != CSW_M4A1)
        return HAM_IGNORED;

    if(g_HasM4a1[attacker])
        SetHamParamFloat(4, damage * DAMAGE);

    return HAM_IGNORED;
}

stock Player_DropWeapons(const iPlayer, const iSlot)
{
    new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, XO_CBASEPLAYER);

    while (pev_valid(iItem) == 2)
    {
        pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName));
        engclient_cmd(iPlayer, "drop", szWeaponName);

        iItem = get_pdata_cbase(iItem, m_pNext, XO_WEAPON);
    }
}

stock ham_give_weapon(id,weapon[])
{
    if(!equal(weapon,"weapon_",7)) return 0;

    new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
    if(!pev_valid(wEnt)) return 0;

    set_pev(wEnt,pev_spawnflags,SF_NORESPAWN);
    dllfunc(DLLFunc_Spawn,wEnt);
    
    if
(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
    {
        if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
        return 0;
    }

    ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id);

    ExecuteHamB(Ham_GiveAmmo, id, 300, "556nato", 300);

    set_pev(wEnt, pev_impulse, M4)

    return 1;
}


Скрипт для SG552
Код: Выделить всё
#define DAMAGE 1.5
const    COST = 15000                        
const    VIPCOST 
= 0                        
const giAllowedRound 
= 2                    
#define BUYCMD                            
#define ACCESS_FLAG ADMIN_LEVEL_B

new SG552_V_MODEL[] = "models/biohazard/gold_weap/v_sg552.mdl" // view weapon model
new SG552_P_MODEL[] = "models/biohazard/gold_weap/p_sg552.mdl"    // player weapon model
new SG552_W_MODEL[] = "models/biohazard/gold_weap/w_sg552.mdl"    // world weapon model


#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <colorchat>

new bool:g_HasSG552[33] = false
new bool
:g_bHasGA[33] = false
new g_is_connected
[33]
new bool: g_BotsRegistered
new giCounter

#if defined BUYTIME
new Float:g_GameTime
#endif

#define is_valid_player(%1) (1 <= %1 <= 32)
#define SG552 4444

// offsets
const XO_WEAPON = 4
const XO_CBASEPLAYER 
= 5
const MAX_ITEM_TYPES 
= 6
const m_pPlayer 
= 41
const m_pNext 
= 42
const m_iId 
= 43
const m_rgpPlayerItems_CWeaponBox 
= 34
const m_rgpPlayerItems_CBasePlayer 
= 367

#define PLUGIN_NAME "Gold SG552"        
#define PLUGIN_VERSION "1.0.0"                  
#define PLUGIN_AUTHOR "L1ga"             

public plugin_precache()
{
    precache_model(SG552_V_MODEL);
    precache_model(SG552_P_MODEL);
    precache_model(SG552_W_MODEL);
}

public plugin_init()
{

    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    
    
// mapcheck
    new mapname[4]
    get_mapname(mapname, 3)
    if(equali(mapname, "de_") || equali(mapname, "cs_"))
    {
#if defined BUYCMD
        register_clcmd( "buy_sg552", "buySG552")
#endif    
        register_event( "TextMsg", "Event_NewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" )
        register_event ( "HLTV", "ev_RoundStart", "a", "1=0", "2=0" )
        register_event("DeathMsg", "Death", "a")

        register_forward(FM_SetModel, "fw_SetModel")

        RegisterHam(Ham_Item_Deploy, "weapon_sg552" , "Fwd_ItemDeploy_Weap_Post", .Post = 1 )
        RegisterHam(Ham_Item_AttachToPlayer, "weapon_sg552", "fw_Item_AttachToPlayer" )
        RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
    }
    else
        pause
("a")
}
public client_connect(id)
{
    g_HasSG552[id] = false
    g_bHasGA
[id] = false
    g_is_connected
[id] = true
}

public client_disconnect(id)
{
    g_HasSG552[id] = false
    g_bHasGA
[id] = false
    g_is_connected
[id] = false
}

public Event_NewGame()
{
    new iPlayers[32], iNum
    get_players 
( iPlayers, iNum )

    for ( --iNum; iNum >= 0; --iNum )
    {
        g_HasSG552[iPlayers[iNum]] = false
        g_bHasGA
[iPlayers[iNum]] = false
    
}
    giCounter = 0
}

public ev_RoundStart ()
{
    new iPlayers[32], iNum
    get_players 
( iPlayers, iNum )

    for ( --iNum; iNum >= 0; --iNum )
        g_bHasGA[iPlayers[iNum]] = false
#if defined BUYTIME
    g_GameTime = get_gametime()
#endif
    giCounter++
}

// register CZ bots with ham

public client_authorized(id)
{
    if(!g_BotsRegistered && is_user_bot(id))
    {
        set_task(0.1, "register_bots", id);
    }
}

public register_bots(id)
{
    if(!g_BotsRegistered && g_is_connected[id])
    {
        RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage");
        g_BotsRegistered = true;
    }
}

public Death()
{
    g_HasSG552[read_data(2)] = false
    g_bHasGA
[read_data(2)] = false
}

public buySG552(id)
{
// check if the player is in the buyzone
#if defined INBUYZONE
    if(!cs_get_user_buyzone(id))
    {
        ColorChat(id, GREEN,"[VIP] ^1Вы вне зоны закупки!")
        return PLUGIN_HANDLED
    
}
#endif
// check buying time
#if defined BUYTIME
    new Float:buytime = get_cvar_float("mp_buytime") * 60.0;
    new Float:timepassed = get_gametime() - g_GameTime;

    if(floatcmp(timepassed , buytime) == 1)
    {
        client_print(id, print_center,"%0.f seconds have passed. You can't buy anything now!",buytime)
        return PLUGIN_HANDLED
    
}
#endif

    if(!is_user_alive(id))
    {    
        ColorChat
(id, GREEN,"[VIP] ^1Доступно Только для Живых Игроков!")
        return PLUGIN_HANDLED
    
}
    if(giCounter < giAllowedRound)
    {
        ColorChat(id, GREEN,"[VIP] ^1Золотые оружия доступны со 2 раунда!")
        return PLUGIN_HANDLED
    
}
    else
    
{
        if(get_user_flags(id)& ACCESS_FLAG )
        {
            if(cs_get_user_money(id) < VIPCOST )
            {
                ColorChat(id, GREEN, "[VIP] ^1Увас нехватает Денег!")
                return PLUGIN_HANDLED
            
}
            else
                
{
                    cs_set_user_money(id , cs_get_user_money(id) - VIPCOST , 1);
                    giveSG552(id)
                }
        }
        else
            
{
                if(cs_get_user_money(id) < COST )
                {
                ColorChat(id, GREEN, "[VIP] ^1Увас нехватает Денег!")
                    return PLUGIN_HANDLED
                
}
                else
                    
{
                        cs_set_user_money(id , cs_get_user_money(id) - COST , 1);
                        giveSG552(id)
                    }
            }
    }    
    return PLUGIN_CONTINUE
}

public giveSG552(id)
{
    Player_DropWeapons (id, 1)
    g_HasSG552[id] = true
    ham_give_weapon
(id, "weapon_sg552")
    
    engclient_cmd
(id, "weapon_sg552")
}

public Fwd_ItemDeploy_Weap_Post(ent)
{
    new iPlayer = get_pdata_cbase(ent, m_pPlayer, XO_WEAPON);

    if (g_HasSG552[iPlayer])
    {
        set_pev(iPlayer, pev_viewmodel2, SG552_V_MODEL)
        set_pev(iPlayer, pev_weaponmodel2, SG552_P_MODEL)
    }

    return HAM_IGNORED;
}

public fw_Item_AttachToPlayer (ent, id)
{
    if ( pev (ent, pev_impulse)==SG552)
        g_HasSG552[id] = true

    Fwd_ItemDeploy_Weap_Post
(ent )
    return HAM_IGNORED
}

public fw_SetModel ( ent, model[] )
{
    if ( pev_valid ( ent ) != 2 )
        return FMRES_IGNORED

    if 
( strlen ( model ) < 8 )
        return FMRES_IGNORED

    if 
( model[7] != 'w' || model[8] != '_' )
        return FMRES_IGNORED

    static sClassName
[32]
    pev ( ent, pev_classname, sClassName, charsmax ( sClassName ) )
    
    if 
( !equal ( sClassName, "weaponbox" ) )
        return FMRES_IGNORED

    new id 
= pev ( ent, pev_owner )

    if ( pev_valid ( id ) != 2 )
        return FMRES_IGNORED
    
    for 
(new i, iItem; i < MAX_ITEM_TYPES; i++)
    {
        iItem = get_pdata_cbase ( ent, m_rgpPlayerItems_CWeaponBox + i, XO_WEAPON )
        
        if 
( pev_valid ( iItem ) == 2 && pev(iItem, pev_impulse)==SG552)
        {
            g_HasSG552[id] = false
            engfunc 
( EngFunc_SetModel, ent, SG552_W_MODEL )
            return FMRES_SUPERCEDE
        
}
    }
    return FMRES_IGNORED
}


public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
    if(!g_is_connected[attacker])
        return HAM_IGNORED;

    if (!(damage_bits & DMG_BULLET))
        return HAM_IGNORED;

    if (pev_valid(victim) != 2)
        return HAM_IGNORED;

    if(get_user_weapon(attacker) != CSW_SG552)
        return HAM_IGNORED;

    if(g_HasSG552[attacker])
        SetHamParamFloat(4, damage * DAMAGE);

    return HAM_IGNORED;
}

stock Player_DropWeapons(const iPlayer, const iSlot)
{
    new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, XO_CBASEPLAYER);

    while (pev_valid(iItem) == 2)
    {
        pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName));
        engclient_cmd(iPlayer, "drop", szWeaponName);

        iItem = get_pdata_cbase(iItem, m_pNext, XO_WEAPON);
    }
}

stock ham_give_weapon(id,weapon[])
{
    if(!equal(weapon,"weapon_",7)) return 0;

    new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
    if(!pev_valid(wEnt)) return 0;

    set_pev(wEnt,pev_spawnflags,SF_NORESPAWN);
    dllfunc(DLLFunc_Spawn,wEnt);
    
    if
(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
    {
        if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
        return 0;
    }

    ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id);

    ExecuteHamB(Ham_GiveAmmo, id, 300, "556nato", 300);

    set_pev(wEnt, pev_impulse, SG552)

    return 1;
}
Аватара пользователя
L1ga
 
Сообщения: 13
Зарегистрирован: 23 мар 2020, 22:58
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Опыт программирования: Меньше месяца
Языки программирования: html

Re: Проблема с отображением "W" модели

Сообщение [N][E][M][E][C] » 27 ноя 2022, 15:02

И как всегда сменили 2 строки!!))) И вдруг сменился автор
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: Проблема с отображением "W" модели

Сообщение БиЗоН » 27 ноя 2022, 15:08

Используй Вы должны зарегистрироваться, чтобы видеть ссылки. >= 1.9.0 для такого метода.

Добавлено спустя 1 минуту 3 секунды:
Еще лучше использовать возможности reapi.
Вы должны зарегистрироваться, чтобы видеть ссылки.

Добавлено спустя 48 секунд:
[N][E][M][E][C] писал(а):И как всегда сменили 2 строки!!))) И вдруг сменился автор

Первым делом после копипаста кода меняют авторство. Ничего нового.
Вечно занятой. Вечно в павне.
Аватара пользователя
БиЗоН
 
Сообщения: 165
Зарегистрирован: 24 мар 2014, 21:05
Благодарил (а): 10 раз.
Поблагодарили: 49 раз.
Опыт программирования: Больше трех лет

Re: Проблема с отображением "W" модели

Сообщение [N][E][M][E][C] » 27 ноя 2022, 15:10

БиЗоН, я бы игнорил вопросы, после таких действий
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: Проблема с отображением "W" модели

Сообщение БиЗоН » 27 ноя 2022, 15:24

[N][E][M][E][C], я просто поддерживаю актив на форуме, помогая людям.
А этические и моральные вопросы это уже не ко мне. К тому же такое поведение типично для новичков.
Вечно занятой. Вечно в павне.
Аватара пользователя
БиЗоН
 
Сообщения: 165
Зарегистрирован: 24 мар 2014, 21:05
Благодарил (а): 10 раз.
Поблагодарили: 49 раз.
Опыт программирования: Больше трех лет

Re: Проблема с отображением "W" модели

Сообщение L1ga » 27 ноя 2022, 15:56

[N][E][M][E][C] писал(а):И как всегда сменили 2 строки!!))) И вдруг сменился автор

Я так сделал, потому что подумал что при регистрации плагина оно выдает такую ошибку, так как все плагины были зарегистрирован одинаково, а не для того чтобы забрать все лавры себе. Автор и название было изменено чисто с точки зрения проведения опыта
Аватара пользователя
L1ga
 
Сообщения: 13
Зарегистрирован: 23 мар 2020, 22:58
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Опыт программирования: Меньше месяца
Языки программирования: html

Re: Проблема с отображением "W" модели

Сообщение БиЗоН » 27 ноя 2022, 16:13

L1ga, на работу плагина это никак не влияет. Просто информация о плагине для той же команды 'amxx plugins'.
Вечно занятой. Вечно в павне.
Аватара пользователя
БиЗоН
 
Сообщения: 165
Зарегистрирован: 24 мар 2014, 21:05
Благодарил (а): 10 раз.
Поблагодарили: 49 раз.
Опыт программирования: Больше трех лет

Re: Проблема с отображением "W" модели

Сообщение L1ga » 27 ноя 2022, 16:32

БиЗоН писал(а):L1ga, на работу плагина это никак не влияет. Просто информация о плагине для той же команды 'amxx plugins'.

Понял, спасибо за помощь, попробую сейчас amxmod обновить

Добавлено спустя 10 минут 59 секунд:
БиЗоН писал(а):Используй Вы должны зарегистрироваться, чтобы видеть ссылки. >= 1.9.0 для такого метода.

Добавлено спустя 1 минуту 3 секунды:
Еще лучше использовать возможности reapi.
Вы должны зарегистрироваться, чтобы видеть ссылки.

Добавлено спустя 48 секунд:
[N][E][M][E][C] писал(а):И как всегда сменили 2 строки!!))) И вдруг сменился автор

Первым делом после копипаста кода меняют авторство. Ничего нового.


Я обновил amxmod но проблема не ушла. Но я ее решил другим способом, проблема была в самом скрипте. В любом случае спасибо что отозвался
Аватара пользователя
L1ga
 
Сообщения: 13
Зарегистрирован: 23 мар 2020, 22:58
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Опыт программирования: Меньше месяца
Языки программирования: html

Re: Проблема с отображением "W" модели

Сообщение [N][E][M][E][C] » 27 ноя 2022, 17:27

так в чем то проблема была???
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: Проблема с отображением "W" модели  [Решено]

Сообщение L1ga » 27 ноя 2022, 17:37

[N][E][M][E][C] писал(а):так в чем то проблема была???

Вот в этой переменной "#define M4 4444"
Было присвоено одинаковое значение. Казалось бы банально, но вот не обратил внимание вообще
Аватара пользователя
L1ga
 
Сообщения: 13
Зарегистрирован: 23 мар 2020, 22:58
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Опыт программирования: Меньше месяца
Языки программирования: html

След.

Вернуться в Вопросы по AMXX и его плагинам

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6