[Ajuda] Bug textdraw com valor errado!
#1

To a 1 semana tentando corrigir esse BUG, desisti e vim aqui pedir ajuda pra vocкs

2 problemas:
1- O textdraw moneybagTD era pra estar sempre de acordo do valor do moneybag[playerid], mas nгo ta ficando, nгo sei o fucking pq

2- Nгo sei pq, mas ta contando os actores roubados, tipo se eu roubar 10 actores fica um numero 10 embaixo do mini mapa, sendo q eu nem criei essa porra

Scripts:
No topo do GM
Код:
new PlayerText: MoneyBagTD[MAX_PLAYERS];
public OnPlayerDisconnect(playerid, reason)
Код:
PlayerTextDrawDestroy(playerid, MoneyBagTD[playerid]);
public DoisSegundos(playerid)
Код:
		// money bag TD
		new mbstring[128];
		format(mbstring, sizeof(mbstring), "BAG:$%08d", moneybag[i]);
		PlayerTextDrawSetString(playerid, MoneyBagTD[playerid], mbstring);
		PlayerTextDrawSetProportional(i, MoneyBagTD[i], 1); 
		PlayerTextDrawShow(i, MoneyBagTD[i]);
OnPlayerLogin (dps que entra certo com a sneha e tals q carrega as variaveis)
Код:
		MoneyBagTD[playerid] = CreatePlayerTextDraw(playerid, 440.000000, 422.000000, "88"); 
		PlayerTextDrawBackgroundColor(playerid, MoneyBagTD[playerid], 255); 
		PlayerTextDrawFont(playerid, MoneyBagTD[playerid], 3); 		
		PlayerTextDrawLetterSize(playerid, MoneyBagTD[playerid], 0.699998, 2.399998); 
		PlayerTextDrawColor(playerid, MoneyBagTD[playerid], -16776961); 
		PlayerTextDrawSetOutline(playerid, MoneyBagTD[playerid], 1);
		PlayerTextDrawSetProportional(playerid, MoneyBagTD[playerid], 1); 
		// PlayerTextDrawAlignment ~ PlayerTextDrawSetShadow
================================================== ================================================== ================================================== ===========

topo do gm
Код:
new moneybag[MAX_PLAYERS];
Trocar Dinheiro da moneybag pra dinheiro normal
Код:
		if(PlayerToPoint(10.0, playerid,2445.7332,-1759.4276,13.5907) || PlayerToPoint(10.0, playerid,2482.0786,-1464.0013,24.0162) || PlayerToPoint(10.0, playerid,1997.3832,-2079.2957,13.5469) || PlayerToPoint(10.0, playerid,990.1533,-1520.8904,13.5508) )
		{
			new moneylavado = moneybag[playerid] / 2;
			GivePlayerMoneyEx(playerid, moneylavado);
			moneybag[playerid] = 0;
		}
onplayerdeath
Код:
moneybag[playerid] = 0;
roubando actores
Код:
		//new targetplayer = GetPlayerTargetPlayer(i);
		new targetplayer = GetPlayerTargetActor(playerid);
		if(IsValidActor(targetplayer) )
		{
			if(IsACop(i)) return 0;
			if(rouboulojinha[i] == true) return SendClientMessage(i, COLOR_WHITE, "You stole a newly store! Must wait TWO MINUTES for theft.");
			if(assaltandolojinha[i] == false)
			{
				npcquetaroubando[i] = GetPlayerTargetActor(playerid);	
		
				//SetTimerEx("ActorRoubadoRec", 30000, 0, "i", npcquetaroubando[i]);
				
				if(strcmp(currentActorAnim[npcquetaroubando[i]], "handsup")) return SendClientMessage(playerid, COLOR_GREY, "Este NPC jб estб sendo roubado!");	
				SetActorSpecialAnimation(npcquetaroubando[i], SPECIAL_ACTION_HANDSUP);
				//ApplyActorAnimation(npcquetaroubando[i], "PED", "handsup", 4.1, 0, 0, 0, 0, 0);
				pertodonpc[i] = GetPlayerInterior(i);
				assaltandolojinha[i] = true;
				// crime
				wanted[i] += 1;
				//PlayerPlaySound(playerid, 100008, 0.0, 0.0, 0.0); // " OH NO MAN ! "
				PlayerPlaySound(i, 100013, 0.0, 0.0, 0.0); // " What Are You Doing?!
				SetTimerEx("AssaltandoLoja", 5000, 0, "i", i);
				ShowPlayerProgressBar(i, progresso[i]);
				TextDrawShowForPlayer(i, ProgressoTexto[i]);
			}
		}
