other akimbo fire effects, toggle-able prediction demo

This commit is contained in:
Chris Dawalt 2021-09-27 05:01:42 -04:00
parent 3c1aad1559
commit d8b003e23c
16 changed files with 157 additions and 40 deletions

View file

@ -41,11 +41,33 @@ ClientGame_ConsoleCommand(void)
TS_playerChangeFiremode(); TS_playerChangeFiremode();
//pSeatLocal->m_bFireModeFreshPress = TRUE; //pSeatLocal->m_bFireModeFreshPress = TRUE;
break; break;
case "useitems":
TS_playerUseItems(); #if USE_ITEMS_PREDICTION_TEST == 0
//case "useitems"
// TS_playerUseItems();
// break;
case "+useitems":
pl = (player)pSeat->m_ePlayer;
if( !(pl.gflags & GF_UNUSED3)){
TS_playerUseItems();
}
pl.gflags |= GF_UNUSED3;
break;
case "-useitems":
pl = (player)pSeat->m_ePlayer;
pl.gflags &= ~GF_UNUSED3;
break;
#else
case "+useitems":
//TS_playerUseItems();
//pSeatLocal->m_bUseItemsFreshPress = TRUE; //pSeatLocal->m_bUseItemsFreshPress = TRUE;
pSeatLocal->m_bUseItems = TRUE; pSeatLocal->m_bUseItems = TRUE;
break; break;
case "-useitems":
pSeatLocal->m_bUseItems = FALSE;
break;
#endif
case "usepowerup": case "usepowerup":
TS_playerUsePowerup(); TS_playerUsePowerup();
break; break;

View file

@ -78,7 +78,10 @@ ClientGame_Init(float apilevel, string enginename, float engineversion)
registercommand("getangle"); registercommand("getangle");
registercommand("firemode"); registercommand("firemode");
registercommand("useitems");
registercommand("+useitems");
registercommand("-useitems");
registercommand("usepowerup"); registercommand("usepowerup");
registercommand("+alt1"); registercommand("+alt1");
registercommand("-alt1"); registercommand("-alt1");

View file

@ -1,5 +1,14 @@
#pragma target fte
#pragma progs_dat "../../csprogs.dat" // SHARED CONFIG SETTING - set this consistently between client/server progs!
// If 0, nothing special.
// If 1, Makes some changes to enable prediction for useitems.
// Spams the turn-on click noise though.
// Doubt this is worth further support as I don't know how to support this for
// more than one extra feature, the INPUT_BUTTON# list is exhausted after this.
#define USE_ITEMS_PREDICTION_TEST 0
///////////////////////////////////////////////////////////////////////////////
//---WARNINGS DISABLED--- //---WARNINGS DISABLED---
#pragma warning disable Q302 /*uninitialised locals*/ #pragma warning disable Q302 /*uninitialised locals*/
@ -8,8 +17,10 @@
// No idea how to make warnings disabled only per file, in there // No idea how to make warnings disabled only per file, in there
// would affect all files included in the compile after anyway // would affect all files included in the compile after anyway
#pragma warning disable F314 /*implicit cast*/ #pragma warning disable F314 /*implicit cast*/
///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#pragma target fte
#pragma progs_dat "../../csprogs.dat"
#define CSQC #define CSQC
#define CLIENT #define CLIENT

View file

@ -1,12 +1,23 @@
#pragma target fte
#pragma progs_dat "../../progs.dat" // SHARED CONFIG SETTING - set this consistently between client/server progs!
// If 0, nothing special.
// If 1, Makes some changes to enable prediction for useitems.
// Spams the turn-on click noise though.
// Doubt this is worth further support as I don't know how to support this for
// more than one extra feature, the INPUT_BUTTON# list is exhausted after this.
#define USE_ITEMS_PREDICTION_TEST 0
///////////////////////////////////////////////////////////////////////////////
//---WARNINGS DISABLED--- //---WARNINGS DISABLED---
// As of now, the only warnings left are for the server/gamerules.qc unused globals // As of now, the only warnings left are for the server/gamerules.qc unused globals
// like sRule_TeamNames. // like sRule_TeamNames.
#pragma warning disable Q302 /*uninitialised locals*/ #pragma warning disable Q302 /*uninitialised locals*/
///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#pragma target fte
#pragma progs_dat "../../progs.dat"
#define QWSSQC #define QWSSQC
#define SERVER #define SERVER

View file

