Skocz do zawartości

Rekomendowane odpowiedzi

if (strcmp("/100hp", cmdtext, true, 10) == 0)

{

        SendClientMessage(playerid, -1,"Dostałeś 100hp");

        SetPlayerHealth(playerid,100);

return 1;

}

Pierwsze co i błąd widać

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Na otwieranie/zamykanie bramy na lotnisku w lv.

w [glow=red,2,300]OnPlayerCommandText[/glow]

	if(strcmp(cmdtext, "/open", true) == 0)
{
MoveObject(bramalotniska, 1702.46459961, 1596.91564941, 11.82090569, 3);
SendClientMessage(playerid, KOLOR_ZIELONY, "Brama na lotnisku się otwiera!");
return 1;
}

if(strcmp(cmdtext, "/close", true) == 0) 
{
MoveObject(bramalotniska, 1705.80004883, 1607.40002441, 11.82090569, 3);
SendClientMessage(playerid, KOLOR_ZIELONY, "Brama na lotnisku się zamyka!");
return 1;
}
w [glow=red,2,300]OnFilterScriptInit[/glow] chyba ,że to mapa to [glow=red,2,300]OnGameModeInit[/glow]
bramalotniska = CreateObject(980, 1705.80004883, 1607.40002441, 11.82090569, 0.00000000, 359.90002441, 253.00000000);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

UWAGA: Komendy używają ZCMD i sscanf'a.

UWAGA: Komendy została wycięta z mapy.

Teleport danego gracza w dane miejsce (pozycja), rotacja, Virtual World i interior.

CMD:teleport(playerid, params[])
{
new id, Float:pozycjaX, Float:pozycjaY, Float:pozycjaZ, Float:angle, interior, vw;
		if(sscanf(params, "uffffdd", id, pozycjaX, pozycjaY, pozycjaZ, angle, interior, vw))
		{
		return SendClientMessage(playerid, -1, "/teleport [id] [pozycjaX] [pozycjaY] [pozycjaZ] [obrót] [interior] [vw]");
		}
		if(!IsPlayerConnected(id))
		{
			return SendClientMessage(playerid, -1, "Nie ma takiego gracza");
		}
		if(IsPlayerInAnyVehicle(playerid) == 1)
		{
			if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
			{
				SetVehiclePos(GetPlayerVehicleID(id), pozycjaX,pozycjaY,pozycjaZ);
				SetVehicleZAngle(GetPlayerVehicleID(id), angle);
				LinkVehicleToInterior(GetPlayerVehicleID(id),interior);
				SetVehicleVirtualWorld(GetPlayerVehicleID(id),vw);
				SetPlayerInterior(id,interior);
				SetPlayerVirtualWorld(id,vw);
				return 1;
			}
		} 
		else 
		{
			SetPlayerPos(id, pozycjaX,pozycjaY,pozycjaZ);
			SetPlayerFacingAngle(id,angle);
			SetPlayerInterior(id,interior);
			SetPlayerVirtualWorld(id,vw);
		}
}
Komenda sprawdza Virtual World, Interior oraz pozycje. Przydatne do tworzenia pickupów itp.
CMD:vw(playerid, params[])
{
	new string[128],string2[128], Float:LocX, Float:LocY, Float:LocZ, Float:Angle;
	GetPlayerPos(playerid,LocX, LocY, LocZ);
	GetPlayerFacingAngle(playerid, Angle);
	format(string, sizeof string, "((Virtual World: %d Interior: %d))", GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid));
	format(string2, sizeof string2, "((Pozycja: %.4f, %.4f, %.4f, %.4f))", LocX, LocY, LocZ, Angle);
	SendClientMessage(playerid, -1, string);
	SendClientMessage(playerid, -1, string2);
	return 1;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Lepiej tak:

if(sscanf(params, "ufffF(180)D(0)D(0)", id, pozycjaX, pozycjaY, pozycjaZ, angle, interior, vw))

ostatnie 3 argumenty są opcjonalne  ::)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

informacja o zalogowaniu na RCON'a


