[POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)


Započeo Ermin., Novembar 17, 2013, 16:10:52 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Skripta koju koristim: scratch
Detaljan opis problema: pa ovak, radio sam stan sistem, uradio sam ga radi perfekt, odem IG, kucam /kreirajstan [id] [cijena] [level]
Kreira ga, postavi 3dLabel i Pickup IG, napravi Fajl i ostalo..

eh kad odem GMX, treba da sacuva stanova ( sto i uradi ), ali
kad se GM pokrene ponovo, tj OnGameModeInit kad se poziva
nece da kreira Labele & Pickupe za stanove, iako ucita sve stanove..

dat cu kod za /kreirajstan i za citanje prilikom initializiranja GMa

Dio skripte:

for(new idx = 1; idx < sizeof(StanInfo); idx ++)
{
   //new str[24];
   //format(str, sizeof(str), STANPATH, idx);
   //if(fexist(str))
   //{

        INI_ParseFile(StanPath(idx), "LoadStan_%i", .bExtra = true, .extra = idx);

	if(StanInfo[idx][sPosjedovan] == 1)
	{
	      StanInfo[idx][sVaniPickup] = CreateDynamicPickup(1239, 1, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 0);
	      new labelstring[128];
              format(labelstring, sizeof(labelstring),
	      "{F0C948}Vlasnik stana: {FFFFFF}%s\n{F0C948}Level: {FFFFFF}%d",
	      StanInfo[idx][sVlasnik], StanInfo[idx][sLevel]);
	      StanInfo[idx][sLabel] = CreateDynamic3DTextLabel(labelstring, 0xAAAAAAFF, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 10.0);
        }
        else if(StanInfo[idx][sPosjedovan] == 0)
        {
	     StanInfo[idx][sVaniPickup] = CreateDynamicPickup(1273, 1, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 0);
	     new labelstring2[128];
	     format(labelstring2, sizeof(labelstring2),
	     "{F0C948}Stan se prodaje!\nCijena: {FFFFFF}%d\n{F0C948}Level: {FFFFFF}%d",
	     StanInfo[idx][sCijena], StanInfo[idx][sLevel]);
	     StanInfo[idx][sLabel] = CreateDynamic3DTextLabel(labelstring2, 0xAAAAAAFF, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 10.0);
	 }
	//}   // if string exist
} // kraj loopa

