Veteran Member
Join Date: Aug 2015
Location: Dreams, zz
|
07-28-2016
, 20:36
Re: A better Burst-fire
|
#10
|
Quote:
Originally Posted by Natsheh
PHP Code:
Plugin generated by AMXX-Studio */
#include <amxmodx> #include <Hamsandwich> #include <fakemeta>
#define PLUGIN "XXXXXXXX" #define VERSION "1.0" #define AUTHOR "Natsheh"
#define WEAPON_LINUX 4
const m_iWeaponOwner = 41
#define SetMode(%1,%2) ((%1 |= (1 << ( %2 & 31)))) #define unSetMode(%1,%2) ((%1 &= ~(1 << ( %2 & 31)))) #define CheckMode(%1,%2) ((%1 & (1 << ( %2 & 31))))
new Mode
new const mode_weapons[][] = { "weapon_glock18", "weapon_famas" }
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) for(new i = 0; i < sizeof mode_weapons; i++) { RegisterHam(Ham_Item_Deploy, mode_weapons[i], "fw_wpn_deployed", false) RegisterHam(Ham_Weapon_PrimaryAttack, mode_weapons[i], "fw_player_firsmode", false) RegisterHam(Ham_Weapon_SecondaryAttack, mode_weapons[i], "fw_player_secmode", false) } }
public fw_wpn_deployed( const iWpnid ) { if(!pev_valid(wpnid)) return HAM_IGNORED; new owner = get_pdata_cbase(wpnid, m_iWeaponOwner, WEAPON_LINUX) if(!owner) // no owner detected... return HAM_IGNORED; unSetMode(id,owner) }
public fw_player_secmode(const wpnid) { if(!pev_valid(wpnid)) return HAM_IGNORED; new owner = get_pdata_cbase(wpnid, m_iWeaponOwner, WEAPON_LINUX) if(!owner) // no owner detected... return HAM_IGNORED; if(!(CheckMode(Mode,owner))) { SetMode(Mode,owner) ExecuteHamB(Ham_Weapon_SecondaryAttack, wpnid) } ExecuteHamB(Ham_Weapon_PrimaryAttack, wpnid) return HAM_SUPERCEDE; }
public fw_player_firsmode(const wpnid) { if(!pev_valid(wpnid)) return HAM_IGNORED; new owner = get_pdata_cbase(wpnid, m_iWeaponOwner, WEAPON_LINUX) if(!owner) // no owner detected... return HAM_IGNORED; if((CheckMode(Mode,owner))) { unSetMode(Mode,owner) ExecuteHamB(Ham_Weapon_SecondaryAttack, wpnid) } ExecuteHamB(Ham_Weapon_PrimaryAttack, wpnid) return HAM_SUPERCEDE; }
this should work i guess...
|
Does not compile, few mistakes. I fixed them however it crashed my server soon as I deployed the famas weapon. I attached the my compiling version, if you want to fix it.
PHP Code:
/** AMX Mod X Script * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or ( at * your option ) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * *********************************************************** */
#include <amxmodx> #include <Hamsandwich> #include <fakemeta>
#define PLUGIN "burst_fire_mod" #define VERSION "1.0" #define AUTHOR "Natsheh"
#define WEAPON_LINUX 4
const m_iWeaponOwner = 41;
#define SetMode(%1,%2) ( ( %1 |= ( 1 << ( %2 & 31 ) ) ) ) #define unSetMode(%1,%2) ( ( %1 &= ~( 1 << ( %2 & 31 ) ) ) ) #define CheckMode(%1,%2) ( ( %1 & ( 1 << ( %2 & 31 ) ) ) )
new Mode;
new const mode_weapons[][] = { "weapon_glock18", "weapon_famas" };
public plugin_init() { register_plugin( PLUGIN, VERSION, AUTHOR ); for( new i = 0; i < sizeof mode_weapons; i++ ) { RegisterHam( Ham_Item_Deploy, mode_weapons[ i ], "fw_wpn_deployed", false ); RegisterHam( Ham_Weapon_PrimaryAttack, mode_weapons[ i ], "fw_player_firsmode", false ); RegisterHam( Ham_Weapon_SecondaryAttack, mode_weapons[ i ], "fw_player_secmode", false ); } }
public fw_wpn_deployed( const wpnid ) { if( !pev_valid( wpnid ) ) { return HAM_IGNORED; } new owner = get_pdata_cbase( wpnid, m_iWeaponOwner, WEAPON_LINUX ); if( !owner ) // no owner detected... { return HAM_IGNORED; } unSetMode( Mode, owner ); return HAM_IGNORED; }
public fw_player_secmode( const wpnid ) { if( !pev_valid( wpnid ) ) { return HAM_IGNORED; } new owner = get_pdata_cbase( wpnid, m_iWeaponOwner, WEAPON_LINUX ); if( !owner ) // no owner detected... { return HAM_IGNORED; } if( !( CheckMode( Mode, owner ) ) ) { SetMode( Mode, owner ); ExecuteHamB( Ham_Weapon_SecondaryAttack, wpnid ); } ExecuteHamB( Ham_Weapon_PrimaryAttack, wpnid ); return HAM_SUPERCEDE; }
public fw_player_firsmode( const wpnid ) { if( !pev_valid( wpnid ) ) { return HAM_IGNORED; } new owner = get_pdata_cbase( wpnid, m_iWeaponOwner, WEAPON_LINUX ); if( !owner ) // no owner detected... { return HAM_IGNORED; } if( ( CheckMode( Mode, owner ) ) ) { unSetMode( Mode, owner ); ExecuteHamB( Ham_Weapon_SecondaryAttack, wpnid ); } ExecuteHamB( Ham_Weapon_PrimaryAttack, wpnid ); return HAM_SUPERCEDE; }
I over looked the code and a saw this:
Code:
new owner = get_pdata_cbase(wpnid, m_iWeaponOwner, WEAPON_LINUX)
It doc says:
Code:
get_pdata_cbase(id, offset, linuxdiff=5, macdiff=5);
This is used to compliment fakemeta's {get,set}_pdata_{int,float,string}.
This requires the mod to have the pev and base fields set in hamdata.ini.
Note this dereferences memory! Improper use of this will crash the server.
This will return an index of the corresponding cbase field in private data.
Return -1 on a null entry (-1 for none set) or the index of the corresponding pdata field.
Also, it return -1 on failure, so you check will not be useful or are you expecting zero to return?
Code:
new owner = get_pdata_cbase( wpnid, m_iWeaponOwner, WEAPON_LINUX );
if( !owner ) // no owner detected...
{
return HAM_IGNORED;
}
Doing 'if( owner < 0 )' should handle it.
__________________
Last edited by addons_zz; 07-28-2016 at 20:49.
Reason: misspellings
|
|