@ -16,7 +16,8 @@ enum TS_Team{
// Uhh. Please work? // Uhh. Please work?
#define INPUT_BUTTON9 0x00000100 // nope. it does not.
//#define INPUT_BUTTON9 0x00000100
#ifdef SERVER #ifdef SERVER

View file

@ -623,8 +623,8 @@ TS_playerUseItems(void){
return; return;
} }
//_TS_playerUseItems();
#if USE_ITEMS_PREDICTION_TEST == 0
#ifdef CLIENT #ifdef CLIENT
sendevent("TS_playerUseItems", ""); sendevent("TS_playerUseItems", "");
@ -634,6 +634,13 @@ TS_playerUseItems(void){
// SHOULD NOT HAPPEN, should call the CSEv_ version instead // SHOULD NOT HAPPEN, should call the CSEv_ version instead
#endif #endif
#else
// always do this then
_TS_playerUseItems();
#endif
} }

View file

@ -335,14 +335,22 @@ Game_Input(void)
#if USE_ITEMS_PREDICTION_TEST == 1
if(input_buttons & INPUT_BUTTON9){ //INPUT_BUTTON2 reserved for jump...
//INPUT_BUTTON6
//INPUT_BUTTON7 (used for sneaking currently)
if(input_buttons & INPUT_BUTTON6){
//printfline("IM here what"); //printfline("IM here what");
//TS_playerUseItems();
if( !(pl.gflags & GF_UNUSED3)){
TS_playerUseItems();
}
pl.gflags |= GF_UNUSED3;
}else{
pl.gflags &= ~GF_UNUSED3;
} }
#endif
@ -502,7 +510,6 @@ void ClientGame_Input_Frame(void){
// unless there is some other way that I'm missing. // unless there is some other way that I'm missing.
if (pSeatLocal->m_iInputSpeed == TRUE) { if (pSeatLocal->m_iInputSpeed == TRUE) {
//input_buttons |= INPUT_BUTTON9;
input_buttons |= INPUT_BUTTON7; input_buttons |= INPUT_BUTTON7;
//self.flags |= FL_SNEAK; //self.flags |= FL_SNEAK;
}else{ }else{
@ -510,10 +517,15 @@ void ClientGame_Input_Frame(void){
} }
//printfline("input_buttons: %d", (INPUT_BUTTON7 & input_buttons) ); //printfline("input_buttons: %d", (INPUT_BUTTON7 & input_buttons) );
#if USE_ITEMS_PREDICTION_TEST == 1
if(pSeatLocal->m_bUseItems){ if(pSeatLocal->m_bUseItems){
pSeatLocal->m_bUseItems = FALSE; //pSeatLocal->m_bUseItems = FALSE;
input_buttons |= INPUT_BUTTON9; input_buttons |= INPUT_BUTTON6;
} }
#endif
} }

View file

