diff --git a/gamemodes/sf-cnr.pwn b/gamemodes/sf-cnr.pwn index 7a57fb2..77253c8 100644 --- a/gamemodes/sf-cnr.pwn +++ b/gamemodes/sf-cnr.pwn @@ -75,7 +75,6 @@ native gpci ( playerid, serial[ ], len ); /* ** Useful macros ** */ #define DQCMD:%1(%2) forward discord_%1(%2); public discord_%1(%2) -#define IsPlayerJailed(%1) (p_Jailed{%1}) #define IsPlayerTazed(%1) (p_Tazed{%1}) #define IsPlayerDetained(%1) (p_Detained{%1}) #define IsPlayerCuffed(%1) (p_Cuffed{%1}) @@ -84,7 +83,6 @@ native gpci ( playerid, serial[ ], len ); #define IsPlayerBlowingCock(%0) (p_GivingBlowjob{%0}) #define IsPlayerGettingBlowed(%0) (p_GettingBlowjob{%0}) #define IsPlayerAdminOnDuty(%0) (p_AdminOnDuty{%0}) -#define IsPlayerInPaintBall(%0) (p_inPaintBall{%0}) #define IsPlayerMining(%0) (p_isMining{%0}) #define IsPlayerLoadingObjects(%0) (p_pausedToLoad{%0}) #define IsPlayerOnSlotMachine(%0) (p_usingSlotMachine[%0]!=-1) @@ -105,7 +103,6 @@ native gpci ( playerid, serial[ ], len ); #define UpdateWoodStockObject() (format(szNormalString,32,"%d Logs Ready",g_LogsInStock),SetDynamicObjectMaterialText(g_LogCountObject,0,szNormalString,130,"Arial",0,1,-1,0,1)) #define replacePercentageSymbol(%0) strreplacechar(szString,'%','#') #define IsPlayerInEntrance(%0,%1) (p_LastEnteredEntrance[%0]==(%1)) -#define IsPlayerInEvent(%0) (GetPlayerVirtualWorld(playerid)==69) #define IsPlayerInPlayerGang(%0,%1) (p_Class[%0] == p_Class[%1] && p_Class[%0] == CLASS_CIVILIAN && p_GangID[%0] == p_GangID[%1] && p_GangID[%0] != INVALID_GANG_ID) #define INVALID_TIMER_ID (-1) #define IsPlayerNpcEx(%0) (IsPlayerNPC(%0) || strmatch(p_PlayerIP[%0], "127.0.0.1")) @@ -1887,6 +1884,7 @@ new #define MENU_RIFLES ( 4 ) #define MENU_SHOTGUNS ( 5 ) #define MENU_THROWN ( 6 ) +#define MENU_ARMOR ( 7 ) enum E_WEAPONS_DATA { @@ -1898,7 +1896,7 @@ new g_AmmunitionCategory[ ] [ ] = { { "Assault" }, { "Melee" }, { "Submachine Guns" }, { "Pistols" }, - { "Rifles" }, { "Shotguns" }, { "Thrown" } + { "Rifles" }, { "Shotguns" }, { "Thrown" }, { "Armor" } }, g_AmmunationWeapons[ ][ E_WEAPONS_DATA ] = { @@ -1934,7 +1932,9 @@ new { MENU_THROWN, "Teargas", 17, 5, 500 }, { MENU_THROWN, "Grenade", 16, 1, 1200 }, - { MENU_THROWN, "Molotov Cocktail", 18, 4, 1400 } + { MENU_THROWN, "Molotov Cocktail", 18, 4, 1400 }, + + { MENU_ARMOR, "Armor", 101, 100, 12500 } }, p_AmmunationMenu [ MAX_PLAYERS char ] ; @@ -3448,7 +3448,7 @@ public OnGameModeInit() /* ** Robbery Points ** */ static const ROBBERY_BOT_PAY = 2100; // max pay from robbing bots - static const ROBBERY_SAFE_PAY = 4500; // max pay from robbing safes + static const ROBBERY_SAFE_PAY = 4300; // max pay from robbing safes CreateMultipleRobberies( "Bank of San Fierro - Safe 1", floatround( float( ROBBERY_SAFE_PAY ) * 1.85 ), -1400.941772, 862.858947, 984.17200, -90.00000, g_bankvaultData[ CITY_SF ] [ E_WORLD ] ); CreateMultipleRobberies( "Bank of San Fierro - Safe 2", floatround( float( ROBBERY_SAFE_PAY ) * 1.85 ), -1400.941772, 861.179321, 985.07251, -90.00000, g_bankvaultData[ CITY_SF ] [ E_WORLD ] ); @@ -8822,9 +8822,9 @@ CMD:business( playerid, params[ ] ) if ( p_OwnedBusinesses[ playerid ] >= getPlayerBusinessCapacity( playerid ) ) return SendError( playerid, "You cannot purchase any more businesses, you've reached the limit." ); if ( GetPlayerScore( playerid ) < 1000 ) return SendError( playerid, "You need at least 1,000 score to buy a business." ); - foreach(new b : business) + foreach ( new b : business ) { - if ( IsPlayerInDynamicCP( playerid, g_businessData[ b ] [ E_ENTER_CP ] ) ) + if ( IsPlayerInDynamicCP( playerid, g_businessData[ b ] [ E_ENTER_CP ] ) || ( iBusiness != -1 && iBusiness == b ) ) { if ( ! g_businessData[ b ] [ E_OWNER_ID ] ) { @@ -12732,7 +12732,7 @@ CMD:h( playerid, params[ ] ) foreach ( new i : houses ) { - if ( IsPlayerInDynamicCP( playerid, g_houseData[ i ] [ E_CHECKPOINT ] [ 0 ] ) ) + if ( IsPlayerInDynamicCP( playerid, g_houseData[ i ] [ E_CHECKPOINT ] [ 0 ] ) || ( ID != -1 && ID == i ) ) { if ( strmatch( g_houseData[ i ] [ E_OWNER ], "No-one" ) ) { @@ -14772,6 +14772,7 @@ CMD:gang( playerid, params[ ] ) else if ( gangNameExists( szName ) ) return SendError( playerid, "This gang already exists, try another name." ); else { + trimString( szName ); format( g_gangData[ p_GangID[ playerid ] ] [ E_NAME ], 30, "%s", szName ); SendClientMessageToGang( p_GangID[ playerid ], g_gangData[ p_GangID[ playerid ] ] [ E_COLOR ], "[GANG]{FFFFFF} %s(%d) has changed the gang's name to {%06x}%s"COL_WHITE".", ReturnPlayerName( playerid ), playerid, g_gangData[ p_GangID[ playerid ] ] [ E_COLOR ] >>> 8, szName ); SaveGangData( p_GangID[ playerid ] ); @@ -17943,7 +17944,7 @@ CMD:explosiverounds( playerid, params[ ] ) { new targetid, rounds; - if ( sscanf( params, "dd", targetid, rounds ) ) + if ( sscanf( params, "ud", targetid, rounds ) ) return SendUsage( playerid, "/explosiverounds [PLAYER_ID] [ROUNDS]" ); p_ExplosiveBullets[ targetid ] += rounds; @@ -22257,11 +22258,8 @@ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) } else { - new - iAfterTax = floatround( iWithdraw * 0.975 ); - g_gangData[ gangid ] [ E_BANK ] -= iWithdraw; - GivePlayerCash( playerid, iAfterTax ); + GivePlayerCash( playerid, iWithdraw ); SaveGangData( gangid ); // transaction @@ -22269,7 +22267,7 @@ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) mysql_single_query( szNormalString ); // withdraw - SendClientMessageToGang( gangid, g_gangData[ gangid ] [ E_COLOR ], "[GANG]"COL_GREY" %s(%d) has withdrawn %s (inc. 2.5%s fee) from the gang bank account.", ReturnPlayerName( playerid ), playerid, number_format( iAfterTax ), "%%" ); + SendClientMessageToGang( gangid, g_gangData[ gangid ] [ E_COLOR ], "[GANG]"COL_GREY" %s(%d) has withdrawn %s from the gang bank account.", ReturnPlayerName( playerid ), playerid, number_format( iWithdraw ), "%%" ); format( Query, sizeof( Query ), ""COL_GREY"Amount Withdrawn:"COL_WHITE" %s\n"COL_GREY"Current Balance:"COL_WHITE" %s\n"COL_GREY"Current Money:{FFFFFF} %s", number_format( iWithdraw ), number_format( g_gangData[ gangid ] [ E_BANK ] ), number_format( GetPlayerCash( playerid ) ) ); ShowPlayerDialog( playerid, DIALOG_GANG_BANK_INFO, DIALOG_STYLE_MSGBOX, "{FFFFFF}Gang Account", Query, "Ok", "Back" ); } @@ -24505,6 +24503,11 @@ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) return 1; } + if ( p_VIPLevel[ playerid ] < VIP_BRONZE && listitem == MENU_ARMOR ) { + SendError( playerid, "You are not Bronze V.I.P, to become one visit "COL_GREY"donate.irresistiblegaming.com" ); + return ShowAmmunationMenu( playerid, "{FFFFFF}Weapon Deal - Purchase Weapons", DIALOG_WEAPON_DEAL ); + } + p_WeaponDealMenu{ playerid } = listitem; RedirectAmmunation( playerid, listitem, "{FFFFFF}Weapon Deal - Purchase Weapons", DIALOG_WEAPON_DEAL_BUY, 0.75, true ); } @@ -24539,8 +24542,9 @@ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) GivePlayerCash( weapondealerid, floatround( price * 0.75 ) ); SendClientMessageFormatted( weapondealerid, -1, ""COL_ORANGE"[WEAPON DEAL]{FFFFFF} %s(%d) has purchased a %s for "COL_GOLD"%s"COL_WHITE" (tax applied).", ReturnPlayerName( playerid ), playerid, g_AmmunationWeapons[ i ] [ E_NAME ], number_format( price ) ); SetPVarInt( playerid, "purchased_weapon", GetPVarInt( playerid, "purchased_weapon" ) + 1 ); - SendClientMessageFormatted( playerid, -1, ""COL_ORANGE"[WEAPON DEAL]{FFFFFF} You have purchased a %s for "COL_GOLD"%s"COL_WHITE".", g_AmmunationWeapons[ i ] [ E_NAME ], number_format( price ) ); - GivePlayerWeapon( playerid, g_AmmunationWeapons[ i ] [ E_WEPID ], 15000 ); // Infinite + SendClientMessageFormatted( playerid, -1, ""COL_ORANGE"[WEAPON DEAL]{FFFFFF} You have purchased %s for "COL_GOLD"%s"COL_WHITE".", g_AmmunationWeapons[ i ] [ E_NAME ], number_format( price ) ); + if ( g_AmmunationWeapons[ i ] [ E_WEPID ] == 101 ) SetPlayerArmour( playerid, 100.0 ); + else GivePlayerWeapon( playerid, g_AmmunationWeapons[ i ] [ E_WEPID ], 15000 ); // Infinite SetPlayerArmedWeapon( playerid, 0 ); GivePlayerCash( playerid, -( price ) ); RedirectAmmunation( playerid, p_WeaponDealMenu{ playerid }, "{FFFFFF}Weapon Deal - Purchase Weapons", DIALOG_WEAPON_DEAL_BUY, 0.75, true ); @@ -24592,9 +24596,12 @@ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) } GivePlayerCash( playerid, -iCostPrice ); - GivePlayerWeapon( playerid, g_AmmunationWeapons[ i ] [ E_WEPID ], g_AmmunationWeapons[ i ] [ E_AMMO ] ); + + if ( g_AmmunationWeapons[ i ] [ E_WEPID ] == 101 ) SetPlayerArmour( playerid, float( g_AmmunationWeapons[ i ] [ E_AMMO ] ) ); + else GivePlayerWeapon( playerid, g_AmmunationWeapons[ i ] [ E_WEPID ], g_AmmunationWeapons[ i ] [ E_AMMO ] ); + RedirectAmmunation( playerid, p_WeaponLockerMenu{ playerid }, "{FFFFFF}Weapon Locker - Purchase Weapons", DIALOG_WEAPON_LOCKER_BUY, 1.25 ); - SendServerMessage( playerid, "You have purchased a %s(%d) for "COL_GOLD"%s"COL_WHITE"%s (inc. fees).", g_AmmunationWeapons[ i ] [ E_NAME ], g_AmmunationWeapons[ i ] [ E_AMMO ], number_format( iCostPrice ) ); + SendServerMessage( playerid, "You have purchased %s(%d) for "COL_GOLD"%s"COL_WHITE"%s (inc. fees).", g_AmmunationWeapons[ i ] [ E_NAME ], g_AmmunationWeapons[ i ] [ E_AMMO ], number_format( iCostPrice ) ); break; } x ++; @@ -24640,8 +24647,11 @@ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) GivePlayerCash( playerid, -iCostPrice ); RedirectAmmunation( playerid, p_AmmunationMenu{ playerid } ); - GivePlayerWeapon( playerid, g_AmmunationWeapons[ i ] [ E_WEPID ], g_AmmunationWeapons[ i ] [ E_AMMO ] ); - SendServerMessage( playerid, "You have purchased a %s(%d) for "COL_GOLD"%s"COL_WHITE"%s.", g_AmmunationWeapons[ i ] [ E_NAME ], g_AmmunationWeapons[ i ] [ E_AMMO ], number_format( iCostPrice ), bDealer ? ( " (inc. discount)" ) : ( "" ) ); + + if ( g_AmmunationWeapons[ i ] [ E_WEPID ] == 101 ) SetPlayerArmour( playerid, float( g_AmmunationWeapons[ i ] [ E_AMMO ] ) ); + else GivePlayerWeapon( playerid, g_AmmunationWeapons[ i ] [ E_WEPID ], g_AmmunationWeapons[ i ] [ E_AMMO ] ); + + SendServerMessage( playerid, "You have purchased %s(%d) for "COL_GOLD"%s"COL_WHITE"%s.", g_AmmunationWeapons[ i ] [ E_NAME ], g_AmmunationWeapons[ i ] [ E_AMMO ], number_format( iCostPrice ), bDealer ? ( " (inc. discount)" ) : ( "" ) ); break; } x ++; @@ -29390,7 +29400,7 @@ stock getClosestRobberySafe( playerid, &Float: dis = 99999.99 ) ; foreach(new i : RobberyCount) { - if ( world != 0 && g_robberyData[ i ] [ E_WORLD ] != world ) continue; + if ( world != 0 && g_robberyData[ i ] [ E_WORLD ] != -1 && g_robberyData[ i ] [ E_WORLD ] != world ) continue; GetDynamicObjectPos( g_robberyData[ i ] [ E_SAFE ], X, Y, Z ); dis2 = GetPlayerDistanceFromPoint( playerid, X, Y, Z ); if ( dis2 < dis && dis2 != -1.00 ) { @@ -30562,6 +30572,7 @@ stock CreateGang( const gang_name[ 30 ], leader, gang_color, kills = 1, deaths = // format name format( g_gangData[ handle ] [ E_NAME ], 30, "%s", gang_name ); + trimString( g_gangData[ handle ] [ E_NAME ] ); // default variables g_gangData[ handle ] [ E_LEADER ] = leader; @@ -31552,11 +31563,13 @@ stock RedirectAmmunation( playerid, listitem, custom_title[ ] = "{FFFFFF}Ammu-Na new szString[ 420 ]; - szString = ! unlimited_ammo ? ( ""COL_WHITE"Weapon\t"COL_WHITE"Ammo\t"COL_WHITE"Price\n" ) : ( ""COL_WHITE"Weapon\t"COL_WHITE"Price\n" ); + if ( listitem == MENU_ARMOR ) szString = ""COL_WHITE"Item\t"COL_WHITE"Price\n"; + else if ( unlimited_ammo ) szString = ""COL_WHITE"Weapon\t"COL_WHITE"Price\n"; + else szString = ""COL_WHITE"Weapon\t"COL_WHITE"Ammo\t"COL_WHITE"Price\n"; for( new i; i < sizeof( g_AmmunationWeapons ); i++ ) if ( g_AmmunationWeapons[ i ] [ E_MENU ] == listitem ) { - if ( ! unlimited_ammo ) // Other multipliers will not specify ammo + if ( ! unlimited_ammo && listitem != MENU_ARMOR ) // Other multipliers will not specify ammo format( szString, sizeof( szString ), "%s%s\t%d\t"COL_GOLD"%s\n", szString, g_AmmunationWeapons[ i ] [ E_NAME ], g_AmmunationWeapons[ i ] [ E_AMMO ], number_format( floatround( g_AmmunationWeapons[ i ] [ E_PRICE ] * custom_multplier ) ) ); else format( szString, sizeof( szString ), "%s%s\t"COL_GOLD"%s\n", szString, g_AmmunationWeapons[ i ] [ E_NAME ], number_format( floatround( g_AmmunationWeapons[ i ] [ E_PRICE ] * custom_multplier ) ) ); @@ -31568,13 +31581,12 @@ stock RedirectAmmunation( playerid, listitem, custom_title[ ] = "{FFFFFF}Ammu-Na stock ShowAmmunationMenu( playerid, custom_title[ ] = "{FFFFFF}Ammu-Nation", custom_dialogid = DIALOG_AMMU ) { static - szString[ 60 ]; + szString[ 70 ]; if ( !szString[ 0 ] ) { - for( new i; i < sizeof( g_AmmunitionCategory ); i++ ) - { - format( szString, sizeof( szString ), "%s%s\n", szString, g_AmmunitionCategory[ i ] ); + for( new i = 0; i < sizeof( g_AmmunitionCategory ); i++ ) { + format( szString, sizeof( szString ), "%s%s\n", szString, g_AmmunitionCategory[ i ] ); } } return ShowPlayerDialog( playerid, custom_dialogid, DIALOG_STYLE_LIST, custom_title, szString, "Select", "Cancel" ); @@ -38370,10 +38382,16 @@ stock GetPlayerAccountID( playerid ) return p_AccountID[ playerid ]; stock GetPlayerVIPLevel( playerid ) return p_VIPLevel[ playerid ]; +stock IsPlayerInPaintBall( playerid ) return p_inPaintBall{ playerid }; + stock GetPlayerAdminLevel( playerid ) return p_AdminLevel[ playerid ]; stock IsPlayerSpawned( playerid ) return p_Spawned{ playerid }; +stock IsPlayerInEvent( playerid ) return ( GetPlayerVirtualWorld( playerid ) == 69 ); + +stock IsPlayerJailed( playerid ) return p_Jailed{ playerid }; + stock IsPlayerEmailVerified( playerid ) return p_accountSecurityData[ playerid ] [ E_ID ]; stock UpdatePlayerEntranceExitTick( playerid, ms = 2000 ) { @@ -38381,3 +38399,4 @@ stock UpdatePlayerEntranceExitTick( playerid, ms = 2000 ) { } stock CanPlayerExitEntrance( playerid ) return GetTickCount( ) > p_EntranceTickcount[ playerid ]; + diff --git a/pawno/include/irresistible/features/gangs/gangs.inc b/pawno/include/irresistible/features/gangs/gangs.inc index 8f2e94b..e693ffb 100644 --- a/pawno/include/irresistible/features/gangs/gangs.inc +++ b/pawno/include/irresistible/features/gangs/gangs.inc @@ -6,7 +6,7 @@ */ /* ** Includes ** */ -// #include < YSI\y_hooks > +#include < YSI\y_hooks > /* ** Definitions ** */ #define MAX_GANGS ( MAX_PLAYERS ) // safest is MAX_PLAYERS diff --git a/pawno/include/irresistible/features/weapon_drop.inc b/pawno/include/irresistible/features/weapon_drop.inc index c83aa55..72c1a7c 100644 --- a/pawno/include/irresistible/features/weapon_drop.inc +++ b/pawno/include/irresistible/features/weapon_drop.inc @@ -18,6 +18,9 @@ /* ** Definitions ** */ #define MAX_WEAPON_DROPS ( 50 ) +#define WEAPON_HEALTH ( 100 ) +#define WEAPON_ARMOUR ( 101 ) + /* ** Variables ** */ enum E_WEAPONDROP_DATA { E_WEAPON_ID, E_AMMO, E_PICKUP, @@ -27,18 +30,37 @@ enum E_WEAPONDROP_DATA { static g_weaponDropData [ MAX_WEAPON_DROPS ] [ E_WEAPONDROP_DATA ]; static Iterator: weapondrop < MAX_WEAPON_DROPS >; +static const g_rankHealthPayout[ ] = { 100, 75, 50, 45, 40, 35, 30, 25, 20, 15, 10 }; + +static g_HealthPickup; + /* ** Hooks ** */ +hook OnGameModeInit( ) +{ + g_HealthPickup = CreateDynamicPickup( 1240, 3, -1980.3679, 884.4898, 45.2031 ); + return 1; +} + #if defined AC_INCLUDED hook OnPlayerDeathEx( playerid, killerid, reason, Float: damage, bodypart ) #else hook OnPlayerDeath( playerid, killerid, reason ) #endif { - new + static Float: X, Float: Y, Float: Z; - if ( GetPlayerPos( playerid, X, Y, Z ) ) + GetPlayerPos( playerid, X, Y, Z ); + + if ( IsPlayerConnected( killerid ) ) { + if ( IsPlayerJailed( playerid ) || IsPlayerInPaintBall( playerid ) || IsPlayerInEvent( playerid ) ) + return 1; + + new + killer_rank = GetPlayerRank( killerid ), + expire_time = gettime( ) + 180; + for ( new slotid = 0; slotid < 13; slotid++ ) { new @@ -47,10 +69,17 @@ hook OnPlayerDeath( playerid, killerid, reason ) GetPlayerWeaponData( playerid, slotid, weaponid, ammo ); + // third of what player had + ammo /= 5; + + // check valid parameters and shit if ( weaponid != 0 && 1 < ammo < 5000 && ! IsWeaponBanned( weaponid ) ) { - CreateWeaponPickup( weaponid, ammo, slotid, X + fRandomEx( 0, 3 ), Y + fRandomEx( 0, 3 ), Z, gettime( ) + 180 ); + CreateWeaponPickup( weaponid, ammo, slotid, X + fRandomEx( 0.5, 3.0 ), Y + fRandomEx( 0.5, 3.0 ), Z, expire_time ); } } + + // health drop + CreateWeaponPickup( WEAPON_HEALTH, g_rankHealthPayout[ killer_rank ], 0, X + fRandomEx( 0.5, 3.0 ), Y + fRandomEx( 0.5, 3.0 ), Z, expire_time ); } return 1; } @@ -61,25 +90,54 @@ hook OnPlayerPickUpDynPickup( playerid, pickupid ) new existing_weapon; new existing_ammo; + // Health Pickups + if ( pickupid == g_HealthPickup ) { + SetPlayerHealth( playerid, 100.0 ); + return 1; + } + + // Player Drops foreach ( new dropid : weapondrop ) { if ( g_weaponDropData[ dropid ] [ E_PICKUP ] == pickupid ) { - GetPlayerKeys( playerid, keys, existing_weapon, existing_weapon ); - GetPlayerWeaponData( playerid, g_weaponDropData[ dropid ] [ E_SLOT_ID ], existing_weapon, existing_ammo ); + if ( g_weaponDropData[ dropid ] [ E_WEAPON_ID ] == WEAPON_HEALTH ) + { + new + Float: health; - printf("Existing Weapon %d, Dropped Weapon %d, Slot id %d", existing_weapon, g_weaponDropData[ dropid ] [ E_WEAPON_ID ], g_weaponDropData[ dropid ] [ E_SLOT_ID ] ); - if ( existing_weapon > g_weaponDropData[ dropid ] [ E_WEAPON_ID ] && ! ( keys & KEY_ACTION ) && existing_ammo ) { - GameTextForPlayer( playerid, "~r~PRESS ~k~~PED_ANSWER_PHONE~ TO TAKE WEAPON", 4000, 3 ); - return 1; + if ( GetPlayerHealth( playerid, health ) ) + { + // no weed like effects + if ( ( health += float( g_weaponDropData[ dropid ] [ E_AMMO ] ) ) > 100.0 ) + health = 100.0; + + SetPlayerHealth( playerid, health ); + } + } + else + { + + GetPlayerKeys( playerid, keys, existing_weapon, existing_weapon ); + GetPlayerWeaponData( playerid, g_weaponDropData[ dropid ] [ E_SLOT_ID ], existing_weapon, existing_ammo ); + + // printf("Existing Weapon %d, Dropped Weapon %d, Slot id %d", existing_weapon, g_weaponDropData[ dropid ] [ E_WEAPON_ID ], g_weaponDropData[ dropid ] [ E_SLOT_ID ] ); + // if ( existing_weapon > g_weaponDropData[ dropid ] [ E_WEAPON_ID ] && ! ( keys & KEY_ACTION ) && existing_ammo ) + if ( ! ( keys & KEY_ACTION ) && existing_ammo ) + { + ShowPlayerHelpDialog( playerid, 2500, "Hold ~r~~k~~PED_ANSWER_PHONE~~w~ To Take %s", ReturnWeaponName( g_weaponDropData[ dropid ] [ E_WEAPON_ID ] ) ); + return 1; + } + + #if defined AC_INCLUDED + p_PlayerHasWeapon[ playerid ] { g_weaponDropData[ dropid ] [ E_WEAPON_ID ] } = true; + #endif + + GivePlayerWeapon( playerid, g_weaponDropData[ dropid ] [ E_WEAPON_ID ], g_weaponDropData[ dropid ] [ E_AMMO ] ); } - #if defined AC_INCLUDED - p_PlayerHasWeapon[ playerid ] { g_weaponDropData[ dropid ] [ E_WEAPON_ID ] } = true; - #endif - + // destroy health pickup PlayerPlaySound( playerid, 1150, 0.0, 0.0, 0.0 ); - GivePlayerWeapon( playerid, g_weaponDropData[ dropid ] [ E_WEAPON_ID ], g_weaponDropData[ dropid ] [ E_AMMO ] ); DestroyWeaponPickup( dropid ); return 1; } @@ -94,12 +152,12 @@ stock CreateWeaponPickup( weaponid, ammo, slotid, Float: X, Float: Y, Float: Z, if ( handle != ITER_NONE ) { - Iter_Add( weapondrop, handle ); - g_weaponDropData[ handle ] [ E_PICKUP ] = CreateDynamicPickup( GetWeaponModel( weaponid ), 1, X, Y, Z ); + g_weaponDropData[ handle ] [ E_PICKUP ] = CreateDynamicPickup( weaponid == WEAPON_HEALTH ? 1240 : GetWeaponModel( weaponid ), 1, X, Y, Z ); g_weaponDropData[ handle ] [ E_EXPIRE_TIMESTAMP ] = expire_time; g_weaponDropData[ handle ] [ E_WEAPON_ID ] = weaponid; g_weaponDropData[ handle ] [ E_AMMO ] = ammo; g_weaponDropData[ handle ] [ E_SLOT_ID ] = slotid; + Iter_Add( weapondrop, handle ); } else { diff --git a/pawno/include/irresistible/main.inc b/pawno/include/irresistible/main.inc index ab3841a..5d56d80 100644 --- a/pawno/include/irresistible/main.inc +++ b/pawno/include/irresistible/main.inc @@ -32,7 +32,7 @@ #include < irresistible\features\radio > #include < irresistible\features\cash_cards > #include < irresistible\features\furniture > -// #include < irresistible\features\weapon_drop > +#include < irresistible\features\weapon_drop > // #include < irresistible\features\vote > // gangs and facilities diff --git a/scriptfiles/updates.txt b/scriptfiles/updates.txt index b98eb0a..ac45699 100644 --- a/scriptfiles/updates.txt +++ b/scriptfiles/updates.txt @@ -1 +1,4 @@ -(/) New tax system. 1% daily for all users, businesses and gangs. +(+) You can now buy Armor at the ammunation for $12.5K. Must be Bronze VIP to get it from a weapon dealer. +(+) Players now drop their weapons and health when they are killed. More health is dropped with a higher in-game rank. +(*) Fixes bugs with certain shops not having their safes breakable. +(-) No more 2.5% withdrawal fee for gangs. \ No newline at end of file