Beiträge von Alf21

    Ich dachte mir, dass es mal nützlich wäre, wenigstens ein Thema mit nützlichen Snippets für Shoebill zu haben, also einfach eure Snippets immer dazu posten.


    Erstelle einen TextDraw nach GameText Style mit Timerfunktion (Animation):

    Externer Inhalt www.youtube.com
    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://www.youtube.com/watch?v=d_KfqeKoirM
    (Credits: Video von Fynn630)

    Das habe ich gestern erstellt, um mich mal mit Textdraws auseinanderzusetzen und alles ein wenig 'hübscher' (soweit es von SAMP aus möglich ist^^) zu machen, mit Transitions und Timer. Diese TextdrawObjekte kann man reaktivieren, stoppen, zurücksetzen, im Hintergrund weiterlaufen lassen, statisch, mit Transitions oder einfach nur mit Animation laufen lassen und von der Dauer der Effekte verändern.


    Nutzung:
    Z.B. im PlayerLifeCycleObject registieren


    und dann z.B. in einer Command Object diese Commands registrieren:

    //edit


    Converter (SAMP Map = Shoebill Map):
    Hier noch ein Converter, der SAMP Maps in ShoebillMaps ändert. Um diese Objekte dann alle zu nutzen, müsst ihr den Output in eine Methode wie zB
    public ArrayList<DynamicSampObject> getObjects() packen

    Kenner der halbwegs bei Verstand ist wird dich bei so einem unprofessionellen Auftreten auf Whatsapp anschreibenund so seine Nummer preisgeben.

    Wo @Slayer recht hat, hatter recht ^^
    Es gibt noch sowas wie Privatsphäre, da gibt man nicht jedem seine persönliche Handynummer. Dazu noch einer Person, die sich nicht ma vorstellen kann und ein Projekt leiten bzw mitarbeiten möchte, welche sich nicht einmal die Zeit nimmt, eine Vorstellung zu machen. Was dann erst aus dem Projekt wird...
    Also gutgemeiter Rat an dich, mach ne Vorstellung zu deinem Projekt, was du bietest, wünscht, deine Ideen und wie du sie umsetzen willst.

    Hmm also kann sein, dass ich zu doof war :D Aber bisher habe ich noch nichts geschafft einen Musikbot zu installieren, jedenfalls nicht den Sinusbot, da ich immer eine GraKa, also grafische Oberfläche brauchte, und das hat ja ein vServer (Linux) nicht... (Da gabs immer Fehlermeldungen, wegen dem Fehlen der GraKa)
    Also belese dich dazu nochmal und ich tue es auch ^^ Achso und von dort habe ich auch meine Server, kann ich nur empfehlen, auch super Support und TS. Wegen der Leistung kann ich dir leider nicht helfen, kann das nicht einschätzen aber eig dürfte ein Musikbot nicht viel nehmen.


    //edit
    Das hatte ich glaube benutzt: https://www.ts-coach.com/blog/…t-auf-linux-installieren/
    Lief auch alles, bis ich versucht habe den Musikbot vom Interface aus zu starten ;)

    @fishy Ja, du hast taxvalue zwar deklariert aber keinen Wert zugewiesen


    Und falls du taxvalue einen Float zuweisen willst, dann solltest du new Float:taxvalue nehmen (https://wiki.alliedmods.net/Pawn_Tutorial)
    (und bei den anderen dann auch einen Float, denn wenn du etwas mit nem Float verrechnest dann kommen auch wieder Floats raus. So kenne ich das jedenfalls aus Java, vllt löst es ja das Problem ^^)


    //edit also bei mir compiliert der auch mit deinem Code, hat aber errors :D

    bin eben nur am Handy und das copy and paste is nich so einfach, aber denke es liegt daran dass der Textdraw nicht definiert ist (also den Textdraw der noch nicht erstellt ist anzeigen willst, danach aber erst erstellst (chronologische Reihenfolge):
    NDMZONETTextdraw1 = TextDrawCreate(315.899047, 394.067016, "no-dm_zone!");TextDrawLetterSize(NDMZONETTextdraw1, 0.752795, 2.049999);TextDrawTextSize(NDMZONETTextdraw1, 0.000000, 295.000000);TextDrawAlignment(NDMZONETTextdraw1, 2);TextDrawColor(NDMZONETTextdraw1, -16776961);TextDrawUseBox(NDMZONETTextdraw1, 1);TextDrawBoxColor(NDMZONETTextdraw1, 255);TextDrawSetShadow(NDMZONETTextdraw1, 1);TextDrawSetOutline(NDMZONETTextdraw1, 2);TextDrawBackgroundColor(NDMZONETTextdraw1, 255);TextDrawFont(NDMZONETTextdraw1, 3);TextDrawSetProportional(NDMZONETTextdraw1, 1);TextDrawSetShadow(NDMZONETTextdraw1, 1);if(IsPlayerInArea(playerid, 1159.018, -959.4252, 1292.118, -864.679) || IsPlayerInArea(playerid, 361.2212,-1838.3286,478.3448,-1732.6069)){TextDrawShowForPlayer(playerid, NDMZONETTextdraw1);}else{TextDrawHideForPlayer(playerid, NDMZONETTextdraw1);}
    Außerdem solltest du mit MAX_PLAYERS arbeiten, damit der Textdraw für jeden Spieler angezeigt werden kann und bei Textdraw.show und hide nicht immer wieder ein neuer Textdraw erstellt wird sondern der momentane Textdraw benutzt wird, also der der für jeden einzelnen Spieler gedacht ist. Bzw einfach gesagt: Mach den Textdraw global, ansonsten wird immer ein neuer erstellt soweit ich das noch aus Pawn weiss ^^


    //edit: ich hoffe dass du den TextDraw auch zuvor deklariert hast:
    new Text:NDMZONETTextdraw1;

    Okay da der Server auch startet, gehe ich davon aus, dass du die Linux version hast und wie du startest ist auch komplett richtig.
    Entweder hast du dann eine alte Client Version (du brauchst dann auch SAMP 0.3.7) oder ietwas mit der Firewall stimmt nicht:
    http://forum.sa-mp.com/showthread.php?t=529163


    //edit da ich sehe dass dein Client auch 0.3.7 ist und du wahrscheinlich auf anderen Servern connecten kannst, bin ich ratlos :o Die anderen Themen im englischem Forum werden auch nicht beantwortet, vllt mal bei Clientissues rein, ob Kalcor oder so was wissen ;)

    @[LnD]JustMe.77 :
    Ich gcke gerade nur mit Handy drüber aber vllt weil du den Textdraw nicht updatest. Du musst nach ner String / Teständerung immer Textdraw.hide() und show() benutzen, genauso bei Farben.


    //edit okay hab jetzt das problem verstanden, dann sorry meins wird dir nicht helfen ^^
    Ein Problem was ich vllt sehe ist dass du gleich am Anfang RoundSeconds runterzählst, wenn nun RoundSeconds standart 0 ist dann wird er beim initialisieren auf -1 verschoben und somit fortan immer weiter runterzählen, da die Bedingung RoundSeconds == 0 nie erfüllt wird. Also Entweder beim Initialize richtig setzen falls es nicht gesetzt ist oder die Abfrage in "if(RoundSeconds <= 0)" ändern.

    @Der Lümmel:
    Naja das ist nicht so einfach, such ma nach 'SAMP Pathfinder', sowas gibts eig nur für FCNPC bzw NPC Implementationen ^^ Das nennt man Pathfinding, dazu kannst du das ColAndreas Plugin oder das Cimulator Plugin nutzen, würde ich auf die schnelle so sagen, da du dazu die SanAndreadMap brauchst, die aktuelle Position und die Position vor dir, mit der du checkst ob es ein Objekt aus SanAndreas gibt. Falls es von dir erstellt wurde, speichere alle Objekte in nem Array und frage die Position ab oder nutze direkt ein StreamerPlugin.

    Sehr nützlich, werde es erstmal gleich ausprobieren, klar ist es gut um in SAMP gegen Cheater vorzugehen (falls es funktioniert), aber Funktionen wie 'AC_OnPlayerPause(playerid, type, bool:pause);' sind für mich sehr wichtig und fehlen eindeutig in SAMP ( @Kalcor ;) ).


    //edit: wobei der Virustotal für mich nicht so hübsch aussieht... vllt doch ne andere Alternative suchen

    Danke für die Antwort @123marvin123 ! :)


    Testserver: 151.80.76.181:7777


    Habe das gesamte Plugin nun auf Deutsch und Englisch übersetzt, man kann nun mit /events -> Change Language die Sprache einstellen.



    Außerdem wurden die Textdraws neu designed (siehe Bild) und der TTT Traitorshop wurde angefangen zu implementieren.

    (Textdraws im Bild sind älter)



    PS: Danke @123marvin123 für den Support beim LanguagePlugin !

    //edit: ich hab mist geschrieben :D


    Erweiterbares Event System by Alf21

    Heute möchte ich euch mein Eventsystem vorstellen, welches ich am 4. Dezember anfing zu entwickeln.
    Es ist in Java mit Hilfe des Shoebill Plugins (Link) geschrieben, ist somit objektorientiert programmiert und besitzt um die 7000 Zeilen.


    Video Nr. 1 - Catching Event

    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.

    (Link)


    Wichtigste Infos:
    Testserver: 151.80.76.181:7777


    [tabmenu]


    [tab='Eventarten','']

    • Catching (Fangespiel)
    • Trouble in Terrorist Town (TTT aus Garrys Mod)
    • NPC Missionen

    [tab='Standardaktionen','']

    • Event erstellen
    • Event zerstören
    • Event beitreten (alle Events werden mit Namen und benutzer aufgelistet)
    • Event verlassen
    • Event starten
    • Event beenden
    • Event vorbereiten
    • Eventvorbereitung beenden
    • Eventvorbereitung überspringen
    • Spieler einladen
    • Letzte Eventergebnisse einsehen
    • Liste der Member eines Events einsehen
    • Liste der Member, welche noch nicht beim Treffpunkt sind, einsehen
    • Spielstatus einsehen
    • Sprache ändern

    [tab='TODO']

    • Traitorshop
    • NPC AI System
    • Singleplayer / Multiplayer Missions
    • Actorsystem
    • new Eventtypes

    [tab='weitere Infos','']
    Das System ist sehr benutzerfreundlich und nur über Dialoge und über die [ N ] Taste gestaltet, man muss lediglich '/events' eingeben, um den Dialog aufzurufen.
    Sobald ein Spieler das Event verlässt und nur noch der Owner drin ist, wird es beendet, falls der Owner das Event verlässt wird dieses zerstört.


    Alle Eventarten basieren auf ein Basissystem, sozusagen einer Library, weshalb man schnell eine neue Eventart hinzufügen kann (einfaches Eintragen der Class).
    [tab='Bilder','']
    BILDER FOLGEN BALD...
    Man kann dynamisch Maps laden und darauf spielen (und auch wieder zerstören).
    Falls man eine Map benutzt und diese verlässt, wird man wieder am MapSpawn gespawnt.Es gibt globale DropWeapons, welche man im Spiellauf aufheben kann.
    Es gibt einen Gametimer der nach Ablauf das Event beendet.
    Stats der Spieler vor dem Event werden gesichert und danach wieder zurückgegeben.
    Es gibt immer eine Vorbereitungsphase, in der sich alle Spieler in einem Punkt treffen müssen (Checkpoint) um das Event automatisch zu starten, sobald alle beim Treffpunkt sind.
    [tab='Standardeinstellungen','']

    • Spieler rauswerfen (*optional)
    • Map auswählen und gleich laden (**optional / **abhängig vom Eventtype auch wieder zerstören; Die Maps werden in anderen virtuellen Welten geladen um Komplikationen zu vermeiden)
    • Gametimer setzen (*optional)
    • EventSpawn / Treffpunkt setzen (*muss gesetzt werden)
    • Zum EventSpawn / Treffpunkt teleportieren (*optional; *RCON-Admin)
    • Auswahl, ob das Event öffentlich ist (jeder beitreten kann und der Owner andere Spieler einladen kann) oder privat (Der Owner andere Spieler nur einladen kann) (*optional).

    [tab='Startbedingungen','']
    Falls die Bedingungen für ein Event nicht erfüllt sind (durch die Einstellungen), kann das Event nicht gestartet werden. Zudem werden immer min. 2 Spieler benötigt, eine höhere Spielerzahl ist vom Event abhängig.
    [tab='Textdraws','']
    Durch Textdraws kann man einfach die Übersicht über das Event behalten.
    So werden diese Textdraws automatisch erst nach Punktzahl sortiert und falls man die gleiche Punktzahl besitzt werden diese nach Namen sortiert.
    [tab='Updates','']
    Update 0.4e R1:
    - changed Key to open Dialogs and Gates from [ Y ] to [ H ]
    - added a lot of new maps
    - added EventMapDescription to easily describe a map
    - improved EventMap / map handling with a global map loader, now you can easily add new maps
    - fixed some maps with improved extern map converter
    - added Gates from virtuality-roleplay project + improved it
    - fixed eventId counter (calculated with value of events) to autoincrement with local eventIndex Integer
    - improved + fixed Dialoges
    - added map informations / details (because of the credits)
    - changed auto respawn system on leaving the map
    - added destroy() to EventMap for special handling, e.g. creating Gates on a map


    Update 0.4e:
    - improved event handling (eg. instead of remove(Player) and leave(Player) -> onPlayerExit(Player)
    - fixed Textdraws
    - increased range of radius functions
    - minor performance improvement
    - added GPS and RangeLabel
    - fixed getWinner for Catching and TTT
    - improved map handling and added a parent map class to easy handle maps
    - fixed TTTDeadBody
    - added save datas for players before event start and reset datas at end of event / onPlayerExit / on destroy
    - added TTTShop
    - added globalTimer and onGlobalTimer
    - added command to test maps ('/eventsdb', ...)
    - added maps


    Update 0.4c R6:
    - some performance improvement
    - removed random color reset in Catching event and added global reset color on EventBase
    - added global EventTextdraw handling for better programming
    - added onPlayerPause, but currently not used and needs to be programmed and to undo / resend packets because of packetloss
    - added score timer to linear increase event score or check if event score need to increase
    - global stats added (eventScore)
    - added timer to sort the EventTextdraws (1. eventScore, 2. playername)
    - optimized the multiplicator (hunter only deals half damage for vehicle)
    - minor improvement because of color defines
    - fixed colors in event to hide players
    - removed mapTextdraw and added GangZone to give the map a better look and to use PickUps and Checkpoints / GPS
    - global timer added
    - fixed gametimer
    - added updateTextdraws to better update Textdraws for specific player after remove or ordered with eventTextdraw.move(int)
    - some minor bugfixes and checks


    Update 0.4c R5:
    - added some Gametextes for better gameplay
    - fixed Textdraw
    - added NoTeamDamage
    - added global min player Amount
    - added preparation countdown
    - fixed timers
    - fixed TTTDeadBoy with Worlds and Interiors
    - fixed distance check and get dropWeapon
    - added global DropGun pickup
    - added more get DropWeapon with move above


    Update 0.4c R4:
    - minor bugfixes
    - added some test commands
    - event maps new enviroment
    - added weapondata to deadBodys
    - added DropWeapons
    - added global gametimer
    - added deadBodyDialog
    - added mapfixes


    Update 0.4c R3:
    - fixed dialog and map enviroment
    - fixed Textdraws
    - other minor bugfixes
    - added some test commands
    - added available maps which can select in an event which does not depends on maps


    ...
    [tab='Credits','']

    • 123marvin123: Shoebill Plugin + sehr guten Support + FCNPC-Wrapper;
    • Maps: de_dust2; Rogue Nations V2;
    • Fynn630: Video!
    • DropWeapon ObjektIDs (PeteShag (http://forum.sa-mp.com/showthread.php?t=217076))
    • Jeffry: DeadBody ObjektIDs
    • und ich, Alf21 (Eventsystem und der Rest ;))

    [/tabmenu]



    Ich würde mich über Kritik / Anmerkungen
    und/oder Verbesserungsvorschläge freuen und auch über Ideen für neue Events/Eventarten.

    @tayson87:
    1. return SendClientMessage(playerid,0xFAF0CEFF,"Du kannst keine Befehle nutzen,da du im Tutorial bist.");
    kann man nicht machen, entweder erst SendClientMessage(...) und danach der return oder nur SendClientMessage(...) und ne richtige Programmordnung ^^
    2. return SendClientMessage(playerid,WRONGCMD,"Du bist im AFK-Modus und kannst somit keine Befehle nutzen."),SendClientMessage(playerid,WRONGCMD,"BENUTZE: /back"); geht auch nicht, statt Komma musst du ein Semikolon setzten, also
    if(Spieler[playerid][pAWAYFROMKEYBOARD] == 1) {
    SendClientMessage(playerid,WRONGCMD,"Du bist im AFK-Modus und kannst somit keine Befehle nutzen.");
    SendClientMessage(playerid,WRONGCMD,"BENUTZE: /back");
    return 1;
    }
    Keine Angst vor geschweiften Klammern ;)

    @Pinguin: Dein CreateDynamicObject Code stimmt, jetzt musst du die Include Datei im Script eingebunden haben #include <streamer> und du musst das Streamer Plugin im plugins Ordner haben sowie es in der server.cfg eingetragen haben: Bei Linux streamer.so, bei Windows streamer.
    Bevor du das alles machst update nochmal deinen Streamer und um sicher zu gehen dass du wirklich in VirtualWorld 1 bist schreib dir nen Befehl der die aktuelle virtuelle Welt ausgibt ;)