Jump to content

lllaaazzz

Members
  • Posts

    154
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by lllaaazzz

  1. 4 hours ago, Giant Whisper said:

    well but as I modify it to be as PRE RE

    pretty sure the only difference is that in PRE RE matk didnt get any bonus from dex and luk , just INT so just replace it with this

     

    return status->int_ + (status->int_ / 7) * (status->int_ / 7);
    
    return status->int_ + (status->int_ / 5) * (status->int_ / 5);

    the top one is minimum matk and bottom is maximum

  2. 2 hours ago, utofaery said:

    Thanks for 1 and 3.

    but for 2 .. I meant normal attack and skill attack for job gunslinger can't target any kind of trap at all while archer class can easily poke them out of existence aka kill all the trap they can target on by skill or normal attack.

     

    4.  I was thinking of getitem but instead of player getting the item,  cart / storage would get the item and not the player.

    so I was wondering if existance of such command is anywhere... 

    hence the auto storage of item with scripts if exist that kind of command...

    btw getitembound is almost like getitem with little difference but not what I wanted.

     

    5.

    I mean like on a case of normal attack 

    when player equipped certain bow which has the command script to detect the monster element.

    say a mob is neutral when attacked and it trigger attribute change

    and then it change element to say ghost

    then player arrow will auto switch to counter element arrow if exist depending on monster element.

    will this be source edit or item script only??

     

    Not sure about 5 lol (i can see something working but i dont know where i would write it) (what i would do is just make a multi purpose arrow and a buff associated with it that just counters that i could do)

    but yeah you would need to do some src editing to give GS that sort of buff 

  3. Yeah in status.c 

    unsigned short status_base_matk_min(struct block_list *bl, const struct status_data* status, int level)
    {
    	switch (bl->type) {
    		case BL_PET:
    		case BL_MOB:
    		case BL_MER:
    		case BL_ELEM:
    			return status->int_ + level + status->rhw.matk * 70 / 100;
    		case BL_HOM:
    			return status_get_homint(bl) + level + (status_get_homint(bl) + status_get_homdex(bl)) / 5;
    		case BL_PC:
    		default:
    			return status->int_ + (status->int_ / 2) + (status->dex / 5) + (status->luk / 3) + (level / 4);
    	}
    }
    
    /*
    * Calculates maximum magic attack
    */
    unsigned short status_base_matk_max(struct block_list *bl, const struct status_data* status, int level)
    {
    	switch (bl->type) {
    		case BL_PET:
    		case BL_MOB:
    		case BL_MER:
    		case BL_ELEM:
    			return status->int_ + level + status->rhw.matk * 130 / 100;
    		case BL_HOM:
    			return status_get_homint(bl) + level + (status_get_homluk(bl) + status_get_homint(bl) + status_get_homdex(bl)) / 3;
    		case BL_PC:
    		default:
    			return status->int_ + (status->int_ / 2) + (status->dex / 5) + (status->luk / 3) + (level / 4);
    	}
    }
    #endif

    this part is player 

    Case BL_PC:
    
    default:
    
    return status->int_ + (status->int_ / 2) + (status->dex / 5) + (status->luk / 3) + (level / 4);

     

    Also recompile after making changes in your SRC folder 

  4. 5 minutes ago, Seravy said:

    Ok, I peeked into the source meanwhile. So basically, what I see here is :

    
    	// regenerate change_level_2nd
    		if (!sd->change_level_2nd)
    		{
    			if (sd->class_&JOBL_THIRD)
    			{
    				// if neither 2nd nor 3rd jobchange levels are known, we have to assume a default for 2nd
    				if (!sd->change_level_3rd)
    					sd->change_level_2nd = job_info[pc_class2idx(pc_mapid2jobid(sd->class_&MAPID_UPPERMASK, sd->status.sex))].max_level[1];
    				else
    					sd->change_level_2nd = 1 + skill_point + sd->status.skill_point
    						- (sd->status.job_level - 1)
    						- (sd->change_level_3rd - 1)
    						- novice_skills;
    			}
    			else
    			{
    				sd->change_level_2nd = 1 + skill_point + sd->status.skill_point
    						- (sd->status.job_level - 1)
    						- novice_skills;
    
    			}
    

    That assumes you had exactly (level-1) skill points for your previous jobs. That's wrong. That assumes you never gained or lost skill points and always have the default amount. You probably can't gain or lose any on official servers so I guess it makes no difference if the goal is strictly to emulate an official server but... if we want something more flexible then  the actual amount of skill points at the time of job change should be stored, not the job level...

    this pretty much answers my question, the existing source doesn't support adding or losing skill points, unless you turn the skillup_limit option off. Which I guess is a good enough solution if every single jobchanger npc checks for all skill points being used up.

    So... short answer, player_skillup_limit: no should fix both the characters and the feature to work as intended as long as I'm careful to not add any jobchangers that work  on players who have leftover skill points, is that right? (also, this means no reset NPCs...)

    I would suggest reading what i posted lol 

     

    maybe include 1 time rewards to specific jobs that you want the extra skill points on like archer gets +2 at joblvl 10

  5. 28 minutes ago, Seravy said:

    Okay so I have max job of 90 but some classes don't have that much skills. I do not want 1st job points to be spent on 2nd job so if there are any excess, I want them to disappear because I can't change my job with them still being there. I don't want to ignore the skill tree either. So I don't see how those options would help me?

    I have the settings exactly as you quoted which seems to match what I want.

    Simply put, if I want my job level 61 archer to change into a bard, what do I do?

    (and what do I do to fix the characters already broken? GM commands? Direct database access?)

    ...or maybe I'm looking at this from the wrong direction. If the job change can't happen with unspent skillpoints then the  option that allows spending 1st points on 2nd skills actually doesn't really enable that and instead fixes this problem indirectly is that what you're trying to say?

    use @jobchange to the first class then @setjoblevel 50 then jobchange to second class and set your job level again

    but if you changed the max job to 90 for first class then idk 

     

    edit: 

    Ok so did you change your job_exp.txt and set the maxjob level for first class to 90 too? How about you just make it require more EXP to level up the job so you dont have this excess skill point problem, but i guess you did change it because you want ALL the skills in the first class? In that case wouldnt it be easier to just add skill points another way or whatever... because your just making problem for yourself if annie couldnt help you 

  6. 1 Yeah 

    circle.gif Water Attribute Change [Lv 1]
    attack - HP lower than 70 percent 100% 1 sec 6000 sec self no
      circle.gif Holy Attribute Change [Lv 1]
    attack - HP lower than 40 percent 100% 1 sec 6000 sec self no
      circle.gif Ghost Attribute Change [Lv 1]
    attack - HP lower than 10 percent 100% 1 sec 6000 sec self no

    2 Seems like any skill with knockback can move traps, i cant target them with autoattack on my server

    3 Go edit mode > global height edit > select area with objects by dragging the square, press C, and select objects only (and height) make sure you dont place them outside your map border or youll just crash (me anyways)

     

    4 I dont like the code in @storeall, its misleading.... but im not an expert but maybe someone else can help you, I would suggest using :

    Quote

     

    *getitembound2(<item id>, <amount>, <identify>, <refine>, <attribute>, <card1>, <card2>, <card3>, <card4>, <bound type>)
    *getitembound2("<item name>", <amount>, <identify>, <refine>, <attribute>, <card1>, <card2>, <card3>, <card4>, <bound type>)

    This command behaves identically to getitem2(), but the items created will be
    bound to the target character as specified by the bound type. All items created
    in this manner cannot be dropped, sold, vended, auctioned, or mailed, and in
    some cases cannot be traded or stored.

    For a list of bound types see getitembound().

     

    To make duplicates of your items and turn them back somehow but i dont know much beyond the basic when it comes to "scripting commands"

     

    5 I dont understand this question, are you saying, if you attack a poring, you dont know that its actually a water property mob until you look it up with rms or sense from wizz? This is part of the game  /meh For Cecil in particular you just gotta watch her hp cause at 70>40>10 she keeps changing 

    ceciltips.png

    When you see her use this, which is cancelable 

    Thats when she changes elements, but like the rms suggest she will only change to specific elements at certain hps thresholds 

     

  7. I just wanted to add that its cool cause you can just throw everything out and make it a fixed camera and no one would know its ragnarok lol and theres probably more then enough editable skill effects to make it look awesome... gl dude

  8. 4 minutes ago, M4karov said:

    I am creating a rainfall system that also influences harvest time. As for the plants, you will have a mapflag to define where the seed can be planted.

     

    I'm looking at how to put a farm style map to use as a house instance.

     

    Really with a little knowledge and creativity you can do a lot in this emulator

    You know it is a good idea, i like harvest moon and making it on this would be pretty cool lol 

  9. 12 hours ago, Brizyous said:

    Nope, didn't work.

    Just to be clear, 

    you want third job to have fixed and variable cast time

    but you want trans class to be able to hit insta cast with 150 dex? But Third cant?

     

    Im assuming this is for a split pvp ? 

     

  10.     EF_ERASER_CUTTER:              960
        EF_SILENT_BREEZE:              961
        EF_MAGMA_FLOW:                 962
        EF_GRAYBODY:                   963
        EF_LAVA_SLIDE:                 964
        EF_SONIC_CLAW:                 965
        EF_TINDER_BREAKER:             966
        EF_MIDNIGHT_FRENZY:            967
        EF_MACRO:                      968
        EF_CHEMICAL_ALLRANGE:          969
        EF_TETRA_FIRE:                 970
        EF_TETRA_WATER:                971
        EF_TETRA_WIND:                 972
        EF_TETRA_GROUND:               973
        EF_EMITTER:                    974
        EF_VOLCANIC_ASH:               975
        EF_LEVEL99_ORB1:               976
        EF_LEVEL99_ORB2:               977
        EF_LEVEL150:                   978
        EF_LEVEL150_SUB:               979
        EF_THROWITEM4_1:               980
        EF_THROW_HAPPOKUNAI:           981
        EF_THROW_MULTIPLE_COIN:        982
        EF_THROW_BAKURETSU:            983
        EF_ROTATE_HUUMARANKA:          984
        EF_ROTATE_BG:                  985
        EF_ROTATE_LINE_GRAY:           986
        EF_2011RWC:                    987
        EF_2011RWC2:                   988
        EF_KAIHOU:                     989
        EF_GROUND_EXPLOSION:           990
        EF_KG_KAGEHUMI:                991
        EF_KO_ZENKAI_WATER:            992
        EF_KO_ZENKAI_LAND:             993
        EF_KO_ZENKAI_FIRE:             994
        EF_KO_ZENKAI_WIND:             995
        EF_KO_JYUMONJIKIRI:            996
        EF_KO_SETSUDAN:                997
        EF_RED_CROSS:                  998
        EF_KO_IZAYOI:                  999
        EF_ROTATE_LINE_BLUE:          1000
        EF_KG_KYOMU:                  1001
        EF_KO_HUUMARANKA:             1002
        EF_BLUELIGHTBODY:             1003
        EF_KAGEMUSYA:                 1004
        EF_OB_GENSOU:                 1005
        EF_NO100_FIRECRACKER:         1006
        EF_KO_MAKIBISHI:              1007
        EF_KAIHOU1:                   1008
        EF_AKAITSUKI:                 1009
        EF_ZANGETSU:                  1010
        EF_GENSOU:                    1011
        EF_HAT_EFFECT:                1012
        EF_CHERRYBLOSSOM:             1013
        EF_EVENT_CLOUD:               1014
        EF_RUN_MAKE_OK:               1015
        EF_RUN_MAKE_FAILURE:          1016
        EF_MIRESULT_MAKE_OK:          1017
        EF_MIRESULT_MAKE_FAIL:        1018
        EF_ALL_RAY_OF_PROTECTION:     1019
        EF_VENOMFOG:                  1020
        EF_DUSTSTORM:                 1021
        EF_LEVEL160:                  1022
        EF_LEVEL160_SUB:              1023
        EF_MAPCHAIN:                  1024
        EF_MAGIC_FLOOR:               1025
        EF_ICEMINE:                   1026
        EF_FLAMECORSS:                1027
        EF_ICEMINE_1:                 1028
        EF_DANCE_BLADE_ATK:           1029
        EF_DARKPIERCING:              1030
        EF_INVINCIBLEOFF2:            1031
        EF_MAXPAIN:                   1032
        EF_DEATHSUMMON:               1033
        EF_MOONSTAR:                  1034
        EF_STRANGELIGHTS:             1035
        EF_SUPER_STAR:                1036
        EF_YELLOBODY:                 1037
        EF_COLORPAPER2:               1038
        EF_EVILS_PAW:                 1039
        EF_GC_DARKCROW:               1040
        EF_RK_DRAGONBREATH_WATER:     1041
        EF_ALL_FULL_THROTTLE:         1042
        EF_SR_FLASHCOMBO:             1043
        EF_RK_LUXANIMA:               1044
        EF_CLOUD10:                   1045
        EF_SO_ELEMENTAL_SHIELD:       1046
        EF_AB_OFFERTORIUM:            1047
        EF_WL_TELEKINESIS_INTENSE:    1048
        EF_GN_ILLUSIONDOPING:         1049
        EF_NC_MAGMA_ERUPTION:         1050
        EF_LG_KINGS_GRACE:            1051
        EF_BLOODDRAIN2:               1052
        EF_NPC_WIDEWEB:               1053
        EF_NPC_BURNT:                 1054
        EF_NPC_CHILL:                 1055
        EF_RA_UNLIMIT:                1056
        EF_AB_OFFERTORIUM_RING:       1057
        EF_SC_ESCAPE:                 1058
        EF_WM_FRIGG_SONG:             1059
        EF_FLICKER:                   1060
        EF_C_MAKER:                   1061
        EF_HAMMER_OF_GOD:             1062
        EF_MASS_SPIRAL:               1063
        EF_FIRE_RAIN:                 1064
        EF_WHITEBODY:                 1065
        EF_BANISHING_BUSTER:          1066
        EF_SLUGSHOT:                  1067
        EF_D_TAIL:                    1068
        EF_BIND_TRAP1:                1069
        EF_BIND_TRAP2:                1070
        EF_BIND_TRAP3:                1071
        EF_JUMPBODY1:                 1072
        EF_ANIMATED_EMITTER:          1073
        EF_RL_EXPLOSION:              1074
        EF_C_MAKER_1:                 1075
        EF_QD_SHOT:                   1076
        EF_P_ALTER:                   1077
        EF_S_STORM:                   1078
        EF_MUSIC_HAT:                 1079
        EF_CLOUD_KILL:                1080
        EF_ESCAPE:                    1081
        EF_XENO_SLASHER:              1082
        EF_FLOWERSMOKE:               1083
        EF_FSTONE:                    1084
        EF_QSCARABA:                  1085
        EF_LJOSALFAR:                 1086
        EF_HAPPINESSSTAR:             1087
        EF_POWER_OF_GAIA:             1088
        EF_MAPLE_FALLS:               1089
        EF_MARKING_USE_CHANGEMONSTER: 1090
        EF_MAGICAL_FEATHER:           1091
        EF_MERMAID_LONGING:           1092
        EF_GIFT_OF_SNOW:              1093
        EF_ACH_COMPLETE:              1094
        EF_TIME_ACCESSORY:            1095
        EF_SPRITEMABLE:               1096
        EF_TUNAPARTY:                 1097
    
    
    

    Just gotta update my own client now haha

  11. Not exactly sure what your asking but 

     

    MoveSpeed: Monster's speed. Sets speed (cells/sec).
                    1000 / SPEED (CELLS/SEC)

     So Poring has 400 Move speed, so im assuming thats 4 cells per seconds

     

    AttackMotion: 1000 / ASPD (ATTACKS/SEC)
                  

    So poring has 480 aspd, thats 2 attacks per second

     

  12. Anyone wanna help me fill this up, im really unfamiliar with renewal and dont know any of these.

    Im stuck on browedit revision 586 (the same one used in the tutorial videos), couldnt get any other to work so i may just be wasting time with this post. 

    Ive placed effects up until #1050 and barely any of these i could bring up with @effect command and just spawning them in one of my maps and they showed up fine. Thats already 100 more then the current effects_doc, id imagine with the newer clients there would be even more since soul reaper was released. I could just be mistaken since im a pre re kid so if someone wants to look through and give them real descriptions im sure itd be appreciated. . . . 

    These are a few of them up until 1050, im sure you can verify if they are just duplicates or whatever just by looking at them but i have no idea

    skillsz2.png

    skillsz.png

    skills3.png

    It clearly says NO MORE EFFECTS FROM 2008 CLIENT, and im just on 2015 client , like i said their is probably more on a 2018-2019 client 

     

  13. 14 minutes ago, utofaery said:

    lllaaazzz:

    Why do you need to dig so far and so deep to that far to the source when it all can be done in item bonus which is not even close to the source??

    the only thing or command you will need is 

        Id: 2589
        AegisName: "Fallen_Angel_Wing"
            bonus bAtk,readparam(bStr)/20;


        Id: 4303
        AegisName: "Whisper_Boss_Card"

            if(readparam(bStr)>=80) {
                bonus bBaseAtk,20;
            }

     

        Id: 4562
        AegisName: "Champion_Card"
            bonus bAtkRate,7;

    maybe cause i dont understand what he wants and just providing what i know 

    he asked me this in another thread

    "Why I dont have ATK bonuses on my pre-renewal server?) Bonus to MATK works correctly."

     

    Why would i respond with such a simple thing i assumed was the basics . . . 

  14. /*==========================================
     * Calculates the standard damage of a normal attack assuming it hits,
     * it calculates nothing extra fancy, is needed for magnum breaks WATK_ELEMENT bonus. [Skotlex]
     *------------------------------------------
     * Pass damage2 as NULL to not calc it.
     * Flag values: // TODO: Check whether these values are correct (the flag parameter seems to be passed through to other functions), and replace them with an enum.
     * &1: Critical hit
     * &2: Arrow attack
     * &4: Skill is Magic Crasher
     * &8: Skip target size adjustment (Extremity Fist?)
     *&16: Arrow attack but BOW, REVOLVER, RIFLE, SHOTGUN, GATLING or GRENADE type weapon not equipped (i.e. shuriken, kunai and venom knives not affected by DEX)
     */
    /* 'battle_calc_base_damage' is used on renewal, 'battle_calc_base_damage2' otherwise. */
    // FIXME: Missing documentation for flag2
    int64 battle_calc_base_damage(struct block_list *src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int nk, bool n_ele, short s_ele, short s_ele_, int type, int flag, int flag2) {
        int64 damage;
        struct status_data *st = status->get_status_data(src);
        struct status_change *sc = status->get_sc(src);
        const struct map_session_data *sd = NULL;
        nullpo_retr(0, src);
    
        sd = BL_CCAST(BL_PC, src);
    
        if ( !skill_id ) {
            s_ele = st->rhw.ele;
            s_ele_ = st->lhw.ele;
            if (sd != NULL) {
                if (sd->charm_type != CHARM_TYPE_NONE && sd->charm_count >= MAX_SPIRITCHARM) {
                    s_ele = s_ele_ = sd->charm_type;
                }
                if (flag&2 && sd->bonus.arrow_ele != 0)
                    s_ele = sd->bonus.arrow_ele;
            }
        }
        if (src->type == BL_PC) {
            int64 batk;
            // Property from mild wind bypasses it
            if (sc && sc->data[SC_TK_SEVENWIND])
                batk = battle->calc_elefix(src, bl, skill_id, skill_lv, status->calc_batk(bl, sc, st->batk, false), nk, n_ele, s_ele, s_ele_, false, flag);
            else
                batk = battle->calc_elefix(src, bl, skill_id, skill_lv, status->calc_batk(bl, sc, st->batk, false), nk, n_ele, ELE_NEUTRAL, ELE_NEUTRAL, false, flag);
            if (type == EQI_HAND_L)
                damage = batk + 3 * battle->calc_weapon_damage(src, bl, skill_id, skill_lv, &st->lhw, nk, n_ele, s_ele, s_ele_, status_get_size(bl), type, flag, flag2) / 4;
            else
                damage = (batk << 1) + battle->calc_weapon_damage(src, bl, skill_id, skill_lv, &st->rhw, nk, n_ele, s_ele, s_ele_, status_get_size(bl), type, flag, flag2);
        } else {
            damage = (st->batk + 15) + battle->calc_weapon_damage(src, bl, skill_id, skill_lv, &st->rhw, nk, n_ele, s_ele, s_ele_, status_get_size(bl), type, flag, flag2);
        }
    
        return damage;
    }
    int64 battle_calc_base_damage2(struct status_data *st, struct weapon_atk *wa, struct status_change *sc, unsigned short t_size, struct map_session_data *sd, int flag) {
        unsigned int atkmin=0, atkmax=0;
        short type = 0;
        int64 damage = 0;
    
        nullpo_retr(damage, st);
        nullpo_retr(damage, wa);
        if (!sd) { //Mobs/Pets
            if(flag&4) {
                atkmin = st->matk_min;
                atkmax = st->matk_max;
            } else {
                atkmin = wa->atk;
                atkmax = wa->atk2;
            }
            if (atkmin > atkmax)
                atkmin = atkmax;
        } else { //PCs
            atkmax = wa->atk;
            type = (wa == &st->lhw)?EQI_HAND_L:EQI_HAND_R;
    
            if (!(flag&1) || (flag&2)) { //Normal attacks
                atkmin = st->dex;
    
                if (sd->equip_index[type] >= 0 && sd->inventory_data[sd->equip_index[type]])
                    atkmin = atkmin*(80 + sd->inventory_data[sd->equip_index[type]]->wlv*20)/100;
    
                if (atkmin > atkmax)
                    atkmin = atkmax;
    
                if(flag&2 && !(flag&16)) { //Bows
                    atkmin = atkmin*atkmax/100;
                    if (atkmin > atkmax)
                        atkmax = atkmin;
                }
            }
        }
    
        if (sc && sc->data[SC_MAXIMIZEPOWER])
            atkmin = atkmax;
    
        //Weapon Damage calculation
        if (!(flag&1))
            damage = (atkmax>atkmin? rnd()%(atkmax-atkmin):0)+atkmin;
        else
            damage = atkmax;
    
        if (sd) {
            //rodatazone says the range is 0~arrow_atk-1 for non crit
            if (flag&2 && sd->bonus.arrow_atk)
                damage += ( (flag&1) ? sd->bonus.arrow_atk : rnd()%sd->bonus.arrow_atk );
    
            //SizeFix only for players
            if (!(sd->special_state.no_sizefix || (flag&8)))
                damage = damage * ( type == EQI_HAND_L ? sd->left_weapon.atkmods[t_size] : sd->right_weapon.atkmods[t_size] ) / 100;
        }
    
        //Finally, add baseatk
        if(flag&4)
            damage += st->matk_min;
        else
            damage += st->batk;
    
        //rodatazone says that Overrefined bonuses are part of baseatk
        //Here we also apply the weapon_atk_rate bonus so it is correctly applied on left/right hands.
        if(sd) {
            if (type == EQI_HAND_L) {
                if(sd->left_weapon.overrefine)
                    damage += rnd()%sd->left_weapon.overrefine+1;
                if (sd->weapon_atk_rate[sd->weapontype2])
                    damage += damage * sd->weapon_atk_rate[sd->weapontype2] / 100;
            } else { //Right hand
                if(sd->right_weapon.overrefine)
                    damage += rnd()%sd->right_weapon.overrefine+1;
                if (sd->weapon_atk_rate[sd->weapontype1])
                    damage += damage * sd->weapon_atk_rate[sd->weapontype1] / 100;
            }
        }
        return damage;
    }
    int status_get_weapon_atk(struct block_list *bl, struct weapon_atk *watk, int flag)
    {
    #ifdef RENEWAL
        int min = 0, max = 0;
        struct status_change *sc = status->get_sc(bl);
    
        nullpo_ret(bl);
        nullpo_ret(watk);
        if (bl->type == BL_PC && watk->atk) {
            float strdex_bonus, variance;
            int dstr;
            if (flag&2)
                dstr = status_get_dex(bl);
            else
                dstr = status_get_str(bl);
    
            variance = 5.0f * watk->atk *  watk->wlv / 100.0f;
            strdex_bonus = watk->atk * dstr / 200.0f;
    
            min = (int)(watk->atk - variance + strdex_bonus) + watk->atk2;
            max = (int)(watk->atk + variance + strdex_bonus) + watk->atk2;
        } else if ((bl->type == BL_MOB || bl->type == BL_MER) && watk->atk) {
            min = watk->atk * 80 / 100;
            max = watk->atk * 120 / 100;
        } else if (bl->type == BL_HOM && watk->atk) {
            if (flag & 4) {
                max = min = status->get_matk(bl, 2);
            } else {
                min = watk->atk;
                max = watk->atk2;
            }
        }
    
        if (!(flag&1)) {
            if (max > min)
                max = min + rnd()%(max - min + 1);
            else
                max = min;
        }
    
        if ( bl->type == BL_PC && !(flag & 2) ) {
            const struct map_session_data *sd = BL_UCCAST(BL_PC, bl);
            short index = sd->equip_index[EQI_HAND_R], refine;
            if ( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON
                && (refine = sd->status.inventory[index].refine) < 16 && refine ) {
                int r = status->dbs->refine_info[watk->wlv].randombonus_max[refine + (4 - watk->wlv)] / 100;
                if ( r )
                    max += (rnd() % 100) % r + 1;
            }
    
            if (sd->charm_type == CHARM_TYPE_LAND && sd->charm_count > 0)
                max += 10 * max * sd->charm_count / 100;
        }
    
        max = status->calc_watk(bl, sc, max, false);
    
        return max;
    #else
        return 0;
    #endif
    }

     

    You can change the damage variance pretty easily but i cant see an easy tweak to ATK using STR but that may just be my lack of knowledge 

  15. After re reading i think you may have a different problem

     

    Are you saying the wings you got are COSTUME items and the red glasses are NORMAL items? and you want them both to show? 

    Pretty sure thats not possible unless you make the wings lower headgear 

     

    Sorry im really not familiar with this 

×
×
  • Create New...