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):
BUMP, zna li neko rjesenje, hitno je ?
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();
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
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;
}
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);
}
mozes li mi dati enum za stanove?
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);