Beiträge von Sogma

    Facebook in 2023? I'm not a marketing expert but the company I work for ignores Facebook completely, which didn't harm the business. Since years I met nobody who uses Facebook/TikTok at all.


    Are M2 players really that much trapped in the past?

    Nette Idee, man könnte auch noch den Radius abhängig vom Skilllevel machen (gerade interessant für bpsw. Server mit L-Skills). Und für den Ottonormalverbraucher solltest du wahrscheinlich auch noch einen Empire-Check mit einbauen, da durchschnittliche Metin-Spieler niemanden aus anderen Reichen buffen will.

    Empire Check beispiel:

    if ((dist != 0 && max > dist) && (pc->second->GetEmpire() == GetEmpire()))


    Radius beispiel:

    Code
    1. float max = 1500.0f;
    2. switch (GetSkillMasterType(dwVnum))
    3. {
    4. case SKILL_NORMAL:
    5. max = 100.0f;
    6. break;
    7. default:
    8. break;
    9. }

    Die cases müssen dann entsprechend ausgearbeitet werden.


    GetSkillMasterType kann mit diesen Werten abgefragt werden (definiert in length.h)

    Code
    1. enum
    2. {
    3. SKILL_NORMAL,
    4. SKILL_MASTER,
    5. SKILL_GRAND_MASTER,
    6. SKILL_PERFECT_MASTER,
    7. };

    Hi,


    erstmal danke an Steap für den Effekt. Wenn ihr das System einbaut und etwas in die Richtung braucht, dann meldet euch bei ihm! Bitte melden Sie sich an, um diesen Link zu sehen.


    Folgendes habe ich hier gemacht:

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


    Buff Skills haben einen AoE Effekt, wodurch alle Spieler in einem gesetzten Radius die Buffs bekommen. Das funktioniert, wenn man den Skill auf sich selbst oder auch auf einen anderen Char anwendet.

    Ich baue hierbei auf diesem Release von mir auf Bitte melden Sie sich an, um diesen Link zu sehen.


    Hinweis: Der ganze Client Kram macht nur Sinn, wenn ihr einen Effekt habt den ihr anzeigen lassen wollt. Der Vollständigkeit halber gebe ich hier aber ein Beispiel mit, wie man das machen KANN.

    In char.h, class CHARACTER

    Example usage:


    cmd.cpp, struct command_info cmd_info[]


    { "map_info", do_map_info, 0, POS_DEAD, GM_IMPLEMENTOR},


    above struct:

    ACMD(do_map_info);


    file cmd_gm.cpp, new function:


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

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


    Edit:


    ACMD = #define ACMD(name) void (name)(LPCHARACTER ch, const char *argument, int cmd, int subcmd) in cmd.h

    Da sind ein paar coole Ideen dabei. Sehe auch kein Problem darin sich an anderen Games wie PoE zu bedienen.


    Kannst du das mit dem Lager noch mal genauer erklären?

    Dann müsstest du ja automatisch bei einem Chat herauszufinden, ob das Geschriebene ein Item darstellt, oder verstehe ich dich falsch?

    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