/* * Irresistible Gaming (c) 2018 * Developed by Lorenc Pekaj * Module: cnr\featuyres\minijobs\mining.pwn * Purpose: mining minijob for players */ /* ** Includes ** */ #include < YSI\y_hooks > /* ** Definitions ** */ #define MAX_ROCKS ( 72 ) #define MAX_ORE_STORAGE ( 14 ) /* ** Variables ** */ enum { ORE_BAUXITE, ORE_IRON, ORE_COAL, ORE_GOLD, ORE_RUBY, ORE_DIAMOND, ORE_PLATINUM, ORE_EMERALD, ORE_SAPHHIRE, ORE_AMETHYST, }; enum E_ROCK_DATA { E_OBJECT, E_MINING, Text3D: E_LABEL, E_ORES, E_COLOR, E_ORE, E_MAX_ORES, E_ARGB }; static stock g_miningData [ MAX_ROCKS ] [ E_ROCK_DATA ], p_MiningOre [ MAX_PLAYERS char ], bool: p_isMining [ MAX_PLAYERS char ], g_orePrices [ ] = { 675, 900, 600, 2750, 3000, 3500, 4000, 2200, 2300, 1200 }, g_oreMiningTime [ ] = { 2000, 2800, 1600, 6800, 7200, 7600, 8000, 6400, 6560, 4000 }, g_oreQuanities [ ] = { 8, 8, 8, 8, 5, 3, 3, 5, 5, 6 }, // Iterator Iterator: miningrock < MAX_ROCKS > ; /* ** Hooks ** */ hook OnScriptInit( ) { // create shovel pickups CreateDynamicPickup( 337, 2, -2744.6367, 1264.8502, 11.77030 ); // Spade @Mining CreateDynamicPickup( 337, 2, 589.440800, 869.86900, -42.4973 ); // Spade @Mining CreateDynamicPickup( 337, 2, -1998.7056, 1777.7448, 43.73860 ); // Spade @Alcatraz // create rocks CreateMiningRock( ORE_COAL, 868, -2751.8393, 1245.06689, 11.4003100, 0.000000, 0.000000, -54.8999 ); CreateMiningRock( ORE_COAL, 867, -2746.3259, 1241.43030, 11.1903100, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_COAL, 867, -2738.7551, 1259.25769, 11.1903100, 0.000000, 0.000000, 147.5000 ); CreateMiningRock( ORE_COAL, 868, -2751.0561, 1263.11548, 11.4003100, 0.000000, 0.000000, -115.800 ); CreateMiningRock( ORE_COAL, 867, -2758.5654, 1252.22095, 11.1903100, 0.000000, 0.000000, 169.4000 ); CreateMiningRock( ORE_IRON, 868, -2745.1460, 1259.26074, 11.1703100, 0.000000, 0.000000, 80.19992 ); CreateMiningRock( ORE_IRON, 868, -2735.3110, 1245.65906, 11.2103100, 0.000000, 0.000000, -158.099 ); CreateMiningRock( ORE_IRON, 868, -2736.8037, 1242.34534, 10.8966600, 0.000000, 0.000000, 8.999990 ); CreateMiningRock( ORE_IRON, 868, -2737.9262, 1245.05554, 11.0432500, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_IRON, 867, -2749.1315, 1260.08789, 11.1903100, 0.000000, 0.000000, -10.6999 ); CreateMiningRock( ORE_IRON, 868, -2740.4924, 1232.87720, 10.8966600, 0.000000, 0.000000, 14.15999 ); CreateMiningRock( ORE_GOLD, 868, -2737.0988, 1235.62610, 11.0432500, 0.000000, 0.000000, 172.3799 ); CreateMiningRock( ORE_BAUXITE, 867, -2741.5380, 1236.00732, 11.1903100, 0.000000, 0.000000, 240.8608 ); CreateMiningRock( ORE_GOLD, 868, -2744.7741, 1248.38403, 11.4003100, 0.000000, 0.000000, -54.8999 ); CreateMiningRock( ORE_GOLD, 868, -2748.1691, 1250.73535, 11.4003100, 0.000000, 0.000000, -88.8000 ); CreateMiningRock( ORE_BAUXITE, 867, -2734.9423, 1251.73816, 11.1903100, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_BAUXITE, 867, -2735.5700, 1255.47192, 11.1903100, 0.000000, 0.000000, -139.019 ); CreateMiningRock( ORE_BAUXITE, 867, -2748.3437, 1235.13391, 11.1903100, 0.000000, 0.000000, -99.6000 ); CreateMiningRock( ORE_BAUXITE, 867, -2747.8896, 1238.57886, 11.1903100, 0.000000, 0.000000, 174.6602 ); CreateMiningRock( ORE_PLATINUM, 868, 645.557128, 884.099853, -42.842994, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_PLATINUM, 867, 648.377441, 885.626892, -42.872383, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_EMERALD, 868, 648.093261, 865.079772, -42.976993, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_EMERALD, 867, 648.093261, 867.079772, -42.976993, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_PLATINUM, 868, 685.774841, 909.739135, -40.452533, 10.89999, 0.000000, -105.500 ); CreateMiningRock( ORE_EMERALD, 868, 679.863281, 925.253662, -41.573390, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_DIAMOND, 868, 684.565002, 921.632324, -41.270782, 0.400041, 0.000000, 120.0000 ); CreateMiningRock( ORE_AMETHYST, 867, 527.286315, 842.197082, -43.581855, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_AMETHYST, 867, 569.048278, 840.496887, -42.454177, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_PLATINUM, 868, 570.629943, 841.765747, -42.634399, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_PLATINUM, 868, 598.894470, 847.992004, -43.830204, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_AMETHYST, 867, 604.275024, 848.331298, -43.830204, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_DIAMOND, 868, 629.993469, 823.527526, -43.400970, 0.000000, 0.000000, 85.90009 ); CreateMiningRock( ORE_COAL, 867, 626.069946, 851.749389, -43.610939, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_EMERALD, 867, 658.767028, 812.288208, -43.610939, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_EMERALD, 867, 659.874877, 812.647521, -43.610939, 0.000000, 0.000000, 90.00000 ); CreateMiningRock( ORE_AMETHYST, 868, 657.839660, 837.129272, -43.610939, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_COAL, 867, 657.596984, 834.139099, -43.610939, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_DIAMOND, 867, 652.896362, 846.951110, -43.610939, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_DIAMOND, 867, 660.239624, 841.461730, -43.610939, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_SAPHHIRE, 867, 659.540588, 860.061401, -43.610939, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_IRON, 867, 638.540527, 830.990112, -43.610939, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_COAL, 867, 630.540527, 830.990112, -43.610939, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_COAL, 868, 688.510498, 906.781005, -40.194725, -5.20000, 0.000000, 133.1999 ); CreateMiningRock( ORE_COAL, 867, 622.073303, 874.670532, -43.610939, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_SAPHHIRE, 867, 606.893066, 877.988037, -43.610939, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_IRON, 868, 600.279541, 870.543884, -43.557388, 0.000000, 0.000000, 45.00000 ); CreateMiningRock( ORE_IRON, 867, 579.832519, 893.789855, -44.315792, 0.000000, 0.000000, 15.00000 ); CreateMiningRock( ORE_DIAMOND, 867, 614.769104, 921.359924, -42.239196, 15.20000, -7.40000, 0.000000 ); CreateMiningRock( ORE_SAPHHIRE, 867, 609.398437, 914.821777, -43.654232, 12.70000, 0.000000, 0.000000 ); CreateMiningRock( ORE_BAUXITE, 867, 635.195068, 919.271728, -42.244331, 17.80000, 0.000000, 0.000000 ); CreateMiningRock( ORE_BAUXITE, 867, 654.036071, 926.508178, -40.387538, 14.20000, 0.000000, 0.000000 ); CreateMiningRock( ORE_SAPHHIRE, 868, 670.923217, 915.094238, -41.392536, 0.000000, 0.000000, 0.000000 ); CreateMiningRock( ORE_SAPHHIRE, 867, 685.852478, 899.059631, -40.304836, 0.000000, -3.60000, 0.000000 ); CreateMiningRock( ORE_RUBY, 867, 691.398437, 903.649169, -39.766517, -5.20000, 0.000000, 133.1990 ); CreateMiningRock( ORE_RUBY, 867, 692.537475, 898.189575, -39.629940, -4.79999, -5.69999, 0.000000 ); CreateMiningRock( ORE_RUBY, 867, 680.914611, 892.820068, -40.536987, 10.99999, -3.60000, -106.900 ); CreateMiningRock( ORE_GOLD, 867, 692.731994, 894.016052, -39.744705, 7.099992, -2.00000, -106.900 ); CreateMiningRock( ORE_GOLD, 867, 691.096679, 888.700439, -39.801738, -0.80000, 1.200000, 173.1999 ); CreateMiningRock( ORE_GOLD, 867, 684.758605, 885.710876, -40.225788, 0.000000, 0.000000, 15.00000 ); return 1; } hook OnPlayerDisconnect( playerid, reason ) { p_isMining{ playerid } = false; return 1; } hook OnServerGameDayEnd( ) { foreach ( new m : miningrock ) { g_miningData[ m ] [ E_ORES ] = g_miningData[ m ] [ E_MAX_ORES ]; // Replenish format( szNormalString, 14, "%s\n%d/%d", getOreName( g_miningData[ m ] [ E_ORE ] ), g_miningData[ m ] [ E_ORES ], g_miningData[ m ] [ E_MAX_ORES ] ); UpdateDynamic3DTextLabelText( g_miningData[ m ] [ E_LABEL ], g_miningData[ m ] [ E_COLOR ], szNormalString ); } return 1; } hook OnPlayerProgressUpdate( playerid, progressid, bool: canceled, params ) { if ( progressid == PROGRESS_MINING ) { new m = p_MiningOre{ playerid }; if ( !IsPlayerSpawned( playerid ) || ! Mining_IsPlayerNearOre( playerid, m, 3.0 ) || !IsPlayerConnected( playerid ) || IsPlayerInAnyVehicle( playerid ) || canceled ) return g_miningData[ m ] [ E_MINING ] = INVALID_PLAYER_ID, p_isMining{ playerid } = false, StopProgressBar( playerid ), 1; } return 1; } hook OnProgressCompleted( playerid, progressid, params ) { if ( progressid == PROGRESS_MINING ) { new m = p_MiningOre{ playerid }; new iRandom = random( 101 ); p_isMining{ playerid } = false; g_miningData[ m ] [ E_MINING ] = INVALID_PLAYER_ID; if ( ( g_miningData[ m ] [ E_ORE ] == ORE_IRON && iRandom > 80 ) || ( g_miningData[ m ] [ E_ORE ] == ORE_BAUXITE && iRandom > 85 ) || ( g_miningData[ m ] [ E_ORE ] == ORE_GOLD && iRandom > 45 ) || ( g_miningData[ m ] [ E_ORE ] == ORE_COAL && iRandom > 90 || ( g_miningData[ m ] [ E_ORE ] == ORE_DIAMOND && iRandom > 30 ) || ( g_miningData[ m ] [ E_ORE ] == ORE_RUBY && iRandom > 35 ) || ( g_miningData[ m ] [ E_ORE ] == ORE_SAPHHIRE && iRandom > 30 ) || ( g_miningData[ m ] [ E_ORE ] == ORE_EMERALD && iRandom > 52 ) || ( g_miningData[ m ] [ E_ORE ] == ORE_PLATINUM && iRandom > 25 ) || ( g_miningData[ m ] [ E_ORE ] == ORE_AMETHYST && iRandom > 75 ) ) ) { SetPlayerMineOre( playerid, m ); return SendError( playerid, "You did not find any ore. Mining again." ); } if ( GetPVarInt( playerid, "give_ore_score" ) < g_iTime ) GivePlayerScore( playerid, 1 ), SetPVarInt( playerid, "give_ore_score", g_iTime + 15 ); g_miningData[ m ] [ E_ORES ] --; format( szNormalString, 14, "%s\n%d/%d", getOreName( g_miningData[ m ] [ E_ORE ] ), g_miningData[ m ] [ E_ORES ], g_miningData[ m ] [ E_MAX_ORES ] ); UpdateDynamic3DTextLabelText( g_miningData[ m ] [ E_LABEL ], g_miningData[ m ] [ E_COLOR ], szNormalString ); if ( IsPlayerJailed( playerid ) ) { SendServerMessage( playerid, "Great you've mined an ore, now take it to the "COL_GREY"Rock Crusher"COL_WHITE"." ); } else { SendServerMessage( playerid, "Great you've mined an ore, now store it in a "COL_GREY"Dune"COL_WHITE"." ); } //GivePlayerExperience( playerid, E_MINING ); SetPVarInt( playerid, "carrying_ore", m ); SetPlayerSpecialAction( playerid, SPECIAL_ACTION_CARRY ); SetPlayerAttachedObject( playerid, 4, 2936, 5, 0.000000, 0.197999, 0.133999, 113.099983, -153.799987, 57.300003, 0.631000, 0.597000, 0.659999, g_miningData[ m ] [ E_ARGB ], g_miningData[ m ] [ E_ARGB ] ); } return 1; } hook OnPlayerEnterDynamicCP( playerid, checkpointid ) { if ( checkpointid == g_Checkpoints[ CP_ALCATRAZ_EXPORT ] ) { if ( IsPlayerAttachedObjectSlotUsed( playerid, 4 ) ) { new ore = GetPVarInt( playerid, "carrying_ore" ); if ( ! ( 0 <= ore < sizeof( g_miningData ) ) ) return SendError( playerid, "An error has occured, try again." ), RemoveEquippedOre( playerid ); new earned_money = floatround( float( g_orePrices[ g_miningData[ ore ] [ E_ORE ] ] ) * 0.5 ); GivePlayerCash( playerid, earned_money ); StockMarket_UpdateEarnings( E_STOCK_MINING_COMPANY, earned_money ); SendServerMessage( playerid, "You have crushed a "COL_GREY"%s"COL_WHITE" Ore and earned "COL_GOLD"%s"COL_WHITE".", getOreName( g_miningData[ ore ] [ E_ORE ] ), cash_format( earned_money ) ); RemoveEquippedOre( playerid ); } return Y_HOOKS_BREAK_RETURN_1; } return 1; } hook OnPlayerEnterDynArea( playerid, areaid ) { // mining dunes if ( GetGVarType( "mining_dune_area", areaid ) != GLOBAL_VARTYPE_NONE ) { new attached_vehicle = GetGVarInt( "mining_dune_area", areaid ); new attached_model = GetVehicleModel( attached_vehicle ); if ( attached_model == 573 ) { if ( IsPlayerAttachedObjectSlotUsed( playerid, 4 ) ) { static szID[ 15 ], szOres[ 15 ]; format( szOres, sizeof( szOres ), "mine_%d_ores", attached_vehicle ); if ( GetGVarInt( szOres ) >= MAX_ORE_STORAGE ) return SendError( playerid, "You can only carry %d ores in this vehicle.", MAX_ORE_STORAGE ); new ore = GetPVarInt( playerid, "carrying_ore" ); SetGVarInt( szOres, GetGVarInt( szOres ) + 1 ); format( szID, sizeof( szID ), "mine_%d_cash", attached_vehicle ), SetGVarInt( szID, GetGVarInt( szID ) + g_orePrices[ g_miningData[ ore ] [ E_ORE ] ] ); SendServerMessage( playerid, "You have stored a "COL_GREY"%s"COL_WHITE" ore in this Dune. "COL_ORANGE"[%d/%d]", getOreName( g_miningData[ ore ] [ E_ORE ] ), GetGVarInt( szOres ), MAX_ORE_STORAGE ); RemoveEquippedOre( playerid ); } } } return 1; } hook OnPlayerKeyStateChange( playerid, newkeys, oldkeys ) { if ( PRESSED( KEY_FIRE ) ) { // drop the ore if they click if ( GetPVarType( playerid, "carrying_ore" ) != PLAYER_VARTYPE_NONE && IsPlayerAttachedObjectSlotUsed( playerid, 4 ) ) { return RemoveEquippedOre( playerid ), SendServerMessage( playerid, "You have disposed of your mined ore." ), 1; } // mine the ore if ( GetPlayerWeapon( playerid ) == WEAPON_SHOVEL ) { if ( ! IsPlayerUsingAnimation( playerid ) && ! IsPlayerAttachedObjectSlotUsed( playerid, 4 ) && ! IsPlayerAttachedObjectSlotUsed( playerid, 3 ) && ! IsPlayerMining( playerid ) ) { static Float: X, Float: Y, Float: Z; foreach ( new m : miningrock ) { if ( Mining_IsPlayerNearOre( playerid, m, 2.5 ) ) { if ( IsPlayerConnected( g_miningData[ m ] [ E_MINING ] ) ) return SendError( playerid, "Somebody is currently mining this rock." ); if ( g_miningData[ m ] [ E_ORES ] <= 0 ) return SendError( playerid, "There are no ores left in this rock." ); SetPlayerFacePoint( playerid, X, Y, Z ); SetPlayerMineOre( playerid, m ); SendServerMessage( playerid, "You're now mining a rock." ); return 1; } } } } } return 1; } hook OnVehicleCreated( vehicleid, model_id ) { if ( model_id == 573 ) { new attachable_area = CreateDynamicSphere( 0.0, 0.0, 0.0, 2.5 ); AttachDynamicAreaToVehicle( attachable_area, vehicleid, 0.0, -4.0, 0.0 ); SetGVarInt( "mining_dune_area", vehicleid, attachable_area ); SetGVarInt( "mining_dune_veh", attachable_area, vehicleid ); } return 1; } hook OnVehicleDestroyed( vehicleid ) { if ( GetGVarType( "mining_dune_veh", vehicleid ) != GLOBAL_VARTYPE_NONE ) // destroy mining area { new areaid = GetGVarInt( "mining_dune_veh", vehicleid ); DestroyDynamicArea( areaid ); DeleteGVar( "mining_dune_veh", vehicleid ); DeleteGVar( "mining_dune_area", vehicleid ); } return 1; } hook OnPlayerDriveVehicle( playerid, vehicleid ) { if ( GetVehicleModel( vehicleid ) == 573 ) { new num_ores = GetGVarInt( sprintf( "mine_%d_ores", vehicleid ) ); // printf( "Ores stored %d for %d", num_ores, sprintf( "mine_%d_ores", vehicleid ) ) ; if ( num_ores > 0 ) { new cash_value = GetGVarInt( sprintf( "mine_%d_cash", vehicleid ) ); Beep( playerid ); GameTextForPlayer( playerid, "Go to the truck blip on your radar for money!", 3000, 1 ); SendServerMessage( playerid, "You have %d ores that you can export for "COL_GOLD"%s"COL_WHITE"!", num_ores, cash_format( cash_value ) ); static aPlayer[ 1 ]; aPlayer[ 0 ] = playerid; DestroyDynamicMapIcon( p_PawnStoreMapIcon[ playerid ] ); p_PawnStoreMapIcon[ playerid ] = CreateDynamicMapIconEx( -1945.6794, -1086.8906, 31.4261, 51, 0, MAPICON_GLOBAL, 6000.0, { -1 }, { -1 }, aPlayer ); p_MiningExport[ playerid ] = CreateDynamicRaceCP( 1, -1945.6794, -1086.8906, 31.4261, 0.0, 0.0, 0.0, 4.0, -1, -1, playerid ); } } return 1; } hook OnPlayerStateChange(playerid, newstate, oldstate) { if ( newstate != PLAYER_STATE_DRIVER && oldstate == PLAYER_STATE_DRIVER ) // Driver has a new state? { if ( p_MiningExport[ playerid ] != 0xFFFF ) { DestroyDynamicMapIcon( p_PawnStoreMapIcon[ playerid ] ); p_PawnStoreMapIcon[ playerid ] = 0xFFFF; DestroyDynamicRaceCP( p_MiningExport[ playerid ] ); p_MiningExport[ playerid ] = 0xFFFF; } } return 1; } hook OnPlayerEnterDynRaceCP( playerid, checkpointid ) { if ( p_MiningExport[ playerid ] == checkpointid ) { new vehicleid = GetPlayerVehicleID( playerid ); if ( GetVehicleModel( vehicleid ) == 573 ) { new szContent[ 15 ], cashEarned, oresExported ; format( szContent, sizeof( szContent ), "mine_%d_ores", vehicleid ); oresExported = GetGVarInt( szContent ), DeleteGVar( szContent ); format( szContent, sizeof( szContent ), "mine_%d_cash", vehicleid ); cashEarned = GetGVarInt( szContent ), DeleteGVar( szContent ); DestroyDynamicMapIcon( p_PawnStoreMapIcon[ playerid ] ); p_PawnStoreMapIcon[ playerid ] = 0xFFFF; DestroyDynamicRaceCP( p_MiningExport[ playerid ] ); p_MiningExport[ playerid ] = 0xFFFF; GivePlayerCash( playerid, cashEarned ); StockMarket_UpdateEarnings( E_STOCK_MINING_COMPANY, cashEarned ); GivePlayerScore( playerid, floatround( oresExported / 2 ) ); // 16 score is a bit too much for ore... so half that = 8 //GivePlayerExperience( playerid, E_MINING, float( oresExported ) * 0.2 ); SendServerMessage( playerid, "You have exported %d rock ore(s) to an industry, earning you "COL_GOLD"%s"COL_WHITE".", oresExported, cash_format( cashEarned ) ); } return Y_HOOKS_BREAK_RETURN_1; } return 1; } /* ** Functions ** */ stock CreateMiningRock( ore_type, model, Float: X, Float: Y, Float: Z, Float: rX = 0.0, Float: rY = 0.0, Float: rZ = 0.0 ) { new ID = Iter_Free(miningrock), szOre[ 14 ], iOreColour ; if ( ID != ITER_NONE ) { Iter_Add(miningrock, ID); g_miningData[ ID ] [ E_OBJECT ] = CreateDynamicObject( model, X, Y, Z, rX, rY, rZ ); g_miningData[ ID ] [ E_MINING ] = INVALID_PLAYER_ID; g_miningData[ ID ] [ E_ORES ] = g_oreQuanities[ ore_type ]; // To replenish g_miningData[ ID ] [ E_MAX_ORES ] = g_oreQuanities[ ore_type ]; g_miningData[ ID ] [ E_ORE ] = ore_type; switch( ore_type ) { case ORE_BAUXITE: { iOreColour = 0xC24000FF; SetDynamicObjectMaterial( g_miningData[ ID ] [ E_OBJECT ], 0, 2936, "kmb_rckx", "larock256", ( g_miningData[ ID ] [ E_ARGB ] = 0xFFC24000 ) ); } case ORE_COAL: { iOreColour = 0x5B5E28FF; SetDynamicObjectMaterial( g_miningData[ ID ] [ E_OBJECT ], 0, 2936, "kmb_rckx", "larock256", ( g_miningData[ ID ] [ E_ARGB ] = 0xFF5B5E28 ) ); } case ORE_IRON: { iOreColour = 0x3D3837FF; SetDynamicObjectMaterial( g_miningData[ ID ] [ E_OBJECT ], 0, 2936, "kmb_rckx", "larock256", ( g_miningData[ ID ] [ E_ARGB ] = 0xFF3D3837 ) ); } case ORE_GOLD: { iOreColour = 0xE6A615FF; SetDynamicObjectMaterial( g_miningData[ ID ] [ E_OBJECT ], 0, 2936, "kmb_rckx", "larock256", ( g_miningData[ ID ] [ E_ARGB ] = 0xFFE6A615 ) ); } case ORE_RUBY: { iOreColour = 0xE0115FFF; SetDynamicObjectMaterial( g_miningData[ ID ] [ E_OBJECT ], 0, 2936, "kmb_rckx", "larock256", ( g_miningData[ ID ] [ E_ARGB ] = 0xFFE0115F ) ); } case ORE_EMERALD: { iOreColour = 0x50C878FF; SetDynamicObjectMaterial( g_miningData[ ID ] [ E_OBJECT ], 0, 2936, "kmb_rckx", "larock256", ( g_miningData[ ID ] [ E_ARGB ] = 0xFF50C878 ) ); } case ORE_SAPHHIRE: { iOreColour = 0x0F52BAFF; SetDynamicObjectMaterial( g_miningData[ ID ] [ E_OBJECT ], 0, 2936, "kmb_rckx", "larock256", ( g_miningData[ ID ] [ E_ARGB ] = 0xFF0F52BA ) ); } case ORE_PLATINUM: { iOreColour = 0xE5E5E5FF; SetDynamicObjectMaterial( g_miningData[ ID ] [ E_OBJECT ], 0, 2936, "kmb_rckx", "larock256", ( g_miningData[ ID ] [ E_ARGB ] = 0xFFE5E5E5 ) ); } case ORE_DIAMOND: { iOreColour = 0x232323FF; SetDynamicObjectMaterial( g_miningData[ ID ] [ E_OBJECT ], 0, 2936, "kmb_rckx", "larock256", ( g_miningData[ ID ] [ E_ARGB ] = 0xFF232323 ) ); } case ORE_AMETHYST: { iOreColour = 0x9966CCFF; SetDynamicObjectMaterial( g_miningData[ ID ] [ E_OBJECT ], 0, 2936, "kmb_rckx", "larock256", ( g_miningData[ ID ] [ E_ARGB ] = 0xFF9966CC ) ); } } format( szOre, sizeof( szOre ), "%s\n%d/%d", getOreName( ore_type ), g_miningData[ ID ] [ E_ORES ], g_miningData[ ID ] [ E_MAX_ORES ] ); g_miningData[ ID ] [ E_COLOR ] = iOreColour; g_miningData[ ID ] [ E_LABEL ] = CreateDynamic3DTextLabel( szOre, iOreColour, X, Y, Z + 1, 10.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1 ); } return ID; } stock getOreName( id ) { static szOre[ 9 ]; switch( id ) { case ORE_GOLD: szOre = "Gold"; case ORE_IRON: szOre = "Iron"; case ORE_COAL: szOre = "Coal"; case ORE_BAUXITE: szOre = "Bauxite"; case ORE_AMETHYST: szOre = "Amethyst"; case ORE_EMERALD: szOre = "Emerald"; case ORE_SAPHHIRE: szOre = "Saphhire"; case ORE_PLATINUM: szOre = "Platinum"; case ORE_DIAMOND: szOre = "Diamond"; case ORE_RUBY: szOre = "Ruby"; default: szOre = "n/a"; } return szOre; } stock RemoveEquippedOre( playerid ) { RemovePlayerAttachedObject( playerid, 4 ); SetPlayerSpecialAction( playerid, SPECIAL_ACTION_NONE ); ClearAnimations( playerid ); DeletePVar( playerid, "carrying_ore" ); return 1; } stock SetPlayerMineOre( playerid, m ) { SetPlayerArmedWeapon( playerid, WEAPON_SHOVEL ); ApplyAnimation( playerid, "BASEBALL", "Bat_4", 2.0, 1, 0, 0, 0, 0 ); p_isMining{ playerid } = true; g_miningData[ m ] [ E_MINING ] = playerid; p_MiningOre{ playerid } = m; ShowProgressBar( playerid, "Mining Rock", PROGRESS_MINING, g_oreMiningTime[ g_miningData[ m ] [ E_ORE ] ], g_miningData[ m ] [ E_COLOR ] ); } stock Mining_IsPlayerNearOre( playerid, oreid, Float: distance ) { static Float: X, Float: Y, Float: Z; if ( GetDynamicObjectPos( g_miningData[ oreid ] [ E_OBJECT ], X, Y, Z ) ) { return IsPlayerInRangeOfPoint( playerid, distance, X, Y, Z ); } else { return 0; } } stock IsPlayerMining( playerid ) { return p_isMining{ playerid }; }