Beiträge von Kasakow

    Moin.
    Die letzte Id wird als 0 ausgegeben und nicht als INVALID_PLAYER_ID.
    Haben es mit 2 aber auch mit 3 Leuten getestet gestestet. Also jeweils mit mir und 2 Beifahrern.
    Mit der Funktion will ich alle Leute in einem Fahrzeug ermitteln für vermehrt sinnvolle funktionen.


    Ja, finde sie wenn sie klappt, sinnvoll.


    #handy

    Eine Funktion um alle IDS aus einem Fahrzeug zu ermitteln ?
    So hatte ich es mal probiert, funkt aber nicht. Jemand einen Quellcode da, damit ich mir den mal anschauen kann.



    stock GetVehicleMember(vid, &id1, &id2, &id3, &id4)
    {
    new id[4] = INVALID_PLAYER_ID;
    for(new i, count;i<PLAYER_MAX;i++)
    {
    if(count >= 4)break;
    if(IsPlayerLoggedIn(i) == true)
    {
    if(IsPlayerInVehicle(i, vid) == 1)
    {
    id[count] = i;
    count ++;
    }
    }
    }
    id1 = id[0],
    id2 = id[1],
    id3 = id[2],
    id4 = id[3];
    return 1;
    }

    Ja, funktioniert so nicht.


    Schau, ich glaub wir reden aneinander vorbei.
    Ich meine es so, ich möchte das aus der MySQL geladene Array bearbeiten, wie bei einem Haussystem zum Bespiel ja.
    Ich möchte herausfinden ob mir das Haus gehört.



    stock MyHouseID(playerid){for(new i;i<sizeof Haus;i++){if(Haus[i][hID] == pInfo[playerid][pHaus])return i; //Das jeweilige array, was zu bearbeiten ist, ist dem Fall, Haus[i]}return INVALID_HAUS_ID;}



    Jetzt möchte ich sagen, okay.. das Haus bekommt ein Upgrade.
    Dann arbeite ich so:



    new hid = MyHouseID(playerid);if(hid == INVALID_HAUS_ID){Haus[i][hUpgrade] = 1;}


    //Sorry die Formatierung, mein Editor spinnt gerade etwas.

    zu:


    if(Group[i][gSQL] != 0 && Group[i][gSQL] == pInfo[playerid][pGroup]) return Group[i][gHouse];


    Danke erstmal für deine Antwort! :)


    Das ist so aber nicht gewollt. Da ich ja in der Funktion wirklich den Index Integer ausgeben möchte.
    Beispielsweise, Ich suche in einer Schleife eine Gruppe, die Zeitlich gesperrt wurde. Diese würde dann auch geladen werden mit Group[i][gLock] = (1);.
    Ich suche diese Gruppe jetzt und möchte das Array mit dem Index der besagten Gruppe bearbeiten. Dann ist i in der Schleife letztes endlich meine Antwort.
    Deine Variante habe ich benutzt, diese verhindert dann andere Funktionen die mit der gleichen Funktion eine Information erzeugen möchten.
    Also ob ein Spieler Besitzer der Gruppe ist, kann nicht mehr ermittelt werden, vorher hat das ganz gut Funktioniert. Ich zeige dir mal die Funktion der Leaderermittlung, dann kommst du dem Hintergrund vielleicht näher.
    stock IsPlayerGroupLeader(playerid)
    {
    for(new i, gID;i<MAX_GROUP;i++)
    {
    if(IsPlayerLoggedIn(i) == true)
    {
    if(pInfo[i][pGroup] != 0)
    {
    gID = GetPlayerGroupID(i);
    if(Group[gID][gLeaderSQL] == getPlayerSQL(playerid))return 1;
    }
    }
    }
    return 0;
    }


    ((WIESO SCHREIBT ER BEI MIR ALLES KURSIV ?))

    Diese Funktion sollt eigentlich dazu dienen das Array zurückzusetzen aber da Strings im Enum sind, behindert diese Funktion die Ausführung der anderen unten drunter.
    Sprich, es passiert nichts beim Connecten, habe es getestet indem ich die Funktion ausgeklammert habe.
    Hat jemand für mich einen Lösungsvorschlag? Möchte ungerne alles manuell zurücksetzen.


    Hier mal die Funktion.

    stock ResetPlayer(playerid)
    {
    for(new i;i<sizeof pInfo;i++)
    {
    pInfo[playerid][pData:i] = 0;
    }
    return 1;
    }

    Okay, hätte mir deinen Beitrag, besser durchlesen sollen.
    Dann arbeite mal mit dem Callback 'OnPlayerExitVehicle' zusammen.
    Du kannst quasi sobald er schon die Taste F oder Enter drückt ihn gleich wieder ins Fahrzeug setzen lassen.

    Früher habe ich es mit `` gemacht, das ist in der neusten Version, nicht mehr von Relevanz.
    Es ging vor dem Query schon nicht bei den Leuten die Online sind, in der Gruppe sind und auch die Nachricht bekommen.

    Ich wollte nicht mehrere Threads aufmachen, deswegen packe ich mal alles in diesen hier.
    Aktuell besteht das Problem wenn ich das Haus zu einem Gruppenhaus umbaue, dann kann man dort seinen Spawn aber nicht mit /spawnchange hinverlegen.
    Hierfür habe auch ein paar meiner dazu verwendeten Funktionen ausgegeben und sie geben mir 0 aus, also nicht vorhandene Daten.


    Fangen wir mal beim Umbau selber an.
    Die Spieler, die Online sind, bekommen auch die Nachricht dass das Haus umgebaut wurde aber das Gruppenhaus wird anscheinend nicht zugeteilt.



    case 3: // Gruppenumbau
    {
    if(IsPlayerGroupLeader(playerid) ==
    0)return SendClientMessage(playerid, COLOR_RED, "HAUS: {FFFFFF}Du bist
    kein Gruppierungsleiter!");
    if(HouseData[id][hGroupHouse] ==
    1)return SendClientMessage(playerid, COLOR_RED, "HAUS: {FFFFFF}Dein Haus
    hat dieses Upgrade bereits!");
    if(HouseData[id][hGroupHouse] ==
    DELINCE_GROUP_ADDON)return SendClientMessage(playerid, COLOR_RED, "HAUS:
    {FFFFFF}Dieses Haus ist nicht für das Gruppenaddon geeignet..");
    if(getPlayerMoney(playerid)
    < 5000)return SendClientMessage(playerid, COLOR_RED, "FEHLER:
    {FFFFFF}Du hast nicht genug Geld dabei!");
    if(HouseData[id][hRentMember] > 0)
    {
    ShowPlayerDialog(playerid,
    DIALOG_GADDON, DIALOG_STYLE_MSGBOX, "Gruppenaddon", "Es wohnen aktuell
    noch andere Spieler in deinem Haus!\nWenn du das Haus umbauen möchtest,
    musst die Spieler zuerst rauswerfen.\nDu kannst sie anschließend wieder
    Einladen.", "Rauswerfen", "Zurück");
    return 1;
    }
    givePlayerMoney(playerid, -5000),
    HouseData[id][hGroupHouse] = 1;
    for(new i;i {
    if(IsPlayerLoggedIn(i) == true)
    {
    if(pInfo[i][pGroup] != 0 && pInfo[i][pGroup] == pInfo[playerid][pGroup])
    {
    SendClientMessage(i,
    COLOR_GREEN, "Dein Gruppierungsleiter hat sein Haus zu einem
    Gruppenhaus umgebaut. (/spawnchange)"),
    pInfo[i][pGHouse] = HouseData[id][hSQL];
    }
    }
    }
    mysql_format(handle,
    query, sizeof query, "UPDATE account SET GHouseID=%i WHERE Group=%i",
    HouseData[id][hSQL], pInfo[playerid][pGroup]),
    mysql_pquery(handle, query);
    new gid = GetPlayerGroupID(playerid), str[128];
    Group[gid][gHouse] = GetMyHouseID(playerid),
    format(str,sizeof str, "gHouse: %i, GMHouseID: %i, mygid: %i", Group[gid][gHouse], GetMyHouseID(playerid), gid),
    SendClientMessage(playerid, -1, str),
    SendClientMessage(playerid, COLOR_GREEN, "Du hast dein Haus zum Gruppierungshaus umgebaut."),
    SendClientMessage(playerid, COLOR_GREEN, "Du hast jetzt kein Mieterlimit aber kannst auch keine Miete mehr verlangen!");



    GetPlayerGroupID, GetMyGroupHouseID & GetMyHouseID Die Funktionen geben teilweise 0 aus

    stock GetMyHouseID(playerid)
    {
    for(new i;i {
    if(HouseData[i][hOwnerSQL] == getPlayerSQL(playerid))return i;
    }
    return -1;
    }
    stock GetMyGroupHouseID(playerid)
    {
    for(new i;i {
    if(Group[i][gSQL] != 0 && Group[i][gHouse] == pInfo[playerid][pGHouse])return i;
    }
    return -1;
    }
    stock GetPlayerGroupID(playerid)
    {
    for(new i;i {
    if(Group[i][gSQL] != 0 && Group[i][gSQL] == pInfo[playerid][pGroup])return i;
    }
    return 0;
    }


    SpawnChange Funktion (Gruppenhaus wird nicht angeboten)

    stock SpawnChange(playerid)
    {
    switch(pInfo[playerid][pSpawn])
    {
    case 0:
    {
    new id = GetMyRentHouseID(playerid);
    if(id == -1)
    {
    pInfo[playerid][pSpawn] +=1;
    SpawnChange(playerid);
    return 1;
    }
    if(HouseData[id][hInterior] == -1)
    {
    pInfo[playerid][pSpawn] +=1;
    SpawnChange(playerid);
    return 1;
    }
    if(pInfo[playerid][pHouse] < 1)return SendClientMessage(playerid, COLOR_RED, "FEHLER: {FFFFFF}Du hast leider keine Unterkunft wo du Spawnen könntest.");
    SendClientMessage(playerid, COLOR_GREEN, "Du spawnst nun in Zukunft dort, wo du Eingemietet bist.");
    pInfo[playerid][pSpawn] = 1;
    }
    case 1:
    {
    new id2 = GetMyGroupHouseID(playerid);
    printf("Bryans id2: %i", id2);
    if(id2 != -1 && id2 != 0)
    {
    SendClientMessage(playerid, COLOR_GREEN, "Du spawnst nun in Zukunft in deinem Gruppierungshaus.");
    pInfo[playerid][pSpawn] = 2;
    return 1;
    }
    pInfo[playerid][pSpawn] ++, SpawnChange(playerid);
    }
    case 2:
    {
    if(pInfo[playerid][pHitman] < 1) {pInfo[playerid][pSpawn] ++,SpawnChange(playerid);return 1;}
    else pInfo[playerid][pSpawn] = 3;
    SendClientMessage(playerid, COLOR_GREEN, "Du spawnst nun in Zukunft in der Agency.");
    }
    case 3:
    {
    pInfo[playerid][pSpawn] = 0,
    SendClientMessage(playerid, COLOR_GREEN, "Du spawnst nun in Zukunft wieder am Bahnhof.");
    }
    }
    return 1;
    }


    Hoffe ihr habt einen Denkanstoß für mich.

    @bobbi.cs
    Ja in der Tat, es geht um die „SAMP Kindergarten“ Angriffe. Meine Überlegung war es auf jeden Fall, falls der Server bei MyLoc nicht standhält dass ich einen Ausweich Vserver bei Nitrado habe, auch wenn die etwas mehr kosten. Meinst du/ihr dass ich auf Nitrado zählen kann wenn bei einem Serverstart die wie immer kommenden DDoS Angriffe kommen aus der SAMP Szene?

    Ich denke mir so da von euch hier sehr viele Erfahrungen mit verschiedenen Hostern gemacht haben, frage ich einfach mal euch, welche Server Provider ihr Empfehlen könnt um auch fast jeden Angriff in fast jeder Größe ordentlich abzuwehren.
    Aktuell habe ich ein System bei MyLoc aber ich habe dort noch keine Erfahrungen gemacht mit DDoS.

    Mein Actor Jim wird mir nicht im Interior angezeigt.
    Ich habe mal seine Werte geprintet & mich auch wie dem Screenshot zu entnehmen ist an seine Stelle teleportiert.. aber er fehlt.. habe es auch schon mit verschiedenen Client Versionen versucht, nichts..



    Actor_Jim = CreateActor(333, 312.1229, -168.2393, 999.5938, 8.2343),
    SetActorVirtualWorld(Actor_Jim, 10),
    Create3DTextLabel("{FFFA00}Jim{FFFFFF} ~ Beste Waffen!", -1, 312.1229, -168.2393, 999.5938 +1.2, 30, 10, 1);


    Screenshot wo er eigentlich hätte stehen sollen..