public OnRconLoginAttempt(ip[], password[], success)
{
new str[256];
if(!success)
{
new Pip[16];
for(new i=0; i<GetMaxPlayers(); i++)
{
GetPlayerIp(i, Pip, sizeof(Pip));
if(!strcmp(ip, Pip, true) && IsPlayerConnected(i))
{
ProbyLogowania[i]++;
if(ProbyLogowania[i] == 1)
{
SendClientMessage(i, FIOLETOWY, "Zle haslo! pozostalo prob :1/3");
}
if(ProbyLogowania[i] == 2)
{
SendClientMessage(i, JASNA_ZIELEN, "Zle haslo! pozostalo prob : 2/3");
}
if(ProbyLogowania[i] == 3)
{


SendClientMessage(i, COLOR_BLUE, "Zostajesz zbanowany.");
GameTextForPlayer(i,"~R~ BAN",3000,5);
BanEx(i, "ProbyLogowania");
format(str, sizeof(str), "%s (ID: %d) został zbanowany Powod: Nieautoryzowane logowanie na Admina", PlayerName(i), i);  //ANTY FAKE ADMINS
SendClientMessageToAll(COLOR_ADMIN, str);
}
}
}
}
if(success)
{
new pip[16];
for(new i; i<GetMaxPlayers(); i++)
{
GetPlayerIp(i, pip, sizeof(pip));
if(!strcmp(ip, pip, true) && IsPlayerConnected(i))
{
format(str, sizeof(str), "%s (ID: %d) zalogował się jako Administrator.", PlayerName(i), i);
printf("IP : %s Nick: %s *** zalogowal sie jako administrator",ip,PlayerName(i));   //text do konsoli
GameTextForPlayer(i,"~r~Zalogowales sie jako admin!",3000,5);  //game text dla logującego
SendClientMessage(i,CWARN,"Pamiętaj,moce admina nie są dla zabawy.Nie oszukuj także.");
}
}
SendClientMessageToAll(COLOR_ADMIN, str);
}
return 1;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Łap :-P

#define COLOR_ADMIN 0xFF0000AA//Wykasuj to, jeśli masz taki kolor.
#define COLOR_YELLOW 0xFFFF00AA//Wykasuj to, jeśli masz taki kolor.

new bool:Otw[MAX_VEHICLES] = true; //Zmień to, jeśli chcesz, aby pojazdy (wszystkie) były zamknięte.
new IDPojazdu = 400; //Tablica, potrzebna do przechowywania zmiennej typu integer (Id pojazdu).

COMMAND:idpoj(playerid, params[]){
    if(IsPlayerInAnyVehicle(playerid)){
        IDPojazdu = GetPlayerVehicleID(playerid);
        SendClientMessage(playerid, COLOR_YELLOW, "Zapisałeś ID pojazdu! Wyjdź i wciśnij komendę {FF1111}/klucze");
    }else{
        SendClientMessage(playerid, COLOR_YELLOW, "Nie jesteś aktualnie w pojeździe!");
    }
    return 1;
}

COMMAND:klucze(playerid, params[]){
    if(!IsPlayerInAnyVehicle(playerid) && IDPojazdu){
        if(Otw[IDPojazdu] == true){
            SetVehicleParamsForPlayer(IDPojazdu, playerid, 0, 1);
            SendClientMessage(playerid, COLOR_YELLOW, "Zamknąłeś pojazd!");
        }else if(Otw[IDPojazdu] == false){
            SetVehicleParamsForPlayer(IDPojazdu, playerid, 0, 0);
            SendClientMessage(playerid, COLOR_YELLOW, "Otworzyłeś pojazd!");
            
        }
    }else{
        SendClientMessage(playerid, COLOR_ADMIN, "Jesteś w pojeździe i nie pobrałeś jego ID!(/idpoj)");
    }
        return 1;
}

W układaniu kodu jestem nowy, więc nie miejcie pretensji do mnie :)////

//Edit: Mogłem zrobić w enum :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

/jj

