SA-MP Forums Archive
Updating 3D text label makes it dissapear - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Updating 3D text label makes it dissapear (/showthread.php?tid=671743)



Updating 3D text label makes it dissapear - DomagojSellug - 10.01.2020

Basically I want to add a sort of a "loading bar" with 3D text labels for when player gets revived, but it doesn't seem to work. It starts at two bars and just disappears, that's it.

pawn Code:
RevivingText[playerid] = Create3DTextLabel("(( |--------- ))\nHELPING UP", COLOR_DARKGREEN, pX, pY, pZ, 25.0, -1, 0);

        reviveCount[playerid] = 0;
        reviveTextTimer[playerid] = SetTimerEx("updateRevivingText", 500, true, "ddfff", playerid, reviveCount[playerid], pX, pY, pZ);

forward updateRevivingText(playerid, count, Float:x, Float:y, Float:z);
public updateRevivingText(playerid, count, Float:x, Float:y, Float:z)
{
    switch(count)
    {
        case 0: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||-------- ))\nHELPING UP");
        case 1: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||------- ))\nHELPING UP");
        case 2: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||------ ))\nHELPING UP");
        case 3: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||----- ))\nHELPING UP");
        case 4: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||||---- ))\nHELPING UP");
        case 5: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||--- ))\nHELPING UP");    
        case 6: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||||||-- ))\nHELPING UP");
        case 7: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||||- ))\nHELPING UP");
        case 8: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||||| ))\nHELPING UP");
        case 9:
        {
            Delete3DTextLabel(RevivingText[playerid]);
            KillTimer(reviveTextTimer[playerid]);
            reviveCount[playerid] = 0;
            count = 0;
            return 1;
        }
    }
    count++;
    reviveCount[playerid]++;
    return 1;
}



Re: Updating 3D text label makes it dissapear - Calisthenics - 10.01.2020

`count` is always 0, it does not matter if you modify its value in the callback. The initial value you passed in `SetTimerEx` is used.

pawn Code:
reviveCount[playerid] = 0;
reviveTextTimer[playerid] = SetTimerEx("updateRevivingText", 500, true, "d", playerid);
// position is not used in `Update3DTextLabelText` function and counter will be increased and checked in the callback
pawn Code:
forward updateRevivingText(playerid);
public updateRevivingText(playerid)
{
    switch (reviveCount[playerid]++) // ++ or -- after the variable returns the old value and then it increases/decreases
    {
        case 0: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||-------- ))\nHELPING UP");
        case 1: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||------- ))\nHELPING UP");
        case 2: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||------ ))\nHELPING UP");
        case 3: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||----- ))\nHELPING UP");
        case 4: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||||---- ))\nHELPING UP");
        case 5: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||--- ))\nHELPING UP");    
        case 6: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||||||-- ))\nHELPING UP");
        case 7: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||||- ))\nHELPING UP");
        case 8: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||||| ))\nHELPING UP");
        case 9:
        {
            Delete3DTextLabel(RevivingText[playerid]);
            RevivingText[playerid] = Text3D: INVALID_3DTEXT_ID;

            KillTimer(reviveTextTimer[playerid]);
            reviveTextTimer[playerid] = -1; // always reset ids to avoid destroying/killing the wrong thing

            reviveCount[playerid] = 0;
        }
    }
}



Re: Updating 3D text label makes it dissapear - DomagojSellug - 10.01.2020

Quote:
Originally Posted by Calisthenics
View Post
`count` is always 0, it does not matter if you modify its value in the callback. The initial value you passed in `SetTimerEx` is used.

pawn Code:
reviveCount[playerid] = 0;
reviveTextTimer[playerid] = SetTimerEx("updateRevivingText", 500, true, "d", playerid);
// position is not used in `Update3DTextLabelText` function and counter will be increased and checked in the callback
pawn Code:
forward updateRevivingText(playerid);
public updateRevivingText(playerid)
{
    switch (reviveCount[playerid]++) // ++ or -- after the variable returns the old value and then it increases/decreases
    {
        case 0: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||-------- ))\nHELPING UP");
        case 1: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||------- ))\nHELPING UP");
        case 2: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||------ ))\nHELPING UP");
        case 3: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||----- ))\nHELPING UP");
        case 4: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||||---- ))\nHELPING UP");
        case 5: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||--- ))\nHELPING UP");    
        case 6: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||||||-- ))\nHELPING UP");
        case 7: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||||- ))\nHELPING UP");
        case 8: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||||| ))\nHELPING UP");
        case 9:
        {
            Delete3DTextLabel(RevivingText[playerid]);
            RevivingText[playerid] = Text3D: INVALID_3DTEXT_ID;

            KillTimer(reviveTextTimer[playerid]);
            reviveTextTimer[playerid] = -1; // always reset ids to avoid destroying/killing the wrong thing

            reviveCount[playerid] = 0;
        }
    }
}
I made some minor changes and added debugging, here's a picture.
https://prnt.sc/qm08km
https://prnt.sc/qm06g8
https://prnt.sc/qm06t4


Re: Updating 3D text label makes it dissapear - Calisthenics - 10.01.2020

