Beiträge von Templer

    Die Zahl 115 weg, ka was du damit erreichen wolltest ^^


    SetVehiclePos(pVehicle,2967.0801,-1678.4745,872.0);
    SetPlayerPos(playerid,2967.0801,-1678.4745,872.0);

    Es ist ganz und gar nicht schwer, hier ein kleines Beispiel:


    #define CHECK_STANDART (1) //ID für STANDART!
    #define CHECK_PARLAMENT (2) //ID für Parlament z.B.


    new gCheckStatus[MAX_PLAYERS];


    public OnPlayerConnect(playerid)
    {
    gCheckStatus[playerid] = -1;
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    if(gCheckStatus[playerid] != -1)
    {
    DisablePlayerCheckpoint(playerid);
    gCheckStatus[playerid] = -1;
    switch (gCheckStatus[playerid])
    {
    case CHECK_STANDART:
    {
    PlayerPlaySound(playerid, 1058, 0.0, 0.0, 0.0);
    GameTextForPlayer(playerid, "~w~Du bist am Ziel~n~~y~angekommen!", 5000, 1);
    }
    case CHECK_PARLAMENT:
    {
    PlayerPlaySound(playerid, 1058, 0.0, 0.0, 0.0);
    GameTextForPlayer(playerid, "~w~Du bist am~n~~y~Parlament!", 5000, 1);
    }
    }
    }
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp(cmdtext, "/checktest", false) == 0)
    {
    SetPlayerCheckpoint(playerid, 123.0, 123.0, 123.0, 100.0); //Erfundene Koordinaten ^^
    gCheckStatus[playerid] = CHECK_STANDART;
    GameTextForPlayer(playerid, "~w~Checkpoint ~g~gesetzt!", 5000, 1);
    return 1;
    }
    if(strcmp(cmdtext, "/checktest2", false) == 0)
    {
    SetPlayerCheckpoint(playerid, 123.0, 123.0, 123.0, 100.0); //Erfundene Koordinaten ^^
    gCheckStatus[playerid] = CHECK_PARLAMENT;
    GameTextForPlayer(playerid, "~w~Checkpoint zum ~y~Parlament~n~~g~gesetzt!", 5000, 1);
    return 1;
    }
    return 0;
    }

    strtok ersetzt nicht den split Funktion. Das was du hier versuchst zu machen, ist einen String zu splitten nach dem Delimitter ',', jedoch kann man auch das strtok umschreiben, das man einen benutzerdefinierten Delimitter auch verwendet kann, also füge nun folgenden stock in dein Script:


    stock strtokEx(const string[], &index, delimitter) //edited by Templer
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= delimitter))
    {
    index++;
    }


    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > delimitter) && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }


    und ersetze dann deine Zeilen mit diesen hier:


    strmid(HausDaten[_cache_haus][Besitzer],strtokEx(line,haus_index,','),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    HausDaten[_cache_haus][ax] = floatstr(strtokEx(line,haus_index,','));
    HausDaten[_cache_haus][ay] = floatstr(strtokEx(line,haus_index,','));
    HausDaten[_cache_haus][az] = floatstr(strtokEx(line,haus_index,','));
    HausDaten[_cache_haus][ix] = floatstr(strtokEx(line,haus_index,','));
    HausDaten[_cache_haus][iy] = floatstr(strtokEx(line,haus_index,','));
    HausDaten[_cache_haus][iz] = floatstr(strtokEx(line,haus_index,','));
    HausDaten[_cache_haus][interior] = strval(strtokEx(line,haus_index,','));
    HausDaten[_cache_haus][virtual_world] = strval(strtokEx(line,haus_index,','));
    HausDaten[_cache_haus][kosten] = strval(strtokEx(line,haus_index,','));
    HausDaten[_cache_haus][play_time] = strval(strtokEx(line,haus_index,','));
    HausDaten[_cache_haus][nicht_zum_kauf] = strval(strtokEx(line,haus_index,','));
    HausDaten[_cache_haus][verschlossen] = strval(strtokEx(line,haus_index,','));

    Du weißt schon, dass folgende Zeile unter OnGameModeInit gehört?


    publc OnGameModeInit()
    {
    garagesfpd = CreatePickup(1239,23,269.5619,116.9947,1004.6172);//Garage->SFPD
    return 1;
    }


    und die Definition new oben in dein Script, am besten unter den #define Zeilen


    new garagesfpd;

    Einfach diese Zeile dazufügen
    if(!strlen(strget(cmdtext, 1)) || !strlen(strget(cmdtext, 2)) || !strlen(strget(cmdtext, 3))) return SendClientMessage(playerid,COLOR_ROT,"VERWENDUNG: /veh [model] [farbe1] [farbe2]");
    So ist das Endergebnis:


    if(!strcmp(strget(cmdtext, 0), "/veh"))
    {
    if(IstSpielerAdmin[playerid] == 1)
    {
    if(!strlen(strget(cmdtext, 1)) || !strlen(strget(cmdtext, 2)) || !strlen(strget(cmdtext, 3))) return SendClientMessage(playerid,COLOR_ROT,"VERWENDUNG: /veh [model] [farbe1] [farbe2]");
    new autoid = strval(strget(cmdtext, 1));
    new farbe1 = strval(strget(cmdtext, 2));
    new farbe2 = strval(strget(cmdtext, 3));
    if(autoid <= 399)
    {
    SendClientMessage(playerid,COLOR_ROT,"[GAMEMASTER]:So Eine Car Id gibt es Nicht (400 bis 612)");
    return 1;
    }
    if(autoid >= 612)
    {
    SendClientMessage(playerid,COLOR_ROT,"[GAMEMASTER]:So Eine Car Id gibt es Nicht (400 bis 612)");
    return 1;
    }
    else
    {
    new string[128];
    new Float:x, Float:y, Float:z, Float:za, Auto;
    new Text3D:AdminAuto = Create3DTextLabel("LS-ADMIN",COLOR_ORANGE,30.0,30.0,5.0,30.0,1);
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid,za);
    Auto = CreateVehicle(autoid, x, y, z, za, farbe1, farbe2, -1);
    PutPlayerInVehicle(playerid, Auto, 0);
    Attach3DTextLabelToVehicle(AdminAuto, Auto, 0.0, 0.0, 0.0);
    format(string, sizeof(string), "Dein Auto wurde erfolgreich gespawn! AutoID:%d Farbe1:%d Farbe2:%d", autoid, farbe1, farbe2);
    SendClientMessage(playerid, COLOR_PINK, string);
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT,"[GAMEMASTER]:Du bist kein Admin!");
    return 1;
    }
    }

    Hab es für dich schöner ausgerichtet und den Fehler behoben, er lag an der Zeile hier:
    format(string, 256, "%s %d", string, name, bst);
    Also das folgende einfach mit deinem ganz ersetzen
    dcmd_wanteds(playerid,params[])
    {
    #pragma unused params
    if(!IsPlayerConnected(playerid)) return 1;
    new name[MAX_PLAYER_NAME], s[128], string[265];
    GetPlayerName(playerid,name,sizeof(name));
    format(s,sizeof(s),"acc/%s.ini",name);
    new jobid = dini_Int(s, "job");
    if(jobid == 1 || jobid == 2 || jobid == 3 || jobid == 4 || jobid == 15)
    {
    SendClientMessage(playerid, rot, "|_Wanted-Datenbank_|");
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    GetPlayerName(i,name,sizeof(name));
    format(s,sizeof(s),"acc/%s.ini",name);
    new bst = dini_Int(s, "wanted");
    if(bst >= 1)
    {
    format(string, 256, "%s %d", name, bst);
    SendClientMessage(playerid, Gelb, string);
    }
    }
    }
    return 1;
    }

    Also entweder du nützt es, wie Blackfox es erwähnt hat, in OnPlayerPickUpPickup, womit du dann dein public SpielerImPickup nichtmehr brauchst, dann wäre es so (was ich eher glaube du versucht hast zu machen)


    new garagesfpd;


    public OnGameModeInit()
    {
    garagesfpd = CreatePickup(1239,23,269.5619,116.9947,1004.6172);//Garage->SFPD
    return 1;
    }
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == garagesfpd)
    {
    SetPlayerInterior(playerid,10);
    SetPlayerPos(playerid,268.0854,118.7060,1004.6172);
    Spieler[playerid][Int] = 10;
    GameTextForPlayer(playerid,"Du bist nun im SFPD",5000,4);
    return 1;
    }
    return 1;
    }
    oder du deinen public als Timer laufen lässt und dann IsPlayerInRangeOfPoint verwendest:

    forward SpielerImPickup();


    public OnGameModeInit()
    {
    CreatePickup(1239,23,269.5619,116.9947,1004.6172);//Garage->SFPD
    SetTimer("SpielerImPickup", 1000, 1);
    return 1;
    }


    public SpielerImPickup()
    {
    new playerid = 0;
    for(; playerid < MAX_PLAYERS; playerid++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.5, 269.5619,116.9947,1004.6172))
    {
    SetPlayerInterior(playerid,10);
    SetPlayerPos(playerid,268.0854,118.7060,1004.6172);
    Spieler[playerid][Int] = 10;
    GameTextForPlayer(playerid,"Du bist nun im SFPD",5000,4);
    }
    }
    return 1;
    }


    Empfohlen wäre jedoch die Variante mit OnPlayerPickUpPickup

    Godfather und Selfmade ist kein Unterscheid, nur andere Variablen Bezeichnungen, also müsstest du das für dich umschreiben können ;)

    public OnPlayerSpawn(playerid)
    {
    TogglePlayerControllable(playerid, 1);
    if(gPlayerLogged[playerid] == 0)
    {
    SetPlayerPos(playerid, 1191.7267,-1987.8882,66.5406); //Position wo Spieler steht
    SetPlayerFacingAngle(playerid, 118.0); //Welche Ausrichtung der Spieler steht
    SetPlayerCameraPos(playerid, 1185.3153,-1991.2488,68.1091); //Die Position der Kamera
    SetPlayerCameraLookAt(playerid, 1191.7267,-1987.8882,66.5406); //Die Position der Kamera wohin sie schauen soll!
    TogglePlayerControllable(playerid, 0);
    if(gPlayerAccount[playerid] == 1) return SendClientMessage(playerid, 0xFFFFFF00, "Du musst dich vorher anmelden mit /login");
    else return SendClientMessage(playerid, 0xFFFFFF00, "Du musst dich vorher registrieren mit /register");
    }
    if(pFirstLog[playerid] == true)
    {
    SetPlayerPos(playerid,0.0,0.0,0.0); // Tutorial Position
    TogglePlayerControllable(playerid,false);
    TutTime[playerid] = 1;
    TutTimer[playerid] = SetTimerEx("Tutorial",1000,1,"i",playerid);
    return 1; //<- Dieses return hat gefehlt!
    }
    return 1;
    }

    Für sowas nimmt man kein sscanf her, also bleib bei strcmp hier


    if(NimmSkin[playerid] == 255)
    {
    if(!strcmp("next",text,false))
    {
    switch(NimmSkinID[playerid])
    {
    case 1: //Polizei
    {
    if(NimmImmerSkin[playerid] == 1) { SetPlayerSkin(playerid, JoinPed[0][0]); NimmImmerSkin[playerid] = 1; GenommenerSkin[playerid] = JoinPed[0][0]; }
    else if(NimmImmerSkin[playerid] == 2) { SetPlayerSkin(playerid, JoinPed[1][0]); NimmImmerSkin[playerid] = 2; GenommenerSkin[playerid] = JoinPed[1][0]; }
    else if(NimmImmerSkin[playerid] == 3) { SetPlayerSkin(playerid, JoinPed[2][0]); NimmImmerSkin[playerid] = 3; GenommenerSkin[playerid] = JoinPed[2][0]; }
    }
    case 2: //Fahrschule
    {
    if(NimmImmerSkin[playerid] == 1) { SetPlayerSkin(playerid, JoinPed[3][0]); NimmImmerSkin[playerid] = 1; GenommenerSkin[playerid] = JoinPed[3][0]; }
    else if(NimmImmerSkin[playerid] == 2) { SetPlayerSkin(playerid, JoinPed[4][0]); NimmImmerSkin[playerid] = 2; GenommenerSkin[playerid] = JoinPed[4][0]; }
    else if(NimmImmerSkin[playerid] == 3) { SetPlayerSkin(playerid, JoinPed[5][0]); NimmImmerSkin[playerid] = 3; GenommenerSkin[playerid] = JoinPed[5][0]; }
    }
    }
    return 0;
    }
    else if(!strcmp("fertig",text,false))
    {
    Spieler[playerid][Skin] = NimmSkin[playerid];
    SetSpawnInfo(playerid,Spieler[playerid][Team],Spieler[playerid][Skin],0.0,0.0,0.0,0,0,0,0,0,0,0);
    gTeam[playerid] = Spieler[playerid][Team];
    SpawnPlayer(playerid);
    NimmImmerSkin[playerid] = 0;
    NimmSkinID[playerid] = 0;
    NimmSkin[playerid] = 0;
    return 0;
    }
    else return SendClientMessage(playerid,Rot,"Benutze 'next' oder 'fertig'");
    }

    also beim GF ises ja so, dass es dort HouseInfo[id][hOwner] gibt, also würde es dann so gehen...


    for(new house = 0; house < sizeof(HouseInfo); house++)
    {
    if(strcmp(HouseInfo[house][hOwner], PlayerInfo[playerid][pName], false) == 0)
    {
    //Wenn Spieler gefunden und Namen übereinstimmen Code
    return 1;
    }
    }

    Hagi Ignorierst du gerne Posts die vorher gemacht worden sind? ^^ Das haben wir schon alles durch was du meinst


    Außerdem hast du den gleichen Fehler gemacht Hagi, obwohl du es richtig beschrieben hast

    Hab grad was besseres gefunden wie man deine Theorie anwendet, siehe hier ^^
    public OnGameModeInit()
    {
    for(new i = 0; i < MAX_EINGANG; i++)
    {
    EingangPick[i] = Create3DTextLabel("Eingang[Entertaste]",0x00A4DCFF,Eingang[i][0],Eingang[i][1],Eingang[i][2], 10,0, 0);
    }
    return 1;
    }


    //Edit: Was für Errors meinst du denn?