Beiträge von Alf21

    @Pinguin:
    Kommt drauf an was du für ein Plugin benutzt, aber denke nicht, da -1 ein falscher Wert ist, dachte ich auch aber hier ist ein Beispiel:


    http://forum.sa-mp.com/showthread.php?t=343540


    Is der Streamer von Icognito, der is soweit ich weiss am meisten verbreitet.
    Einfach alle Variablen ersetzen und es dürfte kein Fehler auftauchen, so solltest du es auch mit allen Callbacks machen. Und du kannst es ja ma ausprobieren Variablen wegzulassen, vllt habe ich was von PAWN nicht mitbekommen, dass man Variablen doch in der Syntax des Callbacks definieren kann, kannat ja dann schreiben ob es auch ohne DrawDistance und ohne StreamDistance klappt

    @Pinguin: Du musst die Variablen auch ersetzen und Callback hat niemals als Syntax "1,)", das Komma ist auch falsch, wenn müsste dahinter etwas folgen
    mach es zB so:


    CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_OBJECT_SD, Float:drawdistance = STREAMER_OBJECT_DD);


    ->


    CreateDynamicObject(1557, 2000.0, -1180.0, -891.0, 90.0, 0.0, 0.0, 0, 0, 0, 200, 150);


    also muss man jeden Wert in diesem Callback ersetzen außer die letzten beiden, da diese Standartwerte haben (glaube ich, habe nicht viel mit PAWN am Hut).

    //edit Auf alten Beitrag geantwortet, immer diese Seitenzahl die sich nicht aktualisiert '^^



    @CaZe

    format(query,sizeof(query),"%s,Tode='%i",query,SpielerInfo[playerid][pTode]);
    Zu
    format(query,sizeof(query),"%s,Tode='%i'",query,SpielerInfo[playerid][pTode]);


    Auch hier ist noch einmal der Fehler:


    format(query,sizeof(query),"%s,ALevel='%i",query,SpielerInfo[playerid][pALevel]);
    Zu
    format(query,sizeof(query),"%s,ALevel='%i'",query,SpielerInfo[playerid][pALevel]);

    Deine Textdraws gefallen mir sehr gut, also dass du mal was neues ausprobierst :)
    Ich finde die Farbauswahl zwar nicht so schön bzw. bei dem 'Waiting for players...' ist das Popup zum Hintergrund mit der Farbwahl nicht so gut ausgesucht aber da du ja auf Star Wars Like gehst und die DUNKLE Macht halt die Farbe Schwarz hat, ist das verständlich.


    Ich finds gut! ;)

    Ja genau das aus dem Filterscript suche ich, wie man die Objekte einfach richtig ausgerichtet an ein anderes Objekt zu attachen, damit man so "ein Haus" zu moven, also in ein Objekt, was alle anderen Objekte an sich attached hat, sodass es so aussieht, als würde man das ganze Haus verschieben ^^ Danke, mal gucken obs klappt :))

    Ich attache sie aneinander, um den GUI der EditObject Funktion zu nutzen, um die Objekte beliebig zu verschieben und dann, wenn man speichert die Position zu speichern. Das ist also zum Verschieben gedacht (http://wiki.sa-mp.com/wiki/EditObject)


    (Davor habe ich die Objekte zum Objekt hinzuberechnet, aber so ists einfacher mit der Rotation und bessere Performance, da nicht immer noch extra was berechnet wird, sondern nur über den GUI)

    IPrototypeI : Danke, mal gucken was ich brauche :),
    Gerade da es ein Hausbausystem ist, muss ich es so machen :p
    Damit ich es nutzen kann, zB zum platzieren des Hauses? :D Es soll ja dynamisch sein, bis jetzt kann jeder Spieler ein Haus erstellen, das wird auch gebaut und ist immer da, man kann auch ein kaufbar machen, nur das Problem ist, dass ich die Rotationsberechnung brauche, nicht die Koordinaten der Location :/ Die habe ich, indem ich von jeder Achse (x,y,z) den Mittelpunkt ausrechne, den Unterschied von jedem Objekt berechne (einfache Subtraktion) und dann den Unterschied zu dem Objekt hinzufüge :o

    Danke schonmal 123marvin123 und IPrototypeI :)
    Aber wie soll ich das anlegen? Ich lade die Objekte dynamisch, das ist ein Haussystem. Das heißt ich habe Dateien, in denen Objekte angegeben sind, die ich dynamisch lade und so initialisiere, dann habe ich ja die Daten in einem Array. Platzieren, speichern und laden geht ja, nun will ich aber die Rotation noch angeben... Damit es benutzerfreundlich ist, habe ich den GUI von editObject genommen, nun muss ich aber halt die Rotationsänderung iwie angeben, wenn ich die Objekte so an einen anderen Ort platziere, muss ich das nicht. Das wundert mich nämlich und da es dynamisch ist: wie kann ich das dynamisch machen und wie berechne ich das ? :/

    So sollte es eigentlich aussehen:




    Wenn ich nun jedes Objekt zu einem anderen Objekt attache ( mit der gleichen Rotation ), dann gibts diesen Fehler:


    Ich denke, das passiert, da man bei AttachObject den Unterschied zwischen den Rotationen angeben muss, also zwischen Objekt 1 und Objekt 2.
    Doch ich habe dem Mittelobjekt (hier Objekt 2) die Rotation (0, 0, 0) gegeben, dann dürfte dort kein Unterschied sein, warum wird es dennoch falsch dargestellt?


    Code
    SampObject object = SampObject.create(1253, new Location(player.getLocation().getX() + 10.0f, player.getLocation().getY(), player.getLocation().getZ() + 0.85f), new Vector3D(0, 0, 0));		houseData.getObjects().forEach((houseDataObject) -> {			float x1 = houseDataObject.getLocation().getX()-normalX;			float y1 = houseDataObject.getLocation().getY()-normalY;			float z1 = houseDataObject.getLocation().getZ()-normalZ;			float rX1 = houseDataObject.getRotation().getX();			float rY1 = houseDataObject.getRotation().getY(); 			float rZ1 = houseDataObject.getRotation().getZ();			houseDataObject.attach(object, x1, y1, z1, rX1, rY1, rZ1, true); //TRUE für ObjektRotation (hier steht es für 1)		});


    MfG Alf21 und Danke :)

    Halt Fragen, die du aus keinem Forum oder Bericht entnehmen kannst, zB Erfahrungen der Einzelnen oder sich Tipps an Land ziehen, zB zu den Aufstiegschancen, wie / womit man vielleicht am besten anfängt und wie man am schnellsten zu seinem Ziel kommt (soweit ich weiß gibt es gehobenen Dienst usw...). Das heißt man sollte schon richtig anfangen damit man auch das Zeil erreichen kann, bei den Sachen würde ich mich beraten lassen.


    Sonst so was man noch können sollte, was vielleicht so in Bremen los ist, was da die meisten Vorfälle sind usw. Halt auf die Erfahrungen in der Region bezogen (was dich ggf. erwartet) ;)


    MfG

    Jeffry: Ja, damit muss man rechnen, wenn man mit solchen Sachen arbeitet, er hat ja nur gefragt, wie man es machen kann :p
    Man könnte ja einen maximal Betrag machen und checken ob der Spieler im Auto ist und maximales Geld eintragen, das man verdienen kann und dem Admin ne Nachricht senden, der es erlauben muss, dass der Spieler das Geld bekommt usw. aber frisst alles Performance und so, am besten wäre wirklich ein eigenes System ^^


    //edit
    Außerdem kann man auch mit einem AntiCheat der Sache vorbeugen, halt immer checken, ob sie die x/y/z Koordinaten schnell verändern -> Hohe Geschwindigkeit und dann halt kein Geld geben wegen Cheat oder so, falls die Geschwindigkeit halt unmöglich ist, normal zu erreichen.

    Code
    if(PI[playerid][job] == 16)
    {
       //Geld in eine globale Variable geben, die vom Spieler abhängig ist, wie in einem Enum für einen Spieler 
        EnableStuntBonusForPlayer(playerid, 1);
       //Dann onPlayerUpdate, falls sich das Geld (der Wert der Variable) ändert (ein Unterschied zwischen dem Geld das man hat und dem Geld in dem Enum besteht) und isStuntBonusEnabled -> Den Geldunterschied bekommen und das Geld wieder abziehen und über den Server bearbeiten 
    }


    Musst aber aufpassen, sobald der StuntBonus aktiviert ist und du dem Spieler iwie anders Geld gibst, berechnet er es als Standbonus, also mache sowas wie ein PlayerState und setze ihn/frage ihn ab, um Konflikten aus den Weg zu gehen


    MfG Alf21


    //edit bisschen besseres Deutsch ;D

    @xCurry & filezilla: Genau, gut erkannt :D
    N0SKILL: hier nocheinmal aus den Beitrag oben:


    [table=3]
    [*]Munitionsart[*]Schaden[*]Preis
    [*]Normal[*]50%*[*]100%*
    [*]Brand[*]1 (+Zeitschaden (2))[*]10%*
    [*]Explosiv[*]10%* (+Flächenschaden / Explosionsschaden**)[*]250%*
    [*]Panzerbrechend[*]65%* (+ignoriert den Armour des Gegners)[*]120%*
    [*]Spezial[*]120%*[*]350%*
    [/table]


    * des normalen Schadens / Preises
    ** Entfernung von: 1 - 10, 2 - 5, 3 - 2, >4 - 0


    Die Normale Munition hat halt nichts Spezielles, macht aber generell nur 50% des normalen Schadens, also wenn sie normalerweise 36Schaden macht, macht sie mit dem System nur 18 Schaden ;)


    Brandmunition gibt den Gegner über 7sek jede Sekunde 2Schaden.
    Explosivmunition, denke das ist klar ^^
    Panzerbrechende durchdringt den Panzer / den Armour des Gegners und ignoriert so die Rüstung.
    Spezialmunition macht 120% Schaden. Diese habe ich eingefügt, falls jmd bzw ich noch ein Eventsystem einbaue, wo die Munition ganz andere Sachen bewirken kann, halt als Füllmittel. Und damit man es auch nutzen kann, habe ich der Munition 120% Schaden gegeben.
    -----------------------------


    Nemesus: Danke ! :)
    Würdet ihr es denn überhaupt benutzen, da es auf Shoebill ist?


    MfG Alf21


    weapon-system v4.0


    Was ist das besondere an diesem Waffensystem?


    Dieses Waffensystem ist sehr speziell, da man bei jeder Pistole 5 Munitionsarten zur Auswahl hat.
    Munitionsarten:


    Munitionsnamen

    • Normale Munition
    • Brandmunitionent
    • Explosivmunition
    • panzerbrechende Munition
    • Spezialmunition

    Kleines Intro:


    Man kann die Munition in jeder Pistole mit der Taste [N] (kurz gedrückt) wechseln.
    Sobald man die Taste [N] ungefähr 1sek gedrückt hält, gelangt man in das Waffeninventar bzw. den integrierten Waffenshop.
    Dort kann man alle Waffen auswählen bzw. kaufen und auch die Munition nachladen / kaufen.
    Die gekauften Waffen muss man nicht mehr bezahlen, nur noch die Munition.
    Zudem gibt es Animationen beim Nachladen oder wechseln der Waffen, sodass man eine kleine Nachladedauer hat und nicht iwie SAMP Bugs ausnutzen kann.


    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    https://youtu.be/v36qQqOUJIE
    by BloodAngelHD



    Andere Infos:
    Speicherart: MySQL (wird selbst erstellt)
    Programmiersprache: Java (Shoebill)
    Art des Systems: Plugin für das Shoebill Plugin
    -> Warum Shoebill / Java?

    • Shoebill bzw. Java hat bessere Performance, da es Daten schneller verarbeitet als Pawn. Das war mir sehr wichtig, da nach / bei jedem Schuss etwas berechnet wird!
    • Java ist "kommende" Programmiersprache, zB Android Applikationen (Apps) sind auf Java geschrieben.
    • Java bietet für mich mehr Möglichkeiten und besseren Support
    • Und ich kann meine Lieblings-IDE / meinen Lieblings-Editor Eclipse nutzen, schöne Autovervollständigung ^^

    Der Schaden der Explosionen, die durch Waffen mit Explosivmunition ausgelöst wurden, wurde auch angepasst.
    Zudem ist der Schaden / Preis jeder Munitionsart unterschiedlich

    Effekt
    kein Effekt
    zündet den Gegner und lässt ihn für 7sek brennen
    explodiert beim Aufprall und schadet dem Gegner beim Treffer
    ignoriert die Rüstung / den Armour des Gegners
    mehr Schaden

    Munitionsart Schaden Preis
    Normal 50%* 100%*
    Brand 1 [+ Zeitschaden (+2)] 10%*
    Explosiv 10%* (+ Flächenschaden / Explosionsschaden**) 250%*
    Panzerbrechend 65%* (+ ignoriert den Armour des Gegners) 120%*
    Spezial 120%* 350%*

    Schaden und Preise
    * des normalen Schadens / Preises
    ** Entfernung von: 1 - 10, 2 - 5, 3 - 2, >4 - 0

    GitHub: https://github.com/Alf21/weapon-system.git
    Ein Dank an @123marvin123 (für die Hilfe, einen bösen Fehler zu finden, für bessere Struktur und Performance und für die Bereitsstellung der repo) und an BloodAngelHD (für das Video)! :thumbup:


    Installation:
    Entweder von GitHub selbst downloaden und mit Maven builden oder folgendes in eure pom.xml einfügen (in den dependencies):

    Code
    <dependency> 
        <groupId>me.alf21</groupId>
        <artifactId>weapon-system</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>jar</type>           
        <scope>compile</scope>
    </dependency>


    oder selbst hier downloaden


    danach das Plugin in den Ordner shoebill/plugins im Serverordner verschieben und in der Datei shoebill/resources.yml unter "plugins:"

    Code
    - me.alf21:weapon-system:1.0-SNAPSHOT


    einfügen


    Was ihr also braucht: Shoebill ([0.3.7] Project Shoebill 1.1 - Schreibe Gamemodes in Java) + MySQL Datenbank -> localhost oder einen vServer / Root für Shoebill


    Achtung!:
    Keine Neuveröffentlichungen oder ändern der Credits.
    Ausnahme: Falls jemand den Code braucht um das als Filterscript / Include zu schreiben (Verweis auf diesen Beitrag)


    Callbacks:

    Code
    //Um Waffen zu gebengivePlayerWeapon(player, weaponId, ammo) //Um eine Waffe komplett neu zu ladengivePlayerNewWeapon(player, weaponId, ammo) //Um eine Waffe mit den alten Munitionsdaten usw. zu laden//Um Muni zu bekommen:getWeaponAmmo(player, weaponId)getFireWeaponAmmo(player, weaponId)getExplosiveWeaponAmmo(player, weaponId)getHeavyWeaponAmmo(player, weaponId)getSpecialWeaponAmmo(player, weaponId)//Um Muni zu setzensetWeaponAmmo(player, weaponId, ammo)setFireWeaponAmmo(player, weaponId, ammo)setExplosiveWeaponAmmo(player, weaponId, ammo)setHeavyWeaponAmmo(player, weaponId, ammo)setSpecialWeaponAmmo(player, weaponId, ammo)//Um die geladene Munitionsart zu bekommen:getAmmoState(player, weaponId)//Um die geladene Munitionsart zu setzen (Achtung, sicher sein, dass man auch die jeweilige Munition besitzt)setAmmoState(player, weaponId, ammoState)//Um zu checken, ob eine Waffe ausgewählt ist / getragen wirdisSelectedWeapon(player, weaponId)//Um Waffe ausgewählt / getragen zu setzensetSelectedWeapon(player, weaponId, bool)//Um zu checken, ob eine Waffe verfügbar / gekauft wurdeisAbleWeapon(player, weaponId)//Um Waffe gekauft / verfügbar zu setzensetAbleWeapon(player, weaponId, bool)//Um alle Waffen eines Slots als nicht selected bzw nicht getragen / ausgewählt zu markierenunselectWeapons(player, slot)


    Es tut mir leid, falls welche meckern, dass es kein professioneller Code ist. Es ist mein erstes Plugin in Java und ich "lerne" noch nicht so lange Java, aber ich hatte eine Idee und wollte diese verwirklichen.
    Updates werden kommen.
    Tipps oder Verbesserungen sind immer erwünscht.


    existierende Bugs

    Es gibt noch einige Bugs, die werden aber alle behoben:

    • existierende Bugs

      die Berechnung des Schadens bei einer Explosion ist nur auf die x-Koordinaten belegt -> man schießt in die Höhe und bekommt Schaden, egal welche Distanz (es muss ein Aufprall geben, zB an einem Objekt, sonst gibts keine Explosion ^^)

    • existierende Bugs

      manchmal wird die Animation nicht komplett gecleared


    Vorhaben / Kommende Updates
    - bessere Performance- neues Video -> Weaponshop + Schadensdemonstration- Anticheat- mehr Animationen- kleines Fixes, falls es noch Bugs gibt, bitte reporten !- vllt. als Filterscript für Pawn- Spezialmunition mit bestimmten Effekt- Eventsystem- andere Ideen- Updater

    MfG Alf21
    Edits
    //Link zum Shoebill Plugin eingefügt//Text//Text//Installation//Text//kommende Updates//Formatierung//Tabelle//Expander//Text hinzugefügt

    Generelle Frage: Ich arbeite an nem Waffensystem, habe Animationen beim Waffenwechseln als Ausweg reingepackt, aber hatte eigentlich was anderes vor: Ich habe bei Mauzen gesehen, dass er es ohne Texdraws geschafft hat, die geladene Munitio / Ammo auf einen bestimmten Wert zu setzen... Wie kann ich das realisieren? Es gibt keine Funktion / Möglichkeit nach meinem Wissen, die geladene Munition / Ammo zu setzen ??
    Damit meine ich nicht die gesamte Munition, sondern halt wie gesagt, die geladene, bei der es, wenn diese alle ist, automatisch eine Nachladeanimation gibt -> zB: 200 / 30 -> 30 geladene Muni von 230 (200 vorrätige Muni).


    Hoffe ich konnte mich richtig ausdrücken ;) (Brauche das, um die alte Muni wieder zu setzen, sobald ich auf die alte Waffe wechsle).


    MfG Alf21

    Achso, naja habe halt nur den einen Text gelesen in der Präsentation, worauf man verzichten muss, sorry, bin an meinem kleinem Handy mit schlechtem Internet und da will ich mir nicht den Quellcode antun ^^ Dann danke für die Info/Ergänzung @BlackAce :p