Beiträge von Jeffry

    Die Funktion kannst du so schreiben:
    stock Jailer(playerid,knastid)
    {
    SetPlayerPos(knastid,198.4943,162.0886,1003.0300);
    SetPlayerInterior(knastid,3);
    new wanted = GetPlayerWantedLevel(knastid), str[145];
    format(str, sizeof(str), "Du wurdest für %d Sekunden ins Gefängnis gebracht!", wanted * 500);
    SendClientMessage(knastid,ROT,str);
    GivePlayerMoney(playerid,wanted * 1000);
    jailed[playerid] = 1;
    SetTimerEx("Unjail",wanted * 500 * 1000,false,"i",knastid);
    return 1;
    }


    Und der Befehl muss so aussehen:
    ocmd:arrest(playerid,params[])
    {
    new pID;
    if(isPlayerInFrakt(playerid,1) || isPlayerInFrakt(playerid,2) || isPlayerInFrakt(playerid,3))
    {
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,ROT,"Benutze /knast [id]");
    if(GetPlayerWantedLevel(pID)>=1)
    {
    if(!IsPlayerInRangeOfPoint(playerid,5,1215.9474,-1820.8887,13.5954) || !IsPlayerInRangeOfPoint(pID,5,1215.9474,-1820.8887,13.5954))return SendClientMessage(playerid,ROT,"Du und der Gefangene müssen beide am Knastpunkt sein!");
    Jailer(playerid,pID);
    }
    else SendClientMessage(playerid, ROT, "Error: Spieler hat kein Wanted.");
    }
    else SendClientMessage(playerid, ROT, "Error: Keine Erlaubnis.");
    return 1;
    }


    Zwecks der Warnung:
    Hast du ocmd als Include im Code stehen?

    @SuPreMee_RynKilleR: Sorry für die späte Antwort, du hättest deinen Post als neu markieren sollen, nach dem Edit, oder mir kurz eine PN schicken, damit ich es mitbekomme.
    Anscheinend mag er das dann so nicht.
    Versuche es so:
    EXTERN:CreateVehicle <iffffiiii>(vehicletype, Float:x, Float: y, Float: z, Float: rotation, color1, color2, respawn_delay, addsiren);
    EXTERN:AddStaticVehicle <iffffii>(modelid, Float: spawn_x, Float: spawn_y, Float: spawn_z, Float: z_angle, color1, color2);
    EXTERN:AddStaticVehicleEx <iffffiiii>(modelid, Float: spawn_x, Float: spawn_y, Float: spawn_z, Float: z_angle, color1, color2, respawn_delay, addsiren);


    Das dürfte er dann durchgehen lassen.

    ocmd:vinfo(playerid, params[])
    {
    if(!params[0]) return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /vinfo [id]");
    new id = strval(params);
    if(id < 1 || id >= MAX_VEHICLES) return SendClientMessage(playerid, 0xFF0000FF, "Error: Ungültige ID.");
    new query[256];
    format(query, sizeof(query), "SELECT User.username FROM User INNER JOIN Cars ON (User.id=Cars.besitzer AND Cars.id='%d');", id);
    mysql_tquery(dbhandle, query, "OnCmd_vinfo", "d", playerid);
    return 1;
    }


    forward OnCmd_vinfo(playerid);
    public OnCmd_vinfo(playerid)
    {
    if(!cache_get_row_count(dbhandle)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Dieses Fahrzeug existiert nicht.");
    new string[145], owner[MAX_PLAYER_NAME];
    cache_get_row(0, 0, owner);
    format(string, sizeof(string), "Das Fahrzeug gehört: %s", owner);
    return SendClientMessage(playerid, 0xFFFFFFFF, string);
    }


    Ich hoffe, das MySQL Plugin kommt mit dem Query klar.
    Falls du eine Erklärung zum INNER JOIN brauchst: http://www.w3schools.com/sql/sql_join_inner.asp


    Den letzten Fahrer konnte ich dir nicht machen, da ich die Spalte nicht kenne, die hast du noch nicht. Es würde aber in etwa dann so aussehen, je nach Benennung:

    Spoiler anzeigen
    ocmd:vinfo(playerid, params[])
    {
    if(!params[0]) return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /vinfo [id]");
    new id = strval(params);
    if(id < 1 || id >= MAX_VEHICLES) return SendClientMessage(playerid, 0xFF0000FF, "Error: Ungültige ID.");
    new query[256];
    format(query, sizeof(query), "SELECT User.username FROM User INNER JOIN Cars ON (User.id=Cars.besitzer AND Cars.id='%d');", id);
    mysql_tquery(dbhandle, query, "OnCmd_vinfo", "dd", playerid, 1);
    return 1;
    }

    Spoiler anzeigen
    forward OnCmd_vinfo(playerid, step);
    public OnCmd_vinfo(playerid, step)
    {
    static owner[MAX_PLAYER_NAME];
    if(step == 1)
    {
    if(!cache_get_row_count(dbhandle)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Dieses Fahrzeug existiert nicht.");
    cache_get_row(0, 0, owner);
    new query[256];
    format(query, sizeof(query), "SELECT User.username FROM User INNER JOIN Cars ON (User.id=Cars.letzterFahrer AND Cars.id='%d');", id);
    mysql_tquery(dbhandle, query, "OnCmd_vinfo", "dd", playerid, 2);
    return 1;
    }
    new string[145];
    if(!cache_get_row_count(dbhandle)) format(string, sizeof(string), "Das Fahrzeug gehört: %s (zuletzt von niemandem gefahren)", owner);
    else
    {
    new driver[MAX_PLAYER_NAME];
    cache_get_row(0, 0, driver);
    format(string, sizeof(string), "Das Fahrzeug gehört: %s (zuletzt von %s gefahren)", owner, driver);
    }
    return SendClientMessage(playerid, 0xFFFFFFFF, string);
    }


    Teste aber zuerst den ersten Code.

    Den Befehl kannst du einfach so schreiben:
    ocmd:f(playerid,params[])
    {
    new text[145];
    if(sscanf(params,"s",text)) return SCM(playerid,GRAU,"Nutze: /f [Text] für den Familienchat");
    if(SpielerInfo[playerid][pFraktion] == 6 || SpielerInfo[playerid][pFraktion] == 7)
    {
    switch(SpielerInfo[playerid][pRang])
    {
    case 1: format(text,sizeof(text),"Pimpf %s:{0055FF} %s.",pn(playerid),text);
    case 2: format(text,sizeof(text),"Thug %s:{0055FF} %s.",pn(playerid),text);
    case 3: format(text,sizeof(text),"Junky %s:{0055FF} %s.",pn(playerid),text);
    case 4: format(text,sizeof(text),"Pimp %s:{0055FF} %s.",pn(playerid),text);
    case 5: format(text,sizeof(text),"Homie %s:{0055FF} %s.",pn(playerid),text);
    case 6: format(text,sizeof(text),"Gangster %s:{0055FF} %s.",pn(playerid),text);
    case 7: format(text,sizeof(text),"Boss %s:{0055FF} %s.",pn(playerid),text);
    default: format(text,sizeof(text),"<Unbekannt> %s:{0055FF} %s.",pn(playerid),text);
    }
    SendeFraktion(SpielerInfo[playerid][pFraktion],WEIS,text);
    }
    else SCM(playerid,GRAU,"Du bist in keiner Gang.");
    return 1;
    }
    Da ist wesentlich weniger Code.


    Und beim Spawn, da passen die Klammern nicht. Das kannst du auch einfach so kürzen:
    if(SpielerInfo[playerid][pFraktion] == 6)
    {
    switch(SpielerInfo[playerid][pRang])
    {
    case 0..3: SetPlayerSkin(playerid, 114);
    case 4..6: SetPlayerSkin(playerid, 116);
    case 7: SetPlayerSkin(playerid, 115);
    }
    }
    else if(SpielerInfo[playerid][pFraktion] == 7)
    {
    switch(SpielerInfo[playerid][pRang])
    {
    case 0..2: SetPlayerSkin(playerid, 102);
    case 3..6: SetPlayerSkin(playerid, 103);
    case 7: SetPlayerSkin(playerid, 104);
    }
    }

    GetPosVorVeh(vehicleid, 3.0, x, y, z);
    if(IsPlayerInRangeOfPoint(playerid, 1.0, x, y, z))
    {
    //Spieler steht vor dem Fahrzeug.
    }


    Mit:
    stock GetPosVorVeh(vehicleid, Float:dist, &Float:x, &Float:y, &Float:z) //©Jeffry
    {
    new Float:a;
    GetVehicleZAngle(vehicleid, a);
    GetVehiclePos(vehicleid, x, y, z);
    x += (dist * floatsin(-a, degrees));
    y += (dist * floatcos(-a, degrees));
    return true;
    }


    Das wäre nun: 3 Meter vor der Mitte der vehicleid (musst du gegebenenfalls anpassen), und da muss der Spieler in einem Meter Umkreis drin sein.


    EDIT:
    Caglar: Ich hätte alles lesen sollen. :pinch:

    Jeffry: Du kennst dich doch mit dem Gebiet gut aus (sah man ja im anderen Thread zur Sirene).


    Also bei mir klappt es ohne Probleme. Lade dir mal das Paket der neuen SA-MP Server Version herunter und füge deinen Befehl in den test_cmds Filterscript ein. Dann starte den Server. Geht es dann?


    Ist es möglich einen Spieler mit einem Befehl zu forcen Zeichen zu benutzen, z.B F oder # ?


    Sowas?
    if(strfind(text, "#") == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du musst mindestens ein #-Zeichen verwenden.");

    Naja, kommt drauf an was du haben willst. Für folgendes hat es gereicht:
    Function IsAFrakCar(car)
    {
    for(new x = 0; x < sizeof(FactionCars); x++)
    {
    if(car == FactionCars[x][fCarid])
    {
    return x;
    }
    }
    return -1;
    }



    if (strcmp("/opark", cmd, true, 10) == 0)
    {
    if(IsPlayerInAnyVehicle(playerid) && GetVehicleModel(GetPlayerVehicleID(playerid)) == 525 && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    if(PlayerInfo[playerid][pMember] == 24||PlayerInfo[playerid][pLeader] == 24)
    {
    if(!IsTrailerAttachedToVehicle(GetPlayerVehicleID(playerid)))
    {
    SendClientMessage(playerid, COLOR_GREY, " An deinem Abschleppwagen ist kein Auto angehängt!");
    return 1;
    }
    new fcarid = IsAFrakCar(trail_car);
    new trail_car = GetVehicleTrailer(GetPlayerVehicleID(playerid));
    if(IsADtCar(trail_car))
    {
    new Float:X,Float:Y,Float:Z;
    new Float:z_rot;
    GetVehiclePos(trail_car, X,Y,Z);
    GetVehicleZAngle(trail_car, z_rot);
    new carowner = GetDtCarOwner(trail_car);
    printf("carowner: %d", carowner);
    new slot = GetDtCarOwnerSlot(carowner,trail_car);
    printf("slot: %d", slot);
    PlayerCar[carowner][slot][CarPos_x] = X;
    PlayerCar[carowner][slot][CarPos_y] = Y;
    PlayerCar[carowner][slot][CarPos_z] = Z;
    PlayerCar[carowner][slot][CarArrest] = 1;
    PlayerCar[carowner][slot][CarRotate] = z_rot;
    printf("Abgeschleppt");
    new fkasse = 2000 + random(2999);
    FraktionsKasse[23] += fkasse;
    if(carowner != 555)
    {
    OnPlayerCarUpdate(carowner);
    SendClientMessage(carowner, COLOR_WHITE, " Ihr Fahrzeug wurde abgeschleppt, Fahren zu zur Ordnungsamt Base, um ihr auto wieder Freizukaufen.");
    PlayerInfo[carowner][pRest] = 1;
    SetTimerEx("PlayerCarSpawn",1000,0,"i",carowner);
    }
    DetachTrailerFromVehicle(GetPlayerVehicleID(playerid));
    SendClientMessage(playerid, COLOR_YELLOW, " Du hast das Fahrzeug erfolgreich abgeschleppt!");
    }
    else if(fcarid != -1)
    {
    FactionCars[fcarid][fPos][0] = X;
    FactionCars[fcarid][fPos][1] = Y;
    FactionCars[fcarid][fPos][2] = Z;
    FactionCars[fcarid][fPos][3] = z_rot;
    DetachTrailerFromVehicle(GetPlayerVehicleID(playerid));
    SendClientMessage(playerid, COLOR_YELLOW, " Du hast das Fahrzeug erfolgreich abgeschleppt!");
    //Hier weitere Dinge...
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, " Du hast kein oder kein erlaubtes Fahrzeug dabei!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, " Du bist kein Mitglied des Ordnungsamtes!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, " Du musst einen Abschleppwagen fahren!");
    }
    return 1;
    }

    ocmd:gutschein(playerid, params[])
    {
    if(!params[0]) return SendClientMessage(playerid, 0xFF0000FF, "/gutschein [Code]");
    new code[40];
    format(code, sizeof(code), "/codes/%s.txt", params);
    if(!fexist(code)) return SendClientMessage(playerid, 0xFF0000FF, "Code existiert nicht.");
    new typ = dini_Int(code, "typ");
    new wert = dini_Int(code, "wert");
    switch(typ)
    {
    case 1:
    {
    GivePlayerMoney(playerid, wert);
    SendClientMessage(playerid,-1,"Code eingelöst: %i$ bekommen.",wert);
    }
    case 2:
    {
    PlayerInfo[playerid][pExp] = wert;
    SendClientMessage(playerid,-1,"Code eingelöst: %i Respektpunkte bekommen.",wert);
    }
    case 3:
    {
    PlayerInfo[playerid][pDonateRank] = wert;
    SendClientMessage(playerid,-1,"Code eingelöst: Du hast Premium Level %i bekommen.",wert);
    }
    case 4:
    {
    PlayerInfo[playerid][pAllowNeon] = 1;
    SendClientMessage(playerid,-1,"Code eingelöst: Du hast einen Neon Gutschein eingelöst.");
    SendClientMessage(playerid,-1,"Fahre zum NeonShop um dir Neon an dein Auto zu bauen.");
    //ShowPlayerDialog(playerid, DIALOG_GUTSCHEINCARTAKE, DIALOG_STYLE_LIST, "Autoauswahl - Gutscheinsystem","Sultan\nInfernus\nTurismo\nCheetah\nPremier\nBanshee\nZR-350\nComet\nBullet\nJester\n","Select", "Cancel");
    }
    }
    fremove(code);
    return 1;
    }


    ocmd:creategutschein(playerid, params[])
    {
    if(PlayerInfo[playerid][pAdmin] == 5)
    {
    new typ, wert;
    if(!sscanf(params,"ii",typ,wert))return SendClientMessage(playerid, 0xFF0000FF, "/createcode [Typ] [Wert]");
    if(typ < 1 || typ > 4)return SendClientMessage(playerid,-1,"Bitte wähle einen Typ aus von 1-4");
    if(wert < 1 || wert > 1000000) return SendClientMessage(playerid,-1,"Wert bitte nur von 1 - 1Mio.");
    SendClientMessage(playerid, 0xFF0000FF, "1 = Geld | 2 = Respektpunkte | 3 = Premium | 4 = UBB Fahrzeug");
    new code[40], str[145];
    format(code, sizeof(code), "%04d-%04d-%04d-%04d", random(10000), random(10000), random(10000), random(10000));
    format(str, sizeof(str), "Gutscheincode : %s",code);
    SendClientMessage(playerid,ROT,str);
    format(code, sizeof(code), "/codes/%s.txt", code);
    dini_Create(code);
    dini_IntSet(code, "typ", typ);
    dini_IntSet(code, "wert", wert);
    }
    else
    {
    SendClientMessage(playerid, 0xFF0000FF, "Du hast kein Adminlevel 7");
    }
    return 1;
    }


    Versuche es so.