[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • for (new id = 0, j = Streamer_CountItems(STREAMER_TYPE_OBJECT); id < j; id++)
    {
    printf("id: %d | j: %d | Valid: %d | World: %d", id, j, IsValidDynamicObject(id), Streamer_GetIntData(STREAMER_TYPE_OBJECT, id, E_STREAMER_WORLD_ID));
    if(IsValidDynamicObject(id) && Streamer_GetIntData(STREAMER_TYPE_OBJECT, id, E_STREAMER_WORLD_ID) <= 89)
    {
    printf("Destroy");
    DestroyDynamicObject(id);
    }
    }
    print("Fertig.");
    Was wird dir so geprintet?


    Nein, bei CreateObject's geht das nicht. Am sinnvollsten wäre es aber, wenn du die PWN dazu hättest.

  • for (new id = 0, j = 1000; id < j; id++)
    {
    printf("id: %d | j: %d | Valid: %d | World: %d", id, j, IsValidDynamicObject(id), Streamer_GetIntData(STREAMER_TYPE_OBJECT, id, E_STREAMER_WORLD_ID));
    if(IsValidDynamicObject(id) && Streamer_GetIntData(STREAMER_TYPE_OBJECT, id, E_STREAMER_WORLD_ID) <= 89)
    {
    printf("Destroy");
    DestroyDynamicObject(id);
    }
    }
    print("Fertig.");
    Versuche es mal so. Das CountItems hat 0 ausgegeben. :wacko:


    => Soweit ich weiß nicht, nein.

  • Kann es eventuell Möglich sein das die Funktion "IsValidDynamicObject()" rum spinnt?
    Hatte das schon mal, dann hab ich es raus genommen dann ging es, ich kann es ja mal ohne Probieren.


    //EDIT:
    Jeffry: Sorry, wenn ich dich immer direkt anspreche :D


    for (new id = 0, j = 1000; id < j; id++)
    {
    if ( Streamer_GetIntData(STREAMER_TYPE_OBJECT, id, E_STREAMER_WORLD_ID) <= 89)
    {
    printf("Destroy");
    DestroyDynamicObject(id);
    }
    }
    print("Fertig.");


    So hat es geklappt, ob die Objekte jetzt entfernt wurden konnte ich nicht sehen, aber es wurde immer Destroy ausgegeben. :thumbup:

  • Hey,


    habe ein Problem mit "meinem" Spectator-System.
    Wenn der zu beobachtende Spieler das Interior und die virtuelle Welt wechselt updatet Spec nicht


    Code:


    public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
    {
    if(IsBeingSpeced[playerid] == 1){
    for(new i=0;i<MAX_PLAYERS;i++){
    if(spectatorid[i] == playerid){
    SetPlayerInterior(i,GetPlayerInterior(playerid));
    SetPlayerVirtualWorld(i,GetPlayerVirtualWorld(playerid));
    }
    }
    }
    return 1;
    }


    Mehr Infos im Hauptthread, wo ich es fast 1:1 auf mein Script übernommen habe (außer dem foreach alles gleich - habe es mit GetPlayerPos() versucht, geht nicht). Grund ist, dass der Codeschnipsel für einge verwirrend sein kann:


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


    Mit freundlichen Grüßen
    Domain

  • Warum benutzt du statt GetPlayerInterior(playerid) nicht einfach die festgelegte Variable newinterior?
    Wenn es dort nicht klappt, könntest du ja mal bei OnPlayerUpdate Probieren.


    Ansonsten Probiere das mal:


    public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
    {
    if(IsBeingSpeced[playerid] == 1){
    for(new i=0;i<MAX_PLAYERS;i++){
    if(spectatorid[i] == playerid){
    TogglePlayerSpectating(i, false);
    SetPlayerInterior(i,GetPlayerInterior(playerid));
    SetPlayerVirtualWorld(i,GetPlayerVirtualWorld(playerid));
    TogglePlayerSpectating(i, true);
    }
    }
    }
    return 1;
    }


    Jeffry, die Objekte sollten weg sein, hatte mir ein kleinen befehl gebastelt der Zählt wieviel Dynamische Objekte noch sind und sie wurden immer entfernt, Danke ;)

  • Kann mir jemand sagen wie ich vorran gehen soll um eine Funktion einzubauen mit der ich mich teleportieren kann, zu dem Punkt wohin ich mit einer Waffe schieße?


    Das Ganze möchte ich aber nicht mit den fX, fY unf fZ Koordinaten machen, es sollte schon Möglich sein sich auf gemappte Objekte zu teleportieren. Ich habe ein Tipp von Slice bekommen und er meinte ich kann das mit z.B. 10 Timern machen, kann mir jemand den Anfang geben?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Kann mir jemand sagen wie ich vorran gehen soll um eine Funktion einzubauen mit der ich mich teleportieren kann, zu dem Punkt wohin ich mit einer Waffe schieße?


    Das Ganze möchte ich aber nicht mit den fX, fY unf fZ Koordinaten machen, es sollte schon Möglich sein sich auf gemappte Objekte zu teleportieren. Ich habe ein Tipp von Slice bekommen und er meinte ich kann das mit z.B. 10 Timern machen, kann mir jemand den Anfang geben?


    Probiere es doch mal mit dem Callback.
    https://wiki.sa-mp.com/wiki/OnPlayerWeaponShot


    Das sollte schon damit Möglich sein, verstehe nicht warum du es nicht damit machen willst.

    Einmal editiert, zuletzt von Pascal. ()

  • Dann würde es aber noch vom Streamer ein Callback geben.



    public OnShootDynamicObject(playerid, weaponid, objectid, Float:fX, Float:fY, Float:fZ)
    {
    }


    //EDIT:
    Jeffry:
    for (new id = 0, j = CountDynamicObjects(); id < j; id++)
    {
    if (Streamer_GetIntData(STREAMER_TYPE_OBJECT, id, E_STREAMER_WORLD_ID) <= 89)
    {
    DestroyDynamicObject(id);
    }
    }


    So klappt es leider auch nicht, der entfernt trotzdem jedes Object, egal in welcher Welt.

    Einmal editiert, zuletzt von Pascal. ()

  • case DIALOG_UPGRADE_HEAL:
    {
    new headerstring[32];
    if(response == 0)
    {
    format(headerstring,sizeof(headerstring),""#SERVERFARBE"Upgrade "#HTML_GREEN"(%ip)",Spieler[playerid][pUpgradePoints]);
    format(string,sizeof(string),""#HTML_WHITE"Spawnheal "#HTML_PURPEL"(%i/100)\n"#HTML_WHITE"Handelsgeschick "#HTML_PURPEL"(%i/5)\n"#HTML_WHITE"Drogensucht "#HTML_PURPEL"(%i/5)\n"#HTML_WHITE"Alkohol "#HTML_PURPEL"(%i/5)\n"#HTML_WHITE"Fähigkeitsstärke "#HTML_PURPEL"(%i/5)",
    20*Spieler[playerid][pUpgradeSkill][0],Spieler[playerid][pUpgradeSkill][1],Spieler[playerid][pUpgradeSkill][2],Spieler[playerid][pUpgradeSkill][3],Spieler[playerid][pUpgradeSkill][4]);
    return ShowPlayerDialog(playerid,DIALOG_UPGRADE_LIST,DIALOG_STYLE_LIST,headerstring,string,"Auswählen","Abbrechen");
    }
    else
    {
    if((Spieler[playerid][pUpgradeSkill][0]) >= 5)return SendClientMessage(playerid,GRAU,"Du hast bereits die volles Spawnheal");
    if((Spieler[playerid][pUpgradePoints] - 20) < 0)return SendClientMessage(playerid,GRAU,"Du hast nicht genug Upgradepunkte (20p)");
    Spieler[playerid][pUpgradePoints] -= 20;
    Spieler[playerid][pUpgradeSkill][0]++;
    format(string,sizeof(string),""#HTML_PURPEL"[SPAWNHEAL]"#HTML_WHITE": Du spawnst nun immer mit %i Leben",Spieler[playerid][pUpgradeSkill][0]*20);
    SendClientMessage(playerid,WEISS,string);
    return 1;
    }
    }


    Drücke ich auf "Auswählen" so stürzt komplett der server ab.. kann wer mir sagen woran es liegen kann?

  • Man könnte so nur schätzen bzw man müsste lange danach suchen. Nehme das crashdetect plugin und zeige uns dann den code, wenn der server nochmals abstürzt

  • Hi, also
    es wird nicht eingespeichert in die Datenbank, wieso?


    if(strlen(Haus[HausID][hMieter1]) < 1)
    {
    format(SQL1, sizeof(SQL1), "UPDATE hauser SET Mieter1 = '%s' WHERE ID = '%d'",GetName(playerid), HausID);
    mysql_query(SQL1);
    return 1;
    }

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • printf("Länge: %d", strlen(Haus[HausID][hMieter1]));
    if(strlen(Haus[HausID][hMieter1]) < 1)
    {
    printf("Aufgerufen");
    format(SQL1, sizeof(SQL1), "UPDATE hauser SET Mieter1 = '%s' WHERE ID = '%d'",GetName(playerid), HausID);
    mysql_query(SQL1);
    printf("Query: %s", SQL1);
    return 1;
    }


    Was steht so im Server Log?