Akcja Buttony
Akcja 'Stop ServerProject'
Liberty Unleashed
GTA Multiplayer
Forum graficzne | Tutoriale GIMP Photoshop
Serwery Counter Strike 1.6
Forum serwera sa-mp PolishRPG
GTAModing.pl | Modyfikacje do GTA
exe24
psi247
TruckSerwer
Umieść swój button
Pawno i Lua dla SA-MP i MTA
07 Wrzesień 2010, 19:31:58 pm *
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
 
   Strona główna   Pomoc Szukaj Kalendarz Zaloguj się Rejestracja Wiki Dodatki  
Strony: [1]   Do dołu
  Drukuj  
Autor Wątek: Teleporty - Co i jak?  (Przeczytany 2342 razy)
0 użytkowników i 1 Gość przegląda ten wątek.
Shock
Bywalec
*

Piw: +0/-0
Offline Offline

Płeć: Mężczyzna
Wiadomości: 48


Pawn Programmer


Zobacz profil
« : 31 Grudzień 2008, 19:32:12 pm »

Witam! W moim pierwszym poradniku pokażę Wam jak robić teleporty za pomocą komend.

Do zmiany pozycji gracza używamy funkcji SetPlayerPos

Kod Pawn:
SetPlayerPos(id gracza,koord x,koord y,koord z);

Na początek musimy pobrać koordy miejsca do którego mamy być teleportowani. Uruchamiamy samp_debug.exe, idziemy do danego miejsca i zapisujemy za pomocą komendy:

/save opis

Teraz odszukujemy plik savedpositions.txt, jest w folderze z grą. Szukamy linijki z komentarzem // opis, oraz kopiujemy z niej 2, 3 i 4 argument czyli w tym kodzie:

Kod Pawn:
AddPlayerClass(19,1730.2559,1599.6588,10.1121,70.1623,0,0,0,0,0,0); // opis

było by:

Kod Pawn:
1730.2559, 1599.6588, 10.1121

Oraz wklejamy do SetPlayerPos co da nam:

Kod Pawn:
SetPlayerPos(playerid, 1730.2559, 1599.6588, 10.1121);

Teraz przechodzimy do publica OnPlayerCommandText i wklejamy:

Kod Pawn:
if(strcmp(cmdtext, "/komenda", true) == 0)
    {
                        SetPlayerInterior(playerid, 0);
            SetPlayerPos(playerid, 1730.2559, 1599.6588, 10.1121);
        return 1;    
        }

Jeżeli teleport jest do wnętrza jakiegoś budynku, musimy znać jego interior, którego można wyświetlić za pomocą klawisza F5. Jeśli już go znamy dodajemy to nad SetPlayerPos:

Kod Pawn:
SetPlayerInterior(playerid, INTERIOR);

To wszystko. Gdy użyjemy komendy teleportuje nas do danego miejsca.

"A jak zrobić teleport z pojazdem?"

Zmieniamy treść komendy na:

Kod Pawn:
   if(strcmp(cmdtext, "/komenda", true) == 0)
    {
        SetPlayerInterior(playerid, interior);
        if(GetPlayerState(playerid) == 2)
        {
            new vehicleid = GetPlayerVehicleID(playerid);
            LinkVehicleToInterior(vehicleid, interior);
            SetVehiclePos(vehicleid, 1730.2559, 1599.6588, 10.1121);
        }
         else
        {
            SetPlayerPos(playerid, 1730.2559, 1599.6588, 10.1121);
            SetPlayerFacingAngle(playerid, 0);
}
        return 1;
        }

Teraz tłumaczę:

if(GetPlayerState(playerid) == 2) - jeśli gracz jest w pojeździe...
LinkVehicleToInterior(vehicleid, interior) - zmienia interior pojazdu
SetVehiclePos(vehicleid, 1730.2559, 1599.6588, 10.1121) - zmienia pozycję wozu

Mam nadzieję że nie będzie już więcej spamu typu:

Cytuj
jak zrobic komedy rzeby morzna sie byo teleportowac

Jeśli czegoś brakuje napisz.

Poradnik pisany dla gtamscripting.info przez Shocka. Zabraniam kopiowania!
Zapisane

