Beiträge von Sogma

    Hallo,


    ich habe ein Problem mit der Mysql. Undzwar habe ich die Files von Invoice aufgesetzt. Dannach habe ich die File's von Premiumlike aufgesetzt und die von Invoice gelöscht ( game & mysql gelöscht und neu eingefügt)
    habe beide 777 rechte gegeben. Nun komme ich nicht in die Datenbank und beim Server starten kommt Fehlermeldung. (can't connect to local mysql server through socket '/tmp/mysql.sock' (2)


    Bin sehr neu hier und kenne mich nicht so gut aus. Kann mir einer helfen?

    Kann sein, dass deine Verbindung über einen Socket und nicht via TCP/IP force aufgebaut wird. Das scheitert dann, wenn der Socket-Connector nicht funktioniert oder einfach nicht aktiviert ist.
    Versuch deine Verbindung über TCP/IP zu erzwingen, indem du in der /usr/local/etc/mysql/my.cnf die Einstellung bind_address auf 127.0.0.1 änderst (vermutlich ist dort noch localhost eingetargen).

    Moin,


    ich wollte die Skillpunkte, die man pro Level bekommt, je nach Rasse limitieren. Dient dazu, dass das Fenster unten rechts nicht immer nervt.


    Was habe ich dazu getan?


    Char.cpp/Funktion PointChange


    Anscheinend werden hier Trigger doppelt durchlaufen, ich kann mir allerdings nicht erklären warum.
    Wenn jemand Hinweise hat wäre ich dafür sehr dankbar.


    Hat folgendes zur Auswirkung:
    Bitte melden Sie sich an, um dieses Bild zu sehen.


    Skillpunkt setzen:


    Bitte melden Sie sich an, um dieses Bild zu sehen.





    EDIT: Bin ein Idiot, habe es selber gesehen....

    guck mal was in db syserr steht oder server syserr

    DB


    In der Syserr vom Core, auf dem die Map läuft, steht nichts. Nur Log-Fehler -> Uninteressant

    Moin,


    ich habe gerade das Problem, dass mein Client beim Öffnen des Itemshop-Lagers abstürzt.
    Die Abfrage nach dem Passwort kommt, wenn ich das Passwort dann eingebe dann raucht mir der Client ab.


    Syserr vom Client (M.M.n unnötig)


    Ich finde den Fehler nicht. Hat jemand einen Tipp/mag mit drüber gucken?

    z.b.?

    • Man kann keine Items manuell in den Fenstern verschieben
    • Fertigkeitsbücher in dem FB Inventar sind verbuggt -> Es wird mehrmals ein FB auf den selben Slot gelegt
    • Wenn man FB gestapelt ließt verschwindet der gesamte Stack aus dem Inventar
    • Man kann Waffen in die Inventare legen und nicht mehr heraus holen


    Das sind die ersten Dinge die mir aufgefallen sind.

    Moin,


    kann mir jemand von euch sagen wo ich das autoloot für Chars im Source permanent aktiviere? Das ewige Yang aufsammeln nervt und ich möchte keine Dritte Hand benutzen und die Statusleiste klein halten und daher zusätzliche Symbole vermeiden.
    Habe leider nichts gefunden in dem Code.


    Viele Grüße

    Moin,


    ich habe mir die letzte Zeit über einige Gedanken über das Thema Metin2 Source & Branch Prediction gemacht. Wer nichts mit dem Begriff anfangen kann hier eine kurze Beschreibung.


    Können erfahrene Coder hier vielleicht mal ihre Gedanken teilen? Gibt der Metin2 Source genügend Einstiegspunkte her um dort eventuell die Performance zu boosten?


    Als Anmerkung:
    Das Beispiel, welches ich in der Erklärung angedruckt habe

    Code
    1. if (data[c] >= 128)
    2. sum += data[c];



    lässt sich wie folgt ändern um einen Performance-Boost zu erzielen:

    Code
    1. int t = (data[c] - 128) >> 31;
    2. sum += ~t & data[c];

    Benchmarks: Core i7 920 @ 3.5 GHz
    C++ - Visual Studio 2010 - x64 Release

    Code
    1. // mit Branch
    2. seconds = 11.777
    3. // ohne Branch
    4. seconds = 2.564


    Kompletter Code:


    Danke für euer Interesse

    Status: 15.05.2017


    Hallo zusammen,


    ich habe vor einigen Tagen hier im Forum die Frage gestellt, ob Interesse an einem Guide, bzw. How-To besteht, wie man eine Website statt mit PHP und HTML in ASP.Net aufbauen kann. Auf diese Frage kam leider gar keine Reaktion, aber da ich Lust darauf habe mich außerhalb meines Jobs mit der Technik zu beschäftigen werde ich hier in diesem How-To Schritt für Schritt eine simple Homepage bauen.
    Aufgrund meiner begrenzten Zeit kann ich dieses How-To nicht auf einen Schlag abfrühstücken, sondern werde immer mal wieder wenn ich die Zeit finde diesen Beitrag erweitern.


    Vielleicht kann ich einige von euch begeistern und für das Thema interessieren, das ist mein primäres Ziel hierbei.


    In dieser ersten Version des Beitrags, oder in dem ersten Schritt der Entwicklung, möchte ich ein paar Worte über die Funktionsweise von ASP.Net verlieren und zeigen, wie man damit arbeitet. Im Anschluss an die Erklärungen wird eine ganz einfache Programmierung gezeigt.


    Schritt 1: Vorbereitung ist alles!



    Bevor wir mit irgendwelchen Programmierungen oder Designs anfangen müssen einige technische Voraussetzungen erfüllt werden.Wir benötigen einen IDE! Ich benutze Microsoft Visual Studio in der Community Edition, diese gibt es Bitte melden Sie sich an, um diesen Link zu sehen. zum kostenlosen Download. Achtet bei der Installation darauf, dass ihr die ASP.Net und Webentwicklungstools mitnehmt.
    Bitte melden Sie sich an, um dieses Bild zu sehen.


    Nach der erfolgreichen Installation müsst ihr Visual Studio über den NuGet-Paket-Manager noch ein Paket hinzufügen, damit Verbindungen zu MySQL-Datenbanken ermöglicht werden. Öffnet dazu in Visual Studio den Reiter Extras und sucht dort nach dem Menüpunkt NuGet-Paket-Manager. Von diesem Menüpunkt öffnet ihr die Paket-Manager-Konsole, welche sich im unteren Bereich von Visual Studio öffnet.
    Bitte melden Sie sich an, um dieses Bild zu sehen.


    In der Konsole gebt ihr den Befehl Install-Package MySql.Data ein. Befolgt dann die Anweisungen auf dem Bildschirm.


    Das war es auch schon mit den Voraussetzungen, nun erstellen wir ein neues Projekt und schauen uns Grundlagen von ASP.Net an :) .


    Schritt 2: Das ASP.Net Projekt



    Nachdem wir erfolgreich Visual Studio heruntergeladen haben und die MySQL Erweiterung installiert haben, erstellen wir ein neues Projekt. Geht dazu im Menüband von Visual Studio unter Datei -> Neu -> Projekt.


    Unter dem Reiter Vorlagen finden wir einen Menüpunkt, der Visual C# heißt. Erweitert die Ansicht mit einem Klick auf den Pfeil links neben dem Menüpunkt und wählt den Unterpunkt Web aus. In der mittleren Anzeige des Fensters habt ihr nun drei Auswahlmöglichkeiten, wählt dort das oberste Ergebnis, die ASP.NET Webanwendung, aus.


    Bitte melden Sie sich an, um dieses Bild zu sehen.



    Gebt dem Projekt nun noch einen Namen, ändert falls ihr wollt den Speicherort und bestätigt anschließend mit dem Button OK.


    Nachdem ihr auf OK gedrückt habt erscheint ein neues Fenster, in dem ihr aus diversen Vorlagen für Websiten auswählen könnt. Da wir für unsere Website ja ein eigenes Design verwenden werden wählen wir in dieser Maske die leere Vorlage aus. Alle anderen Einstellungen lassen wir unberührt.
    Bitte melden Sie sich an, um dieses Bild zu sehen.
    Auch hier bestätigen wir unsere Auswahl wieder mit dem Button OK. Nun erstellt uns Visual Studio unser Projekt.




    Wie rechts in dem Projektmappen-Explorer zu sehen, ist unsere Website eigentlich noch gar keine echte Website, da wir noch keine Seite haben. Diese muss manuell hinzugefügt werden.
    Dies erreichen wir mit der Tastenkombination STRG + SHIFT + A. Sucht in dem sich öffnenden Fenster nach der Auswahlmöglichkeit "Webformular".
    Bitte melden Sie sich an, um dieses Bild zu sehen.


    Gebt dem Objekt den Namen Default.aspx. Dies ist das Gegenstück zu den index.html oder index.php Dateien, die als Startseite fungieren.
    Die Datei Default.aspx wird nun dem Projekt hinzugefügt und der Code öffnet sich im IDE.


    Nun sind ein paar Erklärungen nötig.
    In der ersten Zeile des Codes sind schon die ersten Unbekannten zu finden. Diese müsste etwa so aussehen:
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Metin2WebsiteTutorial.Default" %>


    Was bedeutet das nun alles?
    Mit den spitzen Klammern und dem Prozent Zeichen werden Codeblöcke definiert. In diesen Codeblöcken kann mit C# programmiert werden. In diesem Fall finden wir dort aber keine Programmierung, sondern die grundlegenden Einstellungen der Website. Von diesen Einstellungen sollte nichts entfernt werden, da sie die Funktionsweise der Website beeinflussen oder sogar stören können. Wir beschäftigen uns erstmal mit den Eigenschaften "Page Language" und "CodeBehind". Die "CodeBehind" Eigenschaft gibt an, in welcher Datei der Quellcode von Funktionen geschrieben wird. Dazu im folgenden mehr. Mit der "Page Language" Eigenschaft wird definiert, welche Programmiersprache in der CodeBehind-Datei verwendet wird.


    Zu CodeBehind:


    ASP.NET unterstützt zwei Verfahren für das Verfassen von Seiten:

    • Inline-Code
    • Hinterlegter Code (CodeBehind)

    Inline-Code ist der Code, der direkt in die ASP.NET-Seite eingebettet ist, wie in der ersten Zeile der Website zu sehen.
    Der hinterlegte Code ist der Code, der in einer separaten Klassendatei enthalten ist. Dies erlaubt eine saubere Trennung des HTML-Codes vom logischen Code der Website. Die CodeBehind-Datei wird vor der eigentlichen Website kompiliert, dadurch stehen die Funktionalitäten zur Laufzeit bereit.
    Die CodeBehind-Datei, oder Klassendatei, kann über den Projektmappen-Explorer geöffnet werden, indem die Ansicht der Default-Website erweitert wird.
    Bitte melden Sie sich an, um dieses Bild zu sehen.
    Mit einem Doppelklick wird die Datei geöffnet.


    Schritt 3: Eine erste Programmierung



    In diesem Schritt wollen wir eine erste Programmierung vornehmen, um das Zusammenspiel zwischen der CodeBehind-Datei und der Website zu veranschaulichen. Dazu wollen wir ganz unspektakulär ein Label mit einer Eingabe aus einer Textbox füllen, wenn ein Button auf der Website gedrückt wird.
    In der Default.aspx Datei fügen wir dazu dem HTML-Formular drei Objekte hinzu, eine Textbox, ein Label und einen Button. In dem <div>-Tag schrieben wir dazu folgendes:


    Code
    1. <asp:TextBox ID="myTextbox" runat="server"></asp:TextBox>
    2. <br />
    3. <asp:Button ID="myButton" runat="server" Text="Anzeigen" OnClick="myButton_Click" />
    4. <br />
    5. <asp:Label ID="myLabel" runat="server"></asp:Label>


    Dazu ein paar Erklärungen. Objekte werden mit dem Tag <asp:> begonnen und mit </asp:> wieder geschlossen, ähnlich wie in HTML. Ebenfalls werden den Objekten Attribute mitgegeben. Die unbedingt nötigen Attribute um mit den Objekten arbeiten zu können ist die "ID" und "runat". Das "runat"-Attribut gibt an, dass der Code auf dem Server, also dem Webspace, ausgeführt wird.
    Alle ASP.NET-Steuerelemente erfordern eine Verarbeitung auf dem Server und werden aus dem ASP.NET-Markup in das tatsächliche HTML-Markup übersetzt, das im Browser des Clients gerendert werden kann. Ein <asp: button> Tag kann von dem Internetbrowser nicht verarbeitet werden, aber ein <input type = "submit"> dagegen schon.
    ASP.NET Markup ist im Grunde eine Abstraktion von HTML. runat="server" ist also eine Richtlinie für ASP.NET, die mitteilt, dass eine bestimmte Steuerung die Verarbeitung auf dem Server erfordert. Jedes Objekt, das diese Richtlinie nicht enthält, wird ignoriert, wenn die Seite kompiliert und ausgeführt wird.


    Mit dem Attribut "ID" kann im Code auf das Objekt, bzw. Control zugegriffen werden. Ein Beispiel wird gleich in der Programmierung verwendet.


    Eure Default.aspx Datei sollte nun folgendermaßen aussehen:
    Bitte melden Sie sich an, um dieses Bild zu sehen.
    Um zu testen, ob die Objekte, oder auch Controls, richtig angezeigt werden könnt ihr die Website mit STRG + F5 ausführen. Durch das Drücken von STRG wir der Debugger nicht gestartet.


    Das Label wird logischerweise noch nicht angezeigt, da es noch keinen Text besitzt. Das ändern wir nun.
    Dem Button wurde schon ein OnClick-Event hinzugefügt. Das bedeutet, dass beim Drücken des Knopfes eine Aktion ausgeführt wird. Um diese Aktion zu programmieren öffnen wir die CodeBehind-Datei Default.aspx.cs. Die Datei sollte wie folgt aussehen:
    Bitte melden Sie sich an, um dieses Bild zu sehen.


    In dem myButton_Click-Event fügen wir nun folgenden Code ein

    Code
    1. if (!String.IsNullOrEmpty(myTextbox.Text))
    2. {
    3. myLabel.Text = myTextbox.Text;
    4. }
    5. else
    6. {
    7. myLabel.Text = "Bitte einen Text in die Textbox eingeben.";
    8. }

    Spiechert nun den Code mit STRG + S und führt die Website nochmal aus. Probiert aus was passiert!


    Dies sind die ersten Schritte des Tutorials. Leider muss ich gleich wieder los, die nächsten Tage werde ich hier aber wie schon am Anfang geschrieben immer wieder etwas erweitern.


    Ich hoffe, dass euch das Konzept gefällt und ich euch schon ein wenig interessieren konnte. Falls ihr nicht auf meine Fortführung warten wollt könnt ihr gerne im Internet nach Tutorials, Erklärungen usw. suchen, das wäre für mich schon ein Erfolg.


    Bitte teilt mir eure Meinungen, Gedanken, Anmerkungen mit damit ich besser auf eure Wünsche und Interessen eingehen kann. Bitte bedenkt dabei, dass sich das How-To hier an alle Benutzer des Forums richten soll und ich deshalb auch alle Basics im Umgang mit Visual Studio erkläre.


    Viele Grüße

    Schau mal ob in db/ClientManagerBoot.cpp diese Fehlermeldung zu finden ist. Ich glaube dass das Feld npc_vnum entweder in deiner Datenbank oder im ClientManagerBoot fehlt.
    Bin gerade nicht am PC und kann nicht nachschauen, aber wenn es im ClientManagerBoot nicht ist dann check mal db/ProtoReader.cpp

    Hallo,


    ich habe mich die letzten Monate vorallem berufsbedingt mit der Webentwicklung in ASP.Net beschäftigen müssen und bin davon mehr als überzeugt!
    Dadurch dass ASP.Net ein Bestandteil des .Net-Frameworks ist stehen alle Eigenschaften und Funktionen des Frameworks zur Verfügung. Ein weiterer Vorteil ist die Sprachunabhängigkeit. Durch die CodeBehind Technik von ASP.Net werden die eigentlichen Funktionen der Website und das Layout klar voneinander getrennt. Die CodeBehind-Parts können dabei in C#, F#, VB.Net, C++ und JScript.Net geschrieben werden, was ich äußert positiv finde.


    Nun zu dem eigentlichen Inhalt des Posts. :D
    Besteht hier allgemeines Interesse, dass ich mal ein Tutorial, How-To, Einführung was auch immer zu dem Thema ASP.Net schreibe? Ich wollte sowieso eine Website für mein Projekt so erstellen, daraus könnte man IMHO gut ein Tutorial machen.


    Fühlt euch dazu aufgerufen in den Kommentaren euren Senf dazu abzugeben.


    Greetings

    Hi,


    bei mir stirbt das Pferd wie im Titel angegeben nach einem Relog oder Teleport. Habe mir zum debuggen einen Eintrag in die syslog ausgeben lassen.
    May 12 19:37:36 :: DEBUG: Horse_HP_DropTime 795672576 Horse_HP 0 Horse_Stamina 11 Horse_Level 0


    Geschrieben wird das Ganze in db/ClientManagerPlayer.cpp

    Code
    1. size_t CreatePlayerSaveQuery(char * pszQuery, size_t querySize, TPlayerTable * pkTab)
    2. {
    3. ....
    4. sys_log(0, "DEBUG: Horse_HP_DropTime %u Horse_HP %d Horse_Stamina %d Horse_Level %d" , pkTab->horse.dwHorseHealthDropTime, pkTab->horse.sHealth, pkTab->horse.sStamina, pkTab->horse.bLevel);
    5. ....
    6. }

    Analog dazu ein Screenshot der Player Tabelle


    Bitte melden Sie sich an, um dieses Bild zu sehen.


    Hat einer von euch eine Ahnung warum die Werte, bis auf bei horse_hp_droptime, so verkorkst sind?
    Nutze die mainline_sg game und db branch.


    Danke für eure Hilfe

    Sieht danach aus, dass in common/tables in dem Struct SRefineTable der Member npc_vnum fehlt.


    Wie ich aus dem ZIP Archiv entnehmen konnte wird der Member über eine Bedingung gesteuert.

    Code
    1. ifdef HEMA_ADVAACE_REFINE
    2. DWORD npc_vnum;
    3. #endif

    Check mal bitte, ob du in deiner common/service.h das Define eingefügt hast.


    Entweder dir fehlt das Define oder du nimmst einfach die Bedingung raus. Sollte dann gehen