hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.04.19. 14:36



Jelenlévő felhasználók

Jelenleg 224 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 224 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 1 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: ReAPI - Weapon Use Pickup
HozzászólásElküldve: 2020.10.18. 16:41 
Offline
Fórum Moderátor
Avatar

Csatlakozott: 2012.07.02. 17:41
Hozzászólások: 1641
Megköszönt másnak: 121 alkalommal
Megköszönték neki: 247 alkalommal
ReAPI - Weapon Use Pickup
Leírás:
  • Az eldobott fegyvereket fel tudod venni a +use (E) gombbal (mint csgo-ban).
  • A pályákon alapból elhelyezett fegyvereknél nem működik.
Használat:
  • Nézz rá egy fegyverre és nyomd meg az E gombot.
Cvar / Beállítás:
  • wup_distance - Távolság a játékos és a fegyver között
Verzió:
  • v1.4
Követelmények:
  • Amx Mod X 1.9.0
  • Amx Mod X 1.10.0 dev
  • ReHLDS
  • ReAPI
Eredeti link:
Készítő:
  • PurposeLess
Videó:
https://youtu.be/yl4OVFysuyU
Plugin:
  1. #pragma semicolon 1
  2.  
  3. #include <amxmodx>
  4. #include <hamsandwich>
  5. #include <fakemeta>
  6. #include <reapi>
  7.  
  8. new const szWeaponNames[WeaponIdType:MAX_WEAPONS][] = {
  9.     "", "228 Compact", "", "SSG 08", "Hegrenade", "XM1014", "C4", "MAC-10", "AUG",
  10.     "Smoke Grenade", "Dual Berettas", "Five-SeveN", "UMP-45", "SG-550", "Galil",
  11.     "FAMAS", "USP", "Glock-18", "AWP", "MP5", "M249", "M3", "M4A1", "TMP", "G3SG1",
  12.     "Flashbang", "Desert Eagle", "SG 552", "AK-47", "Knife", "P90", ""
  13. };
  14.  
  15. new const gArmoury_Mapper[MAX_WEAPONS + 1] = { CSW_MP5NAVY, CSW_TMP, CSW_P90,
  16.     CSW_MAC10, CSW_AK47, CSW_SG552, CSW_M4A1, CSW_AUG, CSW_SCOUT, CSW_G3SG1, CSW_AWP,
  17.     CSW_M3, CSW_XM1014, CSW_M249, CSW_FLASHBANG, CSW_HEGRENADE, CSW_VEST, CSW_VESTHELM,
  18.     CSW_SMOKEGRENADE, CSW_SHIELDGUN, CSW_FAMAS, CSW_SG550, CSW_GALIL, CSW_UMP45,
  19.     CSW_GLOCK18, CSW_USP, CSW_ELITE, CSW_FIVESEVEN, CSW_P228, CSW_DEAGLE
  20. };
  21.  
  22. enum _:WeaponData {
  23.     Weapon_Entity,
  24.     WeaponIdType:Weapon_Id,
  25.     InventorySlotType:Weapon_Slot,
  26. };
  27.  
  28. new Float:g_flNextHudPickupTime[MAX_PLAYERS + 1],
  29.     Array:g_aGroundWeapons,
  30.     g_iHudSync_PickUp;
  31.  
  32. public plugin_init() {
  33.     register_plugin("Weapon Use Pickup", "1.4", "fl0wer & PurposeLess");
  34.  
  35.     RegisterHam(Ham_StopSneaking, "weaponbox", "@CWeaponBox_OnDestroy_Post", true);
  36.  
  37.     RegisterHookChain(RG_CWeaponBox_SetModel, "@CWeaponBox_SetModel_Post", true);
  38.     RegisterHookChain(RG_CBasePlayer_PreThink, "@CBasePlayer_PreThink_Post", true);
  39.  
  40.     g_iHudSync_PickUp = CreateHudSyncObj();
  41. }
  42.  
  43. public plugin_precache() {
  44.     g_aGroundWeapons = ArrayCreate(WeaponData);
  45.     RegisterHam(Ham_Spawn, "armoury_entity", "@CArmoury_Spawn_Post", true);
  46. }
  47.  
  48. @CWeaponBox_OnDestroy_Post(pEntity)
  49. {
  50.     new aGroundWeapons = ArrayFindValue(g_aGroundWeapons, pEntity);
  51.  
  52.     if(aGroundWeapons == -1) {
  53.         return;
  54.     }
  55.  
  56.     ArrayDeleteItem(g_aGroundWeapons, aGroundWeapons);
  57. }
  58.  
  59. @CWeaponBox_SetModel_Post(const pEntity, const szModelName[])
  60. {
  61.     for(new InventorySlotType:i = PRIMARY_WEAPON_SLOT, pItem; i <= C4_SLOT; i++) {
  62.         pItem = get_member(pEntity, m_WeaponBox_rgpPlayerItems, i);
  63.  
  64.         if(is_nullent(pItem)) {
  65.             continue;
  66.         }
  67.  
  68.         new weaponData[WeaponData];
  69.  
  70.         weaponData[Weapon_Entity] = pEntity;
  71.         weaponData[Weapon_Id] = get_member(pItem, m_iId);
  72.         weaponData[Weapon_Slot] = i;
  73.  
  74.         ArrayPushArray(g_aGroundWeapons, weaponData);
  75.         break;
  76.     }
  77. }
  78.  
  79. @CBasePlayer_PreThink_Post(const pPlayer) {
  80.     if(!is_user_alive(pPlayer)) {
  81.         return;
  82.     }
  83.  
  84.     if(~get_entvar(pPlayer, var_button) & IN_USE && get_entvar(pPlayer, var_oldbuttons) & IN_USE) {
  85.         static pWeapon;
  86.         pWeapon = FindWeaponByView(pPlayer);
  87.  
  88.         if(pWeapon == NULLENT) {
  89.             return;
  90.         }
  91.  
  92.         static weaponData[WeaponData];
  93.         ArrayGetArray(g_aGroundWeapons, pWeapon, weaponData);
  94.  
  95.         if(weaponData[Weapon_Slot] == PRIMARY_WEAPON_SLOT || weaponData[Weapon_Slot] == PISTOL_SLOT) {
  96.             static pEntity;
  97.             pEntity = weaponData[Weapon_Entity];
  98.  
  99.             rg_drop_items_by_slot(pPlayer, weaponData[Weapon_Slot]);
  100.             set_entvar(pEntity, var_flags, get_entvar(pEntity, var_flags) | FL_ONGROUND);
  101.             ExecuteHamB(Ham_Touch, pEntity, pPlayer);
  102.         }
  103.         return;
  104.     }
  105.  
  106.     static Float:time;
  107.     time = get_gametime();
  108.  
  109.     if(g_flNextHudPickupTime[pPlayer] > time) {
  110.         return;
  111.     }
  112.  
  113.     g_flNextHudPickupTime[pPlayer] = time + 0.2;
  114.  
  115.     static pWeapon;
  116.     pWeapon = FindWeaponByView(pPlayer);
  117.  
  118.     if(pWeapon == NULLENT) {
  119.         return;
  120.     }
  121.  
  122.     static weaponData[WeaponData];
  123.     ArrayGetArray(g_aGroundWeapons, pWeapon, weaponData);
  124.  
  125.     static WeaponIdType:weaponId, pItem;
  126.     weaponId = weaponData[Weapon_Id];
  127.     pItem = get_member(pPlayer, m_rgpPlayerItems, weaponData[Weapon_Slot]);
  128.  
  129.     set_hudmessage(255, 255, 255, -1.0, 0.55, 0, 6.0, 0.21, 0.01, 0.01);
  130.  
  131.     if(is_nullent(pItem)) {
  132.         ShowSyncHudMsg(pPlayer, g_iHudSync_PickUp, "%s", szWeaponNames[weaponId]);
  133.     }
  134.     else {
  135.         ShowSyncHudMsg(pPlayer, g_iHudSync_PickUp, "[E] FelvĂ©tel %s", szWeaponNames[weaponId]);
  136.     }
  137. }
  138.  
  139. FindWeaponByView(const pPlayer)
  140. {
  141.     static Float:vecSrc[3];
  142.     static Float:vecEnd[3];
  143.     static Float:vecViewAngle[3];
  144.     static Float:vecPunchAngle[3];
  145.     static Float:vecViewForward[3];
  146.  
  147.     ExecuteHam(Ham_Player_GetGunPosition, pPlayer, vecSrc);
  148.     get_entvar(pPlayer, var_v_angle, vecViewAngle);
  149.     get_entvar(pPlayer, var_punchangle, vecPunchAngle);
  150.  
  151.     for(new i = 0; i < 3; i++) {
  152.         vecViewAngle[i] += vecPunchAngle[i];
  153.     }
  154.  
  155.     angle_vector(vecViewAngle, ANGLEVECTOR_FORWARD, vecViewForward);
  156.  
  157.     for(new i = 0; i < 3; i++) {
  158.         vecEnd[i] = vecSrc[i] + vecViewForward[i] * 128.0;
  159.     }
  160.  
  161.     static pWeapon;
  162.     static weaponData[WeaponData];
  163.     static weaponsNum;
  164.     weaponsNum = ArraySize(g_aGroundWeapons);
  165.  
  166.     for(new i = 0; i < weaponsNum; i++) {
  167.         ArrayGetArray(g_aGroundWeapons, i, weaponData);
  168.  
  169.         pWeapon = weaponData[Weapon_Entity];
  170.  
  171.         if(is_nullent(pWeapon) || get_entvar(pWeapon, var_effects) & EF_NODRAW) {
  172.             continue;
  173.         }
  174.  
  175.         engfunc(EngFunc_TraceModel, vecSrc, vecEnd, HULL_POINT, pWeapon, 0);
  176.  
  177.         if(is_nullent(get_tr2(0, TR_pHit))) {
  178.             continue;
  179.         }
  180.  
  181.         return i;
  182.     }
  183.  
  184.     return NULLENT;
  185. }
  186.  
  187. @CArmoury_Spawn_Post(const pEntity) {
  188.     new pItemId = get_member(pEntity, m_Armoury_iItem);
  189.  
  190.     if(pItemId == any:ARMOURY_KEVLAR || pItemId == any:ARMOR_VESTHELM) {
  191.         return;
  192.     }
  193.  
  194.     new weaponId = gArmoury_Mapper[pItemId];
  195.     new weaponData[WeaponData];
  196.  
  197.     weaponData[Weapon_Entity] = pEntity;
  198.     weaponData[Weapon_Id] = WeaponIdType:weaponId;
  199.  
  200.     if((1<<weaponId) & ((1<<CSW_HEGRENADE) | (1<<CSW_FLASHBANG) | (1<<CSW_SMOKEGRENADE))) {
  201.         weaponData[Weapon_Slot] = GRENADE_SLOT;
  202.     }
  203.     else {
  204.         weaponData[Weapon_Slot] = pItemId < 24 ? PRIMARY_WEAPON_SLOT : PISTOL_SLOT;
  205.     }
  206.  
  207.     ArrayPushArray(g_aGroundWeapons, weaponData);
  208. }


► Spoiler mutatása

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 1 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole