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

Wysłany: 2016-03-14, 14:22


Iggy

#admin






Wiek: 26
Na forum: 4596 dni
Posty: 3469
Nick w MP: Iggy

Piwa: 1716

Respekt: 915
Respekt: 915Respekt: 915


   Administrator: Admin ma zawsze rację | REGULAMIN FORUM | REKLAMA/VIP | .
Mam ma?y problem z dynamicznym systemem. Mam dodawane przystanki dynamicznie i po wpisaniu /autobus gdy nie jeste?my na przystanku wysy?a wiadomo?? do gracza, ?e nie znajduje si? na przystanku. Gdy jestem na przystanku wy?wietla si? GUI z miejscami gdzie mog? si? uda?, tylko wysy?a mi wtedy te? wiadomo??, ?e nie znajduj? si? na przystanku, pomimo ?e na nim jestem i GUI si? wy?wietli?o.

Kod:
Pawn
CMD:autobus(playeridparams[])
    {
        new bool:info;
        if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playeridCYAN"CT: "BIA?Y"Nie mo?esz by? w "TURKUSOWY"?adnym poje?dzie"BIA?Y".");
        if(GetPlayerMoney(playerid) < 70) return SendClientMessage(playeridGREEN"CT: "BIA?Y"Nie sta? Ci? na "ZIELONY"przejazd"BIA?Y"!");
        for(new 0MAX_PRZYSTANKOWx++)
        {
            if(IsPlayerInRangeOfPoint(playerid10.0Przystanek[x][pX], Przystanek[x][pY], Przystanek[x][pZ]))
            {
                   info false;
                //wy?wietlanie okienka gui z przystankami
            }
            else
            {
                info true;
            }
        }
        if(info == true) return SendClientMessage(playeridLIGHT_GREEN"CT: "BIA?Y"Nie znajdujesz si? na "JASNO_ZIELONY"przystanku autobusowym"BIA?Y"."); 
        return 1;
    }


Bez u?ycia zmiennej bool, tylko zwyk?ego else te? to nie dzia?a.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-03-14, 14:57


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Tam, gdzie wy?wietlasz dialog dodaj return

Kod:

return ShowPlayerDialog(...);


Problem polega na tym, ?e jeste? na jednym przystanku, ale nie zatrzymujesz kodu, a powiniene? to zrobi?, bo inaczej p?tla leci dalej. Sprawdza, czy jeste? na nast?pnym przystanku, no ale nie jeste?, bo jeste? na innym, wi?c zmienna przyjmuje warto?? true. Po dodaniu return kod si? zatrzyma.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-03-14, 15:45


Iggy

#admin






Wiek: 26
Na forum: 4596 dni
Posty: 3469
Nick w MP: Iggy

Piwa: 1716

Respekt: 915
Respekt: 915Respekt: 915


   Administrator: Admin ma zawsze rację | REGULAMIN FORUM | REKLAMA/VIP | .
Combacior, dzi?ki. Sprawdz? sobie to i jak co? nie b?dzie dzia?a? jeszcze to napisz?.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-03-14, 16:44


bartiss122

PAWN-MASTER






Wiek: 27
Na forum: 4444 dni
Posty: 112
Nick w MP: Braydon_Owen

Piwa: 717

Respekt: 155
Respekt: 155Respekt: 155

Ostrzeżeń: 60%
Mo?na te? to zrobi? inaczej:
Kod:


CMD:autobus(playerid, params[])
{
if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, CYAN, "CT: "BIA?Y"Nie mo?esz by? w "TURKUSOWY"?adnym poje?dzie"BIA?Y".");
if(GetPlayerMoney(playerid) < 70) return SendClientMessage(playerid, GREEN, "CT: "BIA?Y"Nie sta? Ci? na "ZIELONY"przejazd"BIA?Y"!");
for(new x = 0; x < MAX_PRZYSTANKOW; x++)
{
if(!IsPlayerInRangeOfPoint(playerid, 10.0, Przystanek[x][pX], Przystanek[x][pY], Przystanek[x][pZ])) return SendClientMessage(playerid, LIGHT_GREEN, "CT: "BIA?Y"Nie znajdujesz si? na "JASNO_ZIELONY"przystanku autobusowym"BIA?Y"."); // Nie jest na przystanku
else return ShowPlayerDialog(...);// Wy?wietlanie dialogu.
}
return 1;
}