Jeśli ktoś Ci pomógł, daj mu +. W ten sposób zwiększysz jego reputację, oraz będziesz bardziej szanowany U?miech

[GM]LV-DM by Shock 40% (9000 linijek, 340kb (pwn))
P4
Soldier
***

Piw: +14/-3
Offline Offline

Płeć: Mężczyzna
Wiadomości: 242


The freshmaker


Zobacz profil WWW
« Odpowiedz #1 : 31 Grudzień 2008, 20:34:44 pm »

Nie wiem komu ten poradnik pisany... ale dobrze że coś się wogole dzieje.
Plusa nie dam U?miech Niestety...
Opisane jak nie wiem co...
Cytuj
było by:

Kod Pawn:

1730.2559, 1599.6588, 10.1121

Skąd zielony ludzik wie dlaczego akurat te liczby?
Zapisane

Shock
Bywalec
*

Piw: +0/-0
Offline Offline

Płeć: Mężczyzna
Wiadomości: 48


Pawn Programmer


Zobacz profil
« Odpowiedz #2 : 31 Grudzień 2008, 22:09:14 pm »

@up
Cytuj
SetPlayerPos(id gracza,koord x,koord y,koord z);
Zapisane

Jeśli ktoś Ci pomógł, daj mu +. W ten sposób zwiększysz jego reputację, oraz będziesz bardziej szanowany U?miech

[GM]LV-DM by Shock 40% (9000 linijek, 340kb (pwn))
BackFliper
Członek
*

Piw: +0/-0
Offline Offline

Wiadomości: 1


Zobacz profil
« Odpowiedz #3 : 22 Kwiecień 2009, 17:53:50 pm »

LoL czemu jak zapisuję ten teleport w np lvdm.pwn to on nie działa?
Zapisane
uErr0r
Członek
*

Piw: +0/-0
Offline Offline

Wiadomości: 1


Zobacz profil
« Odpowiedz #4 : 28 Wrzesień 2009, 15:23:52 pm »

Jak zrobić teleport gdy wejdzie się w ikonkę i nas teleportuje?

Powód: Odkop. Uzyj opcji 'szukaj'.
Zapisane
Deather
Bywalec
*

Piw: +0/-0
Offline Offline

Wiadomości: 15


Zobacz profil
« Odpowiedz #5 : 29 Czerwiec 2010, 01:35:31 am »

błąd kompilacji:
C:serwerdms.pwn(767) : error 017: undefined symbol "interior"
C:serwerdms.pwn(771) : error 017: undefined symbol "interior"

Powód: Odkop.
Zapisane
Tommy
Foo Fighter
$Junior Admin
Dyktator
*****

Piw: +172/-0
Offline Offline

Płeć: Mężczyzna
Wiadomości: 1367



Zobacz profil
« Odpowiedz #6 : 29 Czerwiec 2010, 09:20:05 am »