@ -1892,6 +1892,8 @@ player::preThinkShared(void){
//TAGGG - any use for input_angles here? Shared, predicted?
// TODO: make this view kickback properly predicted // TODO: make this view kickback properly predicted
#ifdef CLIENT #ifdef CLIENT
//printfline("So what is my view ang?? %.2f %.2f", view_angles[0], view_angles[1]); //printfline("So what is my view ang?? %.2f %.2f", view_angles[0], view_angles[1]);

View file

@ -11,15 +11,11 @@
weapon_t w_null = {}; weapon_t w_null = {};
// Populate each slot with a member of the enum early on in runtime instead. // Populate each slot with a member of the enum early on in runtime instead.
weapon_t g_weapons[WEAPON_ID::LAST_ID]; weapon_t g_weapons[WEAPON_ID::LAST_ID];
// Not needed here anymore?
//var int g_weapon_weights[g_weapons.lengdth];
void void
weaponconfig_data_init(weaponconfig_data_t* arg_this) weaponconfig_data_init(weaponconfig_data_t* arg_this)
@ -322,7 +318,12 @@ weapon_base_onAttack_multi(player pl, weapondata_basic_t* basePRef, weapondynami
{ {
weapondata_gun_t baseRef = *((weapondata_gun_t*)basePRef); weapondata_gun_t baseRef = *((weapondata_gun_t*)basePRef);
//TAGGG - shared random test
float randoAngFactor = randomInRange_f(0, 1); float randoAngFactor = randomInRange_f(0, 1);
//float randoAngFactor = 0.5;
//float finalAng = (40 + randoAngFactor*( (90-40)*2 ) ) *(M_PI/180); //float finalAng = (40 + randoAngFactor*( (90-40)*2 ) ) *(M_PI/180);
@ -332,7 +333,7 @@ weapon_base_onAttack_multi(player pl, weapondata_basic_t* basePRef, weapondynami
float kickbackToApply = pl.fAccuracyKickback; float kickbackToApply = pl.fAccuracyKickback;
if(baseAcc < 0.001){ if(baseAcc < 0.001){
//minimum enforced, per notes in wepon_official.txt // minimum enforced, per notes in weapons_official.txt
baseAcc = 0.001; baseAcc = 0.001;
} }
@ -387,15 +388,17 @@ weapon_base_onAttack_multi(player pl, weapondata_basic_t* basePRef, weapondynami
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//TAGGG - TODO! The last parameter of TraceAttack_FireBullets should use the Weapon ID, //TAGGG - TODO! Re-picking the angle to kickback per hit may make more sense than varrying the intensity
// like "WEAPON_ID::Glock18". Consider sending that as a parameter to be available here // of the exact same direction for both shots, just a thought
if(attackTypeUsed & BITS_AKIMBOCHOICE_LEFT){ if(attackTypeUsed & BITS_AKIMBOCHOICE_LEFT){
//left //left
#ifdef SERVER #ifdef SERVER
TraceAttack_FireBullets(shellCount, (pl.origin + pl.view_ofs), baseRef.fAttackDamage, [acc, acc], (int)pl.activeweapon); TraceAttack_FireBullets(shellCount, (pl.origin + pl.view_ofs), baseRef.fAttackDamage, [acc, acc], (int)pl.activeweapon);
#endif #endif
arg_thisWeapon.iClipLeft -= 1; arg_thisWeapon.iClipLeft -= 1;
//TAGGG - shared random test
toGo = [-sin(finalAng), cos(finalAng), 0] * baseRef.firestats.fViewKickback * randomInRange_f(miner, maxer); toGo = [-sin(finalAng), cos(finalAng), 0] * baseRef.firestats.fViewKickback * randomInRange_f(miner, maxer);
//toGo = [-sin(finalAng), cos(finalAng), 0] * baseRef.firestats.fViewKickback * 0.7;
pl.vViewAngleOffsetTarget += toGo; pl.vViewAngleOffsetTarget += toGo;
} }
if(attackTypeUsed & BITS_AKIMBOCHOICE_RIGHT){ if(attackTypeUsed & BITS_AKIMBOCHOICE_RIGHT){
@ -405,7 +408,9 @@ weapon_base_onAttack_multi(player pl, weapondata_basic_t* basePRef, weapondynami
TraceAttack_FireBullets(shellCount, (pl.origin + pl.view_ofs), baseRef.fAttackDamage, [acc, acc], (int)pl.activeweapon); TraceAttack_FireBullets(shellCount, (pl.origin + pl.view_ofs), baseRef.fAttackDamage, [acc, acc], (int)pl.activeweapon);
#endif #endif
arg_thisWeapon.iClipAkimboLeft -= 1; arg_thisWeapon.iClipAkimboLeft -= 1;
//TAGGG - shared random test
toGo = [-sin(finalAng), cos(finalAng), 0] * baseRef.firestats.fViewKickback * randomInRange_f(miner, maxer); toGo = [-sin(finalAng), cos(finalAng), 0] * baseRef.firestats.fViewKickback * randomInRange_f(miner, maxer);
//toGo = [-sin(finalAng), cos(finalAng), 0] * baseRef.firestats.fViewKickback * 0.7;
pl.vViewAngleOffsetTarget += toGo; pl.vViewAngleOffsetTarget += toGo;
} }
@ -940,7 +945,7 @@ weapon_akimbo_semiAttackChoice(
int finalAkimboChoice = BITS_AKIMBOCHOICE_NONE; int finalAkimboChoice = BITS_AKIMBOCHOICE_NONE;
weapondata_basic_t baseRef = *basePRef; weapondata_basic_t baseRef = *basePRef;
//printfline("PRE - EVERYBODY GET DOWN x - next:%d", pl.nextAkimboAttackPreference); //printfline("PRE - weapon_akimbo_semiAttackChoice x - next:%d", pl.nextAkimboAttackPreference);
/* /*
if(pl.akimboTest != 0){ if(pl.akimboTest != 0){
@ -948,6 +953,7 @@ weapon_akimbo_semiAttackChoice(
} }
*/ */
//if(pl.akimboTest == 0) //if(pl.akimboTest == 0)
if(attackTypeUsed & BITS_AKIMBOCHOICE_LEFT){ if(attackTypeUsed & BITS_AKIMBOCHOICE_LEFT){
// only allow it if this is a fresh button press // only allow it if this is a fresh button press
@ -1119,7 +1125,7 @@ weapon_akimbo_semiAttackChoice(
} }
//printfline("EVERYBODY GET DOWN %i - next:%d", finalAkimboChoice, pl.nextAkimboAttackPreference); //printfline("POST - weapon_akimbo_semiAttackChoice %i - next:%d", finalAkimboChoice, pl.nextAkimboAttackPreference);
return finalAkimboChoice; return finalAkimboChoice;
}// weapon_akimbo_semiAttackChoice }// weapon_akimbo_semiAttackChoice
@ -2345,6 +2351,10 @@ viewEv_weapon_EjectShell(void)
*/ */
} }
var int testCount1 = 0;
var int testCount2 = 0;
void void
viewEv_weapon_ShowMuzzleFlash(void) viewEv_weapon_ShowMuzzleFlash(void)
{ {
@ -2352,6 +2362,14 @@ viewEv_weapon_ShowMuzzleFlash(void)
if(pl.iMuzzleFlashType != MUZZLEFLASH_ID::NONE){ if(pl.iMuzzleFlashType != MUZZLEFLASH_ID::NONE){
muzzleflashdata_t* tempRef = ary_muzzleFlashData[pl.iMuzzleFlashType]; muzzleflashdata_t* tempRef = ary_muzzleFlashData[pl.iMuzzleFlashType];
TS_View_ShowMuzzleflash(tempRef->iSpritePrecacheID, pl.iMuzzleFlashAkimboChoice); TS_View_ShowMuzzleflash(tempRef->iSpritePrecacheID, pl.iMuzzleFlashAkimboChoice);
if(pl.iMuzzleFlashAkimboChoice==BITS_AKIMBOCHOICE_LEFT){
testCount1++;
}else if(pl.iMuzzleFlashAkimboChoice==BITS_AKIMBOCHOICE_RIGHT){
testCount2++;
}
printf("Hello? %i %i\n", testCount1, testCount2);
} }
} }

View file

@ -253,6 +253,12 @@ void weapon_akimbocolts_akimbo_attack(player pl, weapondynamic_t arg_thisWeapon,
weapon_base_setWholeAttackDelay(pl, (*ary_weaponData[pl.activeweapon]).fAttackDelay * 1); weapon_base_setWholeAttackDelay(pl, (*ary_weaponData[pl.activeweapon]).fAttackDelay * 1);
} }
if(!(arg_thisWeapon.iBitsUpgrade & BITS_WEAPONOPT_SILENCER) ){
weapon_ClientEffectsAkimbo(MUZZLEFLASH_ID::SMALL, SHELLEJECT_ID::GENERIC, finalAkimboChoice);
} else {
weapon_EjectShellAkimbo(SHELLEJECT_ID::GENERIC, finalAkimboChoice);
}
}// weapon_akimbocolts_akimbo_attack }// weapon_akimbocolts_akimbo_attack
@ -278,8 +284,6 @@ w_akimbocolts_reload(void)
weapondynamic_t arg_thisWeapon = pl.ary_myWeapons[pl.inventoryEquippedIndex]; weapondynamic_t arg_thisWeapon = pl.ary_myWeapons[pl.inventoryEquippedIndex];
weapon_gun_Reload(pl, (weapondata_gun_t*)ary_weaponData[WEAPON_ID::AKIMBOCOLTS], arg_thisWeapon); weapon_gun_Reload(pl, (weapondata_gun_t*)ary_weaponData[WEAPON_ID::AKIMBOCOLTS], arg_thisWeapon);
leftCount = 0;
rightCount = 0;
} }
float float

View file

@ -310,6 +310,12 @@ void weapon_beretta_akimbo_attack(player pl, weapondynamic_t arg_thisWeapon, int
weapon_base_setWholeAttackDelay(pl, (*ary_weaponData[pl.activeweapon]).fAttackDelay * 1); weapon_base_setWholeAttackDelay(pl, (*ary_weaponData[pl.activeweapon]).fAttackDelay * 1);
} }
if(!(arg_thisWeapon.iBitsUpgrade & BITS_WEAPONOPT_SILENCER) ){
weapon_ClientEffectsAkimbo(MUZZLEFLASH_ID::SMALL, SHELLEJECT_ID::_9MM, finalAkimboChoice);
} else {
weapon_EjectShellAkimbo(SHELLEJECT_ID::_9MM, finalAkimboChoice);
}
}// weapon_beretta_akimbo_attack }// weapon_beretta_akimbo_attack
@ -333,8 +339,6 @@ w_beretta_akimbo_reload(void)
weapondynamic_t arg_thisWeapon = pl.ary_myWeapons[pl.inventoryEquippedIndex]; weapondynamic_t arg_thisWeapon = pl.ary_myWeapons[pl.inventoryEquippedIndex];
weapon_gun_Reload(pl, (weapondata_gun_t*)ary_weaponData[WEAPON_ID::BERETTA_AKIMBO], arg_thisWeapon); weapon_gun_Reload(pl, (weapondata_gun_t*)ary_weaponData[WEAPON_ID::BERETTA_AKIMBO], arg_thisWeapon);
leftCount = 0;
rightCount = 0;
} }
float float