Powinno zadzia?a?. ;)

Podpis




Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-03-14, 17:17


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
No niestety nie zadzia?a, bo je?li gracz nie b?dzie na przystanku o numerze 0, to wy?wietli mu si? wiadomo??, ?e nie jest na przystanku autobusowym i kod si? zatrzyma, bo jest return.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-03-15, 13:03


Iggy

#admin






Wiek: 26
Na forum: 4596 dni
Posty: 3469
Nick w MP: Iggy

Piwa: 1716

Respekt: 915
Respekt: 915Respekt: 915


   Administrator: Admin ma zawsze rację | REGULAMIN FORUM | REKLAMA/VIP | .
Okej to ju? dzia?a, jednak jak ju? za?o?y?em temat to zapytam o jeszcze jedn? rzecz. Jak zrobi? tak? opcj?, ?e gdy jestem na tym przystanku, np. o uID 10 i gdy wpisz? komend? /uidprzystanku to wy?wietli mi w konsoli uID tego przystanku? Chodzi mi o to jak zrobi? pobieranie tego uID przystanku. My?la?em zrobi? to za pomoc? p?tli, tak jak mia?em w tamtym kodzie co poda?em, ale to nie zadzia?a, bo p?tla wykona si? na wszystkie przystanki, a ja chce pobra? uID tego, na kt?rym si? znajduje. Ma kto? jakie? pomys?y? :)

Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-03-15, 14:50


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
No musisz zrobi? p?tl?, mo?e by? taka sama jak z tym dialogiem, tylko zamiast dialogu robisz to, co chcesz, a numerem ID b?dzie po prostu warto?? zmiennej z p?tli.

Kod:

