Beiträge von a6150

    Guten Tag,


    nach langer Zeit melde ich mich auch mal wieder mit einem Problem zu Wort, für das ich auch mit Hilfe der Wiki keine praktikable Lösung gefunden habe.
    Und zwar geht es um folgendes:


    1. Ein Spieler besitzt entweder ein Haus, oder hat sich in diesem eingemietet.
    2. Falls dieser Spieler keine der beiden Bedingungen erfüllt, darf dieser das haus nicht betreten. -> Problem: Auch wenn eine der beiden bedingungen erfüllt ist, darf der Spieler nicht ins Haus und im Gegenfall dürfen alle ins Haus.


    Nun zum Code:
    --- unter /enter------
    if(strcmp(cmdtext,"/enter",true)==0)
    {
    for(new haus=1;haus<MAX_HAUS;haus++)
    {
    if(IsPlayerInRangeOfPoint(playerid,5,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]))
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    for(new i=0;i<4;i++)
    {
    if((!strcmp(HausInfo[haus][haus_mieter][i],name,true)) || (!strcmp(HausInfo[haus][haus_inhaber],name,true)))
    {

    return SendClientMessage(playerid,ROT,"Dieses Gebäude ist verschlossen und Ihnen fehlen die nötigen Schlüssel, um dieses zu betreten!");
    }
    new innenraum = HausInfo[haus][haus_interior];
    SetPlayerPos(playerid,HausInnenraum[innenraum][innenx],HausInnenraum[innenraum][inneny],HausInnenraum[innenraum][innenz]);
    SetPlayerInterior(playerid,HausInnenraum[innenraum][haus_inneninterior]);
    SetPlayerVirtualWorld(playerid,HausInfo[haus][haus_virtualworld]);
    Hausdrinne[playerid] = haus;
    }
    }
    }
    return 1;
    }



    Die Mieter sowie der Inhaber werden folgend geladen und gespeichert:



    dini_Set(ordner,"inhaber",inhaber); // inhaber wird in einem früheren schritt per GetPlayerName herausgefunden


    // mieter werden gesetzt
    for(new i=0;i<4;i++)
    {
    if(HausInfo[haus][haus_mieter][i]==0)
    {
    new text[32];
    GetPlayerName(playerid,name,sizeof(name));
    format(text,sizeof(text),"mieter%d",i);
    dini_Set(ordner,text,name);
    Delete3DTextLabel(Text3D:HausInfo[haus][haus_label]);
    LoadHaus(haus);
    return 1;
    }
    }
    //mieter und inhaber werden geladen :
    format(HausInfo[hausid][haus_mieter][0],32,"%s",dini_Get(ordner,"mieter0"));
    format(HausInfo[hausid][haus_mieter][1],32,"%s",dini_Get(ordner,"mieter1"));
    format(HausInfo[hausid][haus_mieter][2],32,"%s",dini_Get(ordner,"mieter2"));
    format(HausInfo[hausid][haus_mieter][3],32,"%s",dini_Get(ordner,"mieter3"));
    format(HausInfo[hausid][haus_inhaber],32,"%s",dini_Get(ordner,"inhaber"));


    Falls ihr weitere Informationen braucht, fragt mich einfach.


    Hoffe auf baldige Hilfe :thumbup:


    Mit freundlichen Grüßen,
    a6150


    PS. Der Code, der die Mieter und den Inhaber betrifft, ist aus verschiedenen Stellen zusammensgeschnitten.

    Hab doch gesagt, wenn den O-Amtlern die ID des Autos bekannt ist, auf welche Weise auch immer, würde der Befehl auf die von mir beschriebene Weise funktionieren.



    mögliche CarID Quellen:
    -> der Besitzer schaut in den Fahrzeugpapiere nach ( falls du sowas hast)
    -> der O-Amtler saß in diesem Wagen als letztes

    Wenn dem O-Amt die Vehicleid bekannt ist:
    ocmd:suchen(playerid,params[])
    {
    new vID, str[128], Float:X,Float:Y,Float:Z;
    if(sscanf(params, "d",vID))return SendClientMessage(playerid,BLAU,"/suchen [id]");
    if(pInfo[playerid][Job] != 6)return SendClientMessage(playerid,BLAU,"Du bist kein Detektiv!"); // anpassen!
    {
    GetVehiclePos(vID, X,Y,Z);
    SetPlayerCheckpoint(playerid, X,Y,Z, 6);
    format(str,sizeof(str),"Du hast die Position von %d geortet!",vID);
    SendClientMessage(playerid,0x00A8FFFF,str);
    }
    return 1;
    }

    Das Problem ist die Abfrage nach dem Leader, da du hier ja ein oder benutzt.
    Momentan würde mir als Lösung einfallen, dass du die Gegenfälle beleuchtest.
    Sprich:


    if(PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pMember] == 1)
    {
    return 1;
    }
    if(IsPlayerInRangeOfPoint(playerid,3.0,1246.0240,-1415.8293,13.7952))
    {
    SetPlayerPos(playerid,1710.433715,-1669.379272,20.225049);
    SetPlayerInterior(playerid,18);
    }

    Nimm doch ein Deinstallierprogramm also ein externes...weil wenn du den Ordner jetzt so löschst, bleiben die Einträge in der Registry enthalten .
    Da du es ja neu installieren willst, und hoffentlich weider ins selbe verzeichnis, reicht ein einfaches Löschen des GTA:SA Ordners.

    Ich hab noch nie was von /r gehört? Ich verwende viele Dialoge und alle gehen. ( mit /n)




    //edit
    Es gibt 2 Fehlerquellen:
    -> Du hast bei einem vorherigen Dialog Klammerfehler
    -> Deine Koordinaten falsch

    Klappt Attach wirklich nicht? Eine andere Lösung wäre um einiges komplizierter :/ und ressourcenverschwendender.
    Was passiert denn genau nachdem du die Treppe ans fahrzeug gebunden hast? und kann ich etvl. deinen Attachbefehl sehen?