Skip to content

Commit b834f18

Browse files
authored
GivePlayerAWeapon class (#282)
1 parent 19f50ec commit b834f18

12 files changed

+105
-344
lines changed

src/gtasa/effects/cheats/player/GetParachuteEffect.cpp

Lines changed: 0 additions & 43 deletions
This file was deleted.

src/gtasa/effects/cheats/weapon/GiveAK47Effect.cpp

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/gtasa/effects/cheats/weapon/GiveChainsawEffect.cpp

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/gtasa/effects/cheats/weapon/GiveGrenadesEffect.cpp

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/gtasa/effects/cheats/weapon/GiveMinigunEffect.cpp

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/gtasa/effects/cheats/weapon/GivePistolEffect.cpp

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
#include "effects/OneTimeEffect.h"
2+
#include "util/GameUtil.h"
3+
4+
#include <CPickups.h>
5+
#include <CStreaming.h>
6+
#include <CWeaponInfo.h>
7+
#include <extensions/ScriptCommands.h>
8+
9+
using namespace plugin;
10+
namespace
11+
{
12+
enum eWeaponSlot : unsigned int
13+
{
14+
UNARMED,
15+
MELEE,
16+
HANDGUN,
17+
SHOTGUN,
18+
SMG,
19+
RIFLE,
20+
SNIPER,
21+
HEAVY,
22+
THROWN,
23+
SPECIAL,
24+
GIFT,
25+
PARACHUTE,
26+
DETONATOR,
27+
};
28+
} // namespace
29+
30+
class GivePlayerAWeapon : public OneTimeEffect
31+
{
32+
private:
33+
eWeaponType weaponType = WEAPON_BRASSKNUCKLE;
34+
35+
public:
36+
GivePlayerAWeapon (eWeaponType weapon) : weaponType (weapon) {}
37+
38+
bool
39+
CanActivate () override
40+
{
41+
CPlayerPed *player = FindPlayerPed ();
42+
if (!player) return false;
43+
44+
if (player->m_aWeapons[player->GetWeaponSlot (weaponType)].m_eWeaponType
45+
== WEAPON_PARACHUTE)
46+
return false;
47+
48+
return GameUtil::IsPlayerSafe ();
49+
}
50+
51+
void
52+
OnStart (EffectInstance *inst) override
53+
{
54+
CPlayerPed *player = FindPlayerPed ();
55+
if (!player) return;
56+
57+
auto m = CPickups::ModelForWeapon (weaponType);
58+
CStreaming::RequestModel (m, 2);
59+
CStreaming::LoadAllRequestedModels (false);
60+
61+
const auto *info = CWeaponInfo::GetWeaponInfo (weaponType, 1);
62+
63+
if (!info) return;
64+
65+
unsigned int ammo = 0;
66+
67+
switch (info->m_nSlot)
68+
{
69+
case eWeaponSlot::HANDGUN: ammo = 50; break;
70+
case eWeaponSlot::SHOTGUN: ammo = 35; break;
71+
case eWeaponSlot::SMG: ammo = 100; break;
72+
case eWeaponSlot::RIFLE: ammo = 50; break;
73+
case eWeaponSlot::SNIPER: ammo = 20; break;
74+
case eWeaponSlot::HEAVY: ammo = 10; break;
75+
case eWeaponSlot::THROWN: ammo = 10; break;
76+
case eWeaponSlot::SPECIAL: ammo = 500; break;
77+
default: break;
78+
}
79+
80+
if (weaponType == WEAPON_MINIGUN)
81+
{
82+
ammo = 250;
83+
}
84+
85+
Command<eScriptCommands::COMMAND_GIVE_WEAPON_TO_CHAR> (player,
86+
weaponType,
87+
ammo);
88+
89+
CStreaming::SetModelIsDeletable (m);
90+
}
91+
};
92+
93+
// clang-format off
94+
DEFINE_EFFECT (GivePlayerAWeapon, "effect_give_ak47", GROUP_WEAPONS, WEAPON_AK47);
95+
DEFINE_EFFECT (GivePlayerAWeapon, "effect_give_uzi", GROUP_WEAPONS, WEAPON_MICRO_UZI);
96+
DEFINE_EFFECT (GivePlayerAWeapon, "effect_give_sniper", GROUP_WEAPONS, WEAPON_SNIPERRIFLE);
97+
DEFINE_EFFECT (GivePlayerAWeapon, "effect_give_shotgun", GROUP_WEAPONS, WEAPON_SPAS12);
98+
DEFINE_EFFECT (GivePlayerAWeapon, "effect_give_rocket_launcher", GROUP_WEAPONS, WEAPON_RLAUNCHER_HS);
99+
DEFINE_EFFECT (GivePlayerAWeapon, "effect_give_pistol", GROUP_WEAPONS, WEAPON_PISTOL_SILENCED);
100+
DEFINE_EFFECT (GivePlayerAWeapon, "effect_give_minigun", GROUP_WEAPONS, WEAPON_MINIGUN);
101+
DEFINE_EFFECT (GivePlayerAWeapon, "effect_weapon_set_4", GROUP_WEAPONS, WEAPON_MINIGUN);
102+
DEFINE_EFFECT (GivePlayerAWeapon, "effect_give_grenades", GROUP_WEAPONS, WEAPON_GRENADE);
103+
DEFINE_EFFECT (GivePlayerAWeapon, "effect_give_chainsaw", GROUP_WEAPONS, WEAPON_CHAINSAW);
104+
DEFINE_EFFECT (GivePlayerAWeapon, "effect_get_parachute", GROUP_WEAPONS, WEAPON_PARACHUTE);
105+
// clang-format on

src/gtasa/effects/cheats/weapon/GiveRocketLauncherEffect.cpp

Lines changed: 0 additions & 31 deletions
This file was deleted.

src/gtasa/effects/cheats/weapon/GiveShotgunEffect.cpp

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)