Beiträge von Sogma

    Ich fände es schöner, wenn der Spieler die Möglichkeit hat zu entscheiden, ob der Count angezeigt wird oder nicht. Sonst muss man das Item immer in ein einzelnes Splitten um es dann im Chat nutzen zu können, da Käufer sonst denken, dass alle verkauft werden. Ich hoffe, das macht Sinn haha Vielleicht ein kleines Popup Fenster, wo man flott eine von zwei Versionen auswählen kann. In den Spieloptionen könnte man dem Spieler die Möglichkeit für Auswahlmenü, Mit Count, Ohne Count geben. Oder Alt + Linksklick für ohne Count, Alt + Rechtsklick für mit Count. Aber vielleicht würde das auch den Rahmen des Releases sprengen.


    Danke für den Release!

    Habe ich auch schon überlegt, ggf. mit einem Schieberegler wie bei Chest Stack Open.

    MIr ist erstmal noch ein Exploit beim Thema Antiexp Group Extension aufgefallen, wodurch man sich den Gruppen Exp Buff zu Nutze machen kann. Da kümmere ich mich als erstes drum, dann vielleicht das was du hier geschrieben hast.

    Moin, nochmal etwas kleines.


    Die Erweiterung sorgt dafür, dass bei stapelbaren Items die Stacksize von der Item Cell, die man im Chat verlinkt, mit ausgegeben wird.

    Bitte melden Sie sich an, um diesen Anhang zu sehen.


    Ggf. kann man den Code noch verschlanken, da kann sich ja jeder für sich etwas überlegen.


    Das Ganze findet im Client Source statt.

    Moin, ganz einfache Sache.


    Gruppenmitglieder, die Anti EXP aktiviert haben, werden aus dem EXP Share der Gruppe ausgeschlossen.


    Wie wird der EXP Share berechnet?

    Die Basiserfahrungspunkte werden [...] durch die Anzahl der Gruppenmitglieder geteilt und erst dann werden andere Faktoren wie die Bonus-Exp (z.B. bei zwei Mitgliedern +12%) oder die relative Erfahrung (siehe oben) jeweils für jedes Mitglied verrechnet.


    Um die Anti EXP Chars auszuschließen muss das FPartyTotaler struct in der char_battle.cpp angepasst werden. Meine Anti EXP Basis, also das System auf dem ich aufbaue, Bitte melden Sie sich an, um diesen Link zu sehen..

    Bei Fragen oder Problemen schreibt hier, ich habe das ganze eben nur kurz mit 2 Partymembern getestet:

    Bitte melden Sie sich an, um diesen Anhang zu sehen.


    Update: Berechnung vom Gruppen-EXP Buff angepasst. (party.cpp). Der EXP Bonus wird auf Basis der Anzahl Gruppenmitglieder in der Nähe des Leaders ermittelt. Die Tabelle dazu ist in constants.cpp, ich benutze bei mir const int CHN_aiPartyBonusExpPercentByMemberCount[9].

    Durch die Anpassung werden die Gruppenmitglieder, die Anti-EXP aktiviert haben aus der Anzahl wieder herausgenommen.

    Dadurch wird unterbunden, dass man einfach eine volle Gruppe macht, bei 7 Chars EXP deaktiviert und dann den 100% Bonus durch die Gruppe bekommt.


    Du kannst eine VWK in den Shop packen und dann, wenn das item für den PC erstellt wird, einen zufälligen socket zuweisen. Müsste eigentlich so gehen.


    Dann ist das Monster in welches man sich verwandelt zwar random, aber kann man m.M.n so überlegen

    Habe an sowas gedacht:

    Bitte melden Sie sich an, um diesen Anhang zu sehen.

    Bitte melden Sie sich an, um diesen Anhang zu sehen.

    Mach ne neue Funktion in der Character Klasse, also in char.h definieren.

    Je nachdem was für Mengen du erwartest mach da ein int oder long long Datentyp als return value.


    Code
    1. int GetAggregateCost() const { return GetLevel() * 10;}

    DIe Funktion rufst du dann überall da auf wo du bis jetzt deine Variable amount benutzt.


    Es wird sich da nur das Level des Spielers genommen und mit 10 Multipliziert. Ein Level 100 Spieler zahlt also 1000 Gold pro Pull, ein Level 10 Spieler 100.


    Bin nur am Handy unterwegs, was die Funktionsdefinition angeht musst du das mal ausprobieren und ggf. noch korrigieren

    Überprüf sonst noch mal was von GetGold zurück kommt, ggf. hab ich da irgendwo was vergessen.

    Danke, ich kam gestern Abend einfach nicht mehr drauf ohne vor dem Code zu sitzen :)

    Ich würde mir an deiner Stelle mal angucken wie SetGold an anderen Stellen verwendet wird und es dann genau so machen. Kann mir gut denken, dass du da noch irgendein DB Packet schicken musst. Bin nicht am Rechner und kann es selbst nicht nachsehen

    Der Umhang ist bei dir aber kein Quest Item, oder?

    Hab das jetzt nur auf die Schnelle runter geschrieben und nicht ausprobiert. Check sonst mal ob der Code da überhaupt ankommt oder ob der Umhang noch von irgendwo anders getriggert wird.

    Nein der code kommt schon an, wenn ich folgendes nämlich auskommentiere, zieht er den tapfi nicht ab.

    Code
    1. item->SetCount(item->GetCount()-1);

    Überprüf sonst noch mal was von GetGold zurück kommt, ggf. hab ich da irgendwo was vergessen.

    Der Umhang ist bei dir aber kein Quest Item, oder?

    Hab das jetzt nur auf die Schnelle runter geschrieben und nicht ausprobiert. Check sonst mal ob der Code da überhaupt ankommt oder ob der Umhang noch von irgendwo anders getriggert wird.

    Joar ist die Frage ob das Not tut. Würde da dann gar nichts anpacken wenn es für einen Oldschool Server ist, oder wenn überhaupt dann nur für Chars ab einem bestimmten Level. Das kann der TE dann ja aber anpassen wie er lustig ist

    In char_item.cpp wird die Funktion AggregateMonster aufgerufen, in etwa so:

    Code
    1. case UNIQUE_ITEM_CAPE_OF_COURAGE:
    2. //¶ó¸¶´Ü º¸»ó¿ë ¿ë±âÀÇ ¸ÁÅä
    3. case 70057:
    4. case REWARD_BOX_UNIQUE_ITEM_CAPE_OF_COURAGE:
    5. AggregateMonster();
    6. item->SetCount(item->GetCount()-1);
    7. break;

    Du könntest dann eine eigene Funktion in der CHARACTER Klasse schreiben, die dir basierend auf dem Level einen Yang-Wert ausgibt. Die Logik dahinter müsstest du dann definieren. Ein Beispiel wäre return Char-Level * 10; dann bezahlt man halt skalierend mit dem eigenen Level.


    Dann änderst du jedes Mal, wenn AggregateMonster oder SetCount ausgeführt wird, das Gold von dem Char:

    Code
    1. case UNIQUE_ITEM_CAPE_OF_COURAGE:
    2. //¶ó¸¶´Ü º¸»ó¿ë ¿ë±âÀÇ ¸ÁÅä
    3. case 70057:
    4. case REWARD_BOX_UNIQUE_ITEM_CAPE_OF_COURAGE:
    5. AggregateMonster();
    6. item->SetCount(item->GetCount()-1);
    7. this->SetGold(GetGold() - 100); //100 Yang pro Pull
    8. break;


    Wenn du willst, dass man keine Umhänge benutzen kann wenn das Yang leer ist, dann bau das so oder so ähnlich um und deaktiviere den automatischen Umhang:

    Finde das irgendwie too much. Die Boni kann man imho auch im Pet/Mount unterbringen.

    Ich würde durchdrehen wenn ich die ganze Zeit 2 Chars sehe.

    Hi,


    da ich nichts public gefunden habe zum Thema Metin2 Client und Python 3 habe ich mir mal den Spaß erlaubt etwas zu experimentieren. Meine Fortschritte will ich hier gerne festhalten, dass auch andere einen Nutzen davon haben.

    Updates werden wohl eher unregelmäßig kommen, da ich auch nicht mehr ganz so viel Zeit habe. Neuer Job, viele private Veränderungen, der ein oder andere kann das vielleicht nachvollziehen.

    Ohne jetzt viel als Einleitung schreiben zu wollen starte ich aber gleich mal mit dem eigentlichen Thema.


    Insgesamt gibt es drei nennenswerte und viele kleine Herausforderungen denen ich bis jetzt begegnet bin.

    1. Update der CPython Implementierung im Client Source
    2. Konvertierung der vorhandenen bytecode files im lib Verzeichnis vom Client
    3. Konvertierung der Python Scripts aus dem Pack Verzeichnis

    Auf die drei Punkte will ich jetzt im Detail eingehen, ich packe die jeweiligen Inhalte in Spoiler, sodass sich jeder das raussuchen kann was ihn interessiert ohne zu viel scrollen zu müssen.



    Aktueller Stand:

    29.11.2022 - 23:55

    Dateien

    • Python3.zip

      (461,58 kB, 51 Mal heruntergeladen, zuletzt: )

    Du kannst alles mit dem Marty Source machen, einige Sachen können halt nicht nur C&P sondern müssen vorher noch angepasst werden

    Und was muss man genau anpassen, da ich mit c++ nicht kann wäre sehr nett wenn du mir sagen könntest was ich anpassen müsste


    Danke für deine Antwort ;)

    Ich habe das System nicht eingebaut, kein Plan was man machen muss. Probieren und ggf. korrigieren