Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Dawanie tarczy


Najlepsza odpowiedź Rivit, 27.06.2020 10:02

stock get_pdata_char(ent, charbased_offset, intbase_linuxdiff = 5)
{
    return ( get_pdata_int(ent, charbased_offset / INT_BYTES, intbase_linuxdiff)>>>((charbased_offset % INT_BYTES) * BYTE_BITS) ) & 0xFF
}

stock bool:get_pdata_bool(ent, charbased_offset, intbase_linuxdiff = 5)
{
    return !!( get_pdata_int(ent, charbased_offset / INT_BYTES, intbase_linuxdiff) & (0xFF<<((charbased_offset % INT_BYTES) * BYTE_BITS)) )
}

stock set_pdata_char(ent, charbased_offset, value, intbase_linuxdiff = 5)
{
    value &= 0xFF
    new int_offset_value = get_pdata_int(ent, charbased_offset / INT_BYTES, intbase_linuxdiff)
    new bit_decal = (charbased_offset % INT_BYTES) * BYTE_BITS
    int_offset_value &= ~(0xFF<<bit_decal) // clear byte
    int_offset_value |= value<<bit_decal
    set_pdata_int(ent, charbased_offset / INT_BYTES, int_offset_value, intbase_linuxdiff)
    return 1
}

stock set_pdata_bool(ent, charbased_offset, bool:value, intbase_linuxdiff = 5)
{
    set_pdata_char(ent, charbased_offset, _:value, intbase_linuxdiff)
}

Zoba jeszcze to:

GiveUserShield( id )
{
    set_pdata_bool(id, m_bHasShield, true)
    set_pdata_int(id, m_fHasPrimary, 1)
    new iActiveItem = get_pdata_cbase(id, m_pActiveItem)
    if( iActiveItem > 0 )
    {
        new ammoIndex = get_pdata_int(iActiveItem, m_iPrimaryAmmoType, XO_CBASEPLAYERWEAPON)
        if( ammoIndex > 0 && get_pdata_int(id, m_rgAmmo_CBasePlayer[ ammoIndex ] > 0 ) )
        {
            ExecuteHamB(Ham_Item_Holster, iActiveItem, 0)
        }
        if( !ExecuteHamB(Ham_Item_Deploy, iActiveItem) )
        {
            ExecuteHamB(Ham_Weapon_RetireWeapon, iActiveItem)
        }
    }
    set_pev(id, pev_gamestate, 0)
}

RemoveUserShield( id )
{
    if ( get_pdata_bool(id, m_bHasShield) )
    {
        set_pdata_bool(id, m_bHasShield, false)
        set_pdata_int(id, m_fHasPrimary, 0)
        set_pdata_bool(id, m_bUsesShield, false)
        set_pev(id, pev_gamestate, 1)
        new iHideHUD = get_pdata_int(id, m_iHideHUD)
        if( iHideHUD & HUD_HIDE_CROSS )
        {
            set_pdata_int(id, m_iHideHUD, iHideHUD & ~HUD_HIDE_CROSS)
        }
    }
} 
Przejdź do postu


  • Zamknięty Temat jest zamknięty
5 odpowiedzi w tym temacie

#1 csMaster

    Wszechwiedzący

  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 26.06.2020 20:56

W jaki sposób dać graczowi tarczę w tym kodzie?

strip_user_weapons(id);
give_item(id, "weapon_deagle");
cs_set_user_bpammo(id, CSW_DEAGLE, 35);

Próbowałem give_item(id, "weapon_shield") ale to nie działa.

Zadziałało jedynie:

set_pdata_int(id, 559, get_pdata_int(id, 559)|(1<<24));

Gracz dostał tarcze, ale w żaden sposób nie chroniła go ona przed obrażeniami.


  • +
  • -
  • 0

#2 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 26.06.2020 22:24

Spróbuj przez pev_weapons

Czy tarcza to nie było (1<<2) ?

 

 

Zobacz jeszcze to:

