Beiträge von Simon

    Habe ein Multidimensionalen array:



    Wie bekomme ich nun die Länge von "info3" also die '2' raus.


    Code
    for(new i = 0; i < sizeof array; i++)
    {
        new len = sizeof(array[i][info3]); //oder ähnliches klappt nicht.
    }

    Hallo,


    Ich suche eine Formel oder ein Codeschnipsel um folgendes herauszubekommen:


    Ich befinde mich irgentwo und mir wird irgentwo ein Checkpoint angezeigt. Die Positionen sind mir bekannt.


    Nun möchte ich die Richtung des Spielers (angle) ausrechnen, die der Spieler haben muss, um direkt den Checkpoint anzugucken.


    Ich denke man kann das mit Vektoren lösen, mir fehlt da aber das wissen. Eine Formel würde jedoch reichen.


    Ich hoffe ihr habt da was für mich :)


    Ich ja e das Problem bei meinen Dropweaponsystem das ich ca 1000x die Message bekomme und auch ca 1000x die waffe


    Code
    Unter OnPlayerPickupPickup
    for(New i = 0; i < sizeof(drop); i++)
    {
     If(pickupid != drop[i][wd_ID]) continue;
     If(drop[i][wd_ID] == -1) Continue; 
     Hier wird die Waffe gegeben 
    }

    Ist ziemlich logisch. Das Pickup ist da und jedesmal wenn du da reingehst bekommst du halt die Waffe und die Nachricht. Oder wird sie beim reingehen ca 1000 mal gespamt?


    Du solltest das ein wenig einstellen, so dass man halt nur die Waffe bekommt, sollte man diese nicht haben oder nur geringfügig Munition haben.
    Dazu kannst du auch eine Zeit einstellen, wann er das Pickup aufheben darf und diese abfragen bevor er die Waffe bekommt

    Ja das geht durch Abfrage der Tasten wäre es am einfachsten.

    Nein, ich möchte wissen ob er sich vorwärts oder rückwärts bewegt. Wenn ich bei einer hohen Geschwindigkeit die Tasten loslasse, fahre ich trotzdem weiter. Auch dann muss man es noch abfragen können

    Hat jemand ein Codeschnipsel, mit dem man Abfragen kann, ob ein Spieler vorwärts oder rückwärts fährt,


    Theoretisch müsse es ja gehen, wenn man die Richtung nimmt, in die der Spieler schaut und die Richtung in die der Spieler fährt, Und wenn diese nicht gleich ist, fährt er rückwärts.


    Ich habe nur keine Ahnung ob es genauso Umsetzbar ist und wie da die genaue Rechnung ist. Mir würde da auch eine aussagekräftig Formel reichen.



    Ich hoffe ihr könnt mir Helfen :)

    Ich muss das mal ausprobieren. Ich wollte ja eigentlich nur ein bereits vorhandenes enum erweitern und die Werte im Array ergänzen.
    Da das aber ja nicht ging, habe ich versucht ein eigenständiges Array mit enum zu machen, jedoch auch da stürzte der ab.
    Danach habe ich erstmal versucht allgemein ein enum mit irgentwelchen Namen zu erstellen die auf gar kein fall schon existieren und trotzdem stürzt er ab.


    Ich teste es mal in einem leeren gamemode


    //Update: in einem Blanken Gamemode klappt es wunderbar (siehe Bild im Anhang)


    //Update: Auch wenn ich das vorhandene erweitere, klappt es in einem blanken Gamemode

    Hallo,


    Ich wollte die neue Actor-Möglichkeit mit 0.3.7 nutzen. Habe schon einige eingefügt und es funktioniert wunderbar.


    Ich speichere dabei die ID des Actors, den Skin und seine Position in einem Array.


    Nun wollte ich meinen Ammunations auch jeweils einen Actor geben. Sobald ich nun mein enum erweitern möchte (actorid, actorSkin, acterposition), stürzt der compiler ab.


    Die Werte in meinem Array sind dabei völlig egal.



    Ich habe auch versucht ein komplett neues enum mit einem neuen Array anzulegen, nur für die Actors. Dabei passiert folgendes:


    Gebe ich dem enum keinen namen, funktioniert der compiler wunderbar. gebe ich ihm einen namen, stürzt er wieder ab, Das Array exisitiert zu diesem Zeitpunkt noch gar nicht.



    Bin bisschen überrascht, normalerweise kenne ich das Problem bei heftigen Fehlern, jedoch ist kein auf anhieb sichtbarer Fehler zu erkennen.



    Ich bin dann angefangen, mein enum und das Array nach und nach zu erweitern. So habe ich erst nur die actorid im enum hinzugefügt und im Array den Wert ergänzt. Noch funktioniert der Compiler. Erweitere ich mein Enum nun noch einmal um eine Information, ganz egal welche, stürzt der Compiler wieder ab, als existieren Grenzen, die ich überschreite.



    Eventuell hat mal jemand einen Tipp oder eine Idee.

    Ohne das Semikolon:

    C
    format(str,sizeof(str),"[AdmMsg]: Der Admin %s hat sich nach %s teleportiert",aname,mysql_GetString("Teleport","Ort","TeleportID",val));

    Ups, ja hat sich beim kopieren mit eingeschlichen.



    Wenn du den Ort jedoch in einer extra Variablen speichern möchtest, muss du diese als String deklarieren und dann mit format füllen.

    In dem Timer soll einfach nur geschaut werden, wer so gerade im Auto sitzt und fährt und dann soll das Tacho angepasst werden. Das heißt spieler die gar nicht fahren werden direkt übersprungen, bei den spielern die fahren, werden daten des Autos berechnet die für das Tacho relevant sind und in form eines TextDraws angezeigt.

    Es gibt kein public OnVehicleTakeDamage oder sowas. Um das herrauszufinden, musst du einen timer mit einem sehr kleinen Intervall machen.


    Du vergleichst dann immer die Health vom Auto mit der davor:


    new Float:vHealth[MAX_VEHICLES];
    new vTimer[MAX_PLAYERS];
    forward AutoCrashCheck(playerid);


    GetVehicleHealth(vehicleid, vHealth[vehicleid]);
    vTimer[playerid] = SetTimerEx("AutoCrashCheck",300,1,"d",playerid);


    public AutoCrashCheck(playerid)
    {
    if(!IsPlayerInAnyVehicle(playerid)) return KillTimer(vTimer[playerid]);
    if(GetPlayerState != PLAYER_STATE_DRIVER) return 0;
    new v = GetPlayerVehicleID(playerid);
    new Float:vH;
    GetVehicleHealth(v,vH);
    if(vHealth[v]-200 >= vH) //falls er einen mindestschaden von 200 bekommen hat, kannst das ja anpassen
    {
    //Hat Crash gebaut
    }
    return 1;
    }

    Was ist sinnvoller?


    Ein globaler timer (333ms repeat) der alle spieler durchläuft und und Abfragen durchführt um ggf. etwas zu machen
    Ein Spielerbezogenen Timer(333ms repeat der für den jeweiligen Spieler abfragen durchführt um ggf. etwas zu machen


    Beim globalentimer wäre es nur ein Timer der läuft und auch nur ein public welches aufgerufen wird, indem dann aber mehr gemacht wird.
    Beim Spielerbezogenen wären es mehrere Timer (je nach spieleranzahl unterschiedlich) und dann jedesmal ein public aufruft, indem dann aber dementsprechend weniger gemacht wird, weil er nicht alle anderen Spieler durchlaufen muss.


    Hört sich ausgeglichen an, aber was genau ist sinnvoller

    Wenn ich eine Array einen Wert zuweisen möchte, der für jeden Index im Array gleich ist, mache ich das so:


    new var[Index] = {Wert, ...};


    Wenn ich nun aber ein multidimensionalen Array habe, wie muss ich das dann machen? oder geht das nicht?


    new var[index][J] = ??


    Normalerweise würde ich das ja so machen:


    new var[index][J] = {
    {Wert, Wert, Wert, ...},
    {Wert, Wert, Wert, ...},
    ...
    };
    Gibt es dafür eine kürzere schreibweise wie bei einem normalen Array?

    Natürlich :D


    Einmal die Timer und wie die Textdraws dann verwendet werden


    Beim Tacho war ich mir nie sicher, wie ich den Timer steuern soll.
    ob jeder Spieler einen spielerbezogenen Timer bekommt, oder ob es einen allgemeinen Timer.


    Habe nun einen allgemeinen Timer gemacht, alle 1/3 Sekunden werden alle Autos durchlaufen (dabei werden nicht erstellte oder ohne Motor übersprungen)
    dann wird geschaut ob der Motor von dem Auto an ist und ob ein Spieler drinne sitzt. Wenn das der Fall ist, wird das Tacho für den Spieler mit den Daten des Autos aktualisiert. Wäre eventuell nochmal zu überdenken.