Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: Ermin. poslato Novembar 17, 2013, 16:10:52 POSLE PODNE

Naslov: [POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)
Poruka od: Ermin. poslato Novembar 17, 2013, 16:10:52 POSLE PODNE
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):
Naslov: Odg: [POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)
Poruka od: Ermin. poslato Novembar 17, 2013, 20:22:29 POSLE PODNE
BUMP, zna li neko rjesenje, hitno je ?
Naslov: Odg: [POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)
Poruka od: Ermin. poslato Novembar 17, 2013, 22:58:12 POSLE PODNE
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
Naslov: Odg: [POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)
Poruka od: Ermin. poslato Novembar 17, 2013, 23:02:01 POSLE PODNE
OnGameModeInit:

UcitajSveStanove();
Naslov: Odg: [POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)
Poruka od: Ermin. poslato Novembar 17, 2013, 23:14:43 POSLE PODNE
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
Naslov: Odg: [POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)
Poruka od: Ermin. poslato Novembar 17, 2013, 23:25:58 POSLE PODNE
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;
}

Naslov: Odg: [POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)
Poruka od: Ermin. poslato Novembar 18, 2013, 09:38:59 PRE PODNE
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);
}
Naslov: Odg: [POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)
Poruka od: [BR] Ralph poslato Novembar 18, 2013, 11:42:30 PRE PODNE
mozes li mi dati enum za stanove?
Naslov: Odg: [POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)
Poruka od: Ermin. poslato Novembar 18, 2013, 20:56:26 POSLE PODNE
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];
Naslov: Odg: [POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)
Poruka od: BIRSAâ„¢ poslato Novembar 19, 2013, 18:22:24 POSLE PODNE
Znaci isti problem imam, potpuno isti. Pa da ne bi otvarao novu temu, bumpam ovu :)
Naslov: Odg: [POMOC] Ne kreira label/pickup za stan (ON GAME MODE INIT)
Poruka od: Ermin. poslato Novembar 19, 2013, 21:45:58 POSLE PODNE
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);