CMD:jj(playerid, cmdtext[]) {
	new string [80];
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid,name, sizeof(name));
	format(string, sizeof(string), "%s Już jest!",name, playerid);
	SendClientMessageToAll(0x0000BBAA,string);
	return 1;
}
/czesc
CMD:czesc(playerid, cmdtext[]) {
	new string [80];
	new name [MAX_PLAYER_NAME];
	GetPlayerName(playerid,name, sizeof(name));
	format(string, sizeof(string), "%s Mówi cześć!",name, playerid);
	SendClientMessageToAll(0x33AA33AA,string);
	return 1;
}
/siema
CMD:siema(playerid, cmdtext[]) {
	new string [80];
	new name [MAX_PLAYER_NAME];
	GetPlayerName(playerid,name, sizeof(name));
	format(string, sizeof(string), "%s Mówi siema!",name, playerid);
	SendClientMessageToAll(0x00FF00FF,string);
	return 1;
}
/nara
CMD:nara(playerid, cmdtext[]) {
	new string [80];
	new name [MAX_PLAYER_NAME];
	GetPlayerName(playerid,name, sizeof(name));
	format(string, sizeof(string), "%s Mówi nara!",name, playerid);
	SendClientMessageToAll(0x6DC5F3FF,string);
	return 1;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

/zw

CMD:zw(playerid, cmdtext[]) {
	new string [80];
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid,name, sizeof(name));
	format(string, sizeof(string), "%s Zaraz wraca...",name, playerid);
	SendClientMessageToAll(0x0000BBAA,string);
	return 1;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@P4kus: Nie lepiej przeoptymalizować?

COMMAND:zw(playerid, params[])
{
	GetPlayerName(playerid, params, MAX_PLAYER_NAME);
	format(params, 21+MAX_PLAYER_NAME+1, "Gracz %s zaraz wróci...", params);
	SendClientMessageToAll(-1, params);

	return 1;
}

Poprawka: 26-09-2011 16:27

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Przecież tego stocka chyba każdy ma w mapie .

stock PlayerName(playerid)
{
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, name, sizeof(name));
	return name;
}
  Daje on nam możliwość pozyskania nicku gracza, znając jego id czyli w formacie dajemy
PlayerName(id)

czy to nie jest najlepsze wyjście, możemy to stosować milion razy.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Restorer lepiej jest zrobić tablice dla all graczy i pobierać nick gdy gracz wchodzi na serwer, to już jest wtedy full optymalnie, ogólnie po co wywoływać funkcję która będzie się znowu jakiś czas sama w sobie wykonywać, która będzie tworzyć tablicę jak możemy to skrócić do prawidłowego wykorzystania pamięci w PAWN i optymalnego rozwiązania ?

GetPlayerName(playerid, params, 128);

lol, 24 a nie 128

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
@Restorer lepiej jest zrobić tablice dla all graczy i pobierać nick gdy gracz wchodzi na serwer, to już jest wtedy full optymalnie, ogólnie po co wywoływać funkcję która będzie się znowu jakiś czas sama w sobie wykonywać, która będzie tworzyć tablicę jak możemy to skrócić do prawidłowego wykorzystania pamięci w PAWN i optymalnego rozwiązania ?

Podałem tylko rozwiązanie, które będzie lepsze od tych podanych tutaj.

lol, 24 a nie 128

Jak się nie mylę 24 to maksymalny rozmiar  nicku gracza, więc musimy dodać do tego tekst czyli prawidłowy rozmiar to [46].

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ogólnie napiszę tą żałosną komendę jeszcze raz żeby nie było nie domówień: 

Potrzebny stock Player Name

 
CMD:zw(playerid, cmdtext[])  
{
        new tekst[46];
	format(tekst, 46, "%s Zaraz wraca...",PlayerName(playerid));
	SendClientMessageToAll(0x0000BBAA,tekst);
	return 1;
}

 

Ogólnie to ta komenda była, na pierwszej lub drugiej stronie.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Restorer: Fail?

new id,
...
PlayerName(id)
+
format(tekst, 46, "%s Zaraz wraca...",PlayerName(id),  >> tekst << ?);
Poza tym nie wiem, po co Twój post, skoro już ta komenda była trzykrotnie stworzona. Wykańczam temat, ponieważ mam wątpliwości, co do edycji params (Nie wiem, co się dzieje, jeżeli nie podano argumentów - muszę to zaraz sprawdzić)
CMD:zw(playerid, params[])
{
	new string[] = "XXXXXXXXXXXXXXXXXXXXXXXXX zaraz wraca...";
	GetPlayerName(playerid, string, sizeof (string));
	format(string, sizeof (string), "%s zaraz wraca...", string);
	SendClientMessageToAll(-1, string);
}

+ Dam znać, co i jak z tą modyfikacją params.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Fail?

Tak i to trochę duży bo po prostu majstrowałem przy komendach z sscanf'em

Ogólnie w mapie miałem podobnie to wszystko przez pracę przy sscanfie, potem pewne rozwiązania wchodzą w nawyk. W sumie z tym komenda będzie działać i tak normalnie.

Tak szczerze to była to komenda /me przerobiona w minutę xD.

Jeżeli nie podałeś argumentów do params to i tak wszystko będzie ok, przynajmniej mi się kiedyś nic nie działo.

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ę.

×