Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2020-05-27, 13:58


Wujek14







Wiek: 26
Na forum: 2896 dni
Posty: 49
Nick w MP: Wujek14

Piwa: 6

Respekt: 50

mam problem bo nie wiem jak zrobi? tak ze jak stoimy ko?o bankomatu to wy?wietla nam panel bankomatu zrobi?em cos takiego ale dzia?a tylko na bankomat o id 1 id 2,3 nie chce dzia?a? nie wiem jak to zrobi? by dzia?a?o ko?o wszystkich bankomat?w

poni?ej stock kt?ry zrobi?em do tej pory i z kt?rym walcz? ju? jakie? 2 godziny:
Kod:


stock SprawdzBankomat(playerid)
{
for(new l = 1; l < BANKOMAT_LIMIT +1; l++)
{
new BANKOWO[100];
format(BANKOWO, sizeof(BANKOWO), FOLDER_BANKOMATY, l);
dfile_Open(BANKOWO);
new Float: X, Float: Y, Float: Z;
X = dfile_ReadFloat("X");
Y = dfile_ReadFloat("Y");
Z = dfile_ReadFloat("Z");
dfile_CloseFile();
if(IsPlayerInRangeOfPoint(playerid, 2, X, Y, Z))
{
ShowPlayerDialog(playerid, PANEL_BANKOMATY, DIALOG_STYLE_LIST, "Bankomat", "Sprawdz saldo\nWplac pieniadze na konto\nWyplac pieniadze z konta\nWykonaj przelew\nZaloz konto bankowe", "Wybierz", "Zamknij");
return 1;
}
else
{
SendClientMessage(playerid, -1, "Nie jestes w pkt bankomatu");
return 1;
}
}
return 1;
}


prosz? o pomoc ewentualnie jakie? rozwi?zanie

Postaw piwo autorowi tego posta
 

 
Wysłany: 2020-05-28, 22:04


KoQ







Wiek: 24
Na forum: 3179 dni
Posty: 32

Piwa: 6

Respekt: 50

Z Dfile nie mia?em styczno?ci ale postaram si? pom?c

Zr?b sobie enuma i przypisuj pozycje X Y Z
np.
Kod:

enum DaneBankomatu
{
bUID,
Float:x,
Float:y,
Float:z
};


I podczas wczytywania robisz petle
Kod:

for(new l = 1; l < BANKOMAT_LIMIT +1; l++)
{
DaneBankomatu[l][bUID] = Pobierasz z bazy
DaneBankomatu[l][X] = Tutaj pobierasz z bazy danych
DaneBankomatu[l][Y] = Tutaj pobierasz z bazy danych
DaneBankomatu[l][Z] = Tutaj pobierasz z bazy danych
}

I jak masz to sprawdzasz czy gracz jest w miejscu bankomatu

Kod:

for(new l = 1; l < BANKOMAT_LIMIT +1; l++)
{
if(PlayerToPoint(1, playerid, Bankomat[l][X],y,z))//PlayerToPoint to musisz sobie zrobic sam
}

Kod:


stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
if(IsPlayerConnected(playerid))
{
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
tempposx = (oldposx -x);
tempposy = (oldposy -y);
tempposz = (oldposz -z);
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
return 1;
}
}
return 0;
}


Postaw piwo autorowi tego posta
 

 
Wysłany: 2020-05-28, 23:02


woood







Wiek: 23
Na forum: 2909 dni
Posty: 60
Nick w MP: WoooDie

Piwa: 37

Respekt: 26,3

Po pierwsze to co zrobi?e? jest nieoptymalne.
Przy starcie powiniene? zrobi? stock od za?adowania bankomat?w, potem te dane wypisa? do enuma.
Wtedy dopiero otwierasz p?tl?, kt?ra zaczyna si? od 0, a ko?czy na maksymalnej ilo?ci bankomat?w.
P?tla powinna wygl?da? tak:
for(new i = 0; i < MAX_BANKOMATY; i++)
W tej p?tli nie powiniene? nic wczytywa?, tylko wykona? funkcj? dajmy na to
"IsPlayerInRangeOfPoint(playerid, ODLEG?O??, BankomatData[i][PosX], BankomatData[i][Posy], BankomatData[i][PosZ])"
Czyli sprawdzi? czy gracz jest w odleg?o?ci od bankomatu zapisanego w enumie. Je?eli tak, to ma co? wykona?. Chyba proste, je?eli nie rozumiesz to postaram si? to jeszcze raz wyt?umaczy?.

EDIT: Pomy?la?em, ?e mo?esz tego nie zrozumie?. Wstawiam gotowy wycinek z kodu z mojego gamemode'a.
Kod:

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if((newkeys & KEY_WALK) && (newkeys & KEY_SPRINT))
{
for(new i = 0; i < MAX_DOORS; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, DoorData[i][EnterX], DoorData[i][EnterY], DoorData[i][EnterZ]))
{
SetPlayerPos(playerid, DoorData[i][ExitX], DoorData[i][ExitY], DoorData[i][ExitZ]);
SetPlayerVirtualWorld(playerid, DoorData[i][Vw]);
SetTimerEx("TimerPrzejscie", 1500, false, "i", playerid);
}
else if(IsPlayerInRangeOfPoint(playerid, 2.0, DoorData[i][ExitX], DoorData[i][ExitY], DoorData[i][ExitZ]))
{
SetPlayerVirtualWorld(playerid, 0);
SetPlayerPos(playerid, DoorData[i][EnterX], DoorData[i][EnterY], DoorData[i][EnterZ]);
}
}

}

I nie s?uchaj kolegi wy?ej, bo chyba ma?o si? zna, skoro poda? Ci definicj? funkcji kt?ra jest ju? wbudowana w j?zyk.

Postaw piwo autorowi tego posta
 

 
Tagi: dynamiczne :: bankomaty :: pr0blem
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » PAWN Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku