Zitat von Musel bei OpenPawnAlles anzeigenGuten Tag liebe OpenPawn-Community,
heute werde ich euch zeigen wie ihr ganz leicht Pickups erstellen könnt und die entsprechenden Funktionen nutzt. Vorab möchte ich sagen, dass es verschiedene Wege gibt ein Pickup zu erstellen und dass es jeweils verschiedene Funktionen gibt die man ausführen kann. Ein Pickup kann man beispielsweise als Teleporter benutzen, genauso kann man eine Aktion ausführen, wie einen Dialog öffnen.
Um nochmal ganz von Vorn anzufangen; Pickups sind aufnehmbare "Icons" die auch im Einzelspieler-Modus verwendet werden, beispielsweise ein Info-Icon, welches aussieht wie ein ' i '. Man kann sie für verschiedene Dinge verwenden und damit alle Funktionen, die man mit einem normalen Befehl, bzw. Command ausführen könnte, auch ausführen.
Um nachher ein Pickup zu erstellen, finden wir erst einmal heraus welche Parameter der Code benötigt und ermitteln erstmal die Funktion.
Nun wissen wir was die einzelnen Parameter bedeuten und können damit anfangen unser Pickup zu erstellen - Ich werde mit einem einfachen Teleporter anfangen.
Als Erstes erstellen wir eine Variable unter den Includes die den Namen unseres Pickups trägt.
new pickup1;
new pickup2;
new pickup3;
new pickup4;
Soweit alles mit den Variablen.
Doch damit allein haben wir kein Pickup erstellt, denn erst muss das unter public OnGameModeInit()
pickup1 = CreatePickup(1318, 2, 1958.3783, 1343.1572, 15.3746, 0);
Jetzt haben wir ein Pickup an der Position 1958.3783, 1343.1572, 15.3746 in einer normalen, sprich 0, Welt erstellt. modelID 1318 steht für einen Pfeil der sich für unseren Teleporter gut eignet. Durch type 2 verschwindet das Pickup für einige Momente und wird dann nach einer Weile wieder sichtbar, sprich man kann es wieder aufnehmen. Noch passiert aber Nichts wenn wir das Pickup aufnehmen, außer dass es verschwindet. - Um das zu ändern suchen wir in unserem Script das Callback public OnPlayerPickUpPickup(playerid, pickupid). Anfangs sieht dies so aus:
public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}
Um aber nur einem bestimmten Pickup unsere Aktion zuzuweisen, fügen wir folgende Abfrage hinzu.
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == pickup1)
{
SetPlayerPos(playerid, X, Y, Z);
return 1;
}
return 0;
}
X, Y und Z tauscht ihr dann gegen die von euch gewünschten Koordinaten aus.
Das Gleiche können wir jetzt auch mit einer Nachricht machen, diesmal mit unserem zweiten Pickup und für welches wir diesmal das i benutzen.
Unter public OnGameModeInit()
pickup2 = CreatePickup(1239, 2, X, Y, Z, 0);
Unter public OnPlayerPickUpPickup(playerid, pickupid
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == pickup2)
{
SendClientMessage(playerid, FARBE, "Text");
return 1;
}
return 0;
}
Das gesamte Callback würde dann so aussehen:
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == pickup1)
{
SetPlayerPos(playerid, X, Y, Z);
return 1;
}
if(pickupid == pickup2)
{
SendClientMessage(playerid, FARBE, "Text");
return 1;
}
return 0;
}
Nun solltet ihr das Schema allmählich erkannt haben. Wie ich es schon gesagt habe, ihr könnt alle Aktionen über ein Pickup laufen lassen.
Zum Schluss zeige ich euch jetzt noch wie ihr ein Pickup als Teleporter in einen Interior nutzen könnt und bringe dabei noch andere Funktionen mit ein.
Unter public OnGameModeInit()
pickup3 = CreatePickup(1318, 2, X, Y, Z, 0);
Unter public OnPlayerPickUpPickup(playerid, pickupid)
if(pickupid == pickup3)
{
SetPlayerPos(playerid, 2215.454833, -1147.475585, 1025.796875);
SetPlayerInterior(playerid, 15);
SendClientMessage(playerid, FARBE, "Text");
return 1;
}
Nun wurdet ihr ins Jefferson Motel teleportiert. Mit dem vierten Pickup könnt ihr versuchen wieder einen Teleporter nach draußen zu machen, vergesst diesmal aber nicht als VirtualWorld 1 anzugeben!
Letztendlich sollten die Codes unter public OnGameModeInit() so aussehen:
pickup1 = CreatePickup(1318, 2, 1958.3783, 1343.1572, 15.3746, 0);
pickup2 = CreatePickup(1239, 2, X, Y, Z, 0);
pickup3 = CreatePickup(1318, 2, X, Y, Z, 0);
und die unter public OnPlayerPickUpPickup(playerid, pickupid) so:
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == pickup1)
{
SetPlayerPos(playerid, X, Y, Z);
return 1;
}
if(pickupid == pickup2)
{
SendClientMessage(playerid, FARBE, "Text");
return 1;
}
if(pickupid == pickup3)
{
SetPlayerPos(playerid, 2215.454833, -1147.475585, 1025.796875);
SetPlayerInterior(playerid, 15);
SendClientMessage(playerid, FARBE, "Text");
return 1;
}
return 0;
}
Damit ihr nochmal eine Vorlage für das ganze habt, habe ich das ganze auf Pastebin hochgeladen. KLICK
Falls ihr noch Fragen haben solltet könnt ihr diese gern hier im Thread stellen.
Mit freundlichen Grüßen
_-Musel-_
Eintrag im englischen SA:MP-Wiki