View file

@ -253,6 +253,12 @@ void weapon_fiveseven_akimbo_attack(player pl, weapondynamic_t arg_thisWeapon, i
weapon_base_setWholeAttackDelay(pl, (*ary_weaponData[pl.activeweapon]).fAttackDelay * 1); weapon_base_setWholeAttackDelay(pl, (*ary_weaponData[pl.activeweapon]).fAttackDelay * 1);
} }
if(!(arg_thisWeapon.iBitsUpgrade & BITS_WEAPONOPT_SILENCER) ){
weapon_ClientEffectsAkimbo(MUZZLEFLASH_ID::SMALL, SHELLEJECT_ID::_56, finalAkimboChoice);
} else {
weapon_EjectShellAkimbo(SHELLEJECT_ID::_56, finalAkimboChoice);
}
}// weapon_fiveseven_akimbo_attack }// weapon_fiveseven_akimbo_attack
@ -276,8 +282,6 @@ w_fiveseven_akimbo_reload(void)
weapondynamic_t arg_thisWeapon = pl.ary_myWeapons[pl.inventoryEquippedIndex]; weapondynamic_t arg_thisWeapon = pl.ary_myWeapons[pl.inventoryEquippedIndex];
weapon_gun_Reload(pl, (weapondata_gun_t*)ary_weaponData[WEAPON_ID::FIVESEVEN_AKIMBO], arg_thisWeapon); weapon_gun_Reload(pl, (weapondata_gun_t*)ary_weaponData[WEAPON_ID::FIVESEVEN_AKIMBO], arg_thisWeapon);
leftCount = 0;
rightCount = 0;
} }
float float