Zamiast 'interior' musisz wpisać ID interioru, jaki chcesz ustawić. Jeżeli chcesz sprawdzić ID interioru danego pomieszczenia (np. domu CJ'a) musisz do niego wejść i wpisać /interior. Na czacie wyświetli się wtedy tekst:
Kod Pawn:
Current interior: tutaj_będzie_ID_interioru
Wyświetlone ID umieszczasz w funkcji SetPlayerInterior zamiast 'interior'.
Zapisane

Deather
Bywalec
*

Piw: +0/-0
Offline Offline

Wiadomości: 15


Zobacz profil
« Odpowiedz #7 : 29 Czerwiec 2010, 11:12:35 am »

kapuję
Sry za zawracanie głowy xdd

0 zewnątrz?
Zapisane
homie
@Administrator
BigBoss
*****

Piw: +255/-7
Offline Offline

Płeć: Mężczyzna
Wiadomości: 2173



Zobacz profil
« Odpowiedz #8 : 29 Czerwiec 2010, 12:21:29 pm »

Tak.
Zapisane

dadas96
Członek
*

Piw: +0/-0
Offline Offline

Wiadomości: 1


Zobacz profil
« Odpowiedz #9 : 09 Lipiec 2010, 16:21:58 pm »

Witam
Mam pytanie,
Do zmiany pozycji gracza używamy funkcji SetPlayerPos

Kod Pawn:
SetPlayerPos(id gracza,koord x,koord y,koord z);

Co ma być wstawione zamiast tego 'id gracza', ja chcę aby każdy gracz mógł sie teleportować a nie koleś o danym id, plis wytłumaczcie mi to.
Pozdrawiam i proszę o szybką pomoc

PS. Jestem ciemny w Pawno, nie znam się na nim a wiec nie oceniajcie mnie źle, chcę się czegoś w tym nauczyć
Zapisane
homie
@Administrator
BigBoss
*****

Piw: +255/-7
Offline Offline

Płeć: Mężczyzna
Wiadomości: 2173



Zobacz profil
« Odpowiedz #10 : 09 Lipiec 2010, 17:34:54 pm »

Zazwyczaj teleporty umieszcza się w komendach, a komendy w callbacku OnPlayerCommandText. Wygląda on tak:
Kod Pawn:
public OnPlayerCommandText(playerid, cmdtext[])
dzięki czemu ID gracza, który wpisał komendę masz w zmiennej playerid. Dodajesz więc linijkę
Kod Pawn:
SetPlayerPos(playerid, koord x, koord y, koord z);
i tak poznałeś czym są zmienne. W programowaniu nie musisz wpisywać wszystkiego statycznie, bo tak jak napisałeś chciałeś, żeby każdy gracz mógł się teleportować. Robienie tego statycznie, czyli wpisując konkretną liczbę w miejscu id gracza nie jest tutaj rozwiązaniem. Statycznie liczbami musisz jedynie uzupełnić koordy (piszę o tym konkretnym przypadku, bo jeśli najdzie taka potrzeba, to oczywiście i tam możesz użyć odpowiednio zmiennych).
Zapisane

Jajnick
Członek
*

Piw: +0/-0
Offline Offline

Wiadomości: 2


Zobacz profil
« Odpowiedz #11 : 26 Lipiec 2010, 13:19:57 pm »

A jak zrobić teleport, który działa tylko, jeśli gracz jest w wyznaczonym czerwonym markerze? Ah tak! I za pomocą różnych komend teleportuje nas w różne miejsca? NP:
1.Wchodzę na marker
2.Wpisuję "/2" Teleportuję się do miejsca nieoficjalnie oznaczonego jako drugie
Albo:
1.Wpisuję "/2"
2.Wyświetla mi się "nie jesteś na markerze"
« Ostatnia zmiana: 26 Lipiec 2010, 13:26:08 pm wysłane przez Jajnick » Zapisane
Tommy
Foo Fighter
$Junior Admin
Dyktator
*****

Piw: +172/-0
Offline Offline

Płeć: Mężczyzna
Wiadomości: 1367



Zobacz profil
« Odpowiedz #12 : 26 Lipiec 2010, 13:54:51 pm »

Sprawdź za pomocą funkcji, czy gracz jest w checkpoincie (markerze):
Kod Pawn:
if(IsPlayerInCheckpoint(playerid))
{
    SetPlayerPos(playerid, X, Y, Z); // zamiast X, Y i Z wstaw sobie odpowiednie współrzędne
}
else
{
    SendClientMessage(playerid, 0xFFFFFFFF, "Nie jesteś w markerze.");
}
Przy większej ilości checkpointów trzeba to będzie rozwiązać trochę inaczej.
« Ostatnia zmiana: 26 Lipiec 2010, 15:03:49 pm wysłane przez Tommy » Zapisane

Jajnick
Członek
*

Piw: +0/-0
Offline Offline

Wiadomości: 2


Zobacz profil
« Odpowiedz #13 : 27 Lipiec 2010, 12:23:48 pm »

Przy większej ilości checkpointów trzeba to będzie rozwiązać trochę inaczej.
No właśnie. Co teraz?
Zapisane
Tommy
Foo Fighter
$Junior Admin
Dyktator
*****

Piw: +172/-0
Offline Offline

Płeć: Mężczyzna
Wiadomości: 1367



Zobacz profil
« Odpowiedz #14 : 27 Lipiec 2010, 13:33:16 pm »

Stwórz na górze mapy tablicę ze współrzędnymi markerów:
Kod Pawn:
new Float:Checkpoints[][3] =
{
    {X, Y, Z}, // marker nr '1'
   {X_2, Y_2, Z_2}, // marker nr '2'
   // itd...
   {X_n, Y_n, Z_n} // marker nr 'n', przy ostatnim markerze nie dajemy na końcu przecinka
};

W OnPlayerConnect tworzymy PVara:
Kod Pawn:
SetPVarInt(playerid, "marker", -1);
Następnie w OnGameModeInit tworzymy timer, który będzie sprawdzał pozycję gracza i ustawiał markery, gyd gracz będzie w odpowiedniej strefie:
Kod Pawn:
SetTimer("CheckpointUpdate", 1000, true);
Na dole mapy umieszzcamy public timer'a:
Kod Pawn:
forward CheckpointUpdate();
public CheckpointUpdate()
{
    for(new i = 0; i < GetMaxPlayers(); i++)
    {
        if(!IsPlayerConnected(i)) continue;

        for(new c = 0; c < sizeof(Checkpoints); c++)
        {
            if(IsPlayerInRangeOfPoint(i, 30.0, Checkpoints[c][0], Checkpoints[c][1], Checkpoints[c][2]) && GetPVarInt(i, "marker") != c)
            {
                SetPlayerCheckpoint(i, Checkpoints[c][0],checkpoints[c][1],checkpoints[c][2], 2.0);
                SetPVarInt(playerid, "marker", c);
            }
            else
            {
                if(GetPVarInt(i, "marker") == c)
                {
                    DisablePlayerCheckpoint(i);
                    SetPVarInt(playerid, "marker", -1);
                }
            }
        }
    }

    return 1;
}
Teraz w komendach możesz sobie sprawdzać, w którym markerze znajduje się gracz:
Kod Pawn:
if(IsPlayerInCheckpoint(playerid))
{
    switch(GetPVarInt(playerid, "marker"))
    {
        case 0: // pierwszy checkpoint
       {
            // instrukcje dla pierwszego markera
       }

        case 1: // drugi checkpoint
       {
            // instrukcje dla drugiego markera
       }

        // i tak dalej...
   }
}
Możesz też sprawdzać bez użycia instrukcji 'switch':
Kod Pawn:
if(IsPlayerInCheckpoint(playerid))
{
    if(GetPVarInt(playerid, "marker") == 4)
    {
        // instrukcje tylko dla piątego markera
   }
}
Jeżeli gubiłbyś się w tych liczbach, które oznaczają poszczególne checkpointy, możesz sobie zrobić definicję ich ID:
Kod Pawn:
#define MARKER_1    0
#define MARKER_2    1
#define MARKER_3    2
#define MARKER_4    3
// itd.
Teraz zamiast podawać ID w postaci liczby, możesz podać nazwę definicji. Przykładowo zamiast:
Kod Pawn:
if(GetPVarInt(playerid, "marker") == 4)
{
    // instrukcje tylko dla piątego markera
}
będzie teraz:
Kod Pawn:
if(GetPVarInt(playerid, "marker") == MARKER_5)
{
    // instrukcje tylko dla piątego markera
}
Oczywiście możesz sobie zmienić nazwy definicji na własne, abyś mógł łatwiej odróżniać markery od siebie, np.:
Kod Pawn:
#define TP_SAN_FIERRO    0
#define TP_LOS_SANTOS    1
#define TP_LAS_VENTURAS    2
#define TP_PUSTYNIA    3
// itd.
W razie problemów pisz, w tłumaczeniu może nie jestem najlepszy, ale mam nadzieję, że mnie zrozumiesz  Mrugniecie
 Pozdrawiam.
« Ostatnia zmiana: 27 Lipiec 2010, 18:37:13 pm wysłane przez Tommy » Zapisane

Strony: [1]   Do góry
  Drukuj  
 
Skocz do:  

Reklama
Działa na MySQL Działa na PHP Powered by SMF 1.1.11 | SMF © 2006-2007, Simple Machines LLC | Sitemap Prawidłowy XHTML 1.0! Prawidłowy CSS!
Strona wygenerowana w 0.105 sekund z 23 zapytaniami.