Код:
forward AssaltandoLoja(playerid);
public AssaltandoLoja(playerid) {
	new string[128];
	//PlayerPlaySound(playerid, 100013, 0.0, 0.0, 0.0); // " What Are You Doing?!
	if(progressovalue[playerid] <= 99) {
		if(GetPlayerInterior(playerid) == pertodonpc[playerid]) {
			progressovalue[playerid] += 25.0;
			SetPlayerProgressBarValue(playerid, progresso[playerid], progressovalue[playerid]);
			ShowPlayerProgressBar(playerid, progresso[playerid]);
			SetTimerEx("AssaltandoLoja", 5000, 0, "i", playerid);
		}
		else {
			progressovalue[playerid] = 0;
			SetPlayerProgressBarValue(playerid, progresso[playerid], progressovalue[playerid]);
			HidePlayerProgressBar(playerid, progresso[playerid]);
			TextDrawHideForPlayer(playerid, ProgressoTexto[playerid]);

			format(string, sizeof(string), "~r~Misson Fail! Wait to try again!");
			assaltandolojinha[playerid] = false;
			rouboulojinha[playerid] = true;
			SetTimerEx("AssaltarLojaExausted", 120000, 0, "i", playerid);
			CRIMINALskills[playerid] -= 1;
			format(string, sizeof(string), "Current Criminal Skill: %i", CRIMINALskills[playerid] );
			SendClientMessage(playerid, COLOR_NEWS, string);
			ClearActorAnimations(npcquetaroubando[playerid]);
			npcquetaroubando[playerid] = 0;
		}
	}
	else if(progressovalue[playerid] >= 100) {
		//DestroyPlayerProgressBar(playerid, progresso[playerid]);
		progressovalue[playerid] = 0;
		SetPlayerProgressBarValue(playerid, progresso[playerid], progressovalue[playerid]);
		HidePlayerProgressBar(playerid, progresso[playerid]);
		TextDrawHideForPlayer(playerid, ProgressoTexto[playerid]);
		if(GetPlayerInterior(playerid) == pertodonpc[playerid]) {
			moneybag[playerid] += rand(5000, 10000);
			assaltandolojinha[playerid] = false;

			rouboulojinha[playerid] = true;
			SetTimerEx("AssaltarLojaExausted", 120000, 0, "i", playerid);
			format(string, sizeof(string), "~r~Mission Complete! Change your money bag in a money lad!");
			GameTextForPlayer(playerid, string, 1500, 3);

			CRIMINALskills[playerid] += 1;
			format(string, sizeof(string), "Current Criminal Skill: %i", CRIMINALskills[playerid] );
			SendClientMessage(playerid, COLOR_NEWS, string);

			SetTimerEx("AssaltarLojaExausted", 120000, 0, "i", playerid);

			PlayerPlaySound(playerid, 100010, 0.0, 0.0, 0.0); // " This is not good "
			ClearActorAnimations(npcquetaroubando[playerid]);	
			npcquetaroubando[playerid] = 0;
		}
	}
	return 1;
}
Reply
#2

Pra que destruir playertextdraw no disconnect? O prуprio samp jб faz isso, dб uma lida na wiki... Quem й o i nessa histуria toda?
Reply
#3

Nгo sabia, vou remover entгo! Sobre quebrar ao disconectar, vou remover

Sobre a variavel i q vc disse, geralmente й um loop de player id

Por exemplo:

SetTimer("DoisSegundos", 2000,1);