View file

@ -263,6 +263,12 @@ void weapon_miniuzi_akimbo_attack(player pl, weapondynamic_t arg_thisWeapon, int
weapon_base_setWholeAttackDelay(pl, (*ary_weaponData[pl.activeweapon]).fAttackDelay * 1); weapon_base_setWholeAttackDelay(pl, (*ary_weaponData[pl.activeweapon]).fAttackDelay * 1);
} }
if(!(arg_thisWeapon.iBitsUpgrade & BITS_WEAPONOPT_SILENCER) ){
weapon_ClientEffectsAkimbo(MUZZLEFLASH_ID::SMALL, SHELLEJECT_ID::_9MM, finalAkimboChoice);
} else {
weapon_EjectShellAkimbo(SHELLEJECT_ID::_9MM, finalAkimboChoice);
}
}// weapon_miniuzi_akimbo_attack }// weapon_miniuzi_akimbo_attack

View file

@ -222,6 +222,12 @@ void weapon_skorpion_akimbo_attack(player pl, weapondynamic_t arg_thisWeapon, in
weapon_base_setWholeAttackDelay(pl, (*ary_weaponData[pl.activeweapon]).fAttackDelay * 1); weapon_base_setWholeAttackDelay(pl, (*ary_weaponData[pl.activeweapon]).fAttackDelay * 1);
} }
if(!(arg_thisWeapon.iBitsUpgrade & BITS_WEAPONOPT_SILENCER) ){
weapon_ClientEffectsAkimbo(MUZZLEFLASH_ID::SMALL, SHELLEJECT_ID::GENERIC, finalAkimboChoice);
} else {
weapon_EjectShellAkimbo(SHELLEJECT_ID::GENERIC, finalAkimboChoice);
}
}// weapon_skorpion_akimbo_attack }// weapon_skorpion_akimbo_attack

