Beiträge von Simon

    also das problem ist, das du dann sterben musst, da kann man genau so gut f4 benutzten.


    wenn du in eine bestimmte skinauswahl kommen möchtest, das heißt wenn er sich ein team aussucht, soll er auch nur die skins von dem team auswählen können, dann nützt dir die skinauswahl nichts. du müsstet den dann iwo hinporten, dann freezen und die camera sicht anpassen (meistens so von vorne). du musst ihn nun einen skin des jeweiligen teams geben. wenn er nun da steht und den einen skin hat, muss er halt ein befehl eingeben (bsp: /next) und dann änderst du sein skin mit SetPlayerSkin. Ich kann dir iwan mal ein screen von einem Server schicken in dem du siehst was ich meine.

    wie gesagt ich habe da keinerlei ahnung was ich machen muss, wäre net wenn einer die 2 if abfragen posten könnte, dann verstehe ich das bestimmt.


    1. abfrage: 2 Zeiche
    2. abfrage: Zeichen sind Zahlen

    ja aber wie muss ich das abfragen? ich habe zum beispiel hier die eine abfrage:


    if(strval(inputtext)<3)


    und ich konnte nur ein zechen eingeben irgentwie...

    ich möchte ja das es als zahl abgespeichert wird und auch als zahl wiedergegeben wird, nur giebt man es ins dialog ein, und muss somit den inputtext speichern.


    //edit: es klappt alles sehr gut, möchte nun noch was einbauen: der inputtext darf höchstens 2 zeichen haben und sollen auch nur aus zahlen bestehen. wie ist da die abfrage?
    habe bisher:

    if(dialogid == DIALOG_ALTER)
    {
    if(response == 1)
    {
    //hier die oben genannten abfragen

    sehr sehr einfach.
    hier ich gebe dir mal mein /gethere.


    dcmd_get(playerid,params[])
    {
    new pID;
    if(sscanf(params, "u", pID))
    {
    return SendClientMessage(playerid,COLOR_RED,"Benutzung: /get [Playerid]");
    }
    if(!IsPlayerConnected(pID))
    {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }
    if(SpielerInfo[playerid][alvl]<3)
    {
    return SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin Level 3!");
    }
    if(SpielerInfo[playerid][alvl]<SpielerInfo[pID][alvl])
    {
    return SendClientMessage(playerid,COLOR_RED,"Du kannst diesen Befehl nicht an höherrangigen Admins ausführen!");
    }
    else
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    SetPlayerPos(pID, x+2, y+2, z+2);
    new admint = GetPlayerInterior(playerid);
    SetPlayerInterior(pID, admint);
    new aname[MAX_PLAYER_NAME], string2[256];
    GetPlayerName(playerid, aname, sizeof(aname));
    format(string2, sizeof(string2), "Du wurdest von %s zu sich teleportiert.", aname);
    SendClientMessage(pID, COLOR_RED, string2);
    new name[MAX_PLAYER_NAME], string[256];
    GetPlayerName(pID, name, sizeof(name));
    format(string, sizeof(string), "Du hast %s zu dir teleportiert.", name );
    SendClientMessage(playerid, COLOR_GREEN, string);
    }
    return 1;
    }


    musst das an deinem admin system anpassen und aus /get /gethere machen..


    und ganz unten im script einfach das hier:


    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;
    }

    iwie checke ich das net? wieso nutzte net sscanf?


    dcmd_gethere(blablub)
    {
    new pID;
    is(sscanf(params, "u", pID))
    {
    return SendClientMessage(playerid,farbe,"benutztung: /gethere [id]
    }
    //und dann rallerst du alle abfrage runter, ob pID das ist, ob playerid das ist, und wenn alles erfüllt ist dann was passieren soll

    danke, wenn ichs richtig verastanden habe so:


    new Spielerdatei[64],str[256];
    format(str,sizeof(str),"Du bist also %d Jahre Alt",inputtext);
    SendClientMessage(playerid,0xFFFFFFFF,str);
    dini_IntSet(Spielerdatei,"Alter",Spieler[playerid][Alter]);
    new string[4] = inputtext; //hier kommt fehler
    new iValue = strval(string);
    Spieler[playerid][Alter] = iValue;
    tutende2(playerid);


    jedoch:


    C:\Users\Simon Siggelkow\Desktop\Reallife\gamemodes\RL.pwn(498) : error 008: must be a constant expression; assumed zero
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.

    Guten Tag.


    Ich bin gerade mit einem Reallife selfmade angefangen und bin gerade beim login /register system und das tutorial.
    Am ende des Tutorials wird gefragt, welches Geschlächt er ist, wie alt und aus welchem Land. das soll mit dini in der ,ini gespeichert werden.
    doch hier bekomme ich ein error:


    if(dialogid == DIALOG_ALTER)
    {
    if(response == 1)
    {
    if(strlen(inputtext) < 2)
    {
    new Spielerdatei[64],str[256];
    format(str,sizeof(str),"Du bist also %d Jahre Alt",inputtext);
    SendClientMessage(playerid,0xFFFFFFFF,str);
    ShowPlayerDialog(playerid,DIALOG_LAND,DIALOG_STYLE_LIST,"Aus welchem Land Kommst du?","Deutschland\nÖsterreich\nSchweiz","Okay","Zurück");
    dini_IntSet(Spielerdatei,"Alter",Spieler[playerid][Alter]);
    Spieler[playerid][Alter] = inputtext;//hier ein error
    }
    else
    {
    SendClientMessage(playerid,0xFF0000FF,"Falsche Angabe!");
    ShowPlayerDialog(playerid,DIALOG_ALTER,DIALOG_STYLE_INPUT,"Wie alt bist du?"," ","Okay","Zurück");
    }
    }
    if(response == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_SEX,DIALOG_STYLE_MSGBOX,"Geschlecht","Bis du Ein Junge oder ein Mädchen?","Junge","Mädchen");
    }
    }


    C:\Users\Simon Siggelkow\Desktop\Reallife\gamemodes\RL.pwn(502) : error 006: must be assigned to an array
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    ich bin mir sowieso nicht sicher ob es so hinhauen wird..

    bei OnPlayerExitVehicle musste ein gametext machen. dann musst du ein timer starten:

    SetTimerEx("NAME",ZEIT,0,"i",playerid);


    hier ein bsp:


    forward name(playerid);


    public OnPlayerExitVehicle(...)
    {
    GameTextForPlayer(playerid,"TEXT",ZEIT,STYLE);
    SetTimerEx("name",ZEIT,0,"i",playerid); //zeit in millisekunden (1sekunde = 1000 milisekunden
    return 1;
    }


    public name(playerid)
    {
    //was passieren soll
    return 1;
    }

    ja aber dann wird doch der server restarted. er soll aber komplett aus sein. und das soll automatisch passieren wenn der timer abläuft (kann ich selber einbauen).
    wenn ich "gmx" sende oder OnGameModeExit, dann restartet der.


    //edit: habe kein gf.

    Guten Tag.


    Ich habe da mal eine Frage.
    Ich habe ja meinen Server auf nen root. nun möchte ich, wenn ich ein update habe den server auf befehl stoppen. also das er dann offline ist.
    ich habe ein /restart cmd, da läuft eine zeit von 5 minuten ab, nach 5 minuten werden alle gekickt und ich muss den server manuel stoppen um das update auf den root zu laden, nun möchte ich das der server direkt gestoppt wird, somit werden alle automatisch gekickt..


    könnte mir da einer helfen?

    hmm finde ich garnet so, da es ein timer ist, der für jeden spieler individuell läuft, und auch nur wenn er einen job annimmt. du sobald er disconnected wird der timer sowieso zerstört.

    ganz einfach. ich denke mal das du mathe hattest und sowas mit x y z und rotation anfangen kannst. wenn nicht dann erkläre ichs dir: stell dir die map wie ein koordinatensystem vor, es giebt eine x koordinate, eine y koordinate und auch eine z, die in dem fall die höhe ist. die rotation kannste dir ja denken, in welche richtung das fahrzeug steht:


    180 wäre einmal umgedreht.
    diese korrdinaten musste halt reinpacken:


    AddStaticVehicle(ID,X,Y,Z,ROT,farbe 1,farbe2);
    die id und die farben von autos findeste bei samp wiki. die koordinaten musste rauskriegen in dem du einfach samp_debug zu finden im GTA ordner startest und mit /vsel ein auto aussuchst, das fährste an die stelle und giebst /save blablub ein.


    du kannst nun im GTA ordner eine saveposition.txt datei finden wo du das einfach nur stumpf kopieren und unter OnGameModeInit() einfügen musst.

    mit settimerex schon. also ne neue variable und sobald er ein jobauswählt die auf 1 setzten und ein SetTimerEx von 5 stunden ablaufen lassen. wenn der um ist die variable wieder auf 0 setzen. nun musste sehen wie du es haben willst, wenn er 5 stunden am stück spielen muss, dann killste den timer wenn er disconnected und wenn er connected startest du den timer wieder. natürlich musste abfragen wenn er ein job auswählt ob die variable auf 0 ist, wenn nicht dann muss er halt noch warten..

    //edit:


    ich habe nu ein großes problem, egal ob ich ein normales wort schreibe oder eine beleidigung, ich werde immer gekickt.


    const maxbadwords = 28;
    new BadWords[maxbadwords][0] =
    {
    {"Hurensohn"},
    {"Hure"},
    {"Wichser"},
    {"Wixer"},
    {"Wixxer"},
    {"Schwanzlutscher"},
    {"Muschilecker"},
    {"Peniskopf"},
    {"fotzenkopf"},
    {"Penner"},
    {"Wixxer"},
    {"Huso"},
    {"fick dich"},
    {"missgeburt"},
    {"fick_dich"},
    {"fickdich"},
    {"Huren Sohn"},
    {"spaken"},
    {"asshole"},
    {"Spast"},
    {"spasti"},
    {"Fotze"},
    {"Penislutscher"},
    {"Arschficker"},
    {"Idiot"},
    {"Motherfucker"},
    {"Bitch"},
    {"Hurentochter"}
    };


    und bei OnPlayerText habe ich das:


    public OnPlayerText(playerid, text[])
    {
    new Name[MAX_PLAYER_NAME],str[256],hour,minute,second,year,month,day;
    gettime(hour,minute,second);
    getdate(year,month,day);
    GetPlayerName(playerid,Name,sizeof(Name));
    format(str,sizeof(str),"[%d.%d.%d][%s%d:%s%d:%s%d]%s: %s\r\n" ,day,month,year, (hour < 10) ? ("0") : (""), hour+0, (minute < 10) ? ("0") : (""), minute, (second < 10) ? ("0") : (""), second, Name, text);
    AddLog("Chat.log", str);


    SetPlayerChatBubble(playerid, text, 0xFF0000FF, 100.0, 10000);

    if(SpielerInfo[playerid][alvl] == 0)
    {
    Spam[playerid]+=1;
    SetTimerEx("Spamtimer", 6000, 1, "i", playerid);
    }


    if(Spam[playerid] > 3)
    {
    SendClientMessage(playerid, COLOR_RED, " Hör auf zu spammen, sonst wirst du automatisch gekickt!");
    return 0;
    }
    if(Spam[playerid] > 5)
    {
    SendClientMessage(playerid, COLOR_RED, " Das war zu viel Spam, du wurdest gekickt!");
    Kick(playerid);
    return 0;
    }


    if(chatlock == 1)
    {
    SendClientMessage(playerid, COLOR_RED, " Der Chat ist momentan gesperrt versuche es später nochmal!!");
    return 0;
    }
    else
    {
    if(Mute[playerid] == 1)
    {
    SendClientMessage(playerid, COLOR_RED, " Du bist gemutet, warte bis ein Admin dich unmutet!");
    return 0;
    }
    }
    for(new i = 0;i<maxbadwords;i++)
    {
    if(strfind(text,BadWords[i][0],true))
    {
    new kname[MAX_PLAYER_NAME], string[256];
    GetPlayerName(playerid, kname, sizeof(kname));
    SendClientMessage(playerid,0xFF0000FF,"Beleidigungen sind verboten, du wurdest gekickt!");
    format(string, sizeof(string), "%s wurde vom System gekickt. Grund: Beleidigung ",kname);
    SendClientMessageToAll(0xFF0000FF,string);
    Kick(playerid);
    }
    }
    return 1;
    }


    ich habe auch ein /o chat, da habe ich das so:


    dcmd_o(playerid,params[])
    {
    for(new i = 0;i<maxbadwords;i++)
    {
    new omsg[256];
    if(sscanf(params, "s", omsg))
    {
    return SendClientMessage(playerid,COLOR_RED,"Benutzung: /o(oc) [Text]");
    }
    else if(Mute[playerid] == 1)
    {
    SendClientMessage(playerid, COLOR_RED, " Du bist gemutet, warte bis ein Admin dich unmutet!");
    }
    else if(olock == 1)
    {
    return SendClientMessage(playerid,0xFFFFFFFF,"Der OOC wurde von einem Admin abgeschaltet!");
    }
    else if(strfind(omsg,BadWords[i][0],true))
    {
    new kname[MAX_PLAYER_NAME], string[256];
    GetPlayerName(playerid, kname, sizeof(kname));
    SendClientMessage(playerid,0xFF0000FF,"Beleidigungen sind verboten, du wurdest gekickt!");
    format(string, sizeof(string), "%s(%d) wurde vom System gekickt. Grund: Beleidigung ",kname,playerid);
    SendClientMessageToAll(0xFF0000FF,string);
    Kick(playerid);
    }
    else
    {
    new ostr[256];
    new aname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, aname, sizeof(aname));
    format(ostr, sizeof(ostr), "(( %s: %s ))", aname, omsg);
    SendClientMessageToAll(COLOR_WHITE,ostr);


    new str[256],hour,minute,second,year,month,day;
    gettime(hour,minute,second);
    getdate(year,month,day);
    format(str,sizeof(str),"[%d.%d.%d][%s%d:%s%d:%s%d]%s:/o(oc %s\r\n" ,day,month,year, (hour < 10) ? ("0") : (""), hour+0, (minute < 10) ? ("0") : (""), minute, (second < 10) ? ("0") : (""), second, aname, omsg);
    AddLog("Chat.log", str);
    }
    }
    return 1;
    }


    ich werde immer gekickt, egal was ich schreibe und die kick nachricht kommt auch 1000ende mal :D

    Ich finde eine Stadt etwas zu klein. daher rate ich dir 2 oder 3 städte zu nehmen.
    Außerdem kann man aus LV auch was hübsches zaubern. nur LS ist das bekannteste und das beliebteste, was vllt auch durch den singleplayer kommt.