Skocz do zawartości
Mr_Auto

Odpowiedzi na proste pytania

Rekomendowane odpowiedzi

1. Jak zmienić napis gdy źle wpiszemy komendę ?

wyszukujemy public OnPlayerCommandText(playerid, cmdtext)

pod wszystkimi komendami powinien być return 0; (chyba że mapę robił kiepski skrypter lub ten napis jest już zmieniony) i zamiast 0; dajemy SendClientMessage(playerid,0xFF0000AA,"Nie ma takiej komendy!");

całość:

było 
return 0;
teraz jest
return SendClientMessage(playerid,0xFF0000AA,"Nie ma takiej komendy!");
UWAGA: można stosować tylko w Gamemodach (mapach) jeśli chcecie coś bardziej skomplikowanego np. w tekście treść komendy to usuwamy return 0; a dajemy:
else
{
	new str[100]; //tablica
	format(str,sizeof(str),"Komenda %s nie istnieje",cmdtext); //formatowanie tekstu i zapis do tablicy
	SendClientMessage(playerid,0xFF0000AA,str); //wysyłanie z formatowanego tekstu do gracza
}
Uwaga: jeśli używacie zwykłego systemu komend + strtok to w kodzie powyżej zmieńcie cmdtext na cmd, ponieważ cmdtext to tekst całej komendy (np. w komendzie /report będzie id oraz powód) a cmd to tylko sama komenda od / do spacji
public OnGameModeInit()
{
UsePlayerPedAnims();
lub
public OnFilterScriptInit()
{
UsePlayerPedAnims();
public OnGameModeInit()
{
SetGameModeText("Super Mapa");
+ mały sposób, jeśli macie mapę w amx a chcecie zmienić jej nazwę to robimy timer w OnFilterScriptInit() (w skrypcie) np.
public OnFilterScriptInit()
{
SetTimer("zmiana",2000,0);
i nowy public
forward zmiana();
public zmiana()return SetGameModeText("Super Mapa");
jest to konieczne ponieważ mapa wczytuje się po skryptach i jeśli ma tam zmianę nazwy to ją zmienia, oczywiście jest też prostszy sposób, po włączeniu serwera wchodzimy na niego i używamy komendy rcon
AntyDeAMX()
{
new amx[][] ={"Unarmed (Fist)","Brass K"};
#pragma unused amx
}
Nie można jej dodawać wewnątrz publick'ów czy innych funkcji I teraz w OnGameModeInit() lub OnFilterScriptInit() (zależy czy to mapa czy skrypt) dodajemy AntyDeAMX(); przykład:
OnGameModeInit()
{
AntyDeAMX();
i to na tyle, AntyDeAMX() można też dodać w innych public'kach zamiast w OnGame... ale najlepiej właśnie tutaj
OnGameModeInit()
{
AddPlayerClass(29,0,0,0,0,0,0,0,0,0,0);
CreateObject(3108, 1513.2, -1169.7, 23.117, 0, 0, 0);
CreatePickup(342, 2, 2502.5075683594, 2823.6154785156, 11.026031494141);
CreateVehicle(522,-1826.2233886719,542.88024902344,149.8125,0,-1,-1,100);
    new string[60];
    format(string, 60, "Gracz %s wszedł na serwer", PlayerName(playerid));
    SendClientMessageToAll(KOLOR, string);
po kolei, new string tworzy tablicę do zapisu znaków, potem format tworzy tekst wklejając do niego nick gracza (potrzebna funkcja PlayerName, można znaleźć np. w Przydatne Funkcje), a potem wysyłamy wiadomość do all graczy, w miejsce KOLOR trzeba podać kolor w wartości HEX Mamy już napis gdy gracz wchodzi na serwer, teraz przechodzimy do OnPlayerDisconnect
    new string[60];
    switch(reason)
    {
        case 0: format(string, 60, "Gracz %s opuścił serwer (Crash)", PlayerName(playerid));
        case 1: format(string, 60, "Gracz %s opuścił serwer", PlayerName(playerid));
        case 2: format(string, 60, "Gracz %s opuścił serwer (Kick/Ban)", PlayerName(playerid));
    }
    SendClientMessageToAll(KOLOR, string);
new string jak zawsze, potem używamy switch by sformatować tekst zgodnie z typem opuszczenia serwera przez gracza (reason przyjmuje wartości: 0 - gdy gracz straci połączenie z serwerem, 1 - gdy normalnie wyjdzie np. /q, 2 - gdy zostanie wyrzucony przez serwer), na koniec ten sformatowany tekst wysyłamy, oczywiście trzeba podać KOLOR
Float:DrawDistance = 0.0
powinno być dwa razy (2 funkcje) wystarczy zmienić to na:
Float:DrawDistance = 150.0

150 to odległość w jakiej widzimy obiekt, najlepiej nie przesadzać

Teraz wystarczy ponownie prze-kompilować mapę/skrypt (F5), można to też zrobić nico trudniejszym sposobem, po prostu za każdym obiektem dopisujemy wartość np. 150.0 czyli ręcznie ustawiamy odległość widzenia

Dla tych który są tak słabi że nawet nie umieją jednej rzeczy w pliku zmienić a_objects.inc w załączniku

8. Dlaczego obiekty się obracają?

W wersji 0.3d wszedł update który dodaje możliwość obracania obiektu tak samo jak przemieszczania go, problem w tym że nie dodano nowej funkcji przez co każdy obiekt podczas używania MoveObject powraca do rotacji 0.0,0.0,0.0

Problem łatwo rozwiązać, wystarczy skopiować obrót obiektu, zaznaczone na czerwono:

brama = CreateObject(986, 2492.7986, 2773.1018, 9.5, 270.0, 0.0, 270.0);

i dokleić je do linijki MoveObject, linijka przed wygląda:

MoveObject(brama, 2492.7986, 2773.1018, 17.0, 2.0);

a po doklejeniu powinna wyglądać tak:

MoveObject(brama, 2492.7986, 2773.1018, 17.0, 2.0, 270.0, 0.0, 270.0);
2. Jak zmienić animacje graczy na te z gry jednoosobowej? Służy do tego jedna mała funkcja UsePlayerPedAnims(); wystarczy wkleić ją w public OnGameModeInit() lub OnFilterScriptInit() jeśli wklejamy to na początku to wyglądać będzie to tak:
3. Jak zmienić nazwę naszej mapy? Służy do tego funkcja SetGameModeText, jeśli mapa ma już swoją nazwę to w kodzie mapy wyszukujemy po prostu SetGameModeText i zmieniamy tą nazwę, jeśli nie ma to w OnGameModeInit() dajemy tą funkcję, przykład:
4. Jak zabezpieczyć mapę/skrypt przed DeAmx (programem do zmiany .amx na .pwn)? Bardzo proste, dodajemy tylko do mapy jedną małą funkcję:
5.Gdzie wklejać obiekty, pojazdy, pickup'y oraz nowe skiny? Otóż pojazdy tworzymy dla całego serwera, nie dla gracza dlatego najlepiej wklejać je w OnGameModeInit() lub OnFilterScriptInit() ponieważ te dwa public'ki wykonują się zanim ktokolwiek będzie mógł wejść na serwer, przykład:
6. Jak dodać informację o wejściu/wyjściu gracza na/z serwera Użyjemy do tego 2 funkcji publicznych:
czyli teraz w OnPlayerConnect dajemy to:
7. Dlaczego mam przezroczyste obiekty i jak to naprawić? W najnowszej wersji sa:mp dodano nowy argument przy tworzeniu obiektów, a mianowicie odległość widzenia:
Łatwo to naprawić jeśli nie używacie streamer'a, po po prostu otwórzcie plik a_objects.inc znajdziecie go w Pawno/include (otworzyć można notatnikiem) Teraz wyszukujemy coś takiego:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

paweltbg94

dajesz w publicu

OnPlayerCommandPerformed(playerid, cmdtext[], success)
taki kod
	format(komendyy, sizeof komendyy, "Server nie posiada komendy --> %s -->", cmdtext);
	return success ? 1 :SendClientMessage(playerid, kolorek, komendyy);
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Musi być. Kompilator mi wywala takie coś:

C:\Documents and Settings\Oskar\Pulpit\Skrypty\Moja mapa\Mapa.pwn(265) : error 001: expected token: ")", but found "-identifier-"

Dodam, że jestem początkującym programistą.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Musi być. Kompilator mi wywala takie coś:

C:\Documents and Settings\Oskar\Pulpit\Skrypty\Moja mapa\Mapa.pwn(265) : error 001: expected token: ")", but found "-identifier-"

Dodam, że jestem początkującym programistą.

W poprzedniej linijce brakuje nawiasu ")"

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Poradziłem sobie z tamtym błędem. :)

Pytanie pierwsze.

Kawałek kodu:

if(dialogid == 2)
{
	if(response == 1)//Sprawdzamy, czy gracz nacisnął lewy przycisk.
	switch(listitem)//Szukamy z listy.
{
	case 0://Jeśli opcja pierwsza.
	    ShowPlayerDialog(playerid, 9, "Skin -> Mężczyzna", "CJ - 0\nCywil - 249\nCywil - 294", "Przebierz", "Anuluj");
	case 1://Jeśli opcja druga.
 	{
	    ShowPlayerDialog(playerid, 10, "Skin -> Kobieta", "Cywil - 12\nCywil - 13\nCywil - 94", "Przebierz", "Anuluj");
 	}
}
}
Linijka 407:
ShowPlayerDialog(playerid, 9, "Skin -> Mężczyzna", "CJ - 0\nCywil - 249\nCywil - 294", "Przebierz", "Anuluj");
Linijka 410:
ShowPlayerDialog(playerid, 10, "Skin -> Kobieta", "Cywil - 12\nCywil - 13\nCywil - 94", "Przebierz", "Anuluj");
Tekst kompilatora:
C:\Documents and Settings\Oskar\Pulpit\Skrypty\Moja mapa\Mapa.pwn(407) : error 035: argument type mismatch (argument 3)
C:\Documents and Settings\Oskar\Pulpit\Skrypty\Moja mapa\Mapa.pwn(410) : error 035: argument type mismatch (argument 3)
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.
Pytanie drugie. Mam gotowy panel gracza na mój serwer DM. Teraz chciałbym aby po wpisaniu komendy /pomoc i wybraniu opcji "Panel gracza", przenosiło mnie do niego. Użyłem funkcji:
ShowPlapyerDialog(playerid, id)
Lecz dalej nie działa. Może macie jakiś pomysł? Pytanie trzecie. Jaka funkcja daje JetPacka?
GivePlayerJetpack(playerid);

Również nie działa.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Kolejny błąd. TYm razem jest on trochę dziwny, a mianowicie kompilatow wywala mi coś takiego:

C:\Documents and Settings\Oskar\Pulpit\Skrypty\Moja mapa\Mapa.pwn(217) : error 017: undefined symbol "playerid"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.
A błędna linijka to:
ShowPlayerDialog(playerid, 35, DIALOG_STYLE_MSGBOX, "Służba administratora", "Wszedłeś na służbę administratora!\n\nJeśli chcesz być nieśmiertelny wybierz\nopcję pierwszą, a jeśli chcesz się tylko\n uleczyć - drugą.", "Nieśmiertelność", "Uleczenie");

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Oskar

to nie są proste pytania, ale pomoc, pisz w problemach

a z tym:

ShowPlayerDialog(playerid, 9, "Skin -> Mężczyzna", "CJ - 0\nCywil - 249\nCywil - 294", "Przebierz", "Anuluj");

Nie masz "DIALOG_STYLE_LIST", po podaniu ID dialogu ("9")

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dobra - tamto usunąłem.

Teraz mam problem z linijką 659:

return ShowPlayerDialog(playerid, 43, DIALOG_STYLE_MSGBOX, "Ulecz", "Gracz o podanym ID nie jest aktywny!", "Okej", "")
Linijką 661:
new hp[12];
Błędy kompilatora:
C:\Documents and Settings\Oskar\Pulpit\Skrypty\Moja mapa\Mapa.pwn(659) : error 001: expected token: ")", but found "return"
C:\Documents and Settings\Oskar\Pulpit\Skrypty\Moja mapa\Mapa.pwn(661) : error 001: expected token: ";", but found "new"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Okej, dzięki za pomoc. Z błędem już sobie poradziłem. :)

Jaką funkcją spawnujemy JetPacka?

GivePlayerJetpack(playerid);

nie działa.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK);

a oto w ten sposób, używanie jetpack'a to specjalna akcja, taka jak np. picie alkoholu czy palenie cygara

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Okej, wielkie dzięki. :)

Teraz taki kawełek kodu:

CMD:freeze(playerid, params[])
{
	new gracz//Zmiena z ID gracza i ilością zdrowia
	if(!IsPlayerAdmin(playerid))//sprawdzamy czy gracz jest administratorem.
	    return ShowPlayerDialog(playerid, 55, DIALOG_STYLE_MSGBOX, "Administrator", "Nie jesteś administratorem!", "Okej", "");

	if(sscanf(params, "r", gracz))
	    return ShowPlayerDialog(playerid, 56, DIALOG_STYLE_MSGBOX, "Freeze", "Użyj: /freeze [ID]", "Okej", "");

	if(!IsPlayerConnected(gracz))//Sprawdzamy czy gracz jest na serwerze.
	    return ShowPlayerDialog(playerid, 57, DIALOG_STYLE_MSGBOX, "Freeze", "Gracz o podanym ID nie jest aktywny!", "Okej", "");

	    new freeze[12]
	    TogglePlayerControllable(gracz, false);
 		SendClientMessage(gracz, OSTRZEZENIE, "Zostałeś zamrożony przez administratora!");

		format(freeze, sizeof(freeze), "Zamroziłeś gracza %s!", gracz);
		    SendClientMessage(playerid, OSTRZEZENIE, freeze);
 return 1;
 }
Błędy kompilatora:
C:\Documents and Settings\Oskar\Pulpit\Skrypty\Moja mapa\Mapa.pwn(723) : error 001: expected token: ";", but found "if"
C:\Documents and Settings\Oskar\Pulpit\Skrypty\Moja mapa\Mapa.pwn(733) : error 001: expected token: ";", but found "-identifier-"
Błędne linijki: 723:
	if(!IsPlayerAdmin(playerid))//sprawdzamy czy gracz jest administratorem.
733
	    TogglePlayerControllable(gracz, false);

Wie ktoś jak to naprawić? :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×