Hallo Leute,
das ist mein erstes Tutorial das ich erstellt habe =D
Hier wird gezeigt wie man ein richtiges DM scriptet.
Benötigt:
- Grundwissen
Schritt 1:
Als erstes definieren wir alles:
Hier definieren wir die Abfrage ob man im DM ist
new dmling[MAX_PLAYERS];
Hier definieren wir unseren RandomSpawn für AntiSpawnKilling:
new DMRandom;
Schritt 2:
Nun erstellen wir unsern Kommando(Erklärung hinter //):
drüber noch new string[256];
if(!strcmp(cmdtext, "/dm", true))
{
new name; // Kann auch im Header eingesetzt werden
GetPlayerName(playerid,name,20);
format(string, sizeof(string), "|||> %s ist jetzt im DM beigetreten.[/dm]",name); //Öffentliche Nachricht dass jmd DM beigetreten hat
SendClientMessageToAll(0xFFD700FF,string); //Farbe von der Nachricht
SetPlayerPos(playerid, 1383.4563,2185.5469,11.0234); //Teleport POsition
SetPlayerWorldBounds(playerid, 1447.158, 1275.345, 2215.923, 2096.013); //Das sind unsichtbare Mauern damit man die Zone nicht verlässt
SetPlayerVirtualWorld(playerid, 2); //Damit man nur mit Spielern spielt die nur im DM sind
ResetPlayerWeapons(playerid); //Alle Waffen werden einmal entfernt
DMRandom = random(3); //Hier erstellen wir unseren Random Spawn
switch(DMRandom)
{
case 0:
{
SetPlayerPos(playerid, 1383.4563,2185.5469,11.0234); //damit es kein Spawnkilling gibt
}
case 1:
{
SetPlayerPos(playerid, 1307.6925,2109.0125,11.0156); //2. Spawn
}
}
SendClientMessage(playerid, 0xFFFFFFAA, "Tippe /exitdm um das DM zu verlassen!"); //Nachricht für Player wie man DM verlässt
GivePlayerWeapon(playerid, 24, 500); // Nun geben wir unseren Spieler die Waffen
GivePlayerWeapon(playerid, 27, 500); // 2. Waffe (beliebig)
dmling[playerid] = 1; //Hier wird eingestellt das der Spieler in nun in einem DM ist
return 1;
}
Schritt 3:
Nach dem Sterben soll man ja auch wieder da Spawnen also:
if(dmling[playerid] == 1) //Abfrage ob man im DM ist
{
SetPlayerVirtualWorld(playerid, 1);
SetPlayerWorldBounds(playerid, 1447.158, 1275.345, 2215.923, 2096.013);
ResetPlayerWeapons(playerid);
DMRandom = random(3);
switch(DMRandom)
{
case 0:
{
SetPlayerPos(playerid, 1383.4563,2185.5469,11.0234);
}
case 1:
{
SetPlayerPos(playerid, 1307.6925,2109.0125,11.0156);
}
}
GivePlayerWeapon(playerid, 24, 500);
GivePlayerWeapon(playerid, 27, 500);
}
Schritt 4:
Jetzt deaktivieren wir Kommandos wie z.b "/kill" :
if(!strcmp(cmdtext, "/kill", true))
{
if(dmling[playerid] == 1) //Abfrage ob man im DM ist
{
SendClientMessage(playerid, 0xFFFFFFAA, "Du bist in einem DM! Tippe /exitdm um das DM zu verlassen!"); //Nachricht
}
else //wenn man nicht im DM ist
{
SetPlayerHealth(playerid, 0); //Ausführung wenn man nicht im DM ist
}
}
return 1;
}
Schritt 5:
Jetzt erstellen wir das Kommando für das Verlassen des DMs:
if(!strcmp(cmdtext, "/exitdm", true))
{
if(dmling[playerid] == 1) //Abfrage ob man im DM ist
{
SetPlayerPos(playerid, 0.0,0.0,0.0); //Beliebiges Eingeben wo er nach dem Verlassen hin soll
SetPlayerWorldBounds(playerid, 9999.685, -9999.502, 9999.858, -9999.685); //Unsichtbare Mauer wegmachen bzw. Maximieren
SetPlayerInterior(playerid,0); //Innenraum auf 0 wenn man einen DM macht mit Innenraum
SetPlayerVirtualWorld(playerid,0); //Welt wieder auf die Standart Welt 0
dmling[playerid] = 0; //Auf 0 setzten um nicht mehr am DM teilzunehmen
}
else
{
SendClientMessage(playerid, 0xFFFFFFAA, "Du bist in keinem DM!"); //Nachricht
}
}
return 1;
}
Schritt 6:
Noch am Ende:
Unter OnPlayerDisconnect:
dmling[playerid] = 0;
Damit ein neuer mit der ID nicht im DM ist.
Naja ist ja noch mein erstes Tut =P
Und die Erklärungen sind alle im PWN-Code
MfG
TaFiL
//E: Hab bei Schritt 6 . Schritt 5 hingeschrieben
//E2: Error rausgemacht