Car health help
#1

Guys i have the car health bar of 3d textdraw.I can see it but other players cannot.How i solve my problem
Here is my code
Код:
//3D Live bar car by 007

#include <a_samp>
#define JumpKey    			KEY_SUBMISSION
#define PRESSED(%0) \
	(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
	
	
	
new PlayerText3D:CarLabel[MAX_PLAYERS];
new bool:LabelActive[MAX_PLAYERS];

new Float:OldHealth[MAX_PLAYERS];
new Float:OldDamage[MAX_PLAYERS];
new Float:CDamage[MAX_PLAYERS];

new timercar[MAX_PLAYERS];
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
  new Float:HP,veh;
  veh = GetPlayerVehicleID(playerid);
  GetVehicleHealth(veh, HP);
  new vehicleid = GetPlayerVehicleID(playerid);
  new seat=GetPlayerState(playerid);
  if(PRESSED(KEY_SUBMISSION))
	{
		if(seat!=PLAYER_STATE_PASSENGER)
		{
		new Float:x, Float:y, Float:z;
		new vehicle = GetPlayerVehicleID(playerid);
		new VehicleID, Float:X, Float:Y, Float:Z, Float:Angle;
		if(IsPlayerInVehicle(playerid, vehicleid))
			{
			VehicleID = GetPlayerVehicleID(playerid);
			GetVehicleZAngle(VehicleID, Angle);
			GetVehiclePos(VehicleID,X,Y,Z);
			SetVehiclePos(VehicleID, X, Y, Z);
			SetVehicleZAngle(VehicleID, Angle);
			GetVehicleVelocity(vehicle,x,y,z);
			SetVehicleVelocity(vehicle,x,y,z+0.2);
			UpdateHP(playerid);
			UpdatePlayer3DTextLabelText(playerid, CarLabel[playerid], -1, UpdateString(HP));
			RepairVehicle(GetPlayerVehicleID(playerid));
			}
		}
	}
  return 1;
}
public OnPlayerConnect(playerid)
{
	LabelActive[playerid] = false;
	return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	if(newstate == PLAYER_STATE_DRIVER)
	{
		CarLabel[playerid] = CreatePlayer3DTextLabel(playerid," ",-1,0,0,0.9,10.0,INVALID_PLAYER_ID,GetPlayerVehicleID(playerid),1);
		UpdateBar(playerid);
	}
	else
	{
		DeletePlayer3DTextLabel(playerid,CarLabel[playerid]);
	}
	return 1;
}

public OnPlayerUpdate(playerid)
{
	UpdateHP(playerid);
	return 1;
}

stock UpdateHP(playerid)
{
	if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;
	new Float:HP,veh;
 	veh = GetPlayerVehicleID(playerid);
	GetVehicleHealth(veh, HP);
	if(HP != OldHealth[playerid])
	{
		OldDamage[playerid]=OldHealth[playerid]-HP;
		OldHealth[playerid] = HP;
		if(OldDamage[playerid] > 0)
		{

			new texts[128];
			if(LabelActive[playerid])
			{
				CDamage[playerid]+=OldDamage[playerid];
				format(texts,sizeof(texts),"{ffd800}%s",UpdateString(HP));
				KillTimer(timercar[playerid]);
				timercar[playerid] = SetTimerEx("DeleteText", 2000, 0, "i", playerid);
			}
			else
			{
				LabelActive[playerid] = true;
				format(texts,sizeof(texts),"{ffd800}%s",UpdateString(HP));
				timercar[playerid] = SetTimerEx("DeleteText", 2000, 0, "i", playerid);
			}
			UpdatePlayer3DTextLabelText(playerid, CarLabel[playerid], -1, texts);
		}
	}
	return 1;
}

stock UpdateBar(playerid)
{
	new Float:HP,veh;
 	veh = GetPlayerVehicleID(playerid);
	GetVehicleHealth(veh, HP);
	UpdateString(HP);
	RepairVehicle(GetPlayerVehicleID(playerid));
	UpdatePlayer3DTextLabelText(playerid, CarLabel[playerid], -1, UpdateString(HP));
	return 1;
}

