Beiträge von [BSRP]MomoGrimm

    Guten Tag,


    leider habe ich zurzeit ein Problem mit meinem Mining-System.
    Zurzeit glaube ich, dass das Problem in einer dieser beiden Funktionen liegt, jedoch finde ich keinen Fehler. Kann mir wer helfen?
    GetClosestErz(Float:x, Float:y, Float:z)
    {
    new Float:closestdistance;
    new closestore = 5000; //Falls gar kein Erz existiert, wird 5000 zurückgegeben.
    new Float:distance;
    new Float:erzx, Float:erzy, Float:erzz;
    for(new i; i < MAX_ERZE; i++)
    {
    if(!IsValidObject(Erze[i])) continue;
    GetObjectPos(Erze[i], erzx, erzy, erzz);
    distance = GetDistance(x, y, z, erzx, erzy, erzz);
    if(distance > closestdistance) { closestdistance = distance; closestore = i; }
    }
    return closestore;
    }


    stock Float:GetDistance(Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2) //Aus der uf.inc
    {
    return floatadd(floatadd(floatsqroot(floatpower(floatsub(x1,x2),2)),floatsqroot(floatpower(floatsub(y1,y2),2))),floatsqroot(floatpower(floatsub(z1,z2),2)));
    }


    Mfg:
    MomoGrimm

    Mach es mit einem Array. 1.: Ganz oben im Script erstellen:
    #define MAX_STATUEN 500 //Kannst du beliebig ändern. Höhere Zahlen können jedoch in der Schleife zu hohem Leistungsverlust führen
    new StatuenObj[MAX_STATUEN];
    new StatuenPick[MAX_STATUEN];
    Dann machst du eine Schleife:
    for(new i; i < MAX_STATUEN; i++)
    {
    if(!IsValidObject(StatuenObj[i])
    {
    StatuenObj[i] = CreateObject(...);
    StatuenPick[i] = CreatePickup(...);
    return 1;
    }
    }


    Beim Aufheben auch eine Schleife:
    for(new i; i < MAX_STATUEN; i++)
    {
    if(pickupid == StatuenObj[i])
    {
    //Statue aufheben lassen
    DestroyObject(StatuenObj[i]);
    DestroyPickup(StatuenPick[i]);
    return 1;
    }
    }


    Ich hoffe dass es so richtig ist und einigermaßen funktionieren wird.


    Mfg:
    MomoGrimm

    Schick mal das Enum, was du in sInfo[playerid][spawnchange] nutzt. Also wo level, spawnchange usw. drinne ist.


    Ich kenne mich mit MySql nicht aus, aber probiere mal bei ausgeschaltetem Server spawnchange mit den Wert 1 zu erstellen und dann zu joinen. Guck mal ob es dann geht oder spawnchange aus der Datenbank wieder verschwindet.

    Hast du sowas wie logged[playerid]?
    Wenn ja dann könntest du eine Funktion machen, diese ShowTextdraws oder so heißt. Dann überprüfst du einfach immer bei OnPlayerSpawn ob er logged[playerid] ist, und wenn ja, kannst du ShowTextdraws(playerid); ausführen. Und bei Ganggebietstextdraws musst du halt immer in der Abfrage, ob er in der Nähe eines Gebietes ist, auch "if(logged[playerid])" einfügen.


    Hoffe ich konnte helfen und es ist richtig,
    Mfg:
    MomoGrimm

    Das ist zwar unwarscheinlich, aber warscheinlich geht /spawnchange nicht.
    Probier mal:
    ocmd:spawnchange(playerid, params[])
    {
    if(isPlayerInFrakt(playerid, 0))return SendClientMessage(playerid,COLOR_WHITE,"Du bist in keiner Fraktion.");
    if(sInfo[playerid][spawnchange]==0)
    {
    sInfo[playerid][spawnchange]=1;
    print("Spawnchange auf 1");
    }
    if(sInfo[playerid][spawnchange]==1)
    {
    sInfo[playerid][spawnchange]=0;
    print("Spawnchange auf 0");
    }
    SendClientMessage(playerid,COLOR_RED,"ACHTUNG: Du hast dein Spawn geändert du Spawnst ab jetzt an deiner Fraktion Basis.");
    print("/spawnchange");
    return 1;
    }
    Und sag dann hinterher was da in der Konsole steht.


    Schick auch mal bitte wo du überall sInfo[playerid][spawnchange] nutzt. Also Spielerdatei laden, Spielerdatei speichern usw.

    1. Sicher dass du in der Fraktion 1 - LSPD bist?


    2. Was steht aktuell in der Datenbank bei spawnchange? Wenn 0, setze es auf 1 und guck dann ob du in deiner Sitzung richtig spawnst und ob nach der Sitzung bei spawnchange noch 1 steht.


    3. Such mal nach " [spawnchange] " und guck ob du es irgendwo falsch/ungewollt setzt oder ausliest.

    Ändere /fcarsell mal folgend um:
    if(strcmp(cmdtext,"/fcarsell",true)==0){
    printf("Vorher %i", FactionCars[fc][fPrice]);
    printf("Vorherdividiert %i", FactionCars[fc][fPrice] / 2);
    if(GetPlayerLeader(playerid)){
    if(IsAllowedFactionToBuy(GetPlayerFaction(playerid))){
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
    new Carid1 = GetPlayerVehicleID(playerid);
    for(new fc;fc<sizeof(FactionCars);fc++){
    if(FactionCars[fc][fVehid] >= 400 && FactionCars[fc][fVehid] <= 611){
    if(Carid1 == FactionCars[fc][fCarid]){
    if(FactionCars[fc][fFaction][0] == GetPlayerLeader(playerid)){
    FactionCars[fc][fVehid] = -255;
    if(DestroyVehicle(FactionCars[fc][fCarid]))
    FactionCars[fc][fCarid] = -255;
    new fText[178];
    format(fText,sizeof(fText),"Du hast das Fraktionsfahrzeug erfolgreich für $%d(50%% vom Kaufpreis) verkauft.",(FactionCars[fc][fPrice]/2));
    SendClientMessage(playerid,FACTION_COL_YELLOW,fText);
    GivePlayerMoney(playerid,(FactionCars[fc][fPrice]/2));
    printf("Nachher %i", FactionCars[fc][fPrice]);
    printf("Nachherdividiert %i", FactionCars[fc][fPrice] / 2);
    }
    else SendClientMessage(playerid,FACTION_COL_GREY,"Du bist nicht der besitzer dieses Fahrzeuges.");
    return true;
    }
    }
    }SendClientMessage(playerid,FACTION_COL_GREY,"Du sitzt in keinem Fraktionsfahrzeug.");
    }else SendClientMessage(playerid,FACTION_COL_GREY,"Du musst der Fahrer eines Fahrzeuges sein.");
    }else SendClientMessage(playerid,FACTION_COL_GREY,"Deine Fraktion ist dazu nicht berechtigt.");
    }else SendClientMessage(playerid,FACTION_COL_GREY,"Du bist nicht berechtigt diesen Befehl anzuwenden.");
    return true;
    }


    Daran kannst du eventuell erkennen, ob im Verlauf des Befehles FactionCars[fc][fPrice] beeinflusst wird oder ob es von Anfang an 0 ist. Außerdem kannst du dann sehen, dass wenn das erste bei Nachher funktioniert und das zweite nicht, dass es an der Division von FactionCars[fc][fPrice] liegt.

    Du kannst oben im Script eine Variable mit einem Array erstellen z.B:
    Fahrschulwagen[20];
    Du hast nun 20 Variablen. Diese sind Fahrschulwagen[0] - Fahrschulwagen[19]. Fahrschulwagen[20] gibt es nicht, dafür aber Fahrschulwagen[0].


    Dann kannst du 20 Fahrzeuge erstellen (z.B. in OnGameModeInit);

    Fahrschulwagen[0] = CreateVehicle...
    Fahrschulwagen[1] = CreateVehicle...
    [...]
    Fahrschulwagen[19] = CreateVehicle...


    Hinterher kannst du folgendes machen:
    for(new i; i < 19; i++) //for-Schleife, wobei i nacheinander die Nummern 0 - 19 abarbeitet.
    {
    if(IsPlayerInVehicle(playerid, Fahrschulwagen[i])
    {
    //Hier kommt das hin, wenn er in einen der Fahrschulwagen ist.
    }
    }


    Hoffe, dass es einigermaßen richtig ist.
    Mfg:
    MomoGrimm

    Speicherst du das richtig ab? Wenn ja, wie?


    PS: Wenn du das Script nutzen willst, achte am Besten auf Grammatik- und Rechtschreibfehler. Fraktion Basis klingt nicht schön, und schlechte Schreibweise schreckt einige Spieler ab.