Jump to content


Tworzenie komend

Scripting IV-MP Squirrel

  • You cannot reply to this topic
No replies to this topic

#1 Fafu

    Programista

  • Użytkownicy
  • 28 posts

Posted 31 October 2011 - 16:55

Tworzenie komend jest łatwiejsze niż myślisz. Dzięki funkcji split() możesz bardzo łatwo tworzyć komendy z i bez parametrów.
Pierwszą rzeczą jaką musimy zrobić to napisać funkcję do obsługi zdarzenia playerCommand:
function onPlayerCommand(playerid, command) {
	// kod
}
addEvent("playerCommand", onPlayerCommand);
playerid to id gracza, który wpisał komendę, a command to komenda.

Przykładowo możemy zrobić sobie funkcje która daje nam 100% HP (w GTA4 100% to 200 punktów życia).
function onPlayerCommand(playerid, command) {

	local cmd = split(command, " "); // funkcja split podzieli nam komendę na spacje

	if(cmd[0] == "/givehealth") { // cmd[0] to pierwsze słowo które zostało wpisane w komendzie
		setPlayerHealth(playerid, 200);
		sendPlayerMessage(playerid, "You set your health to 100%");
		return 1;
	}
	return 0;
}
addEvent("playerCommand", onPlayerCommand);

Jeśli ktoś nie rozumie jak działa funkcja split() to wytłumacze to na przykładzie:
Jak wpiszemy komende "/komenda tekst1 tekst2 12345" i gdy użyjemy kodu
local cmd = split(command, " ");
To tablica cmd będzie zawierała następujące wartości:
cmd[0] = "/komenda";
cmd[1] = "tekst1";
cmd[2] = "tekst2";
cmd[3] = "12345";
Mam nadzieję, że teraz już wszystko jest jasne. Ważne też jest, że te dane są zawsze typu string więc trzeba używać funkcji tointeger() oraz tofloat() jeśli chcemy mieć liczbę lub liczbę zmiennoprzecinkową.

Teraz pokażę, jak zrobić komendę z parametrami. Przykładowo będzie to komenda do teleportowania się do gracza.
function onPlayerCommand(playerid, command) {

	local cmd = split(command, " ");

	if(cmd[0] == "/goto") {
		// sprawdzamy czy podano wymaganą ilość parametrów
		if(cmd.len() != 2) {
			sendPlayerMessage(playerid, "UŻYCIE: /goto [ID]");
			return 1;
		}
		// sprawdzamy czy taki gracz jest na serwerze
		if(!isPlayerConnected(cmd[1].tointeger()) {
			sendPlayerMessage(playerid, "Taki gracz nie jest polaczony.");
			return 1;
		}
		// pobieramy pozycje podanego gracza
		local pos = getPlayerCoordinates(cmd[1].tointeger());

		// ustawiamy pozycje gracza, który wpisał komendę
		setPlayerCoordinates(playerid, pos[0], pos[1], pos[2]);

		// wyświetlamy komunikaty
		sendPlayerMessage(playerid, "Teleportowales sie do "+getPlayerName(cmd[1].tointeger()));
		sendPlayerMessage(cmd[1].tointeger(), getPlayerName(playerid)+" teleportowal sie do ciebie.");
		return 1;
	}
	return 0;
}
addEvent("playerCommand", onPlayerCommand);

Na koniec pokażę jeszcze jak zrobić komendę z parametrami, z tym że ostatnim parametrem będzie tekst ze spacjami (na przykładzie prywatnych wiadomości).
function onPlayerCommand(playerid, command) {

	local cmd = split(command, " ");

	if(cmd[0] == "/pm" || cmd[0] == "/pw" || cmd[0] == "/w") {
		// sprawdzamy czy podano wymaganą ilość parametrów
		if(cmd.len() < 3) {
			sendPlayerMessage(playerid, "UŻYCIE: /pm [ID] [Tekst]");
			return 1;
		}
		// sprawdzamy czy taki gracz jest na serwerze
		if(!isPlayerConnected(cmd[1].tointeger()) {
			sendPlayerMessage(playerid, "Taki gracz nie jest polaczony.");
			return 1;
		}
		// ucinamy tekst na długość 1) nazwy komendy 2) id gracza 3) dwóch spacji
		local text = command.slice(cmd[0].len() + cmd[1].len() + 2);

		// wysyłamy wiadomość
		sendPlayerMessage(cmd[1].tointeger(), "PM od " + getPlayerName(playerid) + " [" + playerid + "]: " + text);
		sendPlayerMessage(playerid, "PM wyslane do " + getPlayerName(cmd[1].tointeger()) + " [" + cmd[1].tointeger() + "]: " + text);
		return 1;
	}
	return 0;
}
addEvent("playerCommand", onPlayerCommand);

Zapraszam na Rafal.Brzezinski.me





1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users