Jump to content

Bringer

Members
  • Posts

    742
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Bringer

  1. 2 hours ago, mauiboy said:

    You're always a life saver Bringer. Will try these codes. How about the glist consume per success strip?

     		//Nothing stripped.
    -		if( sd && !i )
    +		if (sd && !i)
     			clif_skill_fail( *sd, skill_id );
    +		if (sd && tsc && sd->sc.getSCE(SC_SPIRIT) && sd->sc.getSCE(SC_SPIRIT)->val2 == SL_ROGUE) {
    +			int item_id = 7139; // Glistening Coat
    +			int ii;
    +			ARR_FIND(0, MAX_INVENTORY, ii, sd->inventory.u.items_inventory[ii].nameid == item_id);
    +			if (ii < MAX_INVENTORY) {
    +				pc_delitem(sd, ii, 1, 0, 0, LOG_TYPE_CONSUME);
    +				clif_emotion(src, ET_HUK);
    +			}
    +		}
     		break;
     	}

     

  2. you can still use the old Soul Linker Mod

    sample of Old Code

    		case CR_SHIELDCHARGE:
    			if (sd && sd->sc.data[SC_SPIRIT] && sd->sc.data[SC_SPIRIT]->val2 == SL_CRUSADER)
    				skillratio += 60 * skill_lv;
    			else
    				skillratio += 20 * skill_lv;
    			break;

    latest rathena changed the sd->sc.data[SC_SPIRIT] to sd->sc.getSCE(SC_SPIRIT)

    new code will be 

    if (sd && sd->sc.getSCE(SC_SPIRIT) && sd->sc.getSCE(SC_SPIRIT)->val2 == SL_CRUSADER)

     

  3. 4 hours ago, Tokei said:

    The purpose of encrypting the file table is to not be able to see the files anymore. While possible, retrieving the file listing would be... quite counter productive? Perhaps this feature is something you don't want to use as it doesn't seem to fit what your needs.

    i still want to give it a try and retrieve it , even if it will not be productive, is it possible because i want to know what its got so i can add as back up

  4. 3 hours ago, Rynbef said:

    Can you please rephrase your question, because I don't understand exactly what you want?

     

    Rynbef~

     @Bringer

    Make new grf then save advance choose File Encrypt File Table and try to open the grf 100% blank

     

  5. Status.cpp

            case SC_KAAHI:
                val2 = 200*val1; // HP heal
                val3 = 5*val1; // SP cost
                break;
    
            case SC_KAITE:
                val2 = 1+val1/5; // Number of bounces: 1 + skill_lv/5
                break;
    
            case SC_KAUPE:
                switch (val1) {
                    case 3: // 33*3 + 1 -> 100%
                        val2++;
                    case 1:
                    case 2: // 33, 66%
                        val2 += 33*val1;
                        val3 = 1; // Dodge 1 attack total.
                        break;
                    default: // Custom. For high level mob usage, higher level means more blocks. [Skotlex]
                        val2 = 100;
                        val3 = val1-2;
                        break;
  6. 1 hour ago, IsabelaFernandez said:

    Hi guys, I have this custom script and whenever the player enters the Stone Curse state, the @buffs remove command. Is there any solution to not be removing it?

    https://pastebin.com/Z8Bbb4Q9

       unless you edit your SC_BLESSING on your status.cpp

    	case SC_BLESSING:
    		// !TODO: Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM
    		// !but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm]
    		if ((!undead_flag && status->race != RC_DEMON) || bl->type == BL_PC) {
    			if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)
    				status_change_end(bl, SC_STONE, INVALID_TIMER);
    			if (sc->data[SC_CURSE]) {
    					status_change_end(bl, SC_CURSE, INVALID_TIMER);
    					return 1; // End Curse and do not give stat boost
    			}
    		}
    		if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH)
    			status_change_end(bl, SC_SPIRIT, INVALID_TIMER);
    		break;

     

    • Upvote 1
  7. 5 minutes ago, GM Winter said:

    i try it but sadly i cant find this lines in atcommand

    your emulator is OLD that's why you can't find the line and

    I have reviewed your atcommand.cpp file and noticed that you are still using itemdb.txt Could you please confirm if this is still the case?

    if YES

    You can select the version that is compatible with your emulator.

  8. i'm using 20180621 client too
    since my emulator YML Version already but dont have feature.itemlink: on 
    i commit this
    1st
    https://github.com/rathena/rathena/commit/55d3c1578cc6e9cc925d17f23fbacc8a0bafd8d0
    2nd 
    https://github.com/rathena/rathena/commit/7e626708826f9026cb14b062b987d77e14396515

    I Successfully diff the 2 commit above this YML Version now

    image.png.e59ab8f36a73bcb3f186664cceff8a89.png


    and my other emulator older version i use this diff
    itemlink-20190319-e6f1f21d.diff

     

    sprintf(atcmd_output2, " %s  %02.02f%%", createItemLink(item_data->nameid, 0, NULL).c_str(), mvppercent);
    

    on my Yml Version

    sprintf(atcmd_output2, (dropbonus > 0 ? " - %s  %02.02f%% + (%02.02f%%)" : " - %s  %02.02f%%"), item_db.create_item_link(id).c_str(), (float)droprate / 100, (float)dropbonus / 100);

    see the different of the codes
    for using item_db.create_item_link
    use this link

    https://rathena.org/board/topic/133347-i-want-to-modify-mi-to-look-like-the-picture-can-someone-give-me-a-solution-thanks/?do=findComment&comment=414605
    Older Emulator
    use this Link
    https://rathena.org/board/topic/133347-i-want-to-modify-mi-to-look-like-the-picture-can-someone-give-me-a-solution-thanks/?do=findComment&comment=414463

  9. 18 hours ago, sakura125 said:

    Does anyone able to mitigate the Soul Link Modification using the latest git? Can anyone help me mitigate it?

    can you post your SL MOD

    old Code

    	if((skill = pc_checkskill(sd,HT_BEASTBANE)) > 0 && (status->race == RC_INSECT || status->race == RC_BRUTE || status->race == RC_PLAYER_DORAM) ) {
    		damage += (skill * 4);
    		if (sd->sc.data[SC_SPIRIT] && sd->sc.data[SC_SPIRIT]->val2 == SL_HUNTER)
    			damage += sd->status.str;
    	}

    New Code
     

    	if((skill = pc_checkskill(sd,HT_BEASTBANE)) > 0 && (status->race == RC_INSECT || status->race == RC_BRUTE || status->race == RC_PLAYER_DORAM) ) {
    		damage += (skill * 4);
    		if (sd->sc.getSCE(SC_SPIRIT) && sd->sc.getSCE(SC_SPIRIT)->val2 == SL_HUNTER)
    			damage += sd->status.str;
    	}

     

    sd->sc.data[SC_SPIRIT]

    Change to 

    sd->sc.getSCE(SC_SPIRIT)
  10. find all SC_CONCENTRATE on status.cpp
     

    	case SC_SIGHT: // Reveal hidden ennemy on 3*3 range
    	case SC_CONCENTRATE:
    		status_change_end(bl, SC_HIDING, INVALID_TIMER);
    		status_change_end(bl, SC_CLOAKING, INVALID_TIMER);
    		status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
    		status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER);
    		status_change_end(bl, SC_NEWMOON, INVALID_TIMER);
    		status_change_end(bl, SC_STEALTH, INVALID_TIMER);

     

    • Upvote 1
  11. Spoiler

    -    script    MVP_EVENT    FAKE_NPC,{
        OnInit:
            // Mobinfo
        bindatcmd "walk",strnpcinfo(3)+"::OnSpawn",99,99;
            .mob = 20581;
            .map$ = "morocc";
            .x = 154;
            .y = 92;
            .respawn_time = 15; // Respawntime in minutes
            .percent = 1; // Item drop every x hp percent.

            // <x, y>..
            setarray(.path, 158, 87, 162, 90, 166, 87, 161, 91, 156, 90);

            // Dropiteminfo
            .item = 7227;
            .repetition = 30; // How often the item drops per x hp percent
            .expiration_time = 1; // Expiration time in minutes
            .stack_size = 1; // Stacksize per drop

            // Buffinfo
            .skill_effect = 34; // The id of the buff skill
            .skill_effect_value = 0; // The value the skill effect shows, for example when the skill is heal. 
            .status_effetc_type = SC_BLESSING;
            .status_ticks = 240000;
            .status_value1 = 10;
            .status_value2 = 0;
            .status_value3 = 0;
            .status_value4 = 0;                   
            // CONFIG END //
            .move_count = getarraysize(.path) - 2;
        donpcevent("MVP_EVENT::OnBuffcheck");

        .respawn_time *= 1000 * 60; 
        .expiration_time *= 60;

        OnSpawn:
            monster(.map$, .x, .y, strmobinfo(1, .mob), .mob, 1);
            .gid = $@mobid[0];

            .curr_pointer = -2; 
            donpcevent("MVP_EVENT::OnDestinationReached");

            .@next_drop_percent = 100 - .percent;
            .@last_hp_percent = 100;

            freeloop(1);
            while(unitexists(.gid)) {
                getunitdata(.gid, .@mvp_data);
                .@curr_hp_percent = .@mvp_data[UMOB_HP] * 100 / .@mvp_data[UMOB_MAXHP];

                    if(.@curr_hp_percent == .@last_hp_percent) {
                        sleep(500);
                    continue;
                }

                if(.@curr_hp_percent > .@last_hp_percent)
                    .@next_drop_percent = (.@curr_hp_percent / .percent) * .percent;

                .@last_hp_percent = .@curr_hp_percent;

                if(.@next_drop_percent >= .@curr_hp_percent) {
                    donpcevent("MVP_EVENT::OnDrop");
                    .@next_drop_percent -= .percent;
                }

                sleep(500);
            }
            freeloop(0);

            sleep(.respawn_time);
            donpcevent("MVP_EVENT::OnSpawn");
            end;

        OnDrop:
            for(.@i = 0; .@i < .repetition; .@i++) {
            getunitdata(.gid, .@mvp_data);
            //makeitem(.item, 1, mapid2name(.@mvp_data[UMOB_MAPID]), .@mvp_data[UMOB_X], .@mvp_data[UMOB_Y], 1);
            makeitem(.item, .stack_size, mapid2name(.@mvp_data[UMOB_MAPID]), .@mvp_data[UMOB_X] + rand(-8, 8), .@mvp_data[UMOB_Y] + rand(-8, 8), 8);
        }

            end;

        OnDestinationReached:
            if(!unitexists(.gid)) end;

            if(.move_count == .curr_pointer)
                .curr_pointer = 0;
            else
                .curr_pointer += 2;

            unitwalk(.gid, .path[.curr_pointer], .path[.curr_pointer + 1], "MVP_EVENT::OnDestinationReached");
            end;

        OnBuffcheck:
            freeloop(1);
            while(true) {
                addrid(5, 0, .map$);

                .@item_count = countitem(.item);
                if(.@item_count > 0) {
                    getinventorylist(getcharid(0));
                    for(.@i = 0; .@i < @inventorylist_count; .@i++) {
                        if(@inventorylist_id[.@i] == .item && @inventorylist_expire[.@i] == 0) {
                            delitemidx(@inventorylist_idx[.@i], @inventorylist_amount[.@i]);
                            break;
                        }
                    }

                    for(.@i = 0; .@i < .@item_count; .@i++)
                        rentitem(.item, .expiration_time);
                }

                if(rentalcountitem(.item) > 0 && getstatus(.status_effetc_type) == 0) { 
                    sc_start4(.status_effetc_type, .status_ticks, .status_value1, .status_value2, .status_value3, .status_value4);
                    skilleffect(.skill_effect, .skill_effect_value);
                }

                detachrid;
                sleep(100);
            }
            freeloop(0);
    }

    Here my Script @Winterfox

    the buffs fuction is Working 

    how about i have different drops let say

    Red Potion,Yellow Potion,OrangePotion,BluePotion,GreenPotion

    will it give me different buffs according to item i picked up, is this possible?

    and buffs can be stack let say pickup RedPotion Buffs is STR + 10, then i pick again another red potion it will add up and will make it now 20str, till it reach maximum level 10

  12. 4 hours ago, Winterfox said:

    This will make the mob move and allows configuring how often an item is dropped per percent threshold and how often the item is stacked.
    The movement is sadly a bit limited. You will have to set several waypoints, for the mob to follow, and the mob will stop permanently when attacked.

    I didn't find a fix for the problem of stopping, so I will leave it like this. Maybe someone else can help you fix this issue.

    100% Working Thank So Much !!

    my Custom mob Setup
    Can Move
    No Random Walk
    MVP
    Knockback Immune
    Status Immune
    4 hours ago, Winterfox said:

    The movement is sadly a bit limited. You will have to set several waypoints, for the mob to follow, and the mob will stop permanently when attacked.
    I didn't find a fix for the problem of stopping, so I will leave it like this. Maybe someone else can help you fix this issue.

    dMotion = 0
    how long it is before the monster/player can move again. Endure is dMotion = 0, obviously.

  13. 11 hours ago, Winterfox said:
    -	script	MVP_EVENT	FAKE_NPC,{
        OnInit:
            // Mobinfo
            .mob = 1159;
            .map$ = "prontera";
            .x = 150;
            .y = 150;
            .respawn_time = 15; // Respawntime in minutes
            .percent = 10; // Item drop every x hp percent.
    
            // Dropiteminfo
            .item = 7959;
            .amount = 5;
    
        OnSpawn:
            monster(.map$, .x, .y, strmobinfo(1, .mob), .mob, 1);
            
            .@gid = $@mobid[0];
            getunitdata(.@gid, .@mvp_data);
            .@max_hp = .@mvp_data[UMOB_MAXHP];
    
            freeloop(1);
            while(unitexists(.@gid)) {
                getunitdata(.@gid, .@mvp_data);
                .@curr_hp_percent = ceil((.@mvp_data[UMOB_HP] * 100 / .@max_hp) - .percent, .percent);
    
                if(.@curr_hp_percent == .@last_hp_percent) {
                    sleep(500);
                    continue;
                }
    
                if(.@curr_hp_percent > .@last_hp_percent)
                    .@next_drop_percent = .@curr_hp_percent - .percent;
    
                .@last_hp_percent = .@curr_hp_percent;
    
                if(.@next_drop_percent >= .@curr_hp_percent) {
                    makeitem(.item, .amount, mapid2name(.@mvp_data[UMOB_MAPID]), .@mvp_data[UMOB_X], .@mvp_data[UMOB_Y], 1);
                    .@next_drop_percent -= .percent;
                }
    
                sleep(500);
            }
            freeloop(0);
    
            sleep(1000 * 60 * .respawn_time);
            donpcevent("MVP_EVENT::OnSpawn");
            end;
    }

     

    on my orignal trunk i got this error FIXED ERROR https://github.com/rathena/rathena/commit/2eebafb70330e37dd69a384ce0af52570b4956c2

    image.thumb.png.aea9e0393734c7dfa26bb38a91ad58b5.png

    so test latest  rathena is working but

    monster just like normal summon 

    i can request to monster using unitwalk just like on the video monster only WALKING  so monster walk only the giving coordinate

    1st Respawn

            .map$ = "new_1-4";
            .x = 11;
            .y = 188;


    once summoned monster will move 

    1st waypoint then 2nd waypoint and so on then repeat until the monster reach last waypoint then repeat again the loop

    2nd Request


    can you make it drop shower?  tell say 5x5 ?

     

×
×
  • Create New...