-#ifndef WEAPONS_ALL_H
-#define WEAPONS_ALL_H
+#pragma once
-#include "../command/all.qh"
-#include "../stats.qh"
+#include <common/command/_mod.qh>
+#include <common/stats.qh>
#include "config.qh"
-// weapon sets
-typedef vector WepSet;
+#include "weapon.qh"
+
#ifdef SVQC
void WriteWepSet(float dest, WepSet w);
#endif
WepSet ReadWepSet();
#endif
-#include "weapon.qh"
-
-#ifndef MENUQC
+#ifdef GAMEQC
#include "calculations.qh"
+#include "projectiles.qh"
#include <common/models/all.qh>
#endif
-#include "../util.qh"
-
-#ifdef SVQC
-#include <server/bot/aim.qh>
-#endif
+#include <common/util.qh>
REGISTRY(Weapons, 72) // Increase as needed. Can be up to 72.
#define Weapons_from(i) _Weapons_from(i, WEP_Null)
REGISTER_REGISTRY(Weapons)
-STATIC_INIT(WeaponPickup) { FOREACH(Weapons, true, LAMBDA(it.m_pickup = NEW(WeaponPickup, it))); }
+STATIC_INIT(WeaponPickup) { FOREACH(Weapons, true, it.m_pickup = NEW(WeaponPickup, it)); }
+
+#ifdef SVQC
+#include <server/bot/api.qh>
+#endif
.WepSet m_wepset;
#define WEPSET(id) (WEP_##id.m_wepset)
if(wep_config_file >= 0)
{
Dump_Weapon_Settings();
- LOG_INFO(sprintf("Dumping weapons... File located in ^2data/data/%s^7.\n", filename));
+ LOG_INFOF("Dumping weapons... File located in ^2data/data/%s^7.", filename);
fclose(wep_config_file);
wep_config_file = -1;
wep_config_alsoprint = -1;
}
else
{
- LOG_INFO(sprintf("^1Error: ^7Could not open file '%s'!\n", filename));
+ LOG_INFOF("^1Error: ^7Could not open file '%s'!", filename);
}
#else
- LOG_INFO(_("Weapons dump command only works with sv_cmd.\n"));
+ LOG_INFO(_("Weapons dump command only works with sv_cmd."));
#endif
return;
}
default:
case CMD_REQUEST_USAGE:
{
- LOG_INFO(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " dumpweapons [filename]"));
- LOG_INFO(" Where 'filename' is the file to write (default is weapons_dump.cfg),\n");
- LOG_INFO(" if supplied with '-' output to console as well as default,\n");
- LOG_INFO(" if left blank, it will only write to default.\n");
+ LOG_INFO("Usage:^3 ", GetProgramCommandPrefix(), " dumpweapons [filename]");
+ LOG_INFO(" Where 'filename' is the file to write (default is weapons_dump.cfg),");
+ LOG_INFO(" if supplied with '-' output to console as well as default,");
+ LOG_INFO(" if left blank, it will only write to default.");
return;
}
}
#ifdef SVQC
entity W_PROP_reloader;
-float autocvar_w_prop_interval = 0;
+float autocvar_w_prop_interval = 5;
.void(Weapon this, int) wr_net;
void W_PROP_reload(int chan, entity to)
{
if (f) f(it, chan);
});
}
-void W_PROP_think()
+void W_PROP_think(entity this)
{
W_PROP_reload(MSG_ALL, NULL);
}
STATIC_INIT_LATE(W_PROP_reloader)
{
- entity e = W_PROP_reloader = new(W_PROP_reloader);
- make_pure(e);
- WITH(entity, self, e, (e.think = W_PROP_think)());
+ entity e = W_PROP_reloader = new_pure(W_PROP_reloader);
+ setthink(e, W_PROP_think);
+ W_PROP_think(e);
}
#endif
Weapon Weapons_fromstr(string s)
{
FOREACH(Weapons, it != WEP_Null && it.netname == s, return it);
- return NULL;
+ return WEP_Null;
}
X(weaponstartoverride, float)
X(weaponstart, float)
X(weaponthrowable, float)
+#ifdef SVQC
X(reload_ammo, float)
.float reloading_ammo = reload_ammo;
X(reload_time, float)
.float reloading_time = reload_time;
+#endif
#undef X
STATIC_INIT(register_weapons_done)
{
- FOREACH(Weapons, true, LAMBDA(
+ string inaccessible = "";
+ FOREACH(Weapons, true, {
WepSet set = it.m_wepset = _WepSet_FromWeapon(it.m_id = i);
WEPSET_ALL |= set;
if ((it.spawnflags) & WEP_FLAG_SUPERWEAPON) WEPSET_SUPERWEAPONS |= set;
- it.weapons = set;
if (it == WEP_Null) continue;
int imp = WEP_IMPULSE_BEGIN + it.m_id - 1;
if (imp <= WEP_IMPULSE_END)
localcmd(sprintf("alias weapon_%s \"impulse %d\"\n", it.netname, imp));
else
- LOG_TRACEF("Impulse limit exceeded, weapon will not be directly accessible: %s\n", it.netname);
- ));
+ inaccessible = strcat(inaccessible, "\n", it.netname);
+ });
+ if (inaccessible) LOG_TRACEF("Impulse limit exceeded, weapon(s) will not be directly accessible: %s", inaccessible);
#ifdef CSQC
- FOREACH(Weapons, true, LAMBDA(it.wr_init(it)));
+ FOREACH(Weapons, true, it.wr_init(it));
#endif
weaponorder_byid = "";
for (int i = Weapons_MAX - 1; i >= 1; --i)
weaponorder_byid = strzone(substring(weaponorder_byid, 1, -1));
}
-#ifndef MENUQC
+#ifdef GAMEQC
.entity weaponchild;
.entity exteriorweaponentity;
-vector weaponentity_glowmod(Weapon wep, int c)
+vector weaponentity_glowmod(Weapon wep, entity actor, int c, entity wepent)
{
vector g;
- if (!(g = wep.wr_glow(wep))) g = colormapPaletteColor(c & 0x0F, true) * 2;
+ if (!(g = wep.wr_glow(wep, actor, wepent))) g = colormapPaletteColor(c & 0x0F, true) * 2;
return g;
}
+.int m_gunalign;
+
//.int weapon; // current weapon
.string weaponname; // name of .weapon
.WFRAME wframe;
-vector shotorg_adjust_values(vector vecs, bool y_is_right, bool visual, int algn);
-void CL_WeaponEntity_SetModel(entity this, string name);
+#ifdef SVQC
+ #define G_SHOOTFROMFIXEDORIGIN autocvar_g_shootfromfixedorigin
+#elif defined(CSQC)
+ string autocvar_cl_shootfromfixedorigin;
+ #define G_SHOOTFROMFIXEDORIGIN autocvar_cl_shootfromfixedorigin
#endif
+vector shotorg_adjust_values(vector vecs, bool y_is_right, bool visual, int algn);
+void CL_WeaponEntity_SetModel(entity this, string name, bool _anim);
+
+#ifdef SVQC
+void wframe_send(entity actor, entity weaponentity, vector a, bool restartanim);
+#endif
#endif