stock bool:cs_set_user_shield(const user, const bool:retire = true, const bool:gameCheck = true, const bool:pickupSound = true)
{
    const m_bHasPrimary      = 464;         // player
    const m_bIsVIP           = 837;         // player
    const m_bOwnsShield      = 2043;        // player
    const m_pActiveItem      = 1492 / 4;    // player
    const m_rgpPlayerItems   = 1468 / 4;    // player
    const m_rgAmmo           = 1504 / 4     // player
    const m_iPrimaryAmmoType = 208  / 4;    // weapon
    const m_iId              = 168  / 4;    // weapon
    
    // Sanity check.
    if (gameCheck)
    {
        const slotSecondary = 2;
    
        // Not a player or has already a primary weapon
        if( !is_user_alive(user) || get_pdata_bool(user, m_bHasPrimary))
        {
            return false;
        }
        
        // Don't give shield if player has already elite weapon.
        new item = get_pdata_cbase(user, m_rgpPlayerItems + slotSecondary);
        if (item && get_pdata_int(item, m_iId, 4) == CSW_ELITE)
        {
            return false;
        }
        
        // Weapon can't be holstered.
        new activeItem = get_pdata_cbase(user, m_pActiveItem);
        if (activeItem && !ExecuteHamB(Ham_Item_CanHolster, activeItem))
        {
            return false;
        }
    
        // Don't give shield to VIP.
        if (get_pdata_bool(user, m_bIsVIP))
        {
            return false;
        }
    }
    
    set_pdata_bool(user, m_bOwnsShield, true);
    set_pdata_bool(user, m_bHasPrimary, true);

    new activeItem = get_pdata_cbase(user, m_pActiveItem);
    if (activeItem)
    {
        if (retire)
        {
            if (get_pdata_cbase(user, m_rgAmmo + get_pdata_int(activeItem, m_iPrimaryAmmoType, 4)) > 0)
            {
                ExecuteHamB(Ham_Item_Holster, activeItem, 0);       // No ammo, we holster.
            }
            
            if (!ExecuteHamB(Ham_Item_Deploy, activeItem))
            {
                ExecuteHamB(Ham_Weapon_RetireWeapon, activeItem);   // We can't deploy, so we retire weapon.
            }
        }
    }
    
    if (pickupSound)
    {
        emit_sound(user, CHAN_AUTO, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
    }
    
    set_pev(user, pev_gamestate, 0);
    
    return true;
} 

  • +
  • -
  • 0

#3 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 27.06.2020 08:53

Problem w tym że na amxx 1.8.2 nie ma set_pdata_bool(), a widzę że to chyba dość ważny element tego stocka.


  • +
  • -
  • 0

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 27.06.2020 10:02   Najlepsza odpowiedź

stock get_pdata_char(ent, charbased_offset, intbase_linuxdiff = 5)
{
    return ( get_pdata_int(ent, charbased_offset / INT_BYTES, intbase_linuxdiff)>>>((charbased_offset % INT_BYTES) * BYTE_BITS) ) & 0xFF
}

stock bool:get_pdata_bool(ent, charbased_offset, intbase_linuxdiff = 5)
{
    return !!( get_pdata_int(ent, charbased_offset / INT_BYTES, intbase_linuxdiff) & (0xFF<<((charbased_offset % INT_BYTES) * BYTE_BITS)) )
}

stock set_pdata_char(ent, charbased_offset, value, intbase_linuxdiff = 5)
{
    value &= 0xFF
    new int_offset_value = get_pdata_int(ent, charbased_offset / INT_BYTES, intbase_linuxdiff)
    new bit_decal = (charbased_offset % INT_BYTES) * BYTE_BITS
    int_offset_value &= ~(0xFF<<bit_decal) // clear byte
    int_offset_value |= value<<bit_decal
    set_pdata_int(ent, charbased_offset / INT_BYTES, int_offset_value, intbase_linuxdiff)
    return 1
}

stock set_pdata_bool(ent, charbased_offset, bool:value, intbase_linuxdiff = 5)
{
    set_pdata_char(ent, charbased_offset, _:value, intbase_linuxdiff)
}

Zoba jeszcze to:

GiveUserShield( id )
{
    set_pdata_bool(id, m_bHasShield, true)
    set_pdata_int(id, m_fHasPrimary, 1)
    new iActiveItem = get_pdata_cbase(id, m_pActiveItem)
    if( iActiveItem > 0 )
    {
        new ammoIndex = get_pdata_int(iActiveItem, m_iPrimaryAmmoType, XO_CBASEPLAYERWEAPON)
        if( ammoIndex > 0 && get_pdata_int(id, m_rgAmmo_CBasePlayer[ ammoIndex ] > 0 ) )
        {
            ExecuteHamB(Ham_Item_Holster, iActiveItem, 0)
        }
        if( !ExecuteHamB(Ham_Item_Deploy, iActiveItem) )
        {
            ExecuteHamB(Ham_Weapon_RetireWeapon, iActiveItem)
        }
    }
    set_pev(id, pev_gamestate, 0)
}

RemoveUserShield( id )
{
    if ( get_pdata_bool(id, m_bHasShield) )
    {
        set_pdata_bool(id, m_bHasShield, false)
        set_pdata_int(id, m_fHasPrimary, 0)
        set_pdata_bool(id, m_bUsesShield, false)
        set_pev(id, pev_gamestate, 1)
        new iHideHUD = get_pdata_int(id, m_iHideHUD)
        if( iHideHUD & HUD_HIDE_CROSS )
        {
            set_pdata_int(id, m_iHideHUD, iHideHUD & ~HUD_HIDE_CROSS)
        }
    }
} 

  • +
  • -
  • 1

#5 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 27.06.2020 10:19

pev_weapons nie działa, ale zadziałało GiveUserShield().


  • +
  • -
  • 0

#6 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 29.06.2020 07:27

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych