/* * Irresistible Gaming (c) 2018 * Developed by Lorenc Pekaj * Module: cnr\features\minijobs\paramedic.pwn * Purpose: a paramedic minijob where people can heal with spraycans or ambulance trucks */ /* ** Includes ** */ #include < YSI\y_hooks > /* ** Definitions ** */ DEFINE_HOOK_REPLACEMENT ( Damage, Dmg ); /* ** Variables ** */ /*static stock p_CureDealer [ MAX_PLAYERS ] = { INVALID_PLAYER_ID, ... }, p_CureTick [ MAX_PLAYERS ], p_HealDealer [ MAX_PLAYERS ] = { INVALID_PLAYER_ID, ... }, p_HealTick [ MAX_PLAYERS ], p_LastCuredTS [ MAX_PLAYERS ], p_LastHealedTS [ MAX_PLAYERS ] ;*/ /* ** Hooks ** */ #if defined AC_INCLUDED hook OnPlayerTakePlayerDmg( playerid, issuerid, &Float: amount, weaponid, bodypart ) { // Heal player (paramedic) if ( weaponid == WEAPON_SPRAYCAN ) { new Float: fHealth = AC_GetPlayerHealth( playerid ); if ( fHealth < 100.0 ) { AC_AddPlayerHealth( playerid, amount ); } return 0; } return 1; } #endif hook OnPlayerUpdateEx( playerid ) { new iVehicle = GetPlayerVehicleID( playerid ); if ( iVehicle ) { if ( GetPlayerState( playerid ) == PLAYER_STATE_PASSENGER ) { if ( GetVehicleModel( iVehicle ) == 416 ) { new iDriver = GetVehicleDriver( iVehicle ); if ( IsPlayerConnected( iDriver ) ) { new Float: fHealth; if ( GetPlayerHealth( playerid, fHealth ) && fHealth < 100.0 ) { SetPlayerHealth( playerid, fHealth + 2.0 ), GivePlayerCash( iDriver, 10 ); } } } } } return 1; } /*hook OnPlayerDisconnect( playerid, reason ) { p_HealDealer[ playerid ] = INVALID_PLAYER_ID; return 1; }*/ /* ** Commands ** */ /*CMD:cure( playerid, params[ ] ) { new pID, time = g_iTime ; if ( p_Class[ playerid ] != CLASS_MEDIC ) return SendError( playerid, "This is restricted to medics only." ); else if ( sscanf( params, "u", pID ) ) return SendUsage( playerid, "/cure [PLAYER_ID]" ); else if ( p_Spectating{ playerid } ) return SendError( playerid, "You cannot use such commands while you're spectating." ); else if ( !IsPlayerConnected( pID ) ) return SendError( playerid, "This player is not connected." ); else if ( playerid == pID ) return SendError( playerid, "You cannot offer to cure yourself." ); else if ( GetPlayerCash( pID ) < 4875 ) return SendError( playerid, "This player doesn't have enough money to get a cure." ); else if ( GetDistanceBetweenPlayers( playerid, pID ) < 4.0 ) { if ( IsPlayerInAnyVehicle( pID ) ) return SendError( playerid, "This player is in a vehicle " ); if ( IsPlayerInAnyVehicle( playerid ) ) return SendError( playerid, "You cannot do this while you're inside a vehicle." ); if ( p_LastCuredTS[ playerid ] > time ) return SendError( playerid, "You must wait another %d seconds before curing somebody.", p_LastCuredTS[ playerid ] - time ); SendClientMessageFormatted( pID, -1, ""COL_ORANGE"[DISEASE CURE]{FFFFFF} %s(%d) wishes to cure you for $4,875. "COL_ORANGE"/acceptcure{FFFFFF} to accept the deal.", ReturnPlayerName( playerid ), playerid ); SendClientMessageFormatted( playerid, -1, ""COL_ORANGE"[DISEASE CURE]{FFFFFF} You have offered %s(%d) a cure for $4875.", ReturnPlayerName( pID ), pID ); p_CureDealer[ pID ] = playerid; p_CureTick[ pID ] = time + 120; } else SendError( playerid, "This player is not nearby." ); return 1; } CMD:ac( playerid, params[ ] ) return cmd_acceptcure( playerid, params ); CMD:acceptcure( playerid, params[ ] ) { new time = g_iTime; if ( !IsPlayerConnected( p_CureDealer[ playerid ] ) ) return SendError( playerid, "Your dealer isn't connected anymore." ); else if ( time > p_CureTick[ playerid ] ) return p_CureDealer[ playerid ] = INVALID_PLAYER_ID, SendError( playerid, "This deal has ended, each deal goes for 2 minutes maximum. You were late." ); else if ( GetPlayerCash( playerid ) < 4875 ) return SendError( playerid, "You do not have enough money to get a cure." ); else if ( p_Jailed{ playerid } ) return SendError( playerid, "You cannot buy cures while you're in jail." ); else if ( p_Class[ p_CureDealer[ playerid ] ] != CLASS_MEDIC ) return SendError( playerid, "The paramedic that offered you is no longer a paramedic." ); else { Beep( p_CureDealer[ playerid ] ); SendClientMessageFormatted( playerid, -1, ""COL_ORANGE"[DISEASE CURE]{FFFFFF} You have been cured from all diseases by %s(%d) for $4,875. ", ReturnPlayerName( p_CureDealer[ playerid ] ), p_CureDealer[ playerid ] ); SendClientMessageFormatted( p_CureDealer[ playerid ], -1, ""COL_ORANGE"[DISEASE CURE]{FFFFFF} %s(%d) has paid and got himself cured.", ReturnPlayerName( playerid ), playerid ); p_InfectedHIV{ playerid } = false; GivePlayerCash( playerid, -4875 ); GivePlayerCash( p_CureDealer[ playerid ], 4875 ); GivePlayerScore( p_CureDealer[ playerid ], 2 ); //GivePlayerExperience( p_CureDealer[ playerid ], E_PARAMEDIC ); p_LastCuredTS[ p_CureDealer[ playerid ] ] = time + 15; p_CureDealer[ playerid ] = INVALID_PLAYER_ID; } return 1; } CMD:heal( playerid, params[ ] ) { new pID; if ( p_Class[ playerid ] != CLASS_MEDIC ) return SendError( playerid, "This is restricted to medics only." ); else if ( sscanf( params, "u", pID ) ) return SendUsage( playerid, "/heal [PLAYER_ID]" ); else if ( p_Spectating{ playerid } ) return SendError( playerid, "You cannot use such commands while you're spectating." ); else if ( !IsPlayerConnected( pID ) ) return SendError( playerid, "This player is not connected." ); else if ( playerid == pID ) return SendError( playerid, "You cannot offer to heal yourself." ); else if ( GetPlayerCash( pID ) < 750 ) return SendError( playerid, "This player doesn't have enough money to get a health refill." ); else if ( GetDistanceBetweenPlayers( playerid, pID ) < 4.0 ) { if ( IsPlayerInAnyVehicle( pID ) ) return SendError( playerid, "This player is in a vehicle " ); if ( IsPlayerInAnyVehicle( playerid ) ) return SendError( playerid, "You cannot do this while you're inside a vehicle." ); if ( p_LastHealedTS[ playerid ] > g_iTime ) return SendError( playerid, "You must wait another %d seconds before curing somebody.", p_LastHealedTS[ playerid ] - g_iTime ); SendClientMessageFormatted( pID, -1, ""COL_ORANGE"[HEALTH REFILL]{FFFFFF} %s(%d) wishes to heal you for $1,200. "COL_ORANGE"/acceptheal{FFFFFF} to accept the deal.", ReturnPlayerName( playerid ), playerid ); SendClientMessageFormatted( playerid, -1, ""COL_ORANGE"[HEALTH REFILL]{FFFFFF} You have offered %s(%d) a health refill for $1,200.", ReturnPlayerName( pID ), pID ); p_HealDealer[ pID ] = playerid; p_HealTick[ pID ] = g_iTime + 120; } else SendError( playerid, "This player is not nearby." ); return 1; } CMD:ah( playerid, params[ ] ) return cmd_acceptheal( playerid, params ); CMD:acceptheal( playerid, params[ ] ) { new Float: fHealth; if ( !IsPlayerConnected( p_HealDealer[ playerid ] ) ) return SendError( playerid, "Your dealer isn't connected anymore." ); else if ( g_iTime > p_HealTick[ playerid ] ) return p_HealDealer[ playerid ] = INVALID_PLAYER_ID, SendError( playerid, "This deal has ended, each deal goes for 2 minutes maximum. You were late." ); else if ( GetPlayerCash( playerid ) < 750 ) return SendError( playerid, "You do not have enough money to get a health refill." ); else if ( p_Jailed{ playerid } ) return SendError( playerid, "You cannot buy heals while you're in jail." ); else if ( p_Class[ p_HealDealer[ playerid ] ] != CLASS_MEDIC ) return SendError( playerid, "The paramedic that offered you is no longer a paramedic." ); else if ( IsPlayerInEvent( playerid ) ) return SendError( playerid, "You cannot use this command since you're in an event." ); else if ( GetPlayerHealth( playerid, fHealth ) && fHealth >= 90.0 ) return SendError( playerid, "You need to have less than 90 percent of your health to be healed." ); else { Beep( p_HealDealer[ playerid ] ); SendClientMessageFormatted( playerid, -1, ""COL_ORANGE"[HEALTH REFILL]{FFFFFF} You have patched up and healed by %s(%d) for $1,200. ", ReturnPlayerName( p_HealDealer[ playerid ] ), p_HealDealer[ playerid ] ); SendClientMessageFormatted( p_HealDealer[ playerid ], -1, ""COL_ORANGE"[HEALTH REFILL]{FFFFFF} %s(%d) has paid and got his health refilled.", ReturnPlayerName( playerid ), playerid ); SetPlayerHealth( playerid, 120.0 ); GivePlayerCash( playerid, -1200 ); GivePlayerCash( p_HealDealer[ playerid ], 1200 ); GivePlayerScore( p_HealDealer[ playerid ], 2 ); //GivePlayerExperience( p_HealDealer[ playerid ], E_PARAMEDIC ); p_LastHealedTS[ p_HealDealer[ playerid ] ] = g_iTime + 15; p_HealDealer[ playerid ] = INVALID_PLAYER_ID; } return 1; }*/