Question
#1

I have one problem with OnPlayerStateChange.. I made seatbelt/helmet system but the problem is when player fall from bike it says "you have unbuckled your seatbelt" it should say "you removed safety helmet"... - this was when code was OnPlayerExitVehicle

Now I moved code OnPlayerStateChange and it won't even say that I removed my helmet when I go off the bike..
All I want to do is when player fall off the bike it should say that player removed safety helmet.

pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{

    new string[256];
    new sendername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    new vehicleid = GetPlayerVehicleID(playerid);

    if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_EXIT_VEHICLE)
    {
        if(SeatBelt[playerid] == 1)
        {
            if(IsModelABike(vehicleid)) // Bike - helmet
            {
                SeatBelt[playerid] = 0;
                if(IsPlayerAttachedObjectSlotUsed(playerid, 1)) RemovePlayerAttachedObject(playerid, helmet[0]); // Removing his helmet
                if (Masked[playerid] == 1) format(string, sizeof(string), "*Stranger_%d removes the safety helmet.", maskid[playerid]);
                else format(string, sizeof(string), "*%s removes the safety helmet.", sendername);
                ProxDetector(8.0, playerid, string,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA);
                return 1;
            }
            else // SEATBELT
            {
                SeatBelt[playerid] = 0;
                if (Masked[playerid] == 1) format(string, sizeof(string), "*Stranger_%d unbuckles his seatbelt.", maskid[playerid]);
                else format(string, sizeof(string), "*%s unbuckles his seatbelt.", sendername);
                ProxDetector(8.0, playerid, string,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA);
            }
        }
    }
Reply
#2

I suggest put onfall bike code(helmet) in : OnPlayerExitVehicle
Reply
#3

Код:
if(IsModelABike(vehicleid)) // Bike - helmet
            {
                SeatBelt[playerid] = 0;
                if(IsPlayerAttachedObjectSlotUsed(playerid, 1)) RemovePlayerAttachedObject(playerid, helmet[0]); // Removing his helmet
                if (Masked[playerid] == 1) format(string, sizeof(string), "*Stranger_%d removes the safety helmet.", maskid[playerid]);
                else format(string, sizeof(string), "*%s removes the safety helmet.", sendername);
                ProxDetector(8.0, playerid, string,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA);
                return 1;
            }
            else // SEATBELT
            {
                SeatBelt[playerid] = 0;
                if (Masked[playerid] == 1) format(string, sizeof(string), "*Stranger_%d unbuckles his seatbelt.", maskid[playerid]);
                else format(string, sizeof(string), "*%s unbuckles his seatbelt.", sendername);
                ProxDetector(8.0, playerid, string,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA);
            }
In

Код:
OnPlayerExitVehicle
Reply
#4

I've put that OnPlayerExitVehicle.. but when player fall from the bike it's still same.. it doesn't remove his helmet..
Reply
#5

Are you certain you are removing the helmet from the actual object slot? Maybe the helmet is in another slot?
Reply
#6

OnPlayerExitVehicle is not called when a player falls off a bike...
It even tells you that on the wiki... https://sampwiki.blast.hk/wiki/OnPlayerExitVehicle

And use PLAYER_STATE_ONFOOT, because the same applies to PLAYER_STATE_EXIT_VEHICLE with falling off bikes..
Reply
#7

Okay if I'm using onplayerstate change it's working bit better but why it sends message "unbuckles his seatbelt" instead of "removes safety helmet" ??

pawn Код:
new string[256];
    new sendername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    new vehicleid = GetPlayerVehicleID(playerid);

    if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT)
    {
        if(SeatBelt[playerid] == 1)
        {
            if(IsModelABike(vehicleid)) // Bike - helmet
            {
                SeatBelt[playerid] = 0;
                if(IsPlayerAttachedObjectSlotUsed(playerid, 1)) RemovePlayerAttachedObject(playerid, helmet[0]); // Removing his helmet
                if (Masked[playerid] == 1) format(string, sizeof(string), "*Stranger_%d removes the safety helmet.", maskid[playerid]);
                else format(string, sizeof(string), "*%s removes the safety helmet.", sendername);
                ProxDetector(8.0, playerid, string,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA);
                return 1;
            }
            else // SEATBELT
            {
                SeatBelt[playerid] = 0;
                if (Masked[playerid] == 1) format(string, sizeof(string), "*Stranger_%d unbuckles his seatbelt.", maskid[playerid]);
                else format(string, sizeof(string), "*%s unbuckles his seatbelt.", sendername);
                ProxDetector(8.0, playerid, string,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA);
            }
        }
    }
Reply
#8

If the player is not in a vehicle, what do you think 'GetPlayerVehicleID(playerid)' returns? It returns '0'.
Then you do 'if(IsModelABike(0))', which is not going to go well... so it heads for the 'else' instead.

So you should rather do:
pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate & (PLAYER_STATE_DRIVER || PLAYER_STATE_PASSENGER)) //Player entered the vehicle
    {
        SeatBelt[playerid] = (IsModelABike(GetPlayerVehicleID(playerid))) ? (2) : (1);
        //SeatBelt[playerid] = ...        Bike (2), Other Vehicle (1). So if 'SeatBelt[playerid] == 2', it means they're wearing a helmet.
    }
    if((newstate & PLAYER_STATE_ONFOOT) && (oldstate & (PLAYER_STATE_DRIVER || PLAYER_STATE_PASSENGER)))
    {
        if(SeatBelt[playerid] == 2) //Bike - helmet
        {
            SeatBelt[playerid] = 0;
            if(IsPlayerAttachedObjectSlotUsed(playerid, 1)) RemovePlayerAttachedObject(playerid, helmet[0]); // Removing his helmet
            if(Masked[playerid] == 1) format(string, sizeof(string), "*Stranger_%d removes the safety helmet.", maskid[playerid]);
            else format(string, sizeof(string), "*%s removes the safety helmet.", sendername);
            ProxDetector(8.0, playerid, string,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA);
        }
        else if(SeatBelt[playerid] == 1) //Seatbelt
        {
            SeatBelt[playerid] = 0;
            if(Masked[playerid] == 1) format(string, sizeof(string), "*Stranger_%d unbuckles his seatbelt.", maskid[playerid]);
            else format(string, sizeof(string), "*%s unbuckles his seatbelt.", sendername);
            ProxDetector(8.0, playerid, string,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA,0x33CCFFAA);
        }
    }
    return 1;
}
Reply
#9

pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{

    new string[256];
    new sendername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    new vehicleid = GetPlayerVehicleID(playerid);

    if(newstate & (PLAYER_STATE_DRIVER || PLAYER_STATE_PASSENGER)) //tag mismatch
    {
        SeatBelt[playerid] = (IsModelABike(GetPlayerVehicleID(playerid))) ? (2) : (1);
        //SeatBelt[playerid] = ...        Bike (2), Other Vehicle (1). So if 'SeatBelt[playerid] == 2', it means they're wearing a helmet.
    }
    if((newstate & PLAYER_STATE_ONFOOT) && (oldstate & (PLAYER_STATE_DRIVER || PLAYER_STATE_PASSENGER))) //tag mismatch
2x tagmismatch I commented lines
Reply
#10

pawn Код:
if(newstate & PLAYER_STATE_DRIVER || newstate & PLAYER_STATE_PASSENGER)

if(newstate & PLAYER_STATE_ONFOOT && (oldstate & PLAYER_STATE_DRIVER || oldstate & PLAYER_STATE_PASSENGER))
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)