Wie mache ich ein Prison System wo ich angeben kann wie lange er im Knast sitzen soll
Prison System
- Jigs4HD
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Einen Befehl erstellen wo Du den Spieler in Dein Gefängniss portest und dann per Timer angibst wie lange er dort bleiben soll, eventuell noch freezen das er sich nicht bewegen kann.
Grüße Kinq'.
-
wenn du mit mysql arbeitest müsste das in etwa so aussehen, ungetestet
forward armygII();
ocmd:rangeban(playerid,params[])
{
if(IstSpielerAdmin(playerid, 5))//anpassen
{
new pID, reason[128], string[128]; //die defines die wir später brauchen
if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid, 0xAFAFAFAA, "Benutze: /prison [ID] [Grund]");
format(string,sizeof(string),"[ADMCMD]: %s wurde von Admin %s ins Admin Prison geschickt Grund: %s", SpielerName(pID),SpielerName(playerid),reason);
SendClientMessageToAll(0xFF4122FF,string);
SetPlayerPos(i,//koordinate vom AP);
SetTimer("Prison",60000,true);//timer geht 60 min
SpielerInfo[i][Prison]=1;
}
else
{
SendClientMessage(playerid,0xAFAFAFAA,"Du bist kein Admin!");
}
return 1;}
so jetzt brauchst du noch das es abgespeichert wird und was passiert
unten im script machst du den.public prison()
{
SpielerInfo[i][Prisontime]+=1; //in die spieler datei wird jeweils jede minute +1 gemacht
{
if(SpielerInfo[i][Prisontime]==60) //ist dann der wert auf 60 kommt dies
{
SetPlayerPos(i,//koordinaten zum rauskommen);
SpielerInfo[i][Prisontime]=0;
SpielerInfo[i][Prison]=0;
}
}
return 1;
}dann noch in dein enum das es abgespeichert wird
Prison,
Prisontime,nun muss du es noch laden und speichern
beim ladenstock machst du
SpielerInfo[playerid][Prison] = mysql_GetInt("accounts", "Prison", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][Prisontime] = mysql_GetInt("accounts", "Prisontime", "Name", SpielerInfo[playerid][pName]);beim speicherstock
mysql_SetInt("accounts", "Prison", SpielerInfo[playerid][Prison], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Prisontime", SpielerInfo[playerid][Prisontime], "Name", SpielerInfo[playerid][pName]);dann noch bei onplayerconnect
if(SpielerInfo[playerid][Prison]==1)
{
Kick(playerid);
}
else
{}wiegesagt ungetestet söllte aber funktionieren.
falls du mit Dini arbeitest einfach uimschereiben
MfG Music4You
-
SpielerInfo[playerid][Prison] = mysql_GetInt("accounts", "Prison", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][Prisontime] = mysql_GetInt("accounts", "Prisontime", "Name", SpielerInfo[playerid][pName]);mysql_SetInt("accounts", "Prison", SpielerInfo[playerid][Prison], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Prisontime", SpielerInfo[playerid][Prisontime], "Name", SpielerInfo[playerid][pName]);Kann mir jemand das bitte in dini umschreiben? Ich kriegs nicht hin. Wäre sehr sehr nett
-
Das ganze ist ja eigentlich nicht so schwer, es würde sogar reichen wenn du einfach nur die Zeit speicherst und lädst die der Spieler im Gefängnis verbringen soll. Das ist fast das gleich wie mit Dini. Ich würde dir nicht raten von MySQL auf Dini umzusteigen. Sonst fange doch erstmal damit an das du überhaupt einen Wert speicherst und lädst und du den Spieler beim Login in das Gefängnis teleportierst. Dann musst du später mit dem Befehl nur noch den entsprechenden Wert setzen.
-
Ich bekomme diese erros
C:\Users\WBF Küchen\Desktop\Selfmade\gamemodes\Selfmade.pwn(1584) : warning 219: local variable "pID" shadows a variable at a preceding level
C:\Users\WBF Küchen\Desktop\Selfmade\gamemodes\Selfmade.pwn(1586) : error 017: undefined symbol "SpielerName"
C:\Users\WBF Küchen\Desktop\Selfmade\gamemodes\Selfmade.pwn(1588) : error 017: undefined symbol "i"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase2 Errors.
Code:
ocmd:rangeban(playerid,params[])
{
if(isPlayerInFrakt(playerid,2))
{
new pID, reason[128], string[128];
if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid, 0xAFAFAFAA, "Benutze: /prison [ID] [Grund]");
format(string,sizeof(string),"[ADMCMD]: %s wurde von Admin %s ins Admin Prison geschickt Grund: %s", SpielerName(pID),SpielerName(playerid),reason);
SendClientMessageToAll(0xFF4122FF,string);
SetPlayerPos(i,223.3961,110.5082,1010.2188);
SetTimer("Prison",60000,true);
}
else
{
SendClientMessage(playerid,0xAFAFAFAA,"Du bist kein Admin!");
}
return 1;}
-
SetPlayerPos(i,223.3961,110.5082,1010.2188);
zu
SetPlayerPos(pID,223.3961,110.5082,1010.2188);stock Spielername(playerid)
{
new xn[MAX_PLAYER_NAME];
GetPlayerName(playerid,xn,sizeof xn);
return xn;
}
hast du auch den SSCAND Code im Script ?
Spoiler anzeigen //-------------sscanf------------//Spoiler anzeigen 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':
{Spoiler anzeigen 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;Spoiler anzeigen id = end - stringPos;
foreach (Player, playerid)
{
GetPlayerName(playerid, name1, sizeof (name1));
if (!strcmp(name1, 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;
}Füge den Großen Code mal ganz unten ein, dann sollte es denke ich Funktionieren
-
SetPlayerPos(i,223.3961,110.5082,1010.2188);
zu
SetPlayerPos(pID,223.3961,110.5082,1010.2188);stock Spielername(playerid)
{
new xn[MAX_PLAYER_NAME];
GetPlayerName(playerid,xn,sizeof xn);
return xn;
}
hast du auch den SSCAND Code im Script ?
Spoiler anzeigen //-------------sscanf------------//Spoiler anzeigen 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':
{Spoiler anzeigen 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;Spoiler anzeigen id = end - stringPos;
foreach (Player, playerid)
{
GetPlayerName(playerid, name1, sizeof (name1));
if (!strcmp(name1, 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;
}Füge den Großen Code mal ganz unten ein, dann sollte es denke ich Funktionieren
sscanf hatte ich schon drin
ich bekomme noch 1 Error:
C:\Users\WBF Küchen\Desktop\Selfmade\gamemodes\Selfmade.pwn(1584) : warning 219: local variable "pID" shadows a variable at a preceding level
C:\Users\WBF Küchen\Desktop\Selfmade\gamemodes\Selfmade.pwn(1586) : error 017: undefined symbol "SpielerName"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase1 Error.
//Edit 1 error behoben
C:\Users\WBF Küchen\Desktop\Selfmade\gamemodes\Selfmade.pwn(1584) : warning 219: local variable "pID" shadows a variable at a preceding level
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase1 Warning.
-
machmal pID weg und schreib playerid
-
machmal pID weg und schreib playerid
Jetzt kommt dieser Error
C:\Users\WBF Küchen\Desktop\Selfmade\gamemodes\Selfmade.pwn(1584) : warning 219: local variable "playerid" shadows a variable at a preceding level
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase1 Warning.
-
Bei mir gehts:
ocmd:rangeban(playerid,params[]){ if(isPlayerInFrakt(playerid,2)) { new pID, reason[128], string[128]; if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid, 0xAFAFAFAA, "Benutze: /prison [ID] [Grund]"); format(string,sizeof(string),"[ADMCMD]: %s wurde von Admin %s ins Admin Prison geschickt Grund: %s", SpielerName(pID),SpielerName(playerid),reason); SendClientMessageToAll(0xFF4122FF,string);SetPlayerPos(playerid,223.3961,110.5082,1010.2188); SetTimer("Prison",60000,true); } else { SendClientMessage(playerid,0xAFAFAFAA,"Du bist kein Admin!"); } return 1;}
-
Bennent die pID einfach anders, der Warn sagt aus das die variable schon genutzt wird
-
@H4NNYS.:
Kann gaarnicht Klappen, da du mit pID eine BESTIMMTE ID ansprechen kannst, und wenn du Playerid verwendest, dann Deutest du auf dich also den der den Befehl eingegeben hat, der geht dann auch ins Prison, und nicht die andere Person -
breadfish.de
Hat das Thema geschlossen.