Beiträge von BigETI

    Tut es nicht unbedingt, da GetPlayerName aus einer Variable, die im Server schon eingebaut ist entnimmt und sie Instant ausgibt. (Wie alle möglichen eingebauten Funktionen, die meißtens mit "Get" anfangen.)


    P.S.: Da deine "PlayerName" Variable vom Script aus leicht veränderbar ist, ist sie nicht so ganz sicher und dein Beispiel mit der Globalen Variable new PlayerName[MAX_PLAYER_NAME]; ist Falsch.

    Hier will ich euch einen neuen Include vorstellen, wo ihr nun mehr Möglichkeiten besitzt, in Callbacks reinzuschreiben.


    Was sind Callbacks?
    Callbacks sind Funktionen die aufgerufen werden, wenn eine Aktion stattgefunden hatte.


    Was sind es denn nun für Callbacks die das Include mit sich bringt?


    public OnPlayerEnteredVehicle(playerid, vehicleid, seatid)
    public OnPlayerExitedVehicle(playerid, vehicleid)
    public OnPlayerSkinChange(playerid, oldskin, newskin)
    public OnPlayerHoldWeaponChange(playerid, oldslot, oldweapon, newslot, newweapon)
    public OnPlayerWeaponStateChange(playerid, oldstate, newstate)
    public OnPlayerWeaponDataChange(playerid, slot, oldweapon, newweapon)
    public OnPlayerAmmoDataChange(playerid, slot, oldammo, newammo)
    public OnPlayerMoneyChange(playerid, oldmoney, newmoney)
    public OnPlayerHealthChange(playerid, Float:oldhealth, Float:newhealth)
    public OnPlayerArmourChange(playerid, Float:oldarmour, Float:newarmour)
    public OnPlayerAnimationIndexChange(playerid, oldindex, newindex)
    public OnPlayerSpecialActionChange(playerid, oldsaction, newsaction)
    public OnPlayerAnalogKeysChange(playerid, oldy, newy, oldx, newx)
    public OnPlayerVehicleHealthChange(playerid, vehicleid, Float:oldhealth, Float:newhealth, bool:isissuer)
    public OnPlayerVirtualWorldChange(playerid, oldworld, newworld)
    //Darunter befinden sich frei entscheidbare Callbacks
    public OnPVarDelete(playerid, varname[], oldtype)
    public OnPVarCreate(playerid, varname[], type)
    public OnPVarTypeChange(playerid, varname[], oldtype, newtype)
    public OnPVarIntChange(playerid, varname[], oldint_value, newint_value)
    public OnPVarStringChange(playerid, varname[], oldstring_value[], newstring_value[])
    public OnPVarFloatChange(playerid, varname[], Float:oldfloat_value, Float:newfloat_value)


    Benutzung:


    Füge einfach ncbs.inc in einen deiner Scripte (Zum Beispiel ein Filterscript). Benutze diesen Include nicht mehrmals. Benutze ncbs_forwads.inc in deinen anderen scripten, damit du ferngesteuerte Callbacks empfangen kannst.
    Damit du diesen Feature benutzen kannst, musst du USE_IN_ALL_SCRIPTS definiert lassen.
    ncbs_defines.inc gibt dir die Möglichkeit diesen Include zu konfigurieren.


    Beispiel wie man diese Includes benutzt:


    ncbs.inc füge ich in meinem Filterscript ein:
    #define FILTERSCRIPT
    #include <ncbs>
    public OnFilterScriptInit()
    {
    print("\n------------------------");
    print(" Example Filterscript...");
    print("------------------------\n");
    return 1;
    }


    ncbs_forwards.inc füge ich in meinem Gamemode ein:
    #include <ncbs_forwards>
    main()
    {
    print("\n--------------------");
    print(" Example Gamemode...");
    print("--------------------\n");
    return 1;
    }



    Beschreibungen:


    public OnPlayerEnteredVehicle(playerid, vehicleid, seatid)
    Wird aufgerufen, wenn ein Spieler in einen Fahrzeug eingestiegen ist.


    public OnPlayerExitedVehicle(playerid, vehicleid)
    Wird aufgerufen, wenn der Spieler seinen Wagen verlassen hat.


    public OnPlayerSkinChange(playerid, oldskin, newskin)
    Wird aufgerufen, wenn der Spieler sich den Skin geändert hat. (Mit SetPlayerSkin oder Mods).


    public OnPlayerHoldWeaponChange(playerid, oldslot, oldweapon, newslot, newweapon)
    Wird aufgerufen, wenn der Spieler die Waffe auf der Hand wechselt.


    public OnPlayerWeaponStateChange(playerid, oldstate, newstate)
    Wird aufgerufen, wenn der Spieler einen anderen Waffen Status abgibt (siehe http://wiki.sa-mp.com/wiki/Weapon_States).


    public OnPlayerWeaponDataChange(playerid, slot, oldweapon, newweapon)
    Wird aufgerufen, wenn der Spieler irgendwelche Waffen spawnt/verliert (Spawnen mit GivePlayerWeapon oder Cheats).


    public OnPlayerAmmoDataChange(playerid, slot, oldammo, newammo)
    Wird aufgerufen, wenn der Spieler Munition für das jeweilige Waffenslot spawnt/verliert (Spawnen mit GivePlayerWeapon oder Cheats).


    public OnPlayerMoneyChange(playerid, oldmoney, newmoney)
    Wird aufgerufen, wenn der Spieler seinen Geldbetrag verändert hat (Mit GivePlayerMoney oder Cheats)


    public OnPlayerHealthChange(playerid, Float:oldhealth, Float:newhealth)
    Wird aufgerufen, wenn der Spieler die Lebensanzeige sich verändert (Erhöhung durch Respawn, SetPlayerHealth oder Cheats).


    public OnPlayerArmourChange(playerid, Float:oldarmour, Float:newarmour)
    Wird aufgerufen, wenn der Spieler die Schutzweste sich verändert (Erhöhung durch SetPlayerArmour oder Cheats).


    public OnPlayerAnimationIndexChange(playerid, oldindex, newindex)
    Wird aufgerufen, wenn der Spieler die Animation ändert.


    public OnPlayerSpecialActionChange(playerid, oldsaction, newsaction)
    Wird aufgerufen, wenn der Spieler seinen Special Action verändert (mit SetPlayerSpecialAction oder Mods/Cheats).


    public OnPlayerAnalogKeysChange(playerid, oldy, newy, oldx, newx)
    Wird aufgerufen, wenn der Spieler die Hoch, Runter, Links und Rechts Taste gedrückt hat.


    public OnPlayerVehicleHealthChange(playerid, vehicleid, Float:oldhealth, Float:newhealth, bool:isissuer)
    Wird aufgerufen, wenn der HP des Spielers Fahrzeugs sich verändert hat.


    public OnPlayerVirtualWorldChange(playerid, oldworld, newworld)
    Wird aufgerufen, wenn der Spieler korrekt den Virtual World geändert hat (Da Virtual Worlds Serverbeständig sind, kann man mit Cheats nicht verändern)


    Freiwillige Callbacks:


    public OnPVarDelete(playerid, varname[], oldtype)
    Wird nur aufgerufen wenn ein PVar entfernt worden ist (siehe http://wiki.sa-mp.com/wiki/DeletePVar)


    public OnPVarCreate(playerid, varname[], type)
    Wird nur aufgerufen, wenn ein PVar erstellt worden ist.


    public OnPVarTypeChange(playerid, varname[], oldtype, newtype)
    Wird nur aufgerufen, wenn der PVarType sich verändert hat.


    public OnPVarIntChange(playerid, varname[], oldint_value, newint_value)
    Wird nur aufgerufen, wenn ein SetPVarInt seinen eigenen Wert verändert hat.


    public OnPVarStringChange(playerid, varname[], oldstring_value[], newstring_value[])
    Wird nur aufgerufen, wenn ein SetPVarString seinen eigenen Wert verändert hat.


    public OnPVarFloatChange(playerid, varname[], Float:oldfloat_value, Float:newfloat_value)
    Wird nur aufgerufen, wenn ein SetPVarFloat seinen eigenen Wert verändert hat.


    Wie kann ich nun die Callbacks im Script wählen?:
    Da das Script komplett in Englisch ist und somit International gelten sollte, werde ich einfach Übersetzen was im ncbs_defines.inc steht


    Bekannte Bugs:

    • OnPlayerWeaponDataChange und OnPlayerAmmoDataChange werden nur gerufen wenn eine andere Aktion stattgefunden hat (SA:MP schuld)
    • Sonst wurden keine weiteren Bugs gefunden..


    Credits:

    • ALS hooking wurde hinzugefügt (gemacht von Y_Less)
    • Danke an wups, das er mir vorgeschlagen hat, wie man Callbacks mit funcidx wiedergibt
    • Hat mir die Idee gegeben die OPU Verzögerung einzubauen (Idee von cessil)
    • Das SA:MP development Team
    • Ich selber..


    Updates:

    • Version 1.4: OnPlayerChangeMoney, OnPlayerEnteredVehicle, OnPlayerExitedVehicle, OnPlayerAnalogKeysChange und OnPlayerVehicleHealthChange wurden hinzugefügt.
      Die callbacks in anderen Scripte aufrufbar.
      new_callbacks.inc wurde umgeändert zu ncbs.inc
      ncbs_forwards.inc wurde hinzugefügt (Wird benutzt um ferngesteuerte Callbacks zu empfangen.)
      ncbs_defines.inc wurde hinzugefügt (Wird benutzt um die Definitionen zu verändern.)
      Einige wichtige/unwichtige Fehler wurden behoben..
    • Version 1.3: OPU delay Idee wurde hinzugefügt um einen epischen Server Crash zu vermeiden (Idee von cessil)
      Jede einzelner Callback ist nun wählbar!
      Geschwindigkeit wurde verbessert.
      Bug Fixes..
    • Version 1.2: Benutzung der ALS hooking Methode (von Y_Less) und benutzung von funcidx, um die Callbacks gescheidt wiederzugeben (Idee von wups)
      OnPVar Callbacks sind nun freiwillig aktivierbar (Unkommentiere die USE_PVAR_CALLBACKS Definition innerhalb der Include damit man die OnPVar Callbacks benutzen kann).
    • Version 1.1: OnPlayerSpecialActionChange Callback wurde hinzugefügt.
    • Version 1: Erster Release!



    Bitte meldet hier irgendwelche Bugs!


    MfG: BigETI

    Vergleiche bitte die Definitionen von DIALOG_ADMIN_MENU und DIALOG_ADMIN_GMN.
    (Höchstwarscheinlich haben beide den selben Wert! Was dazu führen würde, dass sie sich kreuzen könnten, deshalb auch diese Error Nachricht.)
    Und versuche nie "else if" in solchen Fällen zu benutzen, sonst da der Compiler dir das nicht benachrichtigt und IG zu Falschen oder Fehlenden Ergebniss im Dialog führen kann.

    Die Anzeige aktualisiert sich alle 0,3 Sekunden wie hier zu sehen ist:
    SetTimer("GostergeYenile",300,1);
    Damit es alle 2 Sekunden aktualisiert muss es so aussehen:
    SetTimer("GostergeYenile", 2000, true);


    Um die Anzeige nicht so springen zu lassen (bedanken wir uns an den SA:MP Sync, das auch nicht gerade das Beste ist) musst du eine "Smooth" Berechnung machen, die mathematisch ungefähr so aussieht:

    Code
    ((Roh Geschwindigkeit Nr.1 + Roh Geschwindigkeit Nr.2) / 2) = Anzeige Geschwindigkeit der erste
    dannach
    ((Roh Geschwindigkeit Nr.2 + Roh Geschwindigkeit Nr.3) / 2) = Anzeige Geschwindigkeit der zweite
    usw...

    Hmm, kann man nicht mit Plugins einfach eine Sounddatei für ein Spieler abspielen, auch wenn der Spieler kein Soundclient hat...? Wenn es geht, dann kannst du einfach Tondateien selber machen in verschiedenen Tiefen, und sie in ein Ordnerspeichern, und sie dann abzuspielen, wäre doch richtig gut.


    Uhhm ich kann leider nicht jeden auffordern, sich den Audio Plugin von Incognito für den Clienten runterzuladen. Sonst weiß ich auch nicht, wie man sonst Sounds streamen sollte (außer SA:MP Sounds)


    Danke :D
    Erstmal habe ich mit strg+c und strg+v aus dem SA:MP Wiki in einem Array reinkopiert. :P (ca. 40 min Arbeit für den FS lol)
    Aber dafür wird es in V2 auch möglich sein im Music Composer 1/2, 1/4, 1/8 und sogar erweiterte Zeitangaben (millisekunden) einzufügen. Leider ist es in SA:MP nicht möglich Tontiefen zu definieren. :(
    Lieder werden in der Zukunft als eine spezielle Datei (z.B.: .musikz) gespeichert und/oder direkt kompilierbar zu einem fertigen FS über einen Tastendruck.
    Die .musikz kann man In-Game nur mit einem Passwort editieren, abspielen und/oder löschen. (Ohne irgendein Account system)
    Außer dem Music Composer werden Sounds und Musik dynamisch sortiert und die Start und Stop Regelungen wurden auch schon eingebaut (was entspricht, dass man Sounds stoppen kann, indem man nochmal draufklickt). Plus noch für Server Betreiber, die direkte PlayerPlaySound Scriptlinien benötigen, werden in der Lage sein, solche Informationen in die scriptfiles Ordner in eine spezielle .txt Datei zu speichern.

    Danke


    Wer weiß vllt füge ich noch einen "Music Composer Tool" damit man Musik ähnliches mit den SA:MP Sounds machen kann und ganz sicher ein Tool, damit man direkte Script Zeilen (PlayerPlaySound) vom Dialog aus Instant in eine Text Datei im "scriptfiles" Ordner bekommt.

    SA:MP Soundz V1 gemacht von BigETI
    Willkommen im SA:MP Soundz V1 Thema.
    Hier will ich euch einen kleinen Filterscript releasen um alle SA:MP Sounds zu hören.


    Wie bin ich auf diese Idee gekommen?
    Da ich im Forum schon einen Filterscript gesehen habe, der schon released worden ist, aber die Sounds überm anklicken garnicht abspielbar sind,

    Zitat von FoxHound

    [...]Ich wollte es eigentlich mit Listen Dialog machen aber pawno hat wiedermal gepiept XD
    [...]Die Sound-ID müsst ihr euch merken und es in den Input-Dialog schreiben, damit es abgespielt werden kann.
    Wie gesagt; ich wollte es mit ListenDialog machen aber es gaben ZU viele errors mit pawno.[...]


    deshalb habe ich PAWNO einfach aufgemacht und den Filterscript von null auf neu gescriptet. (Ich hatte eh lw also daher :))
    Naja daraus kam das hier:







    Und die Sounds sind nun sogar auf dem Dialog sofort abspielbar :)


    Beinhaltet:

    • Ideen von FoxHound's SoPlay Filterscript: [ FILTERSCRIPT ] Sound Player (SoPla)
    • Alle SA:MP Sounds.
    • Mit dem Befehl "/soundplayer" kommt ihr in den SA:MP Soundz V1 Dialog
    • Sounds beim anklicken sofort abspielbar.
    • Beim nächsten Release mit Suchfunktion für ID und Titel Name.
    • Credits


    Bugs:

    • Warnung! Auf einigen der gecrackten Versionen von GTA San Andreas kann man nicht alle Sounds hören!
    • Keine weiteren gefunden


    Fehlendes:

    • Die Suchfunktion fehlt, weil sie am Ende doch verbuggt war, aber deshalb werde ich es fixen und SA:MP Soundz V2 mit Suchfunktion in einigen Tagen releasen. (Wenn ich natürlich Zeit habe :))
      Es wird auf jeden Fall die Suchfunktion für Sound ID's sowie Namen der Sounds existieren.
    • Ideen von euch..




    Mfg: BigETI

    Erst musst du MAX_NACHRICHTEN als eine Konstante definieren
    z.B.:
    #define MAX_NACHRICHTEN 100
    oder
    new const MAX_NACHRICHTEN = 100;
    wie auch immer..


    Danach kannst du deinen enum schreiben:
    enum nachrichtenenum
    {
    idm, //Ich meine ID und Inhalt reicht auch komplett da du die informationen über GetPlayerName oder andersherum bekommen kannst aber musst du selber wissen
    Empfängerm[MAX_PLAYER_NAME], //Ich weiß nicht, warum du 2 separate Variablen brauchst, um den Empfänger und Absender zu deklarieren.
    Absenderm[MAX_PLAYER_NAME],
    Inhaltm[128],
    listitemm //Was? Ich meine, das kannst du auch komplett weglassen, da beim [MAX_NACHRICHTEN] index der listitem schon vordefiniert sein wird
    }


    Danach sollteste du einen array deklarieren, die wie folgt aussehen sollte:
    new NachArray[MAX_PLAYERS][MAX_NACHRICHTEN][nachrichtenenum];

    Hallo Leute,
    kennt vllt einer von euch eine Liste voller SQLite querys (Nachrichten, die man zu einer .db datei schickt) die mir ermöglichen Tabellen, Informationen (Funktionen die man in eine Tabelle speichern kann) usw. usw weil google auch grad nichts gegeben hat (oder nur Beispiele für Custom Versionen der SQLite Serie), weil ich sonst meinen SQLite Include nicht fertig kriegen kann^^


    MfG: BigETI

    du musst mit der differenz der beiden zahlen irgendeine Zahl generieren und mit der Basiszahl (min Wert) addieren um eine Zahl zwischen den beiden Zahlen zu kriegen sonst kannst du laut deiner Funktion höhere Zahlen als der max Wert kriegen :whistling:
    Naja meine Funktion sollte den lieben scripting Anfängern nützlich sein, wenn die ka von Mathe haben xD


    Edit:
    Ich habe gemerkt, dass die letzte Zahl nie generiert wird, deshalb auch:
    stock RandomEx(val1, val2)
    {
    new value = val1;
    if(val1 < val2) value = random((val2-val1)+1)+val1;
    else if(val1 > val2) value = random((val1-val2)+1)+val2;
    return value;
    }

    Schon richtig gut und nützlich, aber wäre das hier nicht sinnvoller?
    stock randomEx(min,max) return (random(max)+min); }


    z.B. bei:
    "randomEx(5,10)" muss eine zahl zwischen 4 und 10 rauskommen (4 weil die 5 zählt mit).
    Wenn "random" z.B. 2 zürückgibt, wird 'min' (in diesem fall '5') addiert und es kommt '7' raus.


    Ja für den schnelleren Gebrauch, aber wenn du laut deiner Funktion dass hier machst:
    randomEx(100,2);
    Ergibt das einen Fehler, da man im random keine negativen Zahlen benutzen kann, während bei meiner Funktion
    RandomEx(100,2);
    kommt irgendeine X-beliebige Zahl zwischen 2 und 100 raus.


    Edit: Wenn schon mit "min" und "max", dann bitte:
    stock randomEx(min, max) return (random((max-min)+1)+min);
    ^^

    Funktion: RandomEx(val1, val2);


    Wiedergibt/Erklärung:
    Eine zufällig generierte Zahl zwischen der ersten und der zweiten Zahl. Es macht keinen Unterschied wenn die erste Zahl größer oder kleiner ist als die zweite Zahl.


    Beispiel:
    printf("Die Zahl ist %d.", RandomEx(10, 200));


    Code:
    stock RandomEx(val1, val2)
    {
    new value = val1;
    if(val1 < val2) value = random((val2-val1)+1)+val1;
    else if(val1 > val2) value = random((val1-val2)+1)+val2;
    return value;
    }


    ====================


    Funktion: GivePVarInt(playerid, varname[], int_value);


    Wiedergibt/Erklärung:
    Wiedergibt garnichts oder Null! Es hat die selbe Funktion als würde man an einer Globalen Variable ++ anwenden, nur halt bei einer PVar.


    Beispiel:
    GivePVarInt(playerid, "Kills", 1);


    Code:
    stock GivePVarInt(playerid, varname[], int_value) SetPVarInt(playerid, varname, GetPVarInt(playerid, varname)+int_value);


    ====================


    Funktion: IsPlayerSneakingPlayer(playerid, toplayerid);


    Wiedergibt/Erklärung:
    Wiedergibt "true", wenn der Spieler ungefähr in die selbe Richtung guckt wie der andere Spieler (benutzt in "Back Shot" Scripte), sonst "false" (boolean)


    Beispiel:
    if(IsPlayerSneakingPlayer(killerid, playerid)) printf(%s wurde von %s von hinten gekillt, playername, killername);


    Code:
    stock IsPlayerSneakingPlayer(playerid, toplayerid)
    {
    new Float:p1Rot, Float:p2Rot, Float:result1, Float:result2, Float:finalresult;
    GetPlayerFacingAngle(playerid, p1Rot);
    GetPlayerFacingAngle(toplayerid, p2Rot);
    result1 = p1Rot-p2Rot;
    if(result1 < 0) result1 = -(result1);
    result2 = (360.0+p1Rot)-p2Rot;
    if(result2 < 0) result2 = -(result2);
    if(result1 <= result2) finalresult = result1;
    else if(result1 > result2) finalresult = result2;
    if(finalresult > 90) return false;
    return true;
    }


    ====================


    Funktion: SpawnPlayerEx(playerid);


    Wiedergibt/Erklärung:
    Wiedergibt garnichts oder Null! Wird benutzt um einen bugfreien Respawn zu machen, falls der Spieler noch in einem Fahrzeug sitzt.


    Beispiel:
    SpawnPlayerEx(playerid);


    Code:
    stock SpawnPlayerEx(playerid)
    {
    if(IsPlayerInAnyVehicle(playerid)) SetPlayerPos(playerid, 0.0, 0.0, 0.0);
    SpawnPlayer(playerid);
    }


    ====================


    Funktion: GetPlayerDistanceToPoint(playerid, Float:X, Float:Y, Float:Z, &Float:Distance);


    Wiedergibt/Erklärung:
    Nur die Variable "Distance" wiedergibt die Entfernung. Meißtens wird diese Funktion in Speedometer oder GPS Systemen verwendet um die Entfernung zwischen zwei 3D Punkten zu berechnen. (Man kann auch Funktionen wie GetPlayerDistanceToPlayer, GetPlayerDistanceToVehicle sogar GetPlayerDistanceObject herstellen usw. usw..)


    Beispiel:
    new Float:mydistance;
    GetPlayerDistanceToPoint(playerid, 20.3043, 400.5238, 10.2588, mydistance)
    printf("Die Entfernung liegt genau %.4f meter.", mydistance);


    Code:
    stock GetPlayerDistanceToPoint(playerid, Float:X, Float:Y, Float:Z, &Float:Distance)
    {
    new Float:pX, Float:pY, Float:pZ;
    GetPlayerPos(playerid, pX, pY, pZ);
    Distance = floatsqroot((X-pX)*(X-pX)+(Y-pY)*(Y-pY)+(Z-pZ)*(Z-pZ));
    }


    ====================


    Falls ihr noch mehr nützliche Codes braucht, PM't mich einfach^^


    MfG: BigETI