stock UpdateString(Float:HP)
{
	new str[30];
	if(HP == 1000)          format(str,sizeof(str),"{00ff00}••••••••••");
	else if(HP >= 900)  	format(str,sizeof(str),"{66ff00}•••••••••{ffffff}•");
	else if(HP >= 800) 		format(str,sizeof(str),"{7fff00}••••••••{ffffff}••");
	else if(HP >= 700)		format(str,sizeof(str),"{ccff00}•••••••{ffffff}•••");
	else if(HP >= 600)		format(str,sizeof(str),"{f7f21a}••••••{ffffff}••••");
	else if(HP >= 500)		format(str,sizeof(str),"{f4c430}•••••{ffffff}•••••");
	else if(HP >= 400)		format(str,sizeof(str),"{e49b0f}••••{ffffff}••••••");
	else if(HP >= 300)		format(str,sizeof(str),"{e4650e}•••{ffffff}•••••••");
	else if(HP >= 250)		format(str,sizeof(str),"{ff2400}••{ffffff}••••••••");
	else 					format(str,sizeof(str),"{ff2400}••••••••••");
	return str;
}


forward DeleteText(playerid);
public DeleteText(playerid)
{
	KillTimer(timercar[playerid]);
	LabelActive[playerid] = false;
	UpdateBar(playerid);
	CDamage[playerid]=0;
	return 1;
}
Reply
#2

You are using a UpdatePlayer3DTextLabelText, this will only be visible for one player, you should link the labels to the vehicles instead to the players.
So like, Create3dTextLabel , attach3dtextlabeltovehicle or something, search it at the wiki.
This should be that hard.
Reply
#3

Can u correct the code which i posted?
Reply
#4

here u go:
https://sampwiki.blast.hk/wiki/UpdatePlayer3DTextLabelText

https://sampwiki.blast.hk/wiki/Create3DTextLabel

https://sampwiki.blast.hk/wiki/Attach3DTextLabelToVehicle

https://sampwiki.blast.hk/
Reply
#5

so i have to use Attach3DTextLabelToVehicle in place of Update yeah??
Reply
#6

pawn Код:
veh = GetPlayerVehicleID(playerid);
new vehicleid = GetPlayerVehicleID(playerid);
new vehicle = GetPlayerVehicleID(playerid);
VehicleID = GetPlayerVehicleID(playerid);
What's the point of doing that? Its storing the same function to different integers. Why?

And now i've noticed, there's a lot of bugs! For what you checking is player in vehicle and player state?
Reply
#7

Here try this:
pawn Код:
//3D Live bar car by 007

#include <a_samp>
#define JumpKey             KEY_SUBMISSION
#define PRESSED(%0) \
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
   
   
   
new Text3D:CarLabel[MAX_PLAYERS];
new bool:LabelActive[MAX_PLAYERS];

new Float:OldHealth[MAX_PLAYERS];
new Float:OldDamage[MAX_PLAYERS];
new Float:CDamage[MAX_PLAYERS];

new timercar[MAX_PLAYERS];
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
  new Float:HP,veh;
  veh = GetPlayerVehicleID(playerid);
  GetVehicleHealth(veh, HP);
  new vehicleid = GetPlayerVehicleID(playerid);
  new seat=GetPlayerState(playerid);
  if(PRESSED(KEY_SUBMISSION))
    {
        if(seat!=PLAYER_STATE_PASSENGER)
        {
        new Float:x, Float:y, Float:z;
        new vehicle = GetPlayerVehicleID(playerid);
        new VehicleID, Float:X, Float:Y, Float:Z, Float:Angle;
        if(IsPlayerInVehicle(playerid, vehicleid))
            {
            VehicleID = GetPlayerVehicleID(playerid);
            GetVehicleZAngle(VehicleID, Angle);
            GetVehiclePos(VehicleID,X,Y,Z);
            SetVehiclePos(VehicleID, X, Y, Z);
            SetVehicleZAngle(VehicleID, Angle);
            GetVehicleVelocity(vehicle,x,y,z);
            SetVehicleVelocity(vehicle,x,y,z+0.2);
            UpdateHP(playerid);
            Update3DTextLabelText(CarLabel[playerid], -1, UpdateString(HP));
            RepairVehicle(GetPlayerVehicleID(playerid));
            }
        }
    }
  return 1;
}
public OnPlayerConnect(playerid)
{
    LabelActive[playerid] = false;
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER)
    {
        Delete3DTextLabel(CarLabel[playerid] );
        CarLabel[playerid] Create3DTextLabel(UpdateString(HP), 0xFF0000AA, 0.0, 0.0, 0.0, 50.0, 0, 1 );
        Attach3DTextLabelToVehicle( CarLabel[playerid]  , VehicleID, 0.0, 0.0, 2.0);
        UpdateBar(playerid);
    }
    else
    {
        DeletePlayer3DTextLabel(playerid,CarLabel[playerid]);
    }
    return 1;
}

public OnPlayerUpdate(playerid)
{
    UpdateHP(playerid);
    return 1;
}

stock UpdateHP(playerid)
{
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;
    new Float:HP,veh;
    veh = GetPlayerVehicleID(playerid);
    GetVehicleHealth(veh, HP);
    if(HP != OldHealth[playerid])
    {
        OldDamage[playerid]=OldHealth[playerid]-HP;
        OldHealth[playerid] = HP;
        if(OldDamage[playerid] > 0)
        {

            new texts[128];
            if(LabelActive[playerid])
            {
                CDamage[playerid]+=OldDamage[playerid];
                format(texts,sizeof(texts),"{ffd800}%s",UpdateString(HP));
                KillTimer(timercar[playerid]);
                timercar[playerid] = SetTimerEx("DeleteText", 2000, 0, "i", playerid);
            }
            else
            {
                LabelActive[playerid] = true;
                format(texts,sizeof(texts),"{ffd800}%s",UpdateString(HP));
                timercar[playerid] = SetTimerEx("DeleteText", 2000, 0, "i", playerid);
            }
             Update3DTextLabelText(CarLabel[playerid], -1, texts);
        }
    }
    return 1;
}

stock UpdateBar(playerid)
{
    new Float:HP,veh;
    veh = GetPlayerVehicleID(playerid);
    GetVehicleHealth(veh, HP);
    UpdateString(HP);
    RepairVehicle(GetPlayerVehicleID(playerid));
    Update3DTextLabelText(CarLabel[playerid], -1, UpdateString(HP));
    return 1;
}

stock UpdateString(Float:HP)
{
    new str[30];
    if(HP == 1000)          format(str,sizeof(str),"{00ff00}••••••••••");
    else if(HP >= 900)      format(str,sizeof(str),"{66ff00}•••••••••{ffffff}•");
    else if(HP >= 800)      format(str,sizeof(str),"{7fff00}••••••••{ffffff}••");
    else if(HP >= 700)      format(str,sizeof(str),"{ccff00}•••••••{ffffff}•••");
    else if(HP >= 600)      format(str,sizeof(str),"{f7f21a}••••••{ffffff}••••");
    else if(HP >= 500)      format(str,sizeof(str),"{f4c430}•••••{ffffff}•••••");
    else if(HP >= 400)      format(str,sizeof(str),"{e49b0f}••••{ffffff}••••••");
    else if(HP >= 300)      format(str,sizeof(str),"{e4650e}•••{ffffff}•••••••");
    else if(HP >= 250)      format(str,sizeof(str),"{ff2400}••{ffffff}••••••••");
    else                    format(str,sizeof(str),"{ff2400}••••••••••");
    return str;
}


forward DeleteText(playerid);
public DeleteText(playerid)
{
    KillTimer(timercar[playerid]);
    LabelActive[playerid] = false;
    UpdateBar(playerid);
    CDamage[playerid]=0;
    return 1;
}
Not sure if it works, because I cannot test it atm.
Reply
#8

2 warnings
Reply
#9

Quote:
Originally Posted by Gamer_007
Посмотреть сообщение
2 warnings
Ammmmmm.. I am a clairvoyant ball and i guess its.. i don't know. You're kidding with us, right?
Reply
#10

Quote:
Originally Posted by Riddick94
Посмотреть сообщение
Ammmmmm.. I am a clairvoyant ball and i guess its.. i don't know. You're kidding with us, right?
Just wanna tell btw i fixed it but i want someone to test with me.will anyone?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)