for(...)
{
if(IsPlayerInRangeOfPoint(playerid, 10.0, Przystanek[x][pX], Przystanek[x][pY], Przystanek[x][pZ])
{
printf("uID: %d", x);
break;
}
}


Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-03-15, 21:33


Iggy

#admin






Wiek: 26
Na forum: 4596 dni
Posty: 3469
Nick w MP: Iggy

Piwa: 1716

Respekt: 915
Respekt: 915Respekt: 915


   Administrator: Admin ma zawsze rację | REGULAMIN FORUM | REKLAMA/VIP | .
Okej, rozumiem. To uid b?dzie mi potrzebne m.i w timerze co sekund?, wi?c wykonywanie takiej p?tli co sekund? nie b?dzie obci??a? za bardzo serwera?

My?la?em aby po p?tli zapisa? to uid do zmiennej np. new uid[MAX_PLAYERS], czyli po p?tli for(new x;...) da? x = uid[playerid] i p??niej odczytywa? sobie warto?? z tej tablicy kiedy b?dzie mi to potrzebne, tylko czy taki kod zadzia?a oraz co by?oby lepszym rozwi?zaniem, ta p?tla co sekund?, czy zapis do zmiennej i odczytywanie warto?ci?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-03-16, 15:36


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Za bardzo nie wiem co teraz chcesz osi?gn?? w tym kodzie. Je?li dobrze zrozumia?em, to chcesz przechowywa? ID przystanku, na kt?rym znajduje si? gracz? Je?li tak, to p?tla nie jest dobrym rozwi?zaniem, bo co sekund? ju? jest p?tla na wszystkich graczy, teraz jeszcze chcesz doda? kolejn? p?tl? w p?tli dla graczy, nie jest to dobrym pomys?em. Polecam u?y? streamera od Incognito, posiada bardzo przydatne funkcje je?li chodzi o strefy. Za pomoc? funkcji tworzysz okre?lon? stref? i je?li gracz wejdzie w t? stref?, to wywo?uje si? callback i tam mo?esz zapisywa? aktualny przystanek gracza i nie wymaga to p?tli. Oczywi?cie zale?y to od ilo?ci przystank?w, bo je?li ich jest kilka, to jeszcze ujdzie, ale je?li ich jest ju? troch? wi?cej, no to streamer jest chyba najlepszym wyj?ciem.

U siebie te funkcje od stref wykorzystuj? gdzie si? da. Przy domach, kiedy gracz wchodzi w pickup (nie u?ywam callbacku OnPlayerPickUpDynamicPickup, bo wykonuje si? kilka razy, je?li gracz stoi w miejscu, a dla stref callback OnPlayerEnterDynamicArea wykona si? tylko raz), przy walkach o tereny, przy zabawach gdzie teren jest ograniczony.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-03-16, 16:11


Iggy

#admin






Wiek: 26
Na forum: 4596 dni
Posty: 3469
Nick w MP: Iggy

Piwa: 1716

Respekt: 915
Respekt: 915Respekt: 915


   Administrator: Admin ma zawsze rację | REGULAMIN FORUM | REKLAMA/VIP | .
Combacior, w sumie to potrzebne jest mi to nie koniecznie do przystank?w, ale na ich przyk?adzie chcia?bym to pokaza?.

Chodzi?o mi o co? takiego, ?e jak wpisze komend? np. /autobus, daj? p?tle for(new x;...) i sprawdzam na przystanku o jakim uID jest gracz, daj? kod w stylu uidprzystanku[playerid] = x;. Wtedy mia?bym zapisane uID do zmiennej chyba, co wykluczy?oby mi u?ywania p?tli co sekund?, bo nie musia?bym za ka?dym razem p?tl? sprawdza? na jakim przystanku (o jakim uID) jest gracz, tylko korzysta? z zapisanego uID. P??niej uruchamiam timer, gdzie b?d? sprawdza? czy pewna warto?? dla przystanku na jakim si? jest nie jest r?wna 0.

Poka?? to na przyk?adzie kr?tkiego kodu:
Pawn
for(new 0MAX_PRZYSTANKOWx++)
{
    if(IsPlayerInRangeOfPoint(playerid10.0Przystanek[x][pX], Przystanek[x][pY], Przystanek[x][pZ]))
    {
        uidprzystanku[playerid] = x;
    }
}//reszta kodu
        
public Odswiezanie(playerid)//timer wykonuj?cy si? co 1 sekund?
{
    new UID uidprzystanku[playerid];
    if(Przystanek[UID][Wartosc] == 0)
    {
        SendClientMessage(playerid, -1"Warto?? wynosi 0.");
         KillTimer(...);
    }
    else
    {
        Przystanek[UID][Wartosc]--;
    }
    return 1;
}


I teraz na przyk?adzie p?tli:

Pawn
public Odswiezanie(playerid)//timer wykonuj?cy si? co 1 sekund?
{
    for(new 0MAX_PRZYSTANKOWx++)
    {
        if(IsPlayerInRangeOfPoint(playerid10.0Przystanek[x][pX], Przystanek[x][pY], Przystanek[x][pZ]))
        {
            if(Przystanek[x][Wartosc] == 0)
            {
                SendClientMessage(playerid, -1"Warto?? wynosi 0.");
                KillTimer(...);
            }
            else
            {
                Przystanek[x][Wartosc]--;
            }
        }
    }
    return 1;
}


Kt?ry spos?b by?by lepszy? Czy zmieni? to na ten spos?b co Ty pisa?e?? Wola?bym jednak zosta? przy kt?rym?, kt?ry ja poda?em. :P

Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-03-16, 16:44


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Pierwszy spos?b z komend? jest lepszy, p?tli trzeba unika? w timerach je?li s? cz?sto wykonywane i na du?? ilo??.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2016-03-16, 16:59


Iggy

#admin






Wiek: 26
Na forum: 4596 dni
Posty: 3469
Nick w MP: Iggy

Piwa: 1716

Respekt: 915
Respekt: 915Respekt: 915


   Administrator: Admin ma zawsze rację | REGULAMIN FORUM | REKLAMA/VIP | .
Okej, dzi?ki za pomoc.


Temat został zamknięty, z powodu naruszenia zasad lub wyczerpania treści.




Postaw piwo autorowi tego posta
 

 
Tagi: system :: dynamiczny.
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » PAWN » System dynamiczny. 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