View file

@ -50,7 +50,11 @@ weapondata_ironsight_t weapon_socommk23_akimbo =
weaponseq_socommk23_akimbo::idle, weaponseq_socommk23_akimbo::idle,
weaponseq_socommk23_akimbo::draw, weaponseq_socommk23_akimbo::draw,
31.0f / 40.0f, 31.0f / 40.0f,
0.19f, //fire delay 0.19f, //fire delay
//0.03f,
//0.15f,
15.0f, //dmg 15.0f, //dmg
TRUE, TRUE,
BITS_WEAPONOPT_SILENCER | BITS_WEAPONOPT_LASERSIGHT | BITS_WEAPONOPT_FLASHLIGHT | BITS_WEAPONOPT_AKIMBO, BITS_WEAPONOPT_SILENCER | BITS_WEAPONOPT_LASERSIGHT | BITS_WEAPONOPT_FLASHLIGHT | BITS_WEAPONOPT_AKIMBO,
@ -143,9 +147,10 @@ w_socommk23_akimbo_holster(void)
} }
/*
var int leftCount = 0; var int leftCount = 0;
var int rightCount = 0; var int rightCount = 0;
*/
// General attack method to be called by primary or secondary fire as needed. // General attack method to be called by primary or secondary fire as needed.
// The firemode used determines whether only pressing primary fire works (alternate b/w // The firemode used determines whether only pressing primary fire works (alternate b/w
@ -195,6 +200,7 @@ void weapon_socommk23_akimbo_attack(player pl, weapondynamic_t arg_thisWeapon, i
return; return;
} }
/*
// DEBUG!!! // DEBUG!!!
if((finalAkimboChoice & BITS_AKIMBOCHOICE_LEFT)){ if((finalAkimboChoice & BITS_AKIMBOCHOICE_LEFT)){
leftCount++; leftCount++;
@ -203,6 +209,7 @@ void weapon_socommk23_akimbo_attack(player pl, weapondynamic_t arg_thisWeapon, i
rightCount++; rightCount++;
} }
printfline("COUNTS! %i %i", leftCount, rightCount); printfline("COUNTS! %i %i", leftCount, rightCount);
*/
// Use me for things the recent firing round already did to avoid redundancy. // Use me for things the recent firing round already did to avoid redundancy.
// That is, if left-click was pressed a fraction of a second ago and then right-click // That is, if left-click was pressed a fraction of a second ago and then right-click
@ -319,7 +326,6 @@ void weapon_socommk23_akimbo_attack(player pl, weapondynamic_t arg_thisWeapon, i
weapon_EjectShellAkimbo(SHELLEJECT_ID::GENERIC, finalAkimboChoice); weapon_EjectShellAkimbo(SHELLEJECT_ID::GENERIC, finalAkimboChoice);
} }
}// weapon_socommk23_akimbo_attack }// weapon_socommk23_akimbo_attack
@ -344,8 +350,8 @@ w_socommk23_akimbo_reload(void)
weapondynamic_t arg_thisWeapon = pl.ary_myWeapons[pl.inventoryEquippedIndex]; weapondynamic_t arg_thisWeapon = pl.ary_myWeapons[pl.inventoryEquippedIndex];
weapon_ironsight_Reload(pl, (weapondata_ironsight_t*)ary_weaponData[WEAPON_ID::SOCOMMK23_AKIMBO], arg_thisWeapon); weapon_ironsight_Reload(pl, (weapondata_ironsight_t*)ary_weaponData[WEAPON_ID::SOCOMMK23_AKIMBO], arg_thisWeapon);
leftCount = 0; //leftCount = 0;
rightCount = 0; //rightCount = 0;
} }
float float

View file

@ -44,7 +44,7 @@ bind "f2" "vote no"
bind "m" "chooseteam" bind "m" "chooseteam"
bind "b" "buy" bind "b" "buy"
bind "f" "firemode" bind "f" "firemode"
bind "n" "useitems" bind "n" "+useitems"
// stunt-related (TODO) // stunt-related (TODO)
bind "MOUSE3" "+alt1" bind "MOUSE3" "+alt1"
// coldcock (some gun's melee) // coldcock (some gun's melee)