Enter/Exit funktioniert nicht wie gewollt

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
  • Ahja, ok. Das bringt aber nicht wirklich etwas, da wir keine Verbindung hinbekommen, zwischen dem Marker (bdInfo) und der Position wo er hinteleportiert werden soll (bsInfo), da die Verbindung (zum Beispiel über einen Fremdschlüssel) nicht vorhanden ist.
    Am sinnvollsten wäre es, wenn du die Positionen zu denen er teleportiert werden soll hier einträgst:
    new bdInfo[MAX_SHOP][buildingsEnum] = {
    {"Bürger Shot Nord",1559,1199.2811,-918.6648,43.1191}, // BSE1 //Die Kordinaten sagen aus wo der Marker steht.
    {"Bürger Shot West",1559,810.9824,-1616.2720,13.5469}, // BSE2
    {"Bürger Shot Nord",1559,1872.7986,2071.6619,11.0625}, // BSE3
    {"Bürger Shot Nord-West",1559,2472.3940,2034.2115,11.0625}, // BSE4
    {"Bürger Shot West",1559,2169.9138,2795.8726,10.8203} // BSE5
    };


    Ansonsten müsstest du dem bsInfo noch einen Stat burgerID mitgeben, und da trägst du dann in der Datenbank zu der jeweiligen Position passend die ID (Zeile) von dem Marker (bdInfo) ein, der den Spieler dort hin teleportiert.


    Welche Variante du machst bleibt dir überlassen, musst mir dann nur sagen welche du nimmst, und die das neue enum/Array aussieht.

  • Naja irgendwie etwas doof, weil würde die Bürger Shot Kordinaten in der Datenbank lassen.
    Da der Bürger Shot auch schon eine hat in der Datenbank.
    Aber gut muss ich mal gucken wie ich das jetzt noch am besten umschreibe.


    //EDIT:
    Kann ich eig neben den Marker Kordinaten nicht einfach bsInfo benutzen? mit den Interior Kordinaten?

  • Kann ich eig neben den Marker Kordinaten nicht einfach bsInfo benutzen? mit den Interior Kordinaten?


    Nein, da der Index von dem Burger Shot Marker aus bdInfo aller Wahrscheinlichkeit nicht mit dem Index von bsInfo übereinstimmt (das sind ja 5 und 15 Indizies). Außer du hast die Burger Shots in der Datenbank direkt als erstes in die Tabelle eingetragen (Zeile 1 bis 5), dann würde es funktionieren.

  • Alles klar.
    Ich würde dir die Variante mit den Fremdschlüsseln empfehlen, also dass du die ID einfach in die Datenbank an die richtige Position schreibst, das ist am flexibelsten und du wirst die wenigsten Probleme haben.
    Danach einfach den Wert mit aus der Datenbank laden und mit einer Schleife durch bsInfo schauen, dann die Fremd_ID gleich dem Index (i) von bdInfo ist.


    Wenn du Fragen hast, einfach melden. :)

  • Wo soll ich den die Schleife einbinden?
    Auch unter ocmd:enter?
    Weil kann ja nicht 1 schleife haben und in der schleife noch eine machen oder?
    Oder soll ich die fremd_id dann in der PVar Speichern in dem ich bei ocmd:enter über der bdInfo schleife eine bsInfo schleife machen?

  • Ich habe das jetzt einfach mal so gemacht, wenn ich im Haus bin und raus gehe bin ich direkt im Bürgershot und wenn ich raus gehe bin ich direkt
    am BSN in LS.
    Aber wenn ich bei einem Marker rein will geht das nicht Oo
    Ich habe bei new bdInfo ganz hinten eine ID gegeben, diese soll übereinstimmen mit der ID aus der Datenbank (b_id).
    So und soll dann in diesen Bürger shot rein gehen, wenn er raus geht soll er dort landen wo er rein ging.
    Folgende codes:
    new bdInfo[][buildingsEnum] = {
    {"Bürger Shot Nord", 1559,1199.2811,-918.6648,43.1191,1}, // 1 steht für die fremdID
    {"Bürger Shot West", 1559, 810.9824,-1616.2720,13.5469,1},
    {"Bürger Shot Nord", 1559, 1872.7986,2071.6619,11.0625,1},
    {"Bürger Shot Nord - West", 1559, 2472.3940,2034.2115,11.0625,1},
    {"Bürger Shot West", 1559, 2169.9138,2795.8726,10.8203,1}
    };


    ocmd:exit(playerid,params[])
    {
    if(pInfo[playerid][pEingeloggt] == 0)return SendClientMessage(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
    for(new i=0; i<sizeof(bsInfo); i++)
    {
    new id = GetPVarInt(playerid,"EnterBuiID");
    if(GetPlayerVirtualWorld(playerid)!=i)continue;
    if(!IsPlayerInRangeOfPoint(playerid,2,bsInfo[i][ib_x],bsInfo[i][ib_y],bsInfo[i][ib_z]))continue;
    SetPlayerPos(playerid,bdInfo[id][bd_x],bdInfo[id][bd_y],bdInfo[id][bd_z]);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,0);
    return 1;
    }
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(GetPlayerVirtualWorld(playerid)!=i)continue;
    if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][i_x],hInfo[i][i_y],hInfo[i][i_z]))continue;
    SetPlayerPos(playerid,hInfo[i][hx],hInfo[i][hy],hInfo[i][hz]);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,0);
    return 1;
    }
    return 1;
    }


    ocmd:enter(playerid,params[])
    {
    if(pInfo[playerid][pEingeloggt] == 0)return SendClientMessage(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
    for(new i=0; i<sizeof(bsInfo); i++)
    {
    print("DEBUG: bsInfo wurde aufgerufen");
    if(!bsInfo[i][db_id])continue;
    if(!bsInfo[i][b_id])continue;
    if(bsInfo[i][ib_x] == 0.0)continue;
    for(new b=0; b<sizeof(bdInfo); b++)
    {
    if(bsInfo[i][b_id] !=bdInfo[b][bdID])continue;
    print("DEBUG: bdInfo wurde aufgerufen.");
    if(!IsPlayerInRangeOfPoint(playerid,2,bdInfo[b][bd_x],bdInfo[b][bd_y],bdInfo[b][bd_z]))continue;
    printf("IsPlayerInRangeOfPoint(playerid,2,bdInfo[%i][bd_x],bdInfo[%i][bd_y],bdInfo[%i][bd_z]",b,b,b);
    SetPVarInt(playerid,"EnterBuiID",b);
    break;
    }
    printf("BusinessID: %i | ShopID: %i | Produkte %i",i,bsInfo[i][b_id],bsInfo[i][b_prods]);
    if(bsInfo[i][b_prods] < 1)return SCM(playerid,COLOR_GRAU,"Das Lager vom Business ist zurzeit Leer.");
    SetPlayerPos(playerid,bsInfo[i][ib_x],bsInfo[i][ib_y],bsInfo[i][ib_z]);
    SetPlayerInterior(playerid,bsInfo[i][b_interior]);
    SetPlayerVirtualWorld(playerid,i);
    return 1;
    }
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][db_id])continue;
    if(hInfo[i][i_x] == 0.0)continue;
    if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][hx],hInfo[i][hy],hInfo[i][hz]))continue;
    if(hInfo[i][h_lock] == 1)
    {
    if(!strcmp(hInfo[i][h_besitzer],SpielerName(playerid),true))
    {
    SetPlayerPos(playerid,hInfo[i][i_x],hInfo[i][i_y],hInfo[i][i_z]);
    SetPlayerInterior(playerid,hInfo[i][h_interior]);
    SetPlayerVirtualWorld(playerid,i);
    return 1;
    }
    return GameTextForPlayer(playerid,"~r~Abgeschlossen",1000,1);


    }
    else if(hInfo[i][h_lock] == 0)
    {
    SetPlayerPos(playerid,hInfo[i][i_x],hInfo[i][i_y],hInfo[i][i_z]);
    SetPlayerInterior(playerid,hInfo[i][h_interior]);
    SetPlayerVirtualWorld(playerid,i);
    }
    return 1;
    }
    return 1;
    }
    Die FremdID die ich in der Datenbank anlegen sollte, dafür habe ich b_id benutzt.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ok, dann teste es mal so:
    ocmd:enter(playerid,params[])
    {
    if(pInfo[playerid][pEingeloggt] == 0)return SendClientMessage(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
    for(new i=0; i<sizeof(bdInfo); i++)
    {
    print("DEBUG: bdInfo wurde aufgerufen");
    printf("IsPlayerInRangeOfPoint(playerid,2,bdInfo[%i][bd_x],bdInfo[%i][bd_y],bdInfo[%i][bd_z]",i,i,i);
    if(!IsPlayerInRangeOfPoint(playerid,2,bdInfo[i][bd_x],bdInfo[i][bd_y],bdInfo[i][bd_z]))continue;
    SetPVarInt(playerid,"EnterBuiID",i);
    new b = bdInfo[i][bdID];
    printf("BusinessID: %i | ShopID: %i | Produkte %i",b,bsInfo[b][b_id],bsInfo[b][b_prods]);
    if(bsInfo[b][b_prods] < 1)return SCM(playerid,COLOR_GRAU,"Das Lager vom Business ist zurzeit Leer.");
    SetPlayerPos(playerid,bsInfo[b][ib_x],bsInfo[b][ib_y],bsInfo[b][ib_z]);
    SetPlayerInterior(playerid,bsInfo[b][b_interior]);
    SetPlayerVirtualWorld(playerid,b);
    return 1;
    }
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][db_id])continue;
    if(hInfo[i][i_x] == 0.0)continue;
    if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][hx],hInfo[i][hy],hInfo[i][hz]))continue;
    if(hInfo[i][h_lock] == 1)
    {
    if(!strcmp(hInfo[i][h_besitzer],SpielerName(playerid),true))
    {
    SetPlayerPos(playerid,hInfo[i][i_x],hInfo[i][i_y],hInfo[i][i_z]);
    SetPlayerInterior(playerid,hInfo[i][h_interior]);
    SetPlayerVirtualWorld(playerid,i);
    return 1;
    }
    return GameTextForPlayer(playerid,"~r~Abgeschlossen",1000,1);

    }
    else if(hInfo[i][h_lock] == 0)
    {
    SetPlayerPos(playerid,hInfo[i][i_x],hInfo[i][i_y],hInfo[i][i_z]);
    SetPlayerInterior(playerid,hInfo[i][h_interior]);
    SetPlayerVirtualWorld(playerid,i);
    }
    return 1;
    }
    return 1;
    }


    Wenn es nicht geht, was sagt der Log?

  • Ich spawne am 0 Punkt bzw falle durch die map.

    Code
    [20:32:20] DEBUG: bdInfo wurde aufgerufen
    [20:32:20] IsPlayerInRangeOfPoint(playerid,2,bdInfo[0][bd_x],bdInfo[0][bd_y],bdInfo[0][bd_z]
    [20:32:20] BusinessID: 1 | ShopID: 7 | Produkte 62


    //EDIT:
    ShopID 7 ist ja die b_id aus der Datenbank, diese hat auch die Kordinaten 0.0...
    Der wählt theoritisch eine andere b_id aus.

  • Ok.
    Dann teste es mal so:
    ocmd:enter(playerid,params[])
    {
    if(pInfo[playerid][pEingeloggt] == 0)return SendClientMessage(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
    for(new i=0; i<sizeof(bdInfo); i++)
    {
    print("DEBUG: bdInfo wurde aufgerufen");
    printf("IsPlayerInRangeOfPoint(playerid,2,bdInfo[%i][bd_x],bdInfo[%i][bd_y],bdInfo[%i][bd_z]",i,i,i);
    if(!IsPlayerInRangeOfPoint(playerid,2,bdInfo[i][bd_x],bdInfo[i][bd_y],bdInfo[i][bd_z]))continue;
    SetPVarInt(playerid,"EnterBuiID",i);
    new b = bdInfo[i][bdID];
    for(new x = 0; x < sizeof(bsInfo); x++)
    {
    printf("b_id von %d: %d", x, bsInfo[x][b_id]);
    if(bsInfo[x][b_id] == b)
    {
    b = x;
    break;
    }
    }
    printf("BusinessID: %i | ShopID: %i | Produkte %i",b,bsInfo[b][b_id],bsInfo[b][b_prods]);
    if(bsInfo[b][b_prods] < 1)return SCM(playerid,COLOR_GRAU,"Das Lager vom Business ist zurzeit Leer.");
    SetPlayerPos(playerid,bsInfo[b][ib_x],bsInfo[b][ib_y],bsInfo[b][ib_z]);
    SetPlayerInterior(playerid,bsInfo[b][b_interior]);
    SetPlayerVirtualWorld(playerid,b);
    return 1;
    }
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][db_id])continue;
    if(hInfo[i][i_x] == 0.0)continue;
    if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][hx],hInfo[i][hy],hInfo[i][hz]))continue;
    if(hInfo[i][h_lock] == 1)
    {
    if(!strcmp(hInfo[i][h_besitzer],SpielerName(playerid),true))
    {
    SetPlayerPos(playerid,hInfo[i][i_x],hInfo[i][i_y],hInfo[i][i_z]);
    SetPlayerInterior(playerid,hInfo[i][h_interior]);
    SetPlayerVirtualWorld(playerid,i);
    return 1;
    }
    return GameTextForPlayer(playerid,"~r~Abgeschlossen",1000,1);

    }
    else if(hInfo[i][h_lock] == 0)
    {
    SetPlayerPos(playerid,hInfo[i][i_x],hInfo[i][i_y],hInfo[i][i_z]);
    SetPlayerInterior(playerid,hInfo[i][h_interior]);
    SetPlayerVirtualWorld(playerid,i);
    }
    return 1;
    }
    return 1;
    }