diff --git a/config/scripts.cfg b/config/scripts.cfg index 38156114..d156aff1 100644 --- a/config/scripts.cfg +++ b/config/scripts.cfg @@ -92,14 +92,6 @@ alias altaction [ (concatword altaction_ (curweapon)) ] -alias quicknadethrow [ - if (> (magcontent 6) 0) [ - if (!= (curweapon) 6) [grenades] - attack - ] - onrelease [ sleep 1 [ if (= (curweapon) 6) [weapon (prevweapon)] ] ] -] - loop i 8 [ alias (concatword altaction_ $i) quicknadethrow ] // Quick nade throw is default alias altaction_4 [ zoom 1; onrelease [ zoom 0 ] ] // Sniper alias altaction_6 [ attack ] // Grenade diff --git a/source/src/protos.h b/source/src/protos.h index c52c6411..d3f898d4 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -91,6 +91,8 @@ struct keym ~keym() { DELETEA(name); DELETEA(action); } }; +extern keym *keypressed; + extern bool bindkey(keym *km, const char *action); extern keym *findbinda(const char *action); extern bool bindc(int code, const char *action); @@ -608,6 +610,7 @@ extern void fixcamerarange(physent *cam = camera1); extern void updatecrouch(playerent *p, bool on); extern bool objcollide(physent *d, const vec &objpos, float objrad, float objheight); extern bool collide(physent *d, bool spawn = false, float drop = 0, float rise = 0); +extern void attack(bool on); // sound /* diff --git a/source/src/weapon.cpp b/source/src/weapon.cpp index dd1b2f93..4c2e2f18 100644 --- a/source/src/weapon.cpp +++ b/source/src/weapon.cpp @@ -42,9 +42,9 @@ void selectweapon(weapon *w) } } -void selectweaponi(int w) +void requestweapon(int w) { - if(player1->state == CS_ALIVE && w >= 0 && w < NUMGUNS) + if(keypressed && player1->state == CS_ALIVE && w >= 0 && w < NUMGUNS) { selectweapon(player1->weapons[w]); } @@ -52,7 +52,7 @@ void selectweaponi(int w) void shiftweapon(int s) { - if(player1->state == CS_ALIVE) + if(keypressed && player1->state == CS_ALIVE) { if(!player1->weaponsel->deselectable()) return; @@ -95,6 +95,28 @@ void shiftweapon(int s) else if(player1->isspectating()) updatefollowplayer(s); } +void quicknaderelease() +{ + if(player1->state == CS_ALIVE && player1->weaponsel->type == GUN_GRENADE) + { + attack(false); + selectweapon(player1->prevweaponsel); + } +} + +void quicknadethrow() +{ + if(keypressed && player1->state == CS_ALIVE) + { + if(player1->weapons[GUN_GRENADE]->mag > 0) + { + if(player1->weaponsel->type != GUN_GRENADE) selectweapon(player1->weapons[GUN_GRENADE]); + attack(true); + } + addreleaseaction("sleep 1 [ quicknaderelease ]"); + } +} + int currentprimary() { return player1->primweap->type; } int prevweapon() { return player1->prevweaponsel->type; } int curweapon() { return player1->weaponsel->type; } @@ -102,8 +124,10 @@ int curweapon() { return player1->weaponsel->type; } int magcontent(int w) { if(w >= 0 && w < NUMGUNS) return player1->weapons[w]->mag; else return -1;} int magreserve(int w) { if(w >= 0 && w < NUMGUNS) return player1->weapons[w]->ammo; else return -1;} -COMMANDN(weapon, selectweaponi, ARG_1INT); +COMMANDN(weapon, requestweapon, ARG_1INT); COMMAND(shiftweapon, ARG_1INT); +COMMAND(quicknadethrow, ARG_NONE); +COMMAND(quicknaderelease, ARG_NONE); COMMAND(currentprimary, ARG_IVAL); COMMAND(prevweapon, ARG_IVAL); COMMAND(curweapon, ARG_IVAL);