YCMD:kreirajstan(playerid, params[], help)
{
	#pragma unused help
	if(PlayerInfo[playerid][pAdmin] < 1338)
	    return SCM(playerid, TAMNOCRVENA, "[CA:RP]"siva" Nisi ovlasten da koristis ovu komandu!");
	new id,cijena,level;
	if(sscanf(params, "iii",id,cijena,level))
	    return SCM(playerid, SIVA, "Koristi: /kreirajstan [id stana] [cijena] [level]");
	else if(id < 1 || id > MAX_STANOVA)
	    return SCM(playerid, SIVA, "  Id stana ne moze biti ispod 1 ili preko "#MAX_STANOVA);
	else if(cijena < 1 || cijena > MAX_STAN_CIJENA)
	    return SCM(playerid, SIVA, "  Cijena stana ne moze biti ispod 1 ili preko "#MAX_STAN_CIJENA);
	else if(level < 1 || level > MAX_STAN_LEVEL)
	    return SCM(playerid, SIVA, "  Level stana ne moze biti ispod 1 ili preko "#MAX_STAN_LEVEL);

	new fostring[16];
	format(fostring, 16, STANPATH, id);
	if(fexist(fostring))
	    return SCM(playerid, SIVA, "   Stan sa tim IDom vec postoji!");

	new Float:pos[3];
	GetPlayerPos(playerid, pos[0], pos[1], pos[2]);

	StanInfo[id][sPosjedovan] = 0;
	StanInfo[id][sVaniPickup] = CreateDynamicPickup(1273, 1, pos[0], pos[1], pos[2], 0);
	strmid(StanInfo[id][sVlasnik], "Niko", 0, strlen("Niko"), 255);


	new label[128];
	format(label, 128,
	"{F0C948}Stan se prodaje!\nCijena: {FFFFFF}%d\n{F0C948}Level: {FFFFFF}%d", cijena, level);
	StanInfo[id][sLabel] = CreateDynamic3DTextLabel(label, 0x333333FF, pos[0], pos[1], pos[2], 10.0);

	StanInfo[id][sPosjedovan] = 0;
	StanInfo[id][sCijena] = cijena;
	StanInfo[id][sLevel] = level;
	StanInfo[id][sZakljucan] = 1;
	StanInfo[id][sUlazx] = pos[0];
	StanInfo[id][sUlazy] = pos[1];
	StanInfo[id][sUlazz] = pos[2];
	StanInfo[id][sInt] = 1;
	StanInfo[id][sWorld] = POCETNI_STAN_VIRTUAL_WORLD + id;
	
	SacuvajStan(id);
	return 1;
}


Neke slike/video za lakse dobivanje pomoci(neobavezno):


E jesam evo, IG sam napravio 3 stana:

id 1, id 3 i id 7

pokrenem mod printa mi:

Stan 1 ucitan!
Stan 3 ucitan!
Stan 7 ucitan!

ali ne kreira labele pickupe itd, evo kod gdje sam pokuso ponovo

forward UcitajSveStanove();
public UcitajSveStanove()
{
    for(new idx = 1; idx < sizeof(StanInfo); idx ++)
	{
		new fString[90];
		format(fString, 90, STANPATH, idx);
		if(!fexist(fString)) continue;
		if(fexist(fString))
		{
			INI_ParseFile(StanPath(idx), "LoadStan_%i", .bExtra = true, .extra = idx);
			printf("Stan %d ucitan!", idx);
			
			if(StanInfo[idx][sPosjedovan] == 1)
			{
				StanInfo[idx][sVaniPickup] = CreateDynamicPickup(1239, 1, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 0);
				new labelstring[128];
				format(labelstring, sizeof(labelstring),
				"{F0C948}Vlasnik stana: {FFFFFF}%s\n{F0C948}Level: {FFFFFF}%d",
				StanInfo[idx][sVlasnik], StanInfo[idx][sLevel]);
				StanInfo[idx][sLabel] = CreateDynamic3DTextLabel(labelstring, 0xAAAAAAFF, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 10.0);
				
			}

			else if(StanInfo[idx][sPosjedovan] == 0)
			{
				StanInfo[idx][sVaniPickup] = CreateDynamicPickup(1273, 1, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 0);
				new labelstring2[128];
				format(labelstring2, sizeof(labelstring2),
				"{F0C948}Stan se prodaje!\nCijena: {FFFFFF}%d\n{F0C948}Level: {FFFFFF}%d",
				StanInfo[idx][sCijena], StanInfo[idx][sLevel]);
				StanInfo[idx][sLabel] = CreateDynamic3DTextLabel(labelstring2, 0xAAAAAAFF, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 10.0);
				
			}
			
			continue;
		} //fexist
	}//loop
}//callback

OnGameModeInit:

UcitajSveStanove();
Poslednja Izmena: Novembar 17, 2013, 23:02:26 POSLE PODNE od Ermin [I'm not spammer]

Nema to veze msm, jer kad IG kucam /kreirajstan blabla,
kreira se i label i pickup.. (CreateDynamic3dTextLabel/Pickup)


edit: pokusat cu preko tajmera, tj da prvo ucita, pa da kroz 2-3 sekunde kreira labele, moguce da 'ne stigne' ucitat, tj da prvo izvrsi CreateLabel nego LoadStan  :D
Poslednja Izmena: Novembar 17, 2013, 23:19:54 POSLE PODNE od Ermin [I'm not spammer]

EDIT:

skonto sam do cega je, Ne ucitava mi stanove, znaci postavio sam debug ako je "Posjedovan" = 1 da printa "[OWNED]", a ako je 0 da printa "[NONOWNED]",

znaci 2 stana su mi owned = 1 a 2 su owned = 0,

(po defaultu je 0 logicno, jer ne postavlja tj ne cita iz fajla propisno)

a printa za svaki da je NONOWNED (znaci nesto kod ucitavanja ne valja)

evo moguci kodovi:

INI_ParseFile(StanPath(idx), "LoadStan_%i", .bExtra = true, .extra = idx);


stock StanPath(stanid)
{
	new string[128];
	format(string,sizeof(string),STANPATH,stanid);
	return string;
}


public LoadStan_data(idx, name[], value[])
{
	//---------------------------------------------------------------------
	INI_Int("Posjedovan", StanInfo[idx][sPosjedovan]);
    INI_String("Vlasnik", StanInfo[idx][sVlasnik], MAX_PLAYER_NAME);
	INI_Int("Cijena", StanInfo[idx][sCijena]);
	INI_Int("Level", StanInfo[idx][sLevel]);
	INI_Int("Zakljucan", StanInfo[idx][sZakljucan]);
	INI_Float("UlazX", StanInfo[idx][sUlazx]);
	INI_Float("UlazY", StanInfo[idx][sUlazy]);
	INI_Float("UlazZ", StanInfo[idx][sUlazz]);
	INI_Float("IzlazX", StanInfo[idx][sIzlazx]);
	INI_Float("IzlazY", StanInfo[idx][sIzlazy]);
	INI_Float("IzlazZ", StanInfo[idx][sIzlazz]);
	INI_Int("Interijer", StanInfo[idx][sInt]);
	INI_Int("World", StanInfo[idx][sWorld]);

	//---------------------------------------------------------------------
    return 1;
}

Poslednja Izmena: Novembar 17, 2013, 23:47:19 POSLE PODNE od Ermin [I'm not spammer]

A stavio sam da mi printa kod Loadanja:
Stan %d ucitan

A kod kreiranja labela pickupa
ako je posjedovan:
[owned] pickup/label za stan %d kreirani!

ako nije
[non-owned] pickup/label za stan %d kreirani!


i pokrenem GM, nakon par sekundi mi samo ispise:

[non-owned] pickup/label za stan 1 kreirani!
[non-owned] pickup/label za stan 2 kreirani!
[non-owned] pickup/label za stan 3 kreirani!
[non-owned] pickup/label za stan 4 kreirani!
// Iako su stan 2 i 4 Owned..


Evo novi kod sam napiso,nece da ucita naravno.. :/
forward UcitajSveStanove();
public UcitajSveStanove()
{
    for(new i = 1; i < sizeof(StanInfo); i++)
   {
      INI_ParseFile(StanPath(i), "LoadStan_%i", .bExtra = true, .extra = i);
   }
}

forward stan_crt(); // ovo koristim kao tajmer, znaci nakon ucitavanja pokrene se tajmer 
// da bi eventualno 'stiglo' ucitat sve stanove..
public stan_crt()
{
   new fstring[64];
   for(new idx = 1; idx < sizeof(StanInfo); idx++)
   {
      format(fstring, 64, STANPATH, idx);
      if(fexist(fstring))
      {
         if(StanInfo[idx][sPosjedovan] == 1)
         {
            StanInfo[idx][sVaniPickup] = CreateDynamicPickup(1239, 1, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 0);
            new labelstring[128];
             format(labelstring, sizeof(labelstring),"{F0C948}Vlasnik stana: {FFFFFF}%s\n{F0C948}Level: {FFFFFF}%d",StanInfo[idx][sVlasnik], StanInfo[idx][sLevel]);
            StanInfo[idx][sLabel] = CreateDynamic3DTextLabel(labelstring, 0xAAAAAAFF, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 10.0);
            printf("owned > %d > label/pickup created", idx);
         }

         else if(StanInfo[idx][sPosjedovan] == 0)
         {
            StanInfo[idx][sVaniPickup] = CreateDynamicPickup(1273, 1, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 0);
            new labelstring2[128];
            format(labelstring2, sizeof(labelstring2),"{F0C948}Stan se prodaje!\nCijena: {FFFFFF}%d\n{F0C948}Level: {FFFFFF}%d",StanInfo[idx][sCijena], StanInfo[idx][sLevel]);
            StanInfo[idx][sLabel] = CreateDynamic3DTextLabel(labelstring2, 0xAAAAAAFF, StanInfo[idx][sUlazx], StanInfo[idx][sUlazy], StanInfo[idx][sUlazz], 10.0);
            printf("non-owned > %d > label/pickup created", idx);
         }
      }
   }
   KillTimer(stan_crt_timer);
}


evo sve moguce varijable..

enum sInfo
{
	sPosjedovan,
	sVlasnik[MAX_PLAYER_NAME],
	sCijena,
	sLevel,
	sZakljucan,
	Float:sUlazx,
	Float:sUlazy,
	Float:sUlazz,
	Float:sIzlazx,
	Float:sIzlazy,
	Float:sIzlazz,
	sInt,
	sWorld,
	sVaniPickup,
	Text3D:sLabel

}
new StanInfo[MAX_STANOVA][sInfo];

Znaci isti problem imam, potpuno isti. Pa da ne bi otvarao novu temu, bumpam ovu :)

MOZE LOCK!

Problem je bio u:

INI_ParseFile(StanPath(i), "LoadStan_%d", .bExtra = true, .extra = i);


ustvari treba

INI_ParseFile(StanPath(i), "LoadStan_%s", .bExtra = true, .extra = i);
Poslednja Izmena: Novembar 19, 2013, 21:57:26 POSLE PODNE od Ermin [I'm not spammer]