[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
  • Steht ja direkt nicht drin ^^ Habs aber, danke.


    Wieso wird das Objekt nicht langsam geöffnet sondern einfach sofort zur neuen Position gesetzt?
    MoveDynamicObject(sanadoor2, 1253.35315, -1822.81628, 12.43170, 2.5, 0.00000, 0.00000, 90.00000);

    Einmal editiert, zuletzt von Amaze ()

  • hast du es mal Geprintet ob das Public überhaupt ausgeführt wurde ?

  • Beitrag von timm462f ()

    Dieser Beitrag wurde von Trooper[Y] gelöscht ().
  • ich habe ein Problem wieder werden mir 1000000 tausend angezeigt ? obwohl ich nur 2 habe ?

    // push kann mir jemand helfen?

  • Ich nehme an "atme" ist ein array:

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Kann mir jemand bei meinem Haus system helfen? bzw Spawn..
    Ich habe ein Haussys nach mrmonats tutorial. nun soll man ja auch am haus spawnen. so weit so gut, spawnt man in "seinem" interior, kommt man mit /exit an einem falschen haus raus. (nur wenn man dort spawnt, normal klappt es)


    hier mal der exit cmd:


    ocmd:exit(playerid,params[]){ for(new i=0; i<sizeof(hInfo); i++) { if(GetPlayerVirtualWorld(playerid)!=i)continue; if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]))continue; SetPlayerPos(playerid, hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); return 1; } return 1;}



    Und hier wenn man sich eingeloggt hat


    if(pInfo[playerid][pSpawn] == 1){ for(new i=0; i<sizeof(hInfo); i++) { new name[MAX_PLAYER_NAME]; GetPlayerName(playerid, name,sizeof(name)); if(!hInfo[i][h_id])continue; if(!strlen(hInfo[i][h_owner]))continue; if(!strcmp(hInfo[i][h_owner],name, true))continue; if(hInfo[i][hi_x] != 0.0) { //spawn in house //SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][hi_x], hInfo[i][hi_y], hInfo[i][hi_z], 0.0,0,0,0,0,0,0 ); SetPlayerPos(playerid, hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]); SetPlayerInterior(playerid, hInfo[i][h_interior]); SetPlayerVirtualWorld(playerid, i); SpawnPlayer(playerid); } else { // spawn infront of house SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z], 0.0,0,0,0,0,0,0 ); //SetPlayerPos(playerid, hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); SpawnPlayer(playerid); } } //return 1; } } else { TogglePlayerControllable(playerid,0); OnTutorialEnter(playerid); return 1; } }


    Habe leider weig bis kein verständnis für alle passagen die irgend was mit "i" oder "++" zu tun haben XD das tutvideo war nur zum abschreiben gut^^


    Hat jemand eine Idee warum das hier schief läuft`?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Kannst du bitte den Code noch richtig einrücken? Sonst wird es schwer dir zu helfen. (Über BBCode einfügen)


    Grüsse
    TheBlueFireKing

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2

  • ocmd:setmoney(playerid, params[])
    {
    new pID, money, string[128], string2[128];
    if(PlayerInfo[playerid][plogged] == false) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du musst dich erst einloggen, um den Befehl zu benutzen!");
    if(PlayerInfo[playerid][padmin] < 3) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du bist nicht berechtigt diesen Befehl zu benutzen!");
    if(PlayerInfo[playerid][pduty] == 0) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du befindest dich nicht im Administrativen Dienst!");
    if(sscanf(params, "ui", pID, money)) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Verwendung]: [/setmoney] [ID] [GELD]");
    GivePlayerMoney(playerid, money);
    format(string, sizeof(string), "{0099FF}[Admin]:{FFFFFF} %s %s hat dir %s$ gesettet.", GetAdminRank(playerid), PlayerInfo[playerid][pname], money);
    SendClientMessage(pID, COLOR_WHITE, string);
    format(string2, sizeof(string2), "{0099FF}[Admin]:{FFFFFF} Du hast dem Spieler %s %s$ gesettet.", PlayerInfo[pID][pname], money);
    SendClientMessage(playerid, COLOR_WHITE, string2);
    return 1;
    }


    Ich bekomme die Meldung, dass ich ein Parameter vergessen hätte was aber nicht stimmt. Hoffe mir kann jemand weiterhelfen. :)


    Mit freundlichen Grüßen
    Grapefruit


  • Zeig mal genau den Error
    PS: Du musst nicht string und string2 machen :D

  • Gerade kurz schmunzeln müssen :P
    Erst einmal GivePlayerMoney(playerid, money) zu GivePlayerMoney(pID, money).
    Dann muss ich ergänzen, dass GivePlayerMoney das Geld nicht neu setzt, d.h. der Spieler hat " x $ ", du gibst ihm deine Summe " y $ , sodass er " x + y $ " hat, du möchtest aber sicher, dass er eben nur " y $ " hat, also: ResetPlayerMoney(pID); GivePlayerMoney(pID, money);
    Dann empfehle ich dir statt string & string2 zu verwenden einfach string2 zu string zu ändern. Dürfte zwar kein großen Ressourcenunterschied machen, aber theoretisch macht es einen. Strings kannst du 20x umformatieren und niemandem wird es auffallen, außer eben deinem Geldbeutel (wiegesagt, wieder auf's große Ganze ausgedrückt).


    Dann ist "money" ein Integer, d.h. ersetze die %s's in string & string2 mit %i.
    Dann würde ich überprüfen, wie du pduty & plogged abspeicherst, sprich ob du eher mit "true & false" oder mit "1 % 0" arbeitest.

  • Ups, garnicht gemerkt..


    Also nochmal: Wenn man ein Haus hat und sich einloggt spawnt man in diesem. Wenn man dann /exit macht, ladet man am falschen haus. Also scheint beim einloggen das script nicht zu wissen wo man reingegangen ist. Wo ist der Fehler ??!



    ocmd:exit(playerid,params[])
    {
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(GetPlayerVirtualWorld(playerid)!=i)continue;
    if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]))continue;
    SetPlayerPos(playerid, hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]);
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
    return 1;
    }
    return 1;
    }



    und bei OnPlayerlogin



    if(pInfo[playerid][pSpawn] == 1) // BUG
    {
    for(new i=0; i<sizeof(hInfo); i++)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name,sizeof(name));
    if(!hInfo[i][h_id])continue;
    if(!strlen(hInfo[i][h_owner]))continue;
    if(!strcmp(hInfo[i][h_owner],name, true))continue;
    if(hInfo[i][hi_x] != 0.0)
    {
    //spawn in house
    //SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][hi_x], hInfo[i][hi_y], hInfo[i][hi_z], 0.0,0,0,0,0,0,0 );
    SetPlayerPos(playerid, hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]);
    SetPlayerInterior(playerid, hInfo[i][h_interior]);
    SetPlayerVirtualWorld(playerid, i);
    SpawnPlayer(playerid);
    }
    else
    {
    // spawn infront of house
    SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z], 0.0,0,0,0,0,0,0 );
    //SetPlayerPos(playerid, hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]);
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
    SpawnPlayer(playerid);
    }
    }
    //return 1;
    }
    }

  • Debugge mal beim Ausloggen und Einloggen die Koordinaten, Virtualworld ect. von dem Haus.
    Da du nach dem Einloggen im Falschen Haus landest kann der Fehler beim Speichern auch passieren.

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Also ich hab in der zwischenzeit das mal geändert. Da ich das gefühl hatte Inofrmatonen gehen verloren, hab eich einfach beim player noch die hausid gespeichert (die ist auch gleichzeit virtuelle welt)


    Dann muss ich jetzt nochmal ein altes Backup anschauen um das zu überprüfen. Soweit ich noch rausgefunden hatte spawnt man aber nicht willkürlich, sondern am ersten haus der liste(aller häuser)


    Naja, jetzt sieht es eh anders aus.
    Nach dem Umschreiben habe ich das Prob, dass er nicht auslesen will. mysql macht n fehlercode : field not found ("hi_y")


    was hab ich da verdödelt?! Ich habs aus dem part an dem alle häuser geladen werden kopiert. aber irgendwie kann ers nicht auslesen.



    if(pInfo[playerid][pSpawn] == 1) //
    {
    new pHouseIDquery[128];
    format(pHouseIDquery, sizeof(pHouseIDquery), "SELECT * FROM houses");
    mysql_function_query(dbhandle, pHouseIDquery, true, "",""); /// ????



    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    //if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new phid=pInfo[playerid][pHouseID];
    hInfo[phid][h_x]=cache_get_field_content_float(i, "h_x", dbhandle);
    hInfo[phid][h_y]=cache_get_field_content_float(i, "h_y", dbhandle);
    hInfo[phid][h_z]=cache_get_field_content_float(i, "h_z", dbhandle);
    hInfo[phid][hi_x]=cache_get_field_content_float(i, "hi_x", dbhandle);
    hInfo[phid][hi_y]=cache_get_field_content_float(i, "hi_y", dbhandle);
    hInfo[phid][hi_z]=cache_get_field_content_float(i, "hi_z", dbhandle);


    if(hInfo[i][hi_x] != 0.0)
    {
    //spawn in house
    //SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][hi_x], hInfo[i][hi_y], hInfo[i][hi_z], 0.0,0,0,0,0,0,0 );
    SetPlayerPos(playerid, hInfo[phid][hi_x],hInfo[phid][hi_y],hInfo[phid][hi_z]);
    SetPlayerInterior(playerid, hInfo[phid][h_interior]);
    SetPlayerVirtualWorld(playerid, pInfo[playerid][pHouseID]);
    SpawnPlayer(playerid);
    }
    else
    {
    // spawn infront of house
    SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[phid][h_x], hInfo[phid][h_y], hInfo[phid][h_z], 0.0,0,0,0,0,0,0 );
    //SetPlayerPos(playerid, hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]);
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
    SpawnPlayer(playerid);
    }
    return 1;
    }




    Man spawnt, allerdings beim nullpunkt der karte..

  • So wie ich das sehe gehst du bei jedem Spawn durch alle Häuser durch und setzt deren Koordinaten. Das ist nicht der Sinn der Sache denke ich. Mach es lieber so:


    Bei OnGameModeInit 1x alle Häuser aus der Datenbank ins Script "laden".


    Danach beim Spawn:



    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2

    Einmal editiert, zuletzt von root ()

  • @ reaL das wird an anderer stelle benutzt um die Häuser icons zu platzieren, da funktioniert es. also ist es vorhanden, evtl sucht er aber beim spawnen nicht an der richtigen stelle i nder datenbank..


    @TheBlueFireKing


    Ja ich hab das doppelt. Das hatte ich ja gemacht weil man immer am falschen haus gespawnt ist. wenn ich das jetzt rauswerfe ist das speichern der House id bei Player info doch unnötig oder?


    Denn so wie es war hat ja enter und exit imer funktioniert, nur beim aus und wieder einloggen buggte es. aber beim aus oder einloggen wirds nichts gespeichert. die häuser speichern nur beim server beenden.
    Da ich nicht verstehe wie das mit dem ganzen [ i ] gedönz funktionert dachte ich mir, ich bau das so dass beim login (also nur be mersten spawn) die hausliste abgefragt wird. Also ich habe extra die hausid zusätzlich im player gespeichert (nur wenn haus kauft oder verkauft). Da ic hweiss dass der player beim login geladen ist ich dort die hausid abfragen kann. nun wollte ich das "verknüpfen" mit meinen häusern. also in meinem mysql gibt es "players" und "houses" ich wollte jetzt dass bei houses nach der ID gesucht wird, die ich extra beim player gespeichert habe.
    Da hab ich aber einfach im script was kopiert und zusammen geschustert. ich hab halt keine ahnung :/


    Ist es performane mässig sehr nachteilig beim login die häuser abzufragen? Ich will ungern das häuser laden im gamemodeinit verpfuschen. deswegen woltle ich einfach nur den mysql lese fehler ausmerzen:


    [16:39:29] [WARNING] CMySQLResult::GetRowDataByName - field not found ("hi_x")
    [16:39:29] [WARNING] CMySQLResult::GetRowDataByName - field not found ("hi_y")
    [16:39:29] [WARNING] CMySQLResult::GetRowDataByName - field not found ("hi_z")

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen