Jump to content

iraciz

Members
  • Posts

    562
  • Joined

  • Last visited

  • Days Won

    8

Posts posted by iraciz

  1. Good day sirs, please note that, if you are using recent rathena revisions,  the skill already exist in skill_db.yml

    because of this, the step 1 and 2 are not neccesary and can be skipped from this guide.

      - Id: 5067
        Name: ALL_EQSWITCH
        Description: Equip Switch
        MaxLevel: 1
        TargetType: Self
        DamageFlags:
          NoDamage: true
        Cooldown: 2000
        CastTimeFlags:
          IgnoreDex: true
          IgnoreStatus: true
          IgnoreItemBonus: true
        CastDelayFlags:
          IgnoreDex: true
          IgnoreStatus: true
          IgnoreItemBonus: true

     

  2. Hello, I am using latest rathena revision, pre-renewal,  and runing client 2018-08-21

    My problem is that,  Monsters with chat structure,  are not sending the dialog according to it skills

     

    mob_skill_db

    // Structure of Database:
    // MobID,Dummy value (info only),State,SkillID,SkillLv,Rate,CastTime,Delay,Cancelable,Target,Condition type,Condition value,val1,val2,val3,val4,val5,Emotion,Chat

    1917,Wounded Morocc@NPC_DRAGONFEAR,chase,659,10,10000,0,600000,no,self,myhpltmaxrate,5,,,,,,,17
    1917,Wounded Morocc@NPC_DRAGONFEAR,attack,659,10,10000,0,600000,no,self,myhpltmaxrate,5,,,,,,,17
    //10% HP - Talk
    1917,Wounded Morocc@NPC_TALK,chase,682,10,10000,0,600000,no,self,myhpltmaxrate,10,,,,,,,16
    1917,Wounded Morocc@NPC_TALK,attack,682,10,10000,0,600000,no,self,myhpltmaxrate,10,,,,,,,16
    //30% HP - Earthquake Combo
    1917,Wounded Morocc@NPC_WIDEHELLDIGNITY,chase,684,1,10000,2000,180000,no,self,myhpltmaxrate,30,,,,,,,6
    1917,Wounded Morocc@NPC_WIDEHELLDIGNITY,attack,684,1,10000,2000,180000,no,self,myhpltmaxrate,30,,,,,,,6

    mob_chat_db

    // Monster Chat Database
    //
    // Structure of Database:
    // Line_ID#Color_Code#Dialog
    
    6#0xFF0000#You worthless humans. Your so-called holy powers have no effect on me!
    16#0xFF0000#Oh, you're stronger than I thought!
    17#0xFF0000#No, this can't be happening! I'm Satan Morocc, Demon King of Destruction!

    Any idea if this was changed?

    They should display their talk, This is from emulator, don´t get confused with the monstertalktables from client its completely different. 

     

     

  3. I tried yout script, but it still ignoring the shoes

     

    prontera,155,185,6	script	Orzuelo	550,{
    if (readparam(bAgi) >= 89 && countitem(2403) < 1) goto resist;
    mes "You have both requires";
    soundeffectall "wild_rose_die.wav",0;
    end;
    
    resist:
    mes "something is missing";
    end;
    }

    If I have both requires, I mean the agi over 89 and the shoes it mus goto resist label

    If dont, it must continue below lines until end.

    is not working as intended

     

     

  4. Good day, my require is not working, the label is running ignoring the countitem (shoes)  

    Require:

    if (readparam(bAgi)>=89) || (countitem(2403) < 1) goto resist;

     

    this is not working, how to check 2 conditions at once? agi stat and the item in inventory. the script is running without the shoes.

     

    Thanks in advance.

     

  5. Please note that id 1893 is aready taken by official item: Costume Miracle Plant

    https://www.divine-pride.net/database/item/31729/kRO

    	[31729] = {
    		unidentifiedDisplayName = "Mask",
    		unidentifiedResourceName = "마스크",
    		unidentifiedDescriptionName = { "Unknown Item, can be identified by using a ^6666CCMagnifier^000000." },
    		identifiedDisplayName = "Costume Miracle Plant",
    		identifiedResourceName = "c_miracle_plant",
    		identifiedDescriptionName = {
    		"Every time you take a step, the fragrant flower scent resonates.",
    			"Class:^6666CC Costume^000000",
    			"Location:^6666CC Lower^000000",
    			"Weight:^009900 0^000000",
    			"Level Requirement:^009900 1^000000",
    			"Jobs:^6666CC All^000000"	
    		},
    		slotCount = 0,
    		ClassNum = 1893
    	},

    ACCESSORY_C_miracle_plant = 1893,

    Diff yor exe again, and increase max headgear id view to 5000, and start adding your custom item ids from 2500 and foward.

    BTW # 1...

    Why are some double commas separing structure of your item?
    Why Ageis name and name are the same?
    Why is a dot also separing structures?
    Why is a blank space between structures?

    The script is a clone of the ears of ifrit, you copy pasted the item (wrong) I guess to find out the middle headgear location, if you were wondering, location for middle gear items is 512.

    your script:

    40500, CHESHIREEARS, CHESHIREEARS, 4.20,, 300,, 0,, 0.0xFFFFFFFE, 63.2.512,, 50.0.1893, {bonus bStr, 1; bonus bInt, 1; bonus bMdef, 3; bonus2 bAddEle, Ele_Fire, 3; bonus2 bSkillAtk, "SM_BASH", 4; bonus2 bSkillAtk, "SM_MAGNUM", 4; }, {}, {}

    Script should be this one, according to your item screenshot description:

    40500,Chesire_Ears,Ears_of_Chesire,4,20,,100,,0,,0,0xFFFFFFFE,7,2,512,,50,0,1893,{ bonus2 bAddEle,Ele_Fire,3; bonus2 bSubEle,Ele_Water,-3; },{},{}

     

    BTW #2

    Your Custom item Chesire Ears, Already Exist, item id is 31151,

    Official id view is: ACCESSORY_Chasher_Ear (1565)

     

    don't really know the reason of adding an item twice but w/e.

    this is the official chesire ears script and description

    31151,C_Chasher_Ear,Costume Cheshire's Cat Ears,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1565,{},{},{}
    	[31151] = {
    		unidentifiedDisplayName = "Hat",
    		unidentifiedResourceName = "캡",
    		unidentifiedDescriptionName = { "Unknown Item, can be identified by using a ^6666CCMagnifier^000000." },
    		identifiedDisplayName = "Costume Cheshire's Cat Ears",
    		identifiedResourceName = "체샤의고양이귀",
    		identifiedDescriptionName = {
    			"A replica of Cheshire's Cat Ears.",
    			"Class:^6666CC Costume^000000",
    			"Location:^6666CC Upper^000000",
    			"Weight:^006600 0^000000",
    			"Level Requirement:^006600 1^000000",
    			"Jobs:^6666CC All^000000"
    		},
    		slotCount = 0,
    		ClassNum = 1565
    	},

     

    Is an animated gear, the ears flap a little.

    chesears.png.3e56c76940a6587cb7b28bfcc3d308a7.png

  6. Updating solution for newer revisions, (remember this mod is intended for pre-re servers who miss the ancient hitlock for bosses)

    scr/map/status.c

    line 7681:

    Original Source:

    	/// It has been confirmed on official servers that MvP mobs have no dmotion even without endure
    	if( bl->type == BL_MOB && status_get_class_(bl) == CLASS_BOSS )
    		return 0;
    	if (bl->type == BL_PC && ((TBL_PC *)bl)->special_state.no_walk_delay)
    		return 0;
    	if( sc->data[SC_ENDURE] || sc->data[SC_RUN] || sc->data[SC_WUGDASH] )
    		return 0;
    
    	return (unsigned short)cap_value(dmotion,0,USHRT_MAX);
    }

    Must Change To:

    	/// It has been confirmed on official servers that MvP mobs have no dmotion even without endure
    	
    	//if( bl->type == BL_MOB && status_get_class_(bl) == CLASS_BOSS )
    	
    	//return 0;
    	if (bl->type == BL_PC && ((TBL_PC *)bl)->special_state.no_walk_delay)
    		return 0;
    	if( sc->data[SC_ENDURE] || sc->data[SC_RUN] || sc->data[SC_WUGDASH] )
    		return 0;
    
    	return (unsigned short)cap_value(dmotion,0,USHRT_MAX);
    }

     

    and scr/map/unit.c

    original:

    /**
     * Applies a walk delay to a unit
     * @param bl: Object to apply walk delay to
     * @param tick: Current tick
     * @param delay: Amount of time to set walk delay
     * @param type: Type of delay
     *	0: Damage induced delay; Do not change previous delay
     *	1: Skill induced delay; Walk delay can only be increased, not decreased
     * @return Success(1); Fail(0);
     */
    int unit_set_walkdelay(struct block_list *bl, t_tick tick, t_tick delay, int type)
    {
    	struct unit_data *ud = unit_bl2ud(bl);
    
    	if (delay <= 0 || !ud)
    		return 0;
    
    	if (type) {
    		//Bosses can ignore skill induced walkdelay (but not damage induced)
    		if(bl->type == BL_MOB && status_has_mode(status_get_status_data(bl),MD_STATUS_IMMUNE))
    			return 0;
    		//Make sure walk delay is not decreased
    		if (DIFF_TICK(ud->canmove_tick, tick+delay) > 0)
    			return 0;
    	} else {
    		// Don't set walk delays when already trapped.
    		if (!unit_can_move(bl)) {
    			unit_stop_walking(bl,4); //Unit might still be moving even though it can't move
    			return 0;
    		}
    		//Immune to being stopped for double the flinch time
    		if (DIFF_TICK(ud->canmove_tick, tick-delay) > 0)
    			return 0;
    	}
    
    	ud->canmove_tick = tick + delay;
    
    	if (ud->walktimer != INVALID_TIMER) { // Stop walking, if chasing, readjust timers.
    		if (delay == 1) // Minimal delay (walk-delay) disabled. Just stop walking.
    			unit_stop_walking(bl,0);
    		else {
    			// Resume running after can move again [Kevin]
    			if(ud->state.running)
    				add_timer(ud->canmove_tick, unit_resume_running, bl->id, (intptr_t)ud);
    			else {
    				unit_stop_walking(bl,4);
    
    				if(ud->target)
    					add_timer(ud->canmove_tick+1, unit_walktobl_sub, bl->id, ud->target);
    			}
    		}
    	}
    
    	return 1;
    }

    replace original with:

    /**
     * Applies a walk delay to a unit
     * @param bl: Object to apply walk delay to
     * @param tick: Current tick
     * @param delay: Amount of time to set walk delay
     * @param type: Type of delay
     *	0: Damage induced delay; Do not change previous delay
     *	1: Skill induced delay; Walk delay can only be increased, not decreased
     * @return Success(1); Fail(0);
     */
    int unit_set_walkdelay(struct block_list *bl, t_tick tick, t_tick delay, int type)
    {
    	struct unit_data *ud = unit_bl2ud(bl);
    
    	if (delay <= 0 || !ud)
    		return 0;
    	
    	ud->canmove_tick = tick + delay;
    
    	if (ud->walktimer != INVALID_TIMER) { // Stop walking, if chasing, readjust timers.
    		if (delay == 1) // Minimal delay (walk-delay) disabled. Just stop walking.
    			unit_stop_walking(bl,0);
    		else {
    			// Resume running after can move again [Kevin]
    			if(ud->state.running)
    				add_timer(ud->canmove_tick, unit_resume_running, bl->id, (intptr_t)ud);
    			else {
    				unit_stop_walking(bl,4);
    
    				if(ud->target)
    					add_timer(ud->canmove_tick+1, unit_walktobl_sub, bl->id, ud->target);
    			}
    		}
    	}
    
    	return 1;
    }

     

    now go to rAthena/conf/battle/monster.conf

    // Monster damage delay rate (Note 1)
    // Setting to no/0 is like they always have endure.
    monster_damage_delay_rate: 100

    Default is 100, if you want them to stop with mor difficult change delay rate to 50.

  7. Facepalm....

    Just open :


    luafiles514\lua files\spreditinfo\2dlayerdir_f.lub

    and remove

        [SPRITE_ROBE_IDs.ROBE_WINGS] = LAYER_BIG,
        [SPRITE_ROBE_IDs.ROBE_BAG_OF_ADVENTURER] = LAYER_SMALL,
        [SPRITE_ROBE_IDs.ROBE_WINGS_OF_FALLEN_ANGEL] = LAYER_BIG,
        [SPRITE_ROBE_IDs.ROBE_AMISTR_BAG] = LAYER_SMALL,
        [SPRITE_ROBE_IDs.ROBE_Love_Dad_Wings_2012] = LAYER_BIG,
        [SPRITE_ROBE_IDs.ROBE_KIRIN_WING] = LAYER_BIG,
        [SPRITE_ROBE_IDs.ROBE_Ribbon_Piamat] = LAYER_SMALL

    it will fix your problem.

    Also this:

    find spriterobename.lub  and remove all on top:

    RobeTopLayer = {
        SPRITE_ROBE_IDs.ROBE_BAG_OF_ADVENTURER,
        SPRITE_ROBE_IDs.ROBE_AMISTR_BAG,
        SPRITE_ROBE_IDs.ROBE_BAG_OF_ANTONIO,
        SPRITE_ROBE_IDs.ROBE_Poring_Bag,
        SPRITE_ROBE_IDs.ROBE_EXE_Backpack,
        SPRITE_ROBE_IDs.ROBE_Thanatos_Sword,
        SPRITE_ROBE_IDs.ROBE_GiantCatBag,
        SPRITE_ROBE_IDs.ROBE_BlackCatBag,
        SPRITE_ROBE_IDs.ROBE_C_School_Bag_RD,
        SPRITE_ROBE_IDs.ROBE_C_School_Bag_BL,
        SPRITE_ROBE_IDs.ROBE_C_Cat_Fork,
        SPRITE_ROBE_IDs.ROBE_Balloon_Wing,
        SPRITE_ROBE_IDs.ROBE_C_T_Bear_Bag,
        SPRITE_ROBE_IDs.ROBE_C_Big_Foxtail,
        SPRITE_ROBE_IDs.ROBE_C_Loli_Ruri_Moon,
        SPRITE_ROBE_IDs.ROBE_Bow_On_the_Back,
        SPRITE_ROBE_IDs.ROBE_Santa_Backpack,
        SPRITE_ROBE_IDs.ROBE_C_Ice_Wing
    }

    Sorry for the necroposting, But atleast, it will leave the answer for future references.

  8. Carga Mace Sprite, Male Monk, Champio, Sura


    Iraciz Custom Carga Mace Sprite!

    It is black, it is Big, and it Rocks!!

    - New Carga mace sprite, customized mace created and adapted to the champion male class! It looks sweet and the act file work perfect as well!

    enjoy it, it's free, and please! do not claim it as yours!

    sample2.png

    sample.png


     

  9. Please note that  the custom pet db is now in pet_db.yml
    EggItem: 
    must be the same name as itemdb example in code bellow:

      - Mob: BLUE_UNICORN
        EggItem: Blue_Unicorn_Egg
        FoodItem: Blue_Herb
        Fullness: 2
        IntimacyFed: 40
        CaptureRate: 0
        SpecialPerformance: false
        AllowAutoFeed: true
        Script: >
          .@i = getpetinfo(PETINFO_INTIMATE);
          
          if (.@i >= PET_INTIMATE_LOYAL) {
            bonus bAgi,2;
            bonus bSpeedRate,25;
          } else if (.@i >= PET_INTIMATE_CORDIAL) {
            bonus bAgi,1;
          }  

    For any changes it is necessary to @reloadmobdb and restart server, it won't apply if server is restarted, 

    Very important, you should try to load this sql file upgrade to your db, its inside the rAthena sql-files 

    sql-files/upgrades/upgrade_20190309.sql 

    This may correct issues regarding pets not returning to egg shells or else.

     

  10. Good day, since db/skill_copyable_db.txt is obsolte now, any new change must be applied in the skill_db.yml

    In this case I want to remove the requirements for "COPIED" (not global) skill sonic blow, and allow the rogue/salker/shadowchaser to cast the skill with dagger, swords or even bow.

    This copyflags are working fine:

        CopyFlags:
          Skill:
            Plagiarism: true
            Reproduce: true

    But.... Now I have to remove the weapon requirement for copied skills, unfortunately there's not any example provided to use the option

    #     RemoveRequirement:      Remove a requirement type. (Optional)

     

        Name: AS_SONICBLOW
        Description: Sonic Blow
        MaxLevel: 10
        Type: Weapon
        TargetType: Attack
        Range: 1
        Hit: Multi_Hit
        HitCount: -8
        Element: Weapon
        CopyFlags:
          Skill:
            Plagiarism: true
            Reproduce: true
        AfterCastActDelay: 2000
        AfterCastWalkDelay: 2000
        Duration2: 5000
        CastDelayFlags:
          IgnoreStatus: true
        Requires:
          SpCost:
            - Level: 1
              Amount: 16
            - Level: 2
              Amount: 18
            - Level: 3
              Amount: 20
            - Level: 4
              Amount: 22
            - Level: 5
              Amount: 24
            - Level: 6
              Amount: 26
            - Level: 7
              Amount: 28
            - Level: 8
              Amount: 30
            - Level: 9
              Amount: 32
            - Level: 10
              Amount: 34
          Weapon:
            Katar: true

     

    any idea?

  11. 1 minute ago, Invisible415 said:

    Appreciated. Thank you. It works after been commented (//SC_TWOHANDQUICKEN,).

     

     

    Hey bro, is not done yet! my answer was not a solution, the buff will not dissapear when switching to a different weapon,  or taking off the 2hsw, the two hand quicken will remain even bare-handed...


    you need to ask for a scr mood in the source request section, provide the line I told you,   they can add a timer of  100ms to recheck the weapon switch and end the sc_twohandquicken status if the equiped weapon is not the correct type..

  12. I will share this revert of magnum break duration2 effect. 

    The ancient behavior of this mood is:

    The after-skill cast, provides a 10 seconds duration2 buff;  this duration2 imbues the caster with  a 20% Fire damage element "perfect hit" "(Never Miss)" "(Flee Ignoring)" . While fighting ghost monsters you may miss your total attack but you will hit with the 20% damage.
    While figthing high flee monsters like wanderman you can use magnum and buff youself, and then apply the stun with bash (fatalblow).

    Always hit, this is intended for pre-renewal servers.

    How to change?

    Go the scr/map/battle.cpp

    if (sc && sc->data[SC_WATK_ELEMENT] && (wd->damage || wd->damage2)) {
    		// Descriptions indicate this means adding a percent of a normal attack in another element. [Skotlex]

    above the line 3015, this part: // Descriptions indicate this means adding a percent of a normal attack in another element. [Skotlex]

    remove "&& (wd->damage || wd->damage2)"

     

    It should end like this:

    if (sc && sc->data[SC_WATK_ELEMENT]) {
     // Descriptions indicate this means adding a percent of a normal attack in another element. [Skotlex]

     

    After this change is made, compile the server and test the reverted behavior, heres the picture, hitting ghost during the skill duration2.

    magnum.png.e82665eac85a22e9693d50a37e33f6df.png

     

    • MVP 1
    • Like 1
  13. Bad SQL file, not saving properly the items to the cart, Maybe Uncompatible sql for your emulator????

    this is an example of a healty sql cart_invetory items save, not cloning the 4th slot.

    that problem happened to me once, because I loaded rathena sql files in an eamod emulator, and that was the reason for my server closure. 

    cart.thumb.png.4ea37137d56b601928326db76b2b2795.png

     

    Try to reproduce this bug afer loading an updated main_sql file.

     

  14. As a fact, this also happen when switching shields while autoguard status, or changing axes while adrenaline rush, even spears with spearquicken, changing the weapon end the status and you have to cast again the skill, this is the oficial behavior.

     

    I've found this code in scr/map/pc.c

    /**
     * Check if we still have the correct weapon to continue the skill (actually status)
     * If not ending it
     * @param sd
     * @return 0:error, 1:check done
     */
    static void pc_checkallowskill(struct map_session_data *sd)
    {
    	const enum sc_type scw_list[] = {
    		SC_TWOHANDQUICKEN,
    		SC_ONEHAND,
    		SC_AURABLADE,
    		SC_PARRYING,
    		SC_SPEARQUICKEN,
    		SC_ADRENALINE,
    		SC_ADRENALINE2,
    		SC_DANCING,
    		SC_GATLINGFEVER,
    	};
    	uint8 i;
    	nullpo_retv(sd);
    
    	if(!sd->sc.count)
    		return;
    
    	for (i = 0; i < ARRAYLENGTH(scw_list); i++)
    	{	// Skills requiring specific weapon types
    		if( scw_list[i] == SC_DANCING && !battle_config.dancing_weaponswitch_fix )
    			continue;
    		if(sd->sc.data[scw_list[i]] &&
    			!pc_check_weapontype(sd,skill_get_weapontype(status_sc2skill(scw_list[i]))))
    			status_change_end(&sd->bl, scw_list[i], INVALID_TIMER);
    	}
    
    	if(sd->sc.data[SC_SPURT] && sd->status.weapon)
    		// Spurt requires bare hands (feet, in fact xD)
    		status_change_end(&sd->bl, SC_SPURT, INVALID_TIMER);
    
    	if(sd->status.shield <= 0) { // Skills requiring a shield
    		const enum sc_type scs_list[] = {
    			SC_AUTOGUARD,
    			SC_DEFENDER,
    			SC_REFLECTSHIELD,
    			SC_REFLECTDAMAGE
    		};
    		for (i = 0; i < ARRAYLENGTH(scs_list); i++)
    			if(sd->sc.data[scs_list[i]])
    				status_change_end(&sd->bl, scs_list[i], INVALID_TIMER);
    	}
    }

     

    Feel free to copy this code and ask in Source Request Section in this forum a "MOOD" to switch weapons without losing the status of two-hand quicken or other skills, but ending the status if it is a invalid weapon for the skill, It could be a check with timer in miliseconds to return 1. 

  15. Attached in my post.

    data.rar

    Next time this happen, find the sprite name in the System/iteminfo.lua

        [22625] = {
            unidentifiedDisplayName = "Oktoberfest Bag",
            unidentifiedResourceName = "통학가방",
            unidentifiedDescriptionName = { "..." },
            identifiedDisplayName = "Oktoberfest Bag",
            identifiedResourceName = "통학가방",
            identifiedDescriptionName = { "..." },
            slotCount = 0,
            ClassNum = 0
        },

     Rename any file with that name, then use Unbollox program and convert that into hardcoded (left to the korean), don´t forget to uncheck recursive..

    copy then than file hardcoded name and search in the grf's VOILÁ

    fsd.png.7b5684b76a08c58daba5ac8be13e6be8.png

     

×
×
  • Create New...