Frage zu Haussystem

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
  • Hallo Brotfische,


    Ich habe vor längerer Zeit mein Haussytem fertig gestellt bekommen. Jetzt möchte ich, dass wenn ein Tor vor bzw. bei dem Haus ist, das man das mit der Taste "Y"(kann auch andere sein) öffnen kann.
    Leider habe ich kein Plan wie ich das machen soll :)


    Mein Haus enum... vllt. hilft das weiter :)


    enum houseEnum{
    Float:h_x,
    Float:h_y,
    Float:h_z,
    Float:ih_x,
    Float:ih_y,
    Float:ih_z,
    h_interior,
    h_besitzer[MAX_PLAYER_NAME],
    h_preis,
    h_id,
    h_pickup,
    Text3D:h_text
    }


    Ich hoffe das mir jemand helfen kann :)


    MfG German_ScripterHD


    Mit freundlichen Grüßen
    German_ScripterHD

  • Naja, an sich lädst du ja die Häuser auch. Somit kannst du, gleich wie du die Koordinaten des Hauses lädst auch die Koordinaten des Tores laden.
    Versuch das mal selbst hinzubekommen.


    Vielleicht bekommst du es so sogar größtenteils selbst hin, wenn ich dir Schritt für Schritt sage was du machen musst. Wäre eine schöne Herausforderung.

  • Okay jetzt werden die Tore erstellt...


    So habe ich das jetzt gemacht... (funktioniert)


    enum TorEnum{
    Float:t_x,
    Float:t_y,
    Float:t_z,
    Float:t_rx,
    Float:t_ry,
    Float:t_rz,
    t_id,
    t_modelid
    }
    new TorInfo[500][TorEnum];
    forward OnTorLoad();


    //OnGameModeInit
    format(querye,sizeof(querye),"SELECT * FROM Tor");
    mysql_function_query(dbhandle, querye, true, "OnTorLoad", "");


    public OnTorLoad()
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new id=getFreeTorID();
    TorInfo[id][t_x]=cache_get_field_content_float(i, "t_x", dbhandle);
    TorInfo[id][t_y]=cache_get_field_content_float(i, "t_y", dbhandle);
    TorInfo[id][t_z]=cache_get_field_content_float(i, "t_z", dbhandle);
    TorInfo[id][t_rx]=cache_get_field_content_float(i, "t_rx", dbhandle);
    TorInfo[id][t_ry]=cache_get_field_content_float(i, "t_ry", dbhandle);
    TorInfo[id][t_rz]=cache_get_field_content_float(i, "t_rz", dbhandle);
    TorInfo[id][t_id]=cache_get_field_content_int(i, "id", dbhandle);
    TorInfo[id][t_modelid]=cache_get_field_content_int(i, "modelid", dbhandle);
    CreateObject(TorInfo[id][t_modelid],TorInfo[id][t_x],TorInfo[id][t_y],TorInfo[id][t_z],TorInfo[id][t_rx],TorInfo[id][t_ry],TorInfo[id][t_rz]);
    }
    return 1;
    }
    getFreeTorID()
    {
    for(new i=0; i<sizeof(TorInfo); i++)
    {
    if(TorInfo[i][t_id]==0)return i;
    }
    return 0;
    }


    Bild der Datenbank:




    Das Tor wird erstellt:



    Okay, jetzt möchte ich ja das immer nur der Besitzer der Haus ID .... das Tor öffnen kann.... wie mache ich das jetzt?


    Hier nochmal mein Hausenum:
    enum hausEnum{
    Float:h_x,
    Float:h_y,
    Float:h_z,
    Float:ih_x,
    Float:ih_y,
    Float:ih_z,
    h_interior,
    h_besitzer[MAX_PLAYER_NAME],
    h_preis,
    h_id,
    h_pickup,
    Text3D:h_text
    }


    Ich hoffe es kann mir jemand helfen :D



    Mfg German_ScripterHD


    Mit freundlichen Grüßen
    German_ScripterHD

  • Super, das hast du schon viel geschafft!


    Du musst dem Tor noch die ID des Hauses zuweisen, dann kannst du über das Tor das Haus herausfinden, und dann folgendes abfragen:
    if(!strcmp(SpielerName(playerid), HausInfo[TorInfo[i][t_hausid]][h_besitzer])
    {
    //Kann das Tor öffnen
    }

  • Okay...


    Wenn ich jetzt "/gate" eingebe... kommt der Befehl konnte nicht gefunden werden...


    Codes:


    Laden des Tores:


    public OnTorLoad()
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new id=getFreeTorID();
    TorInfo[id][t_id]=cache_get_field_content_int(i,"id",dbhandle);
    TorInfo[id][t_x]=cache_get_field_content_float(i, "t_x", dbhandle);
    TorInfo[id][t_y]=cache_get_field_content_float(i, "t_y", dbhandle);
    TorInfo[id][t_z]=cache_get_field_content_float(i, "t_z", dbhandle);
    TorInfo[id][t_rx]=cache_get_field_content_float(i, "t_rx", dbhandle);
    TorInfo[id][t_ry]=cache_get_field_content_float(i, "t_ry", dbhandle);
    TorInfo[id][t_rz]=cache_get_field_content_float(i, "t_rz", dbhandle);
    TorInfo[id][t_id]=cache_get_field_content_int(i, "id", dbhandle);
    TorInfo[id][t_modelid]=cache_get_field_content_int(i, "modelid", dbhandle);
    TorInfo[id][t_hausid]=cache_get_field_content_int(i,"hausid",dbhandle);
    CreateObject(TorInfo[id][t_modelid],TorInfo[id][t_x],TorInfo[id][t_y],TorInfo[id][t_z],TorInfo[id][t_rx],TorInfo[id][t_ry],TorInfo[id][t_rz]);
    }
    return 1;
    }
    ocmd:gate(playerid)
    {
    for(new i=0; i<sizeof(TorInfo); i++)
    {
    if(!strcmp(getPlayerName(playerid), hInfo[TorInfo[i][t_hausid]][h_besitzer]))
    {
    MoveObject(TorInfo[i][t_modelid],TorInfo[i][t_x],TorInfo[i][t_y],TorInfo[i][t_z]-0.1,3.0);
    }
    }
    return 1;
    }


    Bild der Datenbank:



    Ich hoffe es kann mir jemand weiter helfen :D


    Mit freundlichen Grüßen
    German_ScripterHD

  • Ich habe das also AUTO_IN..... und das zählt ja hoch.... ich habe zwischen durch mal alle häuser gelöscht und wieder erstellt... und irgendwie ist das jetzt bei 793 obwohl es nur 230 Häuser sind :)


    Aber nochmal als Beweiß :D



    Beim Haus Laden...


    hInfo[id][h_id]=cache_get_field_content_int(i, "id", dbhandle);


    Mit freundlichen Grüßen
    German_ScripterHD

  • ocmd:gate(playerid)
    {
    for(new i=0; i<sizeof(TorInfo); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 10.0, TorInfo[i][t_x],TorInfo[i][t_y],TorInfo[i][t_z]))
    {
    new hid = -1;
    for(new h=0; h<sizeof(hInfo); h++)
    {
    if(hInfo[h][h_id] == TorInfo[i][t_hausid])
    {
    hid = h;
    }
    }
    if(hid == -1) return 0;
    if(!strcmp(getPlayerName(playerid), hInfo[hid][h_besitzer]))
    {
    MoveObject(TorInfo[i][t_modelid],TorInfo[i][t_x],TorInfo[i][t_y],TorInfo[i][t_z]-0.1,3.0);
    }
    }
    }
    return 1;
    }

  • Oh ja, kanns auch nicht.
    Du musst
    CreateObject(TorInfo[id][t_modelid],TorInfo[id][t_x],TorInfo[id][t_y],TorInfo[id][t_z],TorInfo[id][t_rx],TorInfo[id][t_ry],TorInfo[id][t_rz]);
    zu
    TorInfo[id][t_objectid] = CreateObject(TorInfo[id][t_modelid],TorInfo[id][t_x],TorInfo[id][t_y],TorInfo[id][t_z],TorInfo[id][t_rx],TorInfo[id][t_ry],TorInfo[id][t_rz]);
    ändern und
    MoveObject(TorInfo[i][t_modelid],TorInfo[i][t_x],TorInfo[i][t_y],TorInfo[i][t_z]-0.1,3.0);
    zu
    MoveObject(TorInfo[i][t_objectid],TorInfo[i][t_x],TorInfo[i][t_y],TorInfo[i][t_z]-0.1,3.0);

  • Danke Jeffry... es geht :D


    Jetzt habe ich noch eine ganz kurze Frage :)


    Ich möchte jetzt noch ein Timer einbauen das das Tor nach 20sek. wieder schließt.... wie kann ich das machen, das nur dieses Tor wieder schließt.. und nicht die andern mit :D


    Mfg German_ScripterHD


    Mit freundlichen Grüßen
    German_ScripterHD