public DoisSegundos(playerid)
{
for(new i = 0; i < MAX_PLAYERS; i++) {


Pls me ajuda, n sei oq fazer
Reply
#4

Posta o cуdigo completo pra eu analisar a lуgica, e se puder, poste Print(s) ou especifique um pouco mais claramente o que vocк quer que aconteзa e o que tб acontecendo de bug no sistema...
Reply
#5

Ai acima ta tudo sobre moneybag e moneybagTD...
A textdraw ta aparecendo
Ta atй dando o valor certo as vezes

Mas quando atualiza o valor dela (pra menos EU ACHO), nгo atualiza certo!

Quando eu troco o valor da moneybag[playerid] esse valor nгo vai certo pra textdraw

E o mais bizarro й o contador de actores que eu roubei, eu nem fiz essa porra, qnd rouba os actores, fica contando tipo nessa SS abaixo

Esse dois й a quantidade de Actores que eu roubei, e essa money bag \/

Reply
#6

E a unica coisa q eu copiei e colei no meu gm (feito do 0)
Foi isso
Код:
// render actor
stock strcpy(dest[], const source[], maxlength=sizeof dest)
{
    strcat((dest[0] = EOS, dest), source, maxlength);
}
new currentActorAnim[MAX_ACTORS][24];
stock ApplyActorAnimationEx(actorid, lib[], anim[], Float:fDelta, loop, lockx, locky, freeze, time)
{
    strcpy(currentActorAnim[actorid], anim);
    return ApplyActorAnimation(actorid, lib, anim, fDelta, loop, lockx, locky, freeze, time);
}
#if defined _ALS_ApplyActorAnimation
    #undef ApplyActorAnimation
#else
    #define _ALS_ApplyActorAnimation
#endif
#define ApplyActorAnimation ApplyActorAnimationEx  
// /
Qnd atualizou o SAMP, tive dificuldades em mexer nos ACTORES, ai me passaram isso pra colocar lб onde declara as variaveis globais pra q os actores fizessem animaзхes
Reply
#7

Manda a parte exata do cуdigo que voce incrementa ou diminui os valores que tгo bugados...
Reply
#8

To fazendo uns testes, parece que o problema nгo ta na textdraw, mudei onde atualiza ela na funзгo q й chamada ela de 2 em 2 segundos pra:

public DoisSegundos(playerid)
SetTimer("DoisSegundos", 2000,1);
Код:
		// money bag TD
		new mbstring[128];
		format(mbstring, sizeof(mbstring), "BAG:$%08d", moneybag[i]);
		PlayerTextDrawSetString(playerid, MoneyBagTD[playerid], mbstring);
		PlayerTextDrawSetProportional(i, MoneyBagTD[i], 1); 
		TextDrawHideForPlayer(i, MoneyBagTD[i]);
		PlayerTextDrawShow(i, MoneyBagTD[i]);
E mesmo assim ta problematica, atй qnd soma
Код:
1-  moneybag[playerid]6652 ... TD = 5098
2- moneybag[playerid]12614 ... 11885
Serб que o problema nгo й na random que adiciona o dinheiro? Serб q ela n ta retornando um valor inteiro?
Код:
moneybag[playerid] += rand(5000, 10000);
Код:
stock rand(min, max) {
    return random(max - min) + min;
}
Код:
	CMD:lavardinheiro(playerid) {
		if(PlayerToPoint(10.0, playerid,2445.7332,-1759.4276,13.5907) || PlayerToPoint(10.0, playerid,2482.0786,-1464.0013,24.0162) || PlayerToPoint(10.0, playerid,1997.3832,-2079.2957,13.5469) || PlayerToPoint(10.0, playerid,990.1533,-1520.8904,13.5508) )
		{
			new moneylavado = moneybag[playerid] / 2;
			GivePlayerMoneyEx(playerid, moneylavado);
			moneybag[playerid] = 0;
		}
Reply
#9

Quote:

format(mbstring, sizeof(mbstring), "BAG:$%08d", moneybag[i]);
PlayerTextDrawSetString(playerid, MoneyBagTD[playerid], mbstring);

Vocк tб formatando a string com o moneybag do player errado
Reply
#10

Quote:
Originally Posted by ipsLeon
Посмотреть сообщение
Vocк tб formatando a string com o moneybag do player errado

Nгo entedi, antes q eu faзa outro me diz oq eu to errando, me mostra pls, pra eu n erra de novo, esse foi um jeito q eu vi na net pro script ficar bonitinho lб encaixado
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)