Gebäude mit ENTER-Taste betreten [FRAGE]

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
  • Halli hallo liebe Community,


    und zwar habe ich eine Frage, ich arbeite momentan an einem Haussystem und möchte die Häuser mit der ENTER-Taste betreten und verlassen.
    Das Betreten funktioniert aber wie muss ich es nun für das verlassen machen?




    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys == 16)
    {
    new id = IsHaus(playerid);
    if(id != -1)
    {
    if(HausInfo[id][vergeben] != 1) return SCM(playerid,rot,"Du kannst das Haus nicht betreten!");
    if(HausInfo[id][locked]!=0) return SCM(playerid,rot,"Das Haus ist abgeschlossen");
    switch(HausInfo[id][hInt])
    {
    case 0:
    {
    SCM(playerid,rot,"ERROR: Kein Interior vergeben, melde dich bei einem Admin!");
    }
    case 1:
    {
    SetPlayerPos(playerid,318.564971,1118.209960,1083.882812);
    SetPlayerInterior(playerid,5);
    SetPlayerVirtualWorld(playerid,id);
    houseint[playerid]=id;
    inhouse[playerid]=1;
    SCM(playerid,gruen,"Du hast das Haus betreten");
    }
    case 2:
    {
    SetPlayerPos(playerid,2324.419921,-1145.568359,1050.710083);
    SetPlayerInterior(playerid,12);
    SetPlayerVirtualWorld(playerid,id);
    houseint[playerid]=id;
    inhouse[playerid]=1;
    SCM(playerid,gruen,"Du hast das Haus betreten");
    }
    case 3:
    {
    SetPlayerPos(playerid,1267.663208,-781.323242,1091.906250);
    SetPlayerInterior(playerid,5);
    SetPlayerVirtualWorld(playerid,id);
    houseint[playerid]=id;
    inhouse[playerid]=1;
    SCM(playerid,gruen,"Du hast das Haus betreten");
    }
    }
    }
    }
    return 1;
    }


    Und das ist mein momentaner /verlassen-Befehl der auf die ENTER-Taste gelegt werden soll:

    ocmd:verlassen(playerid,params[])
    {
    new DBResult:Result, str[512],id=houseint[playerid];
    if(inhouse[playerid]!=1)return SCM(playerid,rot,"Du bist in keinem Haus!");
    format(str,sizeof(str),"SELECT * FROM `haus` WHERE `ID` = '%i'",houseint[playerid]);
    Result = db_query(Database,str);
    db_get_field_assoc(Result,"X",str,sizeof(str));
    HausInfo[id][X]=floatstr(str);
    db_get_field_assoc(Result,"Y",str,sizeof(str));
    HausInfo[id][Y]=floatstr(str);
    db_get_field_assoc(Result,"Z",str,sizeof(str));
    HausInfo[id][Z]=floatstr(str);
    SetPlayerPos(playerid,HausInfo[id][X],HausInfo[id][Y],HausInfo[id][Z]);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,0);
    houseint[playerid]=0;
    inhouse[playerid]=0;
    db_free_result(Result);
    return 1;
    }

  • Du überprüfst mit einer Variable, ob der Spieler in einem Haus ist, beim Betreten setzt du diese Variable auf true bzw. 1.
    Beim Ausgehen überprüfst du, ob die Variable[playerid] == true ist, oder halt == 1, dann setzt du seine Position, seine VirtualWorld u. den Interrior.

  • Du erstellst eine globale Variable.
    new hausstatus[MAX_PLAYERS];
    So, dann machst du die Abfrage bei OnPlayer...
    zu

    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys == 16)
    { if(hausstatus[playerid] == 0)
    {
    hausstatus[playerid] = 1;
    new id = IsHaus(playerid);
    if(id != -1)
    {
    if(HausInfo[id][vergeben] != 1) return SCM(playerid,rot,"Du kannst das Haus nicht betreten!");
    if(HausInfo[id][locked]!=0) return SCM(playerid,rot,"Das Haus ist abgeschlossen");
    switch(HausInfo[id][hInt])
    {
    case 0:
    {
    SCM(playerid,rot,"ERROR: Kein Interior vergeben, melde dich bei einem Admin!");
    }
    case 1:
    {
    SetPlayerPos(playerid,318.564971,1118.209960,1083.882812);
    SetPlayerInterior(playerid,5);
    SetPlayerVirtualWorld(playerid,id);
    houseint[playerid]=id;
    inhouse[playerid]=1;
    SCM(playerid,gruen,"Du hast das Haus betreten");
    }
    case 2:
    {
    SetPlayerPos(playerid,2324.419921,-1145.568359,1050.710083);
    SetPlayerInterior(playerid,12);
    SetPlayerVirtualWorld(playerid,id);
    houseint[playerid]=id;
    inhouse[playerid]=1;
    SCM(playerid,gruen,"Du hast das Haus betreten");
    }
    case 3:
    {
    SetPlayerPos(playerid,1267.663208,-781.323242,1091.906250);
    SetPlayerInterior(playerid,5);
    SetPlayerVirtualWorld(playerid,id);
    houseint[playerid]=id;
    inhouse[playerid]=1;
    SCM(playerid,gruen,"Du hast das Haus betreten");
    }
    }
    }
    }else{
    hausstatus[playerid] = 0;
    new DBResult:Result, str[512],id=houseint[playerid];
    if(inhouse[playerid]!=1)return SCM(playerid,rot,"Du bist in keinem Haus!");
    format(str,sizeof(str),"SELECT * FROM `haus` WHERE `ID` = '%i'",houseint[playerid]);
    Result = db_query(Database,str);
    db_get_field_assoc(Result,"X",str,sizeof(str));
    HausInfo[id][X]=floatstr(str);
    db_get_field_assoc(Result,"Y",str,sizeof(str));
    HausInfo[id][Y]=floatstr(str);
    db_get_field_assoc(Result,"Z",str,sizeof(str));
    HausInfo[id][Z]=floatstr(str);
    SetPlayerPos(playerid,HausInfo[id][X],HausInfo[id][Y],HausInfo[id][Z]);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,0);
    houseint[playerid]=0;
    inhouse[playerid]=0;
    db_free_result(Result);

    }
    }
    return 1;
    }


    Die Globale Variable, also die Erstellung ganz nach oben zu den anderen new's.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen