Jump to content

Moooooon-Aisha

Members
  • Posts

    116
  • Joined

  • Last visited

Posts posted by Moooooon-Aisha

  1. -	script	Basic Weapons	-1,{
    	mes "[ Basic Weapons ]";
    	mes "What item do you wish to purchase?";
    	next;
    	.@s = select(.menu$) - 1;
    	if(Zeny < .zeny[.@s]){
    		mes "[ Basic Weapons ]";
    		mes "You don't have enough zeny.";
    		close;
    	}
    	Zeny -= .zeny[.@s];
    	getitem2 .sellitem[.@s],1,1,10,0,0,0,0,0;
    	close;
    OnInit:
    	setarray .sellitem, 28113,1201,1301;
    	setarray .zeny, 1,2,3;
    	for(.@i = 0; .@i < getarraysize(.sellitem); .@i++)
    		.menu$ = .menu$ + getitemname(.sellitem[.@i])+" +10 [Cost -> "+.zeny[.@i]+"]:";
    end;
    }

    Untested.

    • Upvote 1
  2. Update:

    • Added Disassembler NPC

    Note: This does not include any of the changes I am doing on refining itself, this NPC is just enabling you to dismantle any equipment (unless blacklisted) and turn them into other stuff.

    EDIT: Bug has been found. Will update later with a fix.

    EDIT 2: Bug has been fixed. Fixed version is now available.

  3. 3 minutes ago, Ryo Osaki said:

    Okay no probs. What do you mean by All skill delay, base it from Kiel, but instead of putting a negative value, put in a positive one. Can you give me an example?

    You want knights to have 90% delay instead of 100% correct?

    4403,Kiel_Card,Kiel-D-01 Card,6,20,,10,,,,,,,,769,,,,,{ bonus bDelayRate,-30; },{},{}

    change -30 to 10

  4. 2 minutes ago, Ryo Osaki said:

    It's a Soul Link Mod by Secrets. That's what I'm using.

    If you're using secret's mod, then it should work as intended.

    Quote

    - Spear Boomerang damage ratio increases from [50 *skill_lv] to [200 *skill_lv]

    - Shield Charge damage ratio increases from [20 *skill_lv] to [60 *skill_lv]

    Not sure how this can be translated to item bonuses, possibly

    bonus2 bSkillAtk,skill id here,getskilllv(skill id here) * 200;
    bonus2 bSkillAtk,skill id here,getskilllv(skill id here) * 60;
    Quote

    - Maximum HP increases by BaseLvl* 100 HP

    bonus bMaxHP, readparam(Baselevel) * 100;
    Quote

    -Vitality increases by INT/5

    bonus bVit,readparam(bInt)/5;

     

    • MVP 1
  5. Update:

    • I will be releasing the Greed Hoarder script for free later this week or the next (all bugs fixed)
    • If you have bought the Greed Hoarder script, feel free to DM me for a refund

    Work in Progress

    • Equipment/Weapon Disassembly (this will be a free release when I finish it)
      • Mainly for changing how refining works in official RO to widely extend end-game potential
    • Costume Evolution
      • Upgrading your costumes' rarity, granting it additional stats in the process
    • Like 1
  6. FCUZcZy.png

    These are a showcase of some stuff I have created in my test server. From time to time I will also give back to the community with free releases every now and then.

    Please note that these showcases,releases and entries do not translate in me being a decent coder. I merely enjoy coding for RO in general.

    With that said, enjoy and hopefully you find the contents within, inspiring.

     


    • Personalized MvP Ranker - 100% Working
      • Weekly Ranking
      • All Time Ranking
      • Personal MvP Kill Tracker
      • Weekly Ranking Rewards
      • Exclusive Top 3 Rank Title
      • Titles reset on a weekly basis as well (Sunday)
      • Spoiler

         

         

    • Midgard Adventurer Association - 100% Working
      • Tier-based quests
      • Tier-based shop
      • Tier-based rewards
      • Tier-based titles
      • Repeatable quests for Adventurer XP grinding
      • Item Collection quest required to rank up
      • Spoiler

         

         

    • Personalized WoE Ranker - Discontinued until further notice
      • Weekly Ranking
      • Monthly Ranking
      • All Time Ranking
      • Break Record
      • Repair Barricade Record
      • Kill Record
      • Exclusive Top 3 Rank Title Record (Breaker, Killer, Repairer)
      • Titles reset on a monthly basis as well (First day of the month)
      • Video Preview [ Will edit soon ]

    Freebies Section

    • Support NPC
      • Let's you control when players can use @request
      • Allows staff members announce to players that they are either Available now, or Unavailable
    Spoiler
    // ------------------------------------------------------------------------------------------- //
    // ------------------------------------- Aisha ----------------------------------------------- //
    // :: Do not redistribute without permission 												   //
    // ------------------------------------------------------------------------------------------- //
    // :: Support NPC												   							   //
    // :: v1.0 - Initial Release																   //
    -	script	Support Staff	-1,{
    end;
    OnRequest:
    	if(getgmlevel() >= 10){
    		mes "[ Support Staff ]";
    		mes "Do you wish to activate the NPC?";
    		switch(select("Activate:Deactivate")){
    			case 1:
    				if($@support_staff == 1){
    					next;
    					mes "[ Support Staff ]";
    					mes "I am already active.";
    					close;
    				}
    				mes "[ Support Staff ]";
    				mes "I am now active.";
    				$@support_staff = 1;
    				announce "[ Support Staff ]: "+strcharinfo(0)+" has activated our Support Staff NPC. You may now contact our Staff Members.",0;
    				close;
    			case 2:
    				if($@support_staff == 0){
    					next;
    					mes "[ Support Staff ]";
    					mes "I am already deactivated.";
    					close;
    				}
    				mes "[ Support Staff ]";
    				mes "I am now deactivated.";
    				$@support_staff = 0;
    				announce "[ Support Staff ]: "+strcharinfo(0)+" has deactivated our Support Staff NPC. Please wait until the next Staff Member is available.",0;
    				close;
    		}
    	}
    	if(gettimetick(2) < #HelpDelay){
    		mes "[ Support Staff ]";
    		mes "I'm sorry, you can only send a request once per 5 minutes. Please try again later.";
    		close;
    	}
    	switch($@support_staff){
    		case 0:
    			mes "[ Support Staff ]";
    			mes "I'm sorry, no Staff Member is currently available. Please try again later.";
    			close;
    		case 1:
    			mes "[ Support Staff ]";
    			mes "Hello, I am a representative of our Staff Members, some are online right now and can cater to your problems, do you wish to contact them now?";
    			menu "Yes, please.",-;
    			OnTryAgain:
    			next;
    			mes "[ Support Staff ]";
    			mes "Please input your question on the box, I will deliver it to our Staff Member.";
    			input .@message$;
    			if(getstrlen(.@message$) < 5){
    				next;
    				mes "[ Support Staff ]";
    				mes "I'm sorry, however I have detected that you only meant to spam. Please input a longer message.";
    				goto OnTryAgain;
    			}
    			next;
    			mes "[ Support Staff ]";
    			mes "Just to review, you wish to contact the Staff Member for the following reason:";
    			mes "------------------------------";
    			mes "^ff0000"+.@message$+"^000000";
    			menu "Yes, correct.",-,"No, let me try again",OnTryAgain;
    			next;
    			mes "[ Support Staff ]";
    			mes "I will contact them now~";
    			set #HelpDelay,gettimetick(2)+300;
    			atcommand "@request "+.@message$;
    			dispbottom "Your message has been sent, please wait for our Staff to contact you.";
    			message strcharinfo(0),"Please wait 5 minutes before sending another request.";
    			close;
    	}
    OnInit:
    	bindatcmd "request",strnpcinfo(3)+"::OnRequest";	
    	$@support_staff = 0;
    end;
    	
    }

     

     

    • King of Poring (King of Emperium) - Discontinued until further notice
      • 4 teams duke it out in a PvP Arena
      • Win conditions are: Be the last team standing OR obliterating the poor poring at the middle of everything
      • Each corner has their Healer and Buffer NPC, providing most buffs to the players prior to the match
      • When the round begins, Healer and Buffer NPC will disappear, along side the invisible barriers
      • Time limit of 15 minutes is in play, if it exceeds 15 minutes, players with the most surviving members will win
      • Rewards will be distributed to all participants, winners will have their own special reward
    Spoiler

    Coming soon

    • Equipment / Weapon Disassembly - Non-extended version
      • Disassembles equipment / weapons to produce Elunium/Oridecon respectively
      • Shields, Headgears and Accessories are treated as "Equipment/Armor"
      • Items listed in the OnInit file are considered as black listed
    Spoiler
    // ------------------------------------------------------------------------------------------- //
    // ------------------------------------- Aisha ----------------------------------------------- //
    // :: Do not redistribute without permission 												   //
    // ------------------------------------------------------------------------------------------- //
    // :: Disassembler NPC												   						   //
    // :: v1.0 - Initial Release																   //
    prontera,151,176,5	script	Disassembler#1	123,{
    	if(select(" > ^FF0000Information^000000: > ^009BFFDisassemble^000000") == 1) {
    		mes "[ ^9d3ad3Disassembler^000000 ]";
    		mes "You can obtain resources back when you disassemble items.";
    		mes "We have a list of restricted items.";
    		next;
    		mes "[ ^9d3ad3Disassembler^000000 ]";
    		mes "^ff0000Weapons^000000";
    		for(.@i = 0; .@i < getarraysize(.blacklist); .@i++)
    			mes "--- "+getitemname(.blacklist[.@i])+" ["+.blacklist[.@i]+" ]";
    		close;
    	}
    deletearray @sold_nameid[0],getarraysize(@sold_nameid);
    callshop "dis_shop",2;
    npcshopattach "dis_shop";
    end;
    OnSellItem:
    	mes "[ ^9d3ad3Disassembler^000000 ]";
    	mes "-----------------------------------";
    	mes "Equipment list:";
    	for(.@i = 0; .@i < getarraysize(@sold_nameid); .@i++){
    		.@item = @sold_nameid[.@i];
    		for(.@x = 0; .@x < getarraysize(.blacklist); .@x++){
    			if(.@item == .blacklist[.@x]){
    				@sold_nameid[.@i] = 0;
    				/*
    				clear;
    				mes "-----------------------------------";
    				mes "[ ^9d3ad3Disassembler^000000 ]";
    				mes "You are trying to disassemble a restricted item.";
    				mes "Please do not disassemble these items.";
    				mes "-----------------------------------";
    				close;
    				*/
    			}
    		}
    	}
    	for(.@i = 0; .@i < getarraysize(@sold_nameid); .@i++){
    		if(getiteminfo(@sold_nameid[.@i],2) == 5){
    			switch(getiteminfo(@sold_nameid[.@i],13)){
    				case 1:
    					.@ori_get += 1;
    					break;
    				case 2:
    					.@ori_get += 3;
    					break;
    				case 3:
    					.@ori_get += 4;
    					break;
    				case 4:
    					.@ori_get += rand(5,10);
    					break;
    			}
    		}
    	}
    	for(.@i = 0; .@i < getarraysize(@sold_nameid); .@i++){
    		if(getiteminfo(@sold_nameid[.@i],2) == 4)
    			switch(getiteminfo(@sold_nameid[.@i],5)){
    				case 256: //upper hg
    					.@elu_get += rand(5,7);
    					break;
    				case 512: //middle hg
    					.@elu_get += rand(5,7);
    					break;
    				case 1: //lower hg
    					.@elu_get += rand(5,7);
    					break;
    				case 16: //armor
    					.@elu_get += rand(3,5);
    					break;
    				case 32: //shield
    					.@elu_get += rand(3,5);
    					break;
    				case 4: //garment
    					.@elu_get += rand(3,5);
    					break;
    				case 64: //footgear
    					.@elu_get += rand(3,5);
    					break;
    				case 136: //accessory
    					.@elu_get += rand(3,5);
    					break;
    				case 768: //upper/mid hg
    					.@elu_get += rand(5,7);
    					break;
    				case 513: //mid/lower hg
    					.@elu_get += rand(5,7);
    					break;
    				case 769: //upper/mid/lower hg
    					.@elu_get += rand(5,7);
    					break;
    				default:
    					.@elu_get += rand(3,5);
    					break;
    			}
    	}
    	for(.@i = 0; .@i < getarraysize(@sold_nameid); .@i++)
    		if(@sold_nameid[.@i] != 0)
    			mes "^ff0000"+getitemname(@sold_nameid[.@i])+"^000000 x ^0000ff1^000000";
    	mes "-----------------------------------";
    	mes "^0055FF"+.@ori_get+"^000000 Oridecon(s) ";
    	mes "^0055FF"+.@elu_get+"^000000 Elunium(s) ";
    	mes "-----------------------------------";
    	next;
    	if(.@ori_get == 0 && .@elu_get == 0)
    		end;
    	if(select(" > ^0055FFDisassemble^000000: > ^777777Cancel^000000") == 2) {
    		mes "[ ^9d3ad3Disassembler^000000 ]";
    		mes "-----------------------------------";
    		mes "Alright, I've returned your items to your inventory.";
    		mes "Come to me again if you changed your mind.";
    		mes "-----------------------------------";
    		close;
    	}
    	for(.@i = 0; .@i < getarraysize(@sold_nameid); .@i++)
    		delitem @sold_nameid[.@i],1;
    	getitem 984,.@ori_get;
    	getitem 985,.@elu_get;
    	mes "-----------------------------------";
    	mes "[ ^9d3ad3Disassembler^000000 ]";
    	mes "All done!";
    	mes "Here's your resources!";
    	mes "Bring me stuff you don't need so you can disassemble them!";
    	mes "-----------------------------------";
    	close;
    end;
    	
    OnInit:
    	setarray .blacklist, 1201,2301,2401,2501,2607,2101;
    end;	
    }
    -	shop	dis_shop	-1,512:-1

     

    More will be coming soon, stay tuned.

    • Upvote 2
    • Like 1
  7. 15 minutes ago, Mabuhay said:

    eh, try checking this part: in status.cpp

    
    		/**
    		 * RE MATK Formula (from irowiki:http:// irowiki.org/wiki/MATK)
    		 * MATK = (sMATK + wMATK + eMATK) * Multiplicative Modifiers
    		 **/
    		int lv = status_get_lv(bl);
    		status->matk_min = status_base_matk_min(bl, status, lv);
    		status->matk_max = status_base_matk_max(bl, status, lv);
    
    		switch( bl->type ) {
    			case BL_PC: {
    				int wMatk = 0;
    				int variance = 0;
    
    				// Any +MATK you get from skills and cards, including cards in weapon, is added here.
    				if (sd) {
    					if (sd->bonus.ematk > 0)
    						status->matk_min += sd->bonus.ematk;
    					if (pc_checkskill(sd, SU_POWEROFLAND) > 0) {
    						if ((pc_checkskill(sd, SU_SV_STEMSPEAR) + pc_checkskill(sd, SU_CN_POWDERING) + pc_checkskill(sd, SU_CN_METEOR) + pc_checkskill(sd, SU_SV_ROOTTWIST) +
    						pc_checkskill(sd, SU_CHATTERING) + pc_checkskill(sd, SU_MEOWMEOW) + pc_checkskill(sd, SU_NYANGGRASS)) > 19)
    							status->matk_min += status->matk_min * 20 / 100;
    					}
    				}

     

    Thanks! I've actually managed to make it work, just based it off Dragonology. Works perfectly now, really appreciate your help!

  8. On 11/13/2019 at 11:33 AM, Mabuhay said:
    
    /**
     * Adds magic attack modifications based on status changes
     * @param bl: Object to change matk [PC|MOB|HOM|MER|ELEM]
     * @param sc: Object's status change information
     * @param matk: Initial matk
     * @return modified matk with cap_value(matk,0,USHRT_MAX)
     */

    try putting it here.. im in doubt since it says status changes tho.

    Testing it now, but kinda sure it would error out since it uses sd, and sd is not declared on that section. Well hopefully it does work. Will edit if anything happens.

     

    EDIT:

    Yup, error'd out. I'll probably have to do it just how they did with Dragonology.

    Will test it now, just got my server up and running. Will edit for results.

    Added it successfully, but it does not increase magic damage at all.

     

    EDIT #2:

    Testing it using Dragonology's formula. Hopefully it works, will update when done.

  9. 11 minutes ago, Mabuhay said:

    Try looking at this part at status.cpp :

    
    	// Absolute modifiers from passive skills

    Try adding this:

    
    	if((skill=pc_checkskill(sd,SA_DRAGONOLOGY))>0) 
    		matk += matk * skill / 100; // adds 1% MATK per skill level

    Not quite sure but i hope it would help.

    Returns an error saying that matk was not declared.

  10. So I've been snooping around the source code for skill modification, and so far I've successfully identified where to change some stuff.

    The only thing that's left on my list not ticked off is where I can find the place to increase magic attack based on skill level. I tried basing it off of Dragonology but it seems that it has a different way of calculating the bonus magic attack provided by the skill as shown below

    	if((skill=pc_checkskill(sd,SA_DRAGONOLOGY))>0) {
    #ifdef RENEWAL
    		skill = skill * 2;
    #else
    		skill = skill * 4;
    #endif
    		sd->right_weapon.addrace[RC_DRAGON]+=skill;
    		sd->left_weapon.addrace[RC_DRAGON]+=skill;
    		sd->magic_addrace[RC_DRAGON]+=skill;
    		sd->subrace[RC_DRAGON]+=skill;
    	}

    I am not sure if there is a way to increase magic attack normally like how you do with attack (I've managed to do this already), maybe I have not looked that much yet or maybe I have missed it? Would appreciate a point to the right direction with this, thank you!

  11. On 11/8/2019 at 2:44 AM, IsabelaFernandez said:
    
    Hello everyone, I would like to add options to this script. Currently it is only used to craft a single item, I would like to add others.
    
    prontera,155,181,5	script	Sample	757,{
    for( .@i = 0; .@i < .item_id_size; .@i++ ){
    	mes .item_amount[.@i]+" x "+getitemname( .item_id[.@i] );
    	if( countitem( .item_id[.@i] ) < .item_amount[.@i] ) .@failed = 1;
    }
    if( !.@failed ){
    	mes "Please wait...";
    	progressbar "FFFFFF",10;
    	for( .@i = 0; .@i < .item_id_size; .@i++ )
    		delitem .item_id[.@i],.item_amount[.@i];
    	if( rand( 100 ) < .craft_rate ){
    		mes "Gained 1 items.";
    		getnameditem( .craft_gain,strcharinfo(0) );
    	}else{
    		mes "Failed";
    	}
    }
    close;
    
    OnInit:
    // craft settings
    .craft_rate = 50;
    setarray .item_id,607,608;
    setarray .item_amount,1,2;
    .item_id_size = getarraysize( .item_id );
    
    // item gain
    .craft_gain = 5518;
    end;
    }
    
    In this part I would like to add the option to choose between ID 5518 (current) and below the item ID 5374 as the desired item to create.

    Just use Euphy quest script, and add a chance to fail.

    • Upvote 1
  12. else if(){
    ...
    }
    else if(){
    ...
    }
    else{
    ...
    }

    Better if you use switch

    switch(select(...)){
    	case 1: ... break;
    	case 2: ... break;
    	case 3: ... break;
    	case 4: ... break;
    }
    end;

     

    • Upvote 1
×
×
  • Create New...