Jump to content

Kenpachi

Members
  • Posts

    764
  • Joined

  • Last visited

  • Days Won

    4

Posts posted by Kenpachi

  1. Die Berechnung für den Heal Skill findest du in ../src/map/skill.c

    		#ifdef RENEWAL
                /**
                 * Renewal Heal Formula
                 * Formula: ( [(Base Level + INT) / 5] x 30 ) x (Heal Level / 10) x (Modifiers) + MATK
                 **/
                hp = (status_get_lv(src) + status_get_int(src)) / 5 * 30  * skill_lv / 10;
    		#else
    			hp = ( status_get_lv(src) + status_get_int(src) ) / 8 * (4 + ( skill_id == AB_HIGHNESSHEAL ? ( sd ? pc_checkskill(sd,AL_HEAL) : 10 ) : skill_lv ) * 8);
    		#endif
    

    Einfach nach "hp = (status_get_lv(src) + status_get_int(src)) / 5 * 30 * skill_lv / 10;" suchen.

    Darunter kommen noch ein paar kleine Anpassungen des HP-Wertes, spiel einfach mal ein wenig damit rum. Dann speichern und neu kompilieren.

     

     

    Für Potion Pitcher ist das ganze schon ein wenig versteckter. Die Berechnung ist in der selben Datei, aber dieses mal in der Funktion skill_castend_nodamage_id. Und in dieser Funktion gibt es dann einen Block der so beginnt:

    	case AM_BERSERKPITCHER:
    	case AM_POTIONPITCHER: {
    

    So ziemlich am Ende dieses Blocks wird dann mit der folgenden Zeile geheilt:

    status_heal(bl,hp,sp,0);
    

    Da "+100%" ja eigentlich nur verdoppeln heißt, kannst du daraus folgendes machen:

    status_heal(bl,hp*2,sp,0);
    

    Dann auch wieder speichern und neu kompilieren.

     

     

     

    Denk auch bitte an die Config (../conf/battle/skill.conf) in der der maximale Heal-Wert angegeben wird.

    // Level and Strength of "MVP heal". When someone casts a heal of this level or
    // above, the heal formula is bypassed and this value is used instead.
    max_heal: 9999
    
  2. Und die Revision als Konstante einzubinden ist schon möglich, du musst

    sie nur vorher auslesen lassen. Hab ja 6 Jahre WoW Server betrieben, da

    ging es ja auch ohne Probleme :)

    Falls du MaNGOS meinst, die haben ein Projekt in der Solution, das sich gensvnrevision nennt und die Datei svn_revision.h erzeugt in der Informationen zur SVN in Makros (#define) abgelegt werden. Diese Datei wiederum wird vom eigentlichen Serverprojekt eingebunden und ausgelesen. Ich für meinen Teil halte diese Vorgehensweise für ziemlich dämlich, da man sich den Aufwand des separaten Projektes auch sparen kann. Ob ich nun eine Anwendung starte, die mir die Revision ausliest und in eine Datei schreibt, oder ob ich selbst die Datei anpasse ist vollkommen egal, beides ist nicht gerade der Inbegriff von dynamsichem Verhalten.

     

    Die Ordnerstruktur ist schon wie aus dem Verzeichnis selber, nur ohne

    die ganzen SRC Ordner. Ich habe stark den Verdacht, dass dort temporär

    der Pfad gespeichert wird...

    "Dort"? Im src-Ordner? Nein, wie kommst du darauf? Die Funktion get_svn_revision() nutzt ja nicht umsonst diesen Pfad.

  3. Ob du das in der const.txt änderst oder nicht spielt keine Rolle. Softwareintern ist 139 trotzdem noch unsichtbar:

    enum actor_classes
    {
    	WARP_CLASS = 45,
    	HIDDEN_WARP_CLASS = 139,
    	WARP_DEBUG_CLASS = 722,
    	FLAG_CLASS = 722,
    	INVISIBLE_CLASS = 32767,
    };
    

     

    Dein Fehler ist irgendwo clientseitig zu suchen...

  4. Warum ließt man die Revision zur Laufzeit aus und nicht wärend man den

    Code compilt? Die Revision Nummer bezieht sich doch eh auf den Stand wo

    der Code compilt wurde, da kann er doch als Konstante eingebunden

    werden, macht doch mehr Sinn!

    Ich wüsste nicht, dass das möglich ist. Eine Variable wird zur Laufzeit gesetzt, da auch dann erst Speicher für sie reserviert wird.

    Zurück zum Problem, wie gesagt, der Charserver macht das nicht mit.

    Komischerweise klappt es auch nicht wenn ich die Datei bereit stelle,

    nur im direkten SVN Verzeichnis wo sich der SRC befindet klappt es.

    Nebenbei findet er auch die Config nicht, welche aber vorhanden sind.

    Wie sieht denn die Ordnerstruktur aus, die du gebastelt hast?

    Der Server versucht in seinem Verzeichnis oder dem darüber liegenden den Ordner ".svn" zu finden:

    if( (fp = fopen(".svn"PATHSEP_STR"wc.db", "rb")) != NULL || (fp = fopen(".."PATHSEP_STR".svn"PATHSEP_STR"wc.db", "rb")) != NULL )
    
  5. Find the block for sniper skills (starts with "//Sniper") and add this row:

    4012,2240,1,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Warg Mastery#
    

    Client side (skilltreeview.lua):

    [4012] = {
    		{"SN_FALCONASSAULT", 381; Pos = 28, MaxLv = 5, NeedSkillList = {14, 21}},
    		{"SN_SHARPSHOOTING", 382; Pos = 5, MaxLv = 5, NeedSkillList = {}},
    		{"SN_SIGHT", 380; Pos = 26, MaxLv = 10, NeedSkillList = {7}},
    		{"SN_WINDWALK", 383; Pos = 12, MaxLv = 10, NeedSkillList = {}}
    	}
    

    Here you have a row like this:

    {"RA_WUGMASTERY", 2240; Pos = 12, MaxLv = 1, NeedSkillList = {}}
    

    I'm not sure how to handle the "Pos" field, but it's probaly for the list display... just try a bit. :)

  6. bonus bDelayRate, (getequipid(EQI_ACC_L) == 2703 && getequipid(EQI_ACC_R) == 2703) ? -30 : -30 / (getequipcardcnt(EQI_HEAD_TOP) + getequipcardcnt(EQI_HEAD_MID) + getequipcardcnt(EQI_HEAD_LOW));

    .. should work

    • Upvote 1
×
×
  • Create New...