mensch heute habe ich es aber mit den ) Klammern... jetzt isses Richtig
Beiträge von Developer
-
-
ups...ja das war fail...nun isses richtig
-
Verdammt komplizierte Methode, aber wer's braucht.
Mit freundlichem Grüßen aus Berlin,
Vincent P.
also ich finde diese Methode für Anfänger einfacherer -
Nettes Tutorial, Recht übersichtlich und Funktioniert !!
8/10 !!
vielen dank Cash0r
edit: oben nun auch die Download Links -
danke :.RyLo.:
im ersten Post ist nun eine Erweiterung geschrieben.
-
Das Gefällt mir :))
"#error Das ist kein Copy & Past Tutorial"
ja ist halt zur Vorbeugung der C & P Nutzung
Nix besonders aber naja gut erklärt ...
7/10
vielen Dankedit:gleich kommt noch eine kleine Erweiterung dazu
-
Guten Tag zusammen,
heute zeige ich euch wie ihr einen Countdownbefehl + Funktion erstellen könnt. Das ganze benötigt Kenntnisse in
- Pawn
- Timern
- Befehlerstellung
Na gut dann fangen wir mal an:
Zuerst müsst ihr im Script die forwards erstellen.Der Countdown soll von 4-1 gehen und danach LOS kommen
forward CD4();// Für die erste Zahl die nach der Befehls eingabe erscheint
forward CD3();// Für die zweite Zahl
forward CD2(); // Für die Dritte Zahl
forward CD1();// Für die vierte Zahl
forward CDLos();// Für das LOS LOS LOSDann müssen wir erstmal den Befehl erstellen.
if(strcmp("/countdown",cmdtext,true) == 0)
Jetzt haben wir schonmal das was man eingeben muss. Jetzt kommt das was dann ausgeführt wird
{
if (IsPlayerAdmin(playerid))// Frag ab ob der User Rcon Admin ist
{
SetTimer("CD4",1000,0);// Setzt den ersten Timer in Bewegung, das passiert nur wenn der User Rcon admin ist
#error Das ist kein Copy & Past Tutorial
}
else SendClientMessage(playerid,COLOR_GRAD1,"* Du bist kein Administrator!");// Wenn der User kein Rcon Admin ist kommt das
return 1;
}
Jetzt müssen wir die Publics erstellen für die Timer
public CD4()
{
GameTextForAll("4",1000,3);// Zeigt allen Usern die Zahl 4
SetTimer("CD3",1000/*1000 mili sec = 1 sec*/,0);// startet den Timer CD3
return 1;
#error Das ist kein Copy & Past Tutorial
}
public CD3()
{
GameTextForAll("3",1000,3);// Zeigt allen Usern die Zahl 3
SetTimer("CD2",1000,0);// startet den Timer CD2
return 1;
#error Das ist kein Copy & Past Tutorial
}
public CD2()
{
GameTextForAll("2",1000,3); //Zeigt allen Usern die Zahl 2
SetTimer("CD1",1000,0);// startet den Timer CD1
return 1;
#error Das ist kein Copy & Past Tutorial
}
public CD1()
{
GameTextForAll("1",1000,3); //Zeigt allen Usern die Zahl 1
SetTimer("CDLos",1000,0);// startet den Timer CDLos
return 1;
#error Das ist kein Copy & Past Tutorial
}
public CDLos()
{
GameTextForAll("~g~] ! LOS LOS LOS ! ]",1000,3);// Zeigt allen Usern " LOS LOS LOS!"
return 1;
#error Das ist kein Copy & Past Tutorial
}Erweiterung
Jetzt kommt noch eine Erweiterung. Undzwar ein Countdown, dem ein GMX folgt.(wenn man beides im Script einbaut sollte man diesen Countdown über einen anderen Befehl steuern!)
Alle schritte bleiben wie oben gleich. Nur das wir beim Letzten Timer folgendes Ändern.
public CDLos()
{
GameTextForAll("~g~] ! GMX! ]",1000,3);// Zeigt allen Usern " GMX!"
/* jetzt kommt hier die Funktion des Server Restarts.Das machen wir via Rcon Command.*/
SendRconCommand("gmx");
return 1;
#error Das ist kein Copy & Past Tutorial
}Wenn man jetzt den Befehl ein gibt wird nach dem Countdown ein GMX (Gamemoderestart) durchgeführt.
Ich weiß es ist eher ein Copy & Past Tutorial. Allerdings sollte es so wie es jetzt ist 6 Errors geben. Wenn man genau hinguckt sollte man die Fehler finden... die Fehler sind ja schließlich alle gleich...Wenn ihr Erros habt guckt euch den Satz vorher an
Ich hoffe das Tuto hat euch gefallen.
Mit freundlichen Grüßen
Edit: eine Erweiterung eingefügt
Edit: Fehler behoben
Edit3: zufrüh auf absenden -.-Edit4:
Edit5: if (IsPlayerAdmin(playerid)) ist richtig danke BlackAce...
-
So nach Längerer Zeit gibt es nun ein Update... Dieses Update ist jetzt über die Zeit in 2 Wochen entstanden.. Habe nicht die ganze Zeit daran geschrieben sondern höchstens 5 -10 min Pro Tag
Undzwar Update auf Version 2.9.1(Only 0.3d R1 ! Dürfte Allerdings auch auf R2 funktionieren)
[tabmenu][tab= Benötigte Includes]
#include <a_samp>
#include <dini>
#include <Dudb>
#include <JunkBuster>
[tab= Changelog]
Der Changelog
[subtab= Teams]
Es gibt nun 5 Teams
#define TEAM_ZIVILISTEN 0
#define TEAM_COPS 1
#define TEAM_MAFIA 2
#define TEAM_NUTTE 3
#define TEAM_NERDS 4
#define TEAM_ABENTEUER 5
[subtab= Funktionen]
- Radio eingefügt(8 Radio Sender)
-mehrere Neue Befehle
- Alle Admin Befehle nur noch als Rcon Admin, wenn nicht Rcon Admin versucht einen Admin Befehl zumachen wird der Name in die ServerLog geschrieben
Das sieht dann so aus:
SpielerName hat versucht den /gmx Befehl zu nutzen
- Anti Spawn Kill
[tab= Gefundende Bugs]
Manchmal kann man sich nicht einloggen
[tab= Geplant für nächste Version]
Zur Zeit nichts.
[tab= Pastebin]
http://pastebin.com/e9zzEJyY
[tab= Download aller Datein]
Folgt
[/tabmenu]Erster Post wird editiert
Edit 2 neue Version Siehe oben
-
in die suche %appdata% eingeben dann bistte bei appdata (Alternativ auch über ausführen...)
-
hatte ich auch einfach via Virenprogramm killen....
Edit: hatte net habe
-
würde mich auch mal interessieren... ich habs auch schon gehört das es geht nur laut google geht es mit V DJ net
-
if (strcmp("/bsn", cmdtext, true,(playerid,0))
{
if (SetPlayerVirtualWorld(playerid,0))
{
SetPlayerVirtualWorld(playerid,0);
SetPlayerPos(playerid,1045.3831,1013.0660,55.3047);
SendClientMessage(playerid,Gruen,"%s ist zu /BSN Gegangen!");
}
else
{
SendClientMessage(playerid,Gruen,"Du kannst diesen Befehl hier nicht nutzen!");}
}Und welche Zeile ist 480 ?
-
Wie gesagt es läuft nicht Ständig durch SAMP Musik.... ich spiele zwischenzeitlich auch mal andere Musik.
Edit: Eig nicht... das war keine Musik von nem anderen Sender... da achte ich penibel drauf
-
ALso euer Wunsch nach SAMP Radio Sounds ist grade erfüllt. Grade läuft eine Sendung wo ein paar Radio SAMP Sounds laufen
-
zeig mal deinen /duty Befehl.. ließe sich schnell umbauen
-
Jub eindeutig Klammerfehler.... Zeilen?!
-
also ich persönlich wähle die Lieder immer nach den so aus, das das Ende des einen Lieder perfekt zum Anfang des neuen Liedes passt...... Und wir spielen eigentlich alles.... Grade läuft I´m Sexy and I Know It jetzt gleich Good Feeling...
-
ist sscanf nicht zur Zeit Buggy? mach mal das Plugin im Script (oben #include <sscanf>) raus und mache dafür ganz untem im script das hier rein:
stock sscanf(string[], format[], {Float,_}:...)
{
#if defined isnull
if (isnull(string))
#else
if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
#endif
{
return format[0];
}
#pragma tabsize 4
new
formatPos = 0,
stringPos = 0,
paramPos = 2,
paramCount = numargs(),
delim = ' ';
while (string[stringPos] && string[stringPos] <= ' ')
{
stringPos++;
}
while (paramPos < paramCount && string[stringPos])
{
switch (format[formatPos++])
{
case '\0':
{
return 0;
}
case 'i', 'd':
{
new
neg = 1,
num = 0,
ch = string[stringPos];
if (ch == '-')
{
neg = -1;
ch = string[++stringPos];
}
do
{
stringPos++;
if ('0' <= ch <= '9')
{
num = (num * 10) + (ch - '0');
}
else
{
return -1;
}
}
while ((ch = string[stringPos]) > ' ' && ch != delim);
setarg(paramPos, 0, num * neg);
}
case 'h', 'x':
{
new
num = 0,
ch = string[stringPos];
do
{
stringPos++;
switch (ch)
{
case 'x', 'X':
{
num = 0;
continue;
}
case '0' .. '9':
{
num = (num << 4) | (ch - '0');
}
case 'a' .. 'f':
{
num = (num << 4) | (ch - ('a' - 10));
}
case 'A' .. 'F':
{
num = (num << 4) | (ch - ('A' - 10));
}
default:
{
return -1;
}
}
}
while ((ch = string[stringPos]) > ' ' && ch != delim);
setarg(paramPos, 0, num);
}
case 'c':
{
setarg(paramPos, 0, string[stringPos++]);
}
case 'f':
{new changestr[16], changepos = 0, strpos = stringPos;
while(changepos < 16 && string[strpos] && string[strpos] != delim)
{
changestr[changepos++] = string[strpos++];
}
changestr[changepos] = '\0';
setarg(paramPos,0,_:floatstr(changestr));
}
case 'p':
{
delim = format[formatPos++];
continue;
}
case '\'':
{
new
end = formatPos - 1,
ch;
while ((ch = format[++end]) && ch != '\'') {}
if (!ch)
{
return -1;
}
format[end] = '\0';
if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
{
if (format[end + 1])
{
return -1;
}
return 0;
}
format[end] = '\'';
stringPos = ch + (end - formatPos);
formatPos = end + 1;
}
case 'u':
{
new
end = stringPos - 1,
id = 0,
bool:num = true,
ch;
while ((ch = string[++end]) && ch != delim)
{
if (num)
{
if ('0' <= ch <= '9')
{
id = (id * 10) + (ch - '0');
}
else
{
num = false;
}
}
}
if (num && IsPlayerConnected(id))
{
setarg(paramPos, 0, id);
}
else
{
#if !defined foreach
#define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
#define __SSCANF_FOREACH__
#endif
string[end] = '\0';
num = false;
new
name[MAX_PLAYER_NAME];
id = end - stringPos;
foreach (Player, playerid)
{
GetPlayerName(playerid, name, sizeof (name));
if (!strcmp(name, string[stringPos], true, id))
{
setarg(paramPos, 0, playerid);
num = true;
break;
}
}
if (!num)
{
setarg(paramPos, 0, INVALID_PLAYER_ID);
}
string[end] = ch;
#if defined __SSCANF_FOREACH__
#undef foreach
#undef __SSCANF_FOREACH__
#endif
}
stringPos = end;
}
case 's', 'z':
{
new
i = 0,
ch;
if (format[formatPos])
{
while ((ch = string[stringPos++]) && ch != delim)
{
setarg(paramPos, i++, ch);
}
if (!i)
{
return -1;
}
}
else
{
while ((ch = string[stringPos++]))
{
setarg(paramPos, i++, ch);
}
}
stringPos--;
setarg(paramPos, i, '\0');
}
default:
{
continue;
}
}
while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
{
stringPos++;
}
while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
{
stringPos++;
}
paramPos++;
}
do
{
if ((delim = format[formatPos++]) > ' ')
{
if (delim == '\'')
{
while ((delim = format[formatPos++]) && delim != '\'') {}
}
else if (delim != 'z')
{
return delim;
}
}
}
while (delim > ' ');
return 0;
}
Dann compillen
Und auch nicht das sscanf Plugin im CP auswählen -
Falls es für dich einfacher ist kannst du auch GivePlayerHealth nehmen... allerdings müsstest du dann diesen Stock unten im Script einfügen:
stock GivePlayerHealth(playerid,Float:Health)
{
new Float:health; GetPlayerHealth(playerid,health);
SetPlayerHealth(playerid,health+Health);
return 1;Also sähe das dann so aus:
{
if(dialogid == Dialog_Menu)
{
if(response)
{
if(listitem == 0)
{
GivePlayerHealth(playerid,30);
}
if(listitem == 1)
{
GivePlayerHealth(playerid,20);
}
if(listitem == 2)
{
GivePlayerHealth(playerid,15);
}
if(listitem == 3)
{
GivePlayerHealth(playerid,15);
}
if(listitem == 4)
{
GivePlayerHealth(playerid,15);
}
if(listitem == 5)
{
GivePlayerHealth(playerid,100);
}return 0;
}
}
return 1;
}
Einrücken nicht vergessen! -
Einfach das erste SetPlayerPos durch SetPlayerPos(playerid, x achse/cord1 ,y achse cord 2,z achse cord3); ersetzen
Also das xachse/cord bis z achse cord3 durch dein mit /save festgelegten Punkt ersetzen