Quote:
Originally Posted by DomagojSellug
View Post
I made some minor changes and added debugging, here's a picture.
https://prnt.sc/qm08km
https://prnt.sc/qm06g8
https://prnt.sc/qm06t4
You modify the parameter and print its new value which is misleading. Move the debug message at the top and see for yourself or here is a sample of code:
pawn Code:
new timer_test;

main()
{
    timer_test = SetTimerEx("OnTestParameterValue", 500, true, "d", 1);
}

forward OnTestParameterValue(value);
public OnTestParameterValue(value)
{
    printf("OnTestParameterValue(%d);", value);
    value++;
   
    if (value == 5) KillTimer(timer_test);
}
Output is always the same:
pawn Code:
OnTestParameterValue(1);
.
.
.
OnTestParameterValue(1);



Re: Updating 3D text label makes it dissapear - DomagojSellug - 10.01.2020

Quote:
Originally Posted by Calisthenics
View Post
You modify the parameter and print its new value which is misleading. Move the debug message at the top and see for yourself or here is a sample of code:
pawn Code:
new timer_test;

main()
{
    timer_test = SetTimerEx("OnTestParameterValue", 500, true, "d", 1);
}

forward OnTestParameterValue(value);
public OnTestParameterValue(value)
{
    printf("OnTestParameterValue(%d);", value);
    value++;
   
    if (value == 5) KillTimer(timer_test);
}
Output is always the same:
pawn Code:
OnTestParameterValue(1);
.
.
.
OnTestParameterValue(1);
So... how should I edit my code in order to make it work?


Re: Updating 3D text label makes it dissapear - Calisthenics - 10.01.2020

Quote:
Originally Posted by DomagojSellug
View Post
So... how should I edit my code in order to make it work?
You check and increase the variable `reviveCount[playerid]` in the callback.

I also mention about resetting label/time ids in my first post which is quite important.


Re: Updating 3D text label makes it dissapear - Joe Staff - 10.01.2020

You could set the timer to not repeat, and then recreate the timer at the bottom each time it repeats.


Re: Updating 3D text label makes it dissapear - DomagojSellug - 10.01.2020

For some reason it always sets the target ID to 0, I don't know why. But whatever I do, it always attaches the label and handles everything with ID 0 which causes some weird bugs (e.g. if ID 0 is trying to revive ME, it'll show something random from another label e.g. "Use F to enter.")


Re: Updating 3D text label makes it dissapear - Radless - 10.01.2020

Code:
		RevivingText[playerid] = Create3DTextLabel("(( |--------- ))\nHELPING UP", COLOR_DARKGREEN, pX, pY, pZ, 25.0, -1, 0);

        reviveCount[playerid] = 0;
        reviveTextTimer[playerid] = SetTimerEx("updateRevivingText", 500, true, "d", playerid);

forward updateRevivingText(playerid);
public updateRevivingText(playerid)
{
	if(reviveCount[playerid] != 9)
	{
		switch(reviveCount[playerid])
		{
			case 0: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||-------- ))\nHELPING UP");
			case 1: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||------- ))\nHELPING UP");
			case 2: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||------ ))\nHELPING UP");
			case 3: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||----- ))\nHELPING UP");
			case 4: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||||---- ))\nHELPING UP");
			case 5: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||--- ))\nHELPING UP");
			case 6: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||||||-- ))\nHELPING UP");
			case 7: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||||- ))\nHELPING UP");
			case 8: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||||| ))\nHELPING UP");
		}
		reviveCount[playerid]++;
	}
	if(reviveCount[playerid] == 9)
	{
		Delete3DTextLabel(RevivingText[playerid]);
		reviveCount[playerid] = 0;
		KillTimer(reviveTextTimer[playerid]);
	}
	return 1;
}



Re: Updating 3D text label makes it dissapear - DomagojSellug - 10.01.2020

Quote:
Originally Posted by Radless
View Post
Code:
		RevivingText[playerid] = Create3DTextLabel("(( |--------- ))\nHELPING UP", COLOR_DARKGREEN, pX, pY, pZ, 25.0, -1, 0);

        reviveCount[playerid] = 0;
        reviveTextTimer[playerid] = SetTimerEx("updateRevivingText", 500, true, "d", playerid);

forward updateRevivingText(playerid);
public updateRevivingText(playerid)
{
	if(reviveCount[playerid] != 9)
	{
		switch(reviveCount[playerid])
		{
			case 0: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||-------- ))\nHELPING UP");
			case 1: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||------- ))\nHELPING UP");
			case 2: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||------ ))\nHELPING UP");
			case 3: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||----- ))\nHELPING UP");
			case 4: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||||---- ))\nHELPING UP");
			case 5: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||--- ))\nHELPING UP");
			case 6: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( ||||||||-- ))\nHELPING UP");
			case 7: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||||- ))\nHELPING UP");
			case 8: Update3DTextLabelText(RevivingText[playerid], COLOR_DARKGREEN, "(( |||||||||| ))\nHELPING UP");
		}
		reviveCount[playerid]++;
	}
	if(reviveCount[playerid] == 9)
	{
		Delete3DTextLabel(RevivingText[playerid]);
		reviveCount[playerid] = 0;
		KillTimer(reviveTextTimer[playerid]);
	}
	return 1;
}
That didn't help me with my issue though, my issue currently is that it's always setting the target ID to 0 for some reason...