Beiträge von Goldkiller

    Zitat

    Die X und Y Position wird ja auf der Z Achse vom Spieler -10!!!!!


    Wieso denn Z -10 ? Du wolltest doch die Koordinate die unter der aktuellen Z Position des Spielers liegt.Da reicht es doch dass es einfach kleiner als Z-Pos des Spielers ist.

    Zitat

    Ich hoffe ihr versteht was ich meine :D zur not zeichne ich es auf :)


    Kannst es ja trotzdem mal aufzeichnen ;).

    Das wird dann wohl auf's Gleiche hinnaus kommen.
    Ist natürlich ein riesen Thema, schade das noch niemand eine Vektor Library geschrieben hat für PAWN :|.Selber hab Ich nur eine GetDistanceBetweenPointAndLinear() Funktion die auch noch funktioniert x).


    Nein,das wird multipliziert:

    ( Wikipedia )
    Würde sowieso keinen Sinn machen wenn man das Addiert,denn das eine ist ein Ortvektor,das Andere ein Richtungsvektor. Wenn dich das wirklich interessiert schlag es bei Google nach,ist ein rießen Thema.


    Meinst du nicht,
    if(fPktZ <= fZ-1 && fPktZ >= fZ-3)
    könntest du durch
    if( fPktZ < fZ )
    ersetzen? Gibt dir auch den ersten Punkt,der unter der aktuellen Z-Position liegt.

    Das habe Ich ja auch geschrieben:

    Zitat

    Wäre vorteilhafter man würde direkt überprüfen können ob ein Punkt auf einer Geraden liegt,aber das zu scripten ist glaubige Ich nicht so einfach.Mathematisch kein großer Aufwand mit Stift & Zettel, aber das zu scripten ist wieder etwas Anderes ;).


    Hätte Ich dafür eine einfache Umsetzunge gefunden,hätte Ich sie selber schon für diverse Dinge benutzt.Mir fiel dazu auch nie eine einfache Lösung ein,
    hab auch so noch keine direkt gefunden.


    Zitat

    Ich hab mal bei einem Youtube video sowas in der richtung gesehen. Dort wurde die Schussbahn mit ganz vielen pickups hintereinnander dargestellt. Ich kann dieses aber leider nichtmehr finden.


    Da funktioniert es sicherlich,wenn Ich dich richtig verstehe,so wie Ich oben mit dem Code gezeigt habe.Da wird einfach für r was eingesetzt X-mal.


    Jetzt hast es geschafft mich trotzdem so zu verwirren,dass Ich nicht mehr ganz verstehe was du möchtest,besonders mit deinem Edit :p.

    Das ist ja Bestandteil der Vektorrechnung.Ziemlich Umfangreiches Thema,bin auch nicht mehr sehr sicher darin.Dennoch müsstes du so bspw Punkte erhalten die auf der Geraden liegen:
    new
    Float:fPktX,
    Float:fPktY,
    Float:fPktZ,


    Float:fX,
    Float:fY,
    Float:fZ,
    Float:fVecX,
    Float:fVecY,
    Float:fVecZ;
    GetPlayerPos(playerid,fX,fY,fZ);
    GetPlayerCameraFrontVector(playerid,fVecX,fVecY,fVecZ);
    // g-> (fX,fY,fZ) + r * (fVecX,fVecY,fVecZ)
    for(new r = 1 ; r < 10 ; r++) {
    fPktX = ( fX + ( r * fVecX ));
    fPktY = ( fY + ( r * fVecY ));
    fPktZ = ( fZ + ( r * fVecZ ));
    }
    Je nachdem wofür du es brauchst,würdest du so Punkte erhalten die von 1LE bis 10LE vor dem Spieler liegen.
    Wäre vorteilhafter man würde direkt überprüfen können ob ein Punkt auf einer Geraden liegt,aber das zu scripten ist glaubige Ich nicht so einfach.Mathematisch kein großer Aufwand mit Stift & Zettel, aber das zu scripten ist wieder etwas Anderes ;).

    new ID[GetPlayerID(playerid)];
    If(ID == playerid){
    SendClientMessage(playerid,farbe,"Du kannst dir selbst nichts geben");
    }


    //Edit: Boah ich weis nicht warum der das bei mir immer alles in eine Reihe setzt -.-


    GetPlayerID(playerid)
    Jetzt mal ganz im Ernst,wo liegt da die Logik?

    gDrop


    Was ist das?


    Eine von vielen Includes die Ich mir irgendwann mal geschrieben habe für einen Gamemode.Bevor die ganzen Scripte bei mir auf dem PC verstauben,poste Ich jetzt das erste hier.Stirbt ein Spieler,so wird am Todesort Geld sowie die aktuelle Waffe des Spielers als Pickup erstellt.
    < Hier ein Bild >


    Werden die Pickups innerhalb einer bestimmten Zeit ( ~ Standart 120Sek ) aufgehoben, dann werden sie zerstört
    Das Archiv enthält einen kleinen Beispiel Mode wie man den Code richtig einfügt.Hier trotzdem nochmal kurz die Funktionen

    Zitat

    _DropItemInit(); // Unter OnGameModeInit oder OnFilterScriptInit ( Damit die Pickups autom zerstört werden )
    _DropItemClose() // Unter OnGameModeExit oder OnFilterScriptEx ( Zerstört Timer und alle Pickups + 3DText )
    DropMoney(playerid); // Erstellt das Geld Pickup
    DropWeapon(playerid); // Erstellt das Waffen Pickup
    Drop_OnPlayerPickUpPickup(playerid, pickupid); // Wichtig: Unter OnPlayerPickUpPickup einfügen.Sonst funktioniert es nicht


    Mehr gibt es nicht zu sagen.


    Download:
    gDrop.rar
    pastebin


    //Edit: Pastebin x(
    //Edit²: Dateien neu hochgeladen

    Nicht ganz.
    sPos = spawnPosition. Die Koordinaten wo das Fahrzeug spawnt ( AddStaticVehicle / CreateVehicle usw )
    cPos = currentPosition.Aktuelle Position ( GetVehiclePos )


    Seit 0.3a wird bei /SAVE dort gespeichert:

    Zitat

    C:\Dokumente und Einstellungen\NAME\Eigene Dateien\GTA San Andreas User Files\SAMP\savedpositions.txt

    Früher ( vor 0.3a ) hat man es noch mit GetPlayer/VehiclePos gemacht.Jetzt hat man dafür GetVehicleVelocity
    Velocity könntest du dann umrechnen in KMH bzw MPH und von dort berechnen wieviel Sprit verbraucht wurde.


    Zitat

    Wie finde ich also heraus dass der Spieler Gas gibt, und wenn er vom Gas runtergeht sich nichts am Benzin verändert?


    So funktioniert aber kein Auto ;).

    Nein patoo,die funktionieren so nicht mehr.Sehe auch gerade erst,dass dieser Teil im Tutorial #3 fehlt.Bin mir eigentlich sicher,Ich hätte den Teil dazu damals geschrieben :/.



    Auf die schnelle würde Ich sagen,dass es funktionieren würden wenn du die Commands so einfügst:
    public OnPlayerCommandPerformed(playerid, cmdtext[], success) {
    if(!success) {
    if(!strcmp(cmdtext,"/bla")) {

    }
    // usw
    }
    return 0;
    }


    Werde das demnächste noch ins Tutorial einfügen.


    //Edit: Klammer eingefügt.

    WhatTypeNameOfCar(vehicleid,playerid)
    {


    if(vehicleid == CarID[playerid][1][1] || vehicleid == CarID[playerid][2][1] || vehicleid == CarID[playerid][3][1])
    {
    format(ausgabetext, sizeof(ausgabetext), "%s", "Privat");
    return ausgabetext;
    }
    if(vehicleid == CarID[playerid][1][2])
    {
    format(ausgabetext, sizeof(ausgabetext), "%s", "Mieten");
    return ausgabetext;
    }
    if(vehicleid == CarID[playerid][1][3] || vehicleid == CarID[playerid][2][3] || vehicleid == CarID[playerid][3][3])
    {
    format(ausgabetext, sizeof(ausgabetext), "%s", "Arbeiten");
    return ausgabetext;
    }
    if(vehicleid == CarID[playerid][1][4] || vehicleid == CarID[playerid][2][4] || vehicleid == CarID[playerid][3][4])
    {
    format(ausgabetext, sizeof(ausgabetext), "%s", "Flugzeug");
    return ausgabetext;
    }
    ausgabetext = "- Fehler -";
    return ausgabetext;
    //return 1; <- müsste der Fehler sein
    }
    Entweder non-Arrays oder Arrays,beides ist nicht möglich als return Wert.

    Was schon der größte Fehler aus meiner Sicht an dem Script ist,dass du die Pickups alle auf den Spieler beziehst,
    von dem sie gedroppt worden sind.Das ist schon relativ schlecht,denn wenn man sich den Code genau anguckt,
    ist es nicht möglich mehr als 2 ( 1 x Money, 1 x Waffe ) funktionierendes Pickup pro Spieler zu erstellen:
    Wir haben einen Spieler Names Vaillant.Stirbt Vaillaint werden die Pickups um ihn gedroppt bzw
    platziert.Ein weiterer Spieler Namens Hama hat zur Zeit aber keine Lust die Items aufzuheben,sondern tötet
    Vaillaint direkt noch einmal.Erneut werden dann die Pickups erstellt.Jetzt sammelt Hama die Pickups ( Insgesamt 4 )
    ein und merkt, dass er aber nur bei den letzten Zweien etwas erhalten hat.Die "alten" Pickups die durch
    Vaillant erstellt worden sind,als er zum Ersten mal gestorben ist,sind immernoch da.Sie werden auch nie
    zerstört.Sie haben auch keine Wirkung.Da,wie gesagt, die Pickups alle Spielerabhängig sind.


    Kurz gesagt,wird ein Pickup nicht aufgehoben bevor ein neues erstellt wird kommt es zu Fehlern.


    Ich habe so etwas selber mal erstellt für mich,da sind die Pickups "eigenständig".Sie gehören zu keinem
    Spieler, sondern sind eigentständig und es können so unendlich erstellt werden ( werden aber nach XY - Min autom.
    gelöscht ). Bei dir ist das nicht der Fall,irgendwann ist der Speicher für Pickups aufgebraucht wenn man den Fehler
    ausnutzt den Ich oben beschrieben habe.


    Hast auch unnötige Variablen erstellt:
    enum inventar{
    id
    /*
    Float:x,
    Float:y,
    Float:z
    */
    }
    new Float:PPos/*[MAX_PLAYERS]*/[3];


    Anstatt "-1" hätte Ich bei den *Check() Funktionen INVALID_PLAYER_ID genommen.Kommt natürlich auf's
    gleiche,ist aber der Übersicht halber wahrscheinlich die bessere Wahl.


    Wie auch immer,hab den Code hier mal etwas geändert.


    http://pastebin.com/2LFkYkpi

    Wow,hätte nicht gedacht dass du es so umständlich machst.
    Da sind einige Fehler drin ( soweit Ich mich zurück erinnern kann an Heute Nachmittag ). Würde daher gerne den Sourcecode sehen,dann kann Ich nochmal im Code direkt nachschauen ob da wirklich die von mir gedachten Fehler sind.Denn allein am Video ist es schwer nochmal zu sagen ob du hier & da Fehler hast ;).

    Maddin, der Test da beinhaltet nicht ZCMD, sondern DCMD, OCMD und SCMD.
    Wobei OCMD und SCMD nur ZCMD-Kopien sind. Zudem hat ZCMD zwei nützliche Callbacks anstelle von OnPlayerCommandText und man muss nicht auf Gross-/Kleinschreibung achten.


    Ich sehe dort auch kein ZCMD Test.
    Auch hat Double recht,dass OCMD und SCMD sowieso nur Kopien von ZCMD sind.
    Wo wird im Sourcecode denn zwischen Groß/Kleinschreibung unterschieden.


    Hier mein Test ( Download )


    Bleibt beim Original,ZCMD.


    //Edit:
    [iP]Zabus,so ein Bild sagt nicht viel.Wo gibt es das Script dazu ;p


    //Edit:
    Noch zum Thema "Case Sensitive".
    Wie gesagt,im Sourcecode finde Ich nichts was die Groß/Kleinschreibung verändert.Die Funktionen in PAWN sind case sensitive,es funktioniert also nicht
    eine Funktion Namens Alarm aufzurufen über ALaRm.
    ( Download )


    //Edit:
    Links readded.