|
Veteran Member
|

05-01-2012
, 12:44
Fix Furien Weapons
|
#1
|
Hi, please helm me to fix this error in this plugin, thanks very much.
Quote:
L 05/30/2012 - 21:05:52: [CSTRIKE] Invalid weapon id 29
L 05/30/2012 - 21:05:52: [AMXX] Displaying debug trace (plugin "furien_weapons.amxx")
L 05/30/2012 - 21:05:52: [AMXX] Run time error 10: native error (native "cs_get_user_bpammo")
L 05/30/2012 - 21:05:52: [AMXX] [0] furien_weapons.sma::GiveAutoWeapons (line 222)
L 05/30/2012 - 21:05:52: [AMXX] [1] furien_weapons.sma: layerSpawn (line 164)
|
Furien Weapons
PHP Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <cstrike>
#include <fun>
#include <hamsandwich>
#include "furien.inc"
#include "furien_shop.inc"
#define VERSION "0.2.1"
#define MAX_WEAPONS CSW_P90
enum _:mDatas {
mFurienCost,
mFurienBpAmmo,
mFurienBpAmmoMax,
mAntiFurienCost,
mAntiFurienBpAmmo,
mAntiFurienBpAmmoMax
};
enum _:mAutoDatas {
miId,
miBpAmmo,
miBpAmmoMax
};
new g_iWeaponsBuyDatas[ MAX_WEAPONS+1 ][ mDatas ]
new Array:g_aFurienAutoWeapons, Array:g_aAntiFurienAutoWeapons;
public plugin_init( )
{
register_plugin( "Furien Weapons", VERSION, "ConnorMcLeod" );
g_aFurienAutoWeapons = ArrayCreate( mAutoDatas )
g_aAntiFurienAutoWeapons = ArrayCreate( mAutoDatas )
new szConfigFile[ 128 ];
get_localinfo( "amxx_configsdir", szConfigFile, charsmax( szConfigFile ) )
format( szConfigFile, charsmax( szConfigFile ), "%s/furien/items/weapons.ini", szConfigFile );
new fp = fopen( szConfigFile, "rt")
if( !fp )
return;
new szDatas[ 256 ], szWeaponName[ 20 ], szMode[ 2 ], szFurienBpAmmo[ 4 ], szAntiFurienBpAmmo[ 4 ], szFurienBpAmmoMax[ 4 ], szAntiFurienBpAmmoMax[ 4 ],
szFurienName[ 32 ], szAntiFurienName[ 32 ], szFurienCost[ 6 ], szAntiFurienCost[ 6 ];
while( !feof( fp ) )
{
fgets( fp, szDatas, charsmax( szDatas ) )
trim( szDatas )
if(!szDatas[ 0 ] || szDatas[ 0 ] == ';' || szDatas[ 0 ] == '#' || ( szDatas[ 0 ] == '/' && szDatas[ 1 ] == '/' ) )
continue;
// server_print( "Weapons Entry" )
// server_print( szDatas )
parse
(
szDatas,
szWeaponName, charsmax( szWeaponName ),
szMode, charsmax( szMode ),
szFurienBpAmmo, charsmax( szFurienBpAmmo ),
szAntiFurienBpAmmo, charsmax( szAntiFurienBpAmmo ),
szFurienBpAmmoMax, charsmax( szFurienBpAmmoMax ),
szAntiFurienBpAmmoMax, charsmax( szAntiFurienBpAmmoMax ),
szFurienName, charsmax( szFurienName ),
szAntiFurienName, charsmax( szAntiFurienName ),
szFurienCost, charsmax( szFurienCost ),
szAntiFurienCost, charsmax( szAntiFurienCost )
)
/*
server_print( "%s %s | BpAmmo %s %s | BpAmmoMax %s %s | %s %s %s %s",
szWeaponName, szMode, szFurienBpAmmo, szAntiFurienBpAmmo, szFurienBpAmmoMax, szAntiFurienBpAmmoMax,
szFurienName, szAntiFurienName, szFurienCost, szAntiFurienCost );
*/
new iId = get_weaponid( szWeaponName )
if( iId <= 0 )
continue;
switch( szMode[ 0 ] )
{
case '0':
{
if( ( g_iWeaponsBuyDatas[ iId ][ mFurienCost ] = str_to_num( szFurienCost ) ) )
{
g_iWeaponsBuyDatas[ iId ][ mFurienBpAmmo ] = str_to_num( szFurienBpAmmo )
g_iWeaponsBuyDatas[ iId ][ mFurienBpAmmoMax ] = max( str_to_num( szFurienBpAmmoMax ), g_iWeaponsBuyDatas[ iId ][ mFurienBpAmmo ] )
}
if( ( g_iWeaponsBuyDatas[ iId ][ mAntiFurienCost ] = str_to_num( szAntiFurienCost ) ) )
{
g_iWeaponsBuyDatas[ iId ][ mAntiFurienBpAmmo ] = str_to_num( szAntiFurienBpAmmo )
g_iWeaponsBuyDatas[ iId ][ mAntiFurienBpAmmoMax ] = max( str_to_num( szAntiFurienBpAmmoMax ), g_iWeaponsBuyDatas[ iId ][ mAntiFurienBpAmmo ] )
}
furien_register_item
(
szFurienName,
g_iWeaponsBuyDatas[ iId ][ mFurienCost ],
szAntiFurienName,
g_iWeaponsBuyDatas[ iId ][ mAntiFurienCost ],
"furien_buy_weapon",
iId
)
}
case '1':
{
new Datas[ mAutoDatas ];
Datas[ miId ] = iId
Datas[ miBpAmmo ] = str_to_num( szFurienBpAmmo )
Datas[ miBpAmmoMax ] = max( str_to_num( szFurienBpAmmoMax ), Datas[ miBpAmmo ] )
ArrayPushArray( g_aFurienAutoWeapons, Datas )
}
case '2':
{
new Datas[ mAutoDatas ];
Datas[ miId ] = iId
Datas[ miBpAmmo ] = str_to_num( szAntiFurienBpAmmo )
Datas[ miBpAmmoMax ] = max( str_to_num( szAntiFurienBpAmmoMax ), Datas[ miBpAmmo ] )
ArrayPushArray( g_aAntiFurienAutoWeapons, Datas )
}
case '3':
{
new Datas[ mAutoDatas ];
Datas[ miId ] = iId
Datas[ miBpAmmo ] = str_to_num( szAntiFurienBpAmmo )
Datas[ miBpAmmoMax ] = max( str_to_num( szAntiFurienBpAmmoMax ), Datas[ miBpAmmo ] )
ArrayPushArray( g_aFurienAutoWeapons, Datas )
ArrayPushArray( g_aAntiFurienAutoWeapons, Datas )
}
}
}
fclose( fp )
if( ArraySize( g_aFurienAutoWeapons ) || ArraySize( g_aAntiFurienAutoWeapons ) )
RegisterHam( Ham_Spawn, "player", "PlayerSpawn", 1 )
}
public furien_buy_weapon( id, iId )
{
new iTeam = furien_get_user_team( id )
if( iTeam == -1 )
return ShopCloseMenu;
new iItemCost = g_iWeaponsBuyDatas[ iId ][ iTeam == Furien ? mFurienCost : mAntiFurienCost ]
if( iItemCost <= 0 )
return ShopTeamNotAvail;
if( user_has_weapon( id, iId ) )
return ShopAlreadyHaveOne;
if( furien_try_buy( id, iItemCost ) )
{
new szWeaponName[ 20 ];
get_weaponname( iId, szWeaponName, charsmax( szWeaponName ) )
give_item( id, szWeaponName )
new iBpAmmo = g_iWeaponsBuyDatas[ iId ][ iTeam == Furien ? mFurienBpAmmo : mAntiFurienBpAmmo ]
if( iBpAmmo )
{
new iBpAmmoMax = g_iWeaponsBuyDatas[ iId ][ iTeam == Furien ? mFurienBpAmmoMax : mAntiFurienBpAmmoMax ]
new iCurrentBpAmmo = cs_get_user_bpammo( id, iId )
if( iCurrentBpAmmo < iBpAmmoMax )
cs_set_user_bpammo( id, iId, min( iCurrentBpAmmo + iBpAmmo, iBpAmmoMax ) )
}
return ShopBought;
}
return ShopNotEnoughMoney;
}
public plugin_end( )
{
ArrayDestroy( g_aFurienAutoWeapons )
ArrayDestroy( g_aAntiFurienAutoWeapons )
}
public PlayerSpawn( id )
{
if( is_user_alive( id ) )
{
switch( furien_get_user_team( id ) )
{
case Furien : GiveAutoWeapons( id, g_aFurienAutoWeapons )
case AntiFurien : GiveAutoWeapons( id, g_aAntiFurienAutoWeapons )
}
}
}
GiveAutoWeapons( id, Array:aWeapons )
{
new iItemsNum = ArraySize( aWeapons )
new Datas[ mAutoDatas ], iId, szWeaponName[ 20 ], iBpAmmo, iBpAmmoMax, iCurrentBpAmmo;
for( new i; i<iItemsNum; i++ )
{
ArrayGetArray( aWeapons, i, Datas )
iId = Datas[ miId ]
if( !user_has_weapon( id, iId ) )
{
get_weaponname( iId, szWeaponName, charsmax( szWeaponName ) )
give_item( id, szWeaponName )
}
iBpAmmo = Datas[ miBpAmmo ]
if( iBpAmmo && iId != CSW_KNIFE )
{
iBpAmmoMax = Datas[ miBpAmmoMax ]
iCurrentBpAmmo = cs_get_user_bpammo( id, iId )
if( iCurrentBpAmmo < iBpAmmoMax )
cs_set_user_bpammo( id, iId, min( iCurrentBpAmmo + iBpAmmo, iBpAmmoMax ) )
}
}
}
__________________
Last edited by leonard19941; 05-30-2012 at 15:22.
|
|