Jump to content
  • 0
Sign in to follow this  
iCORE

[HELP] Item Option NPC

Question

Hi, how can i make this script work only with accessories and make items as requirements to upgrade

edit: Also how to remove all the choices and make a fix option.

Example: npc will only add VAR_STRAMOUNT in accessory

 

 

//================= Hercules Script =======================================
//=       _   _                     _
//=      | | | |                   | |
//=      | |_| | ___ _ __ ___ _   _| | ___  ___
//=      |  _  |/ _ \ '__/ __| | | | |/ _ \/ __|
//=      | | | |  __/ | | (__| |_| | |  __/\__ \
//=      \_| |_/\___|_|  \___|\__,_|_|\___||___/
//================= License ===============================================
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
//= Copyright (C) 2017  Hercules Dev Team
//= Copyright (C) 2017  Smokexyz
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
//= the Free Software Foundation, either version 3 of the License, or
//= (at your option) any later version.
//=
//= This program is distributed in the hope that it will be useful,
//= but WITHOUT ANY WARRANTY; without even the implied warranty of
//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//= GNU General Public License for more details.
//=
//= You should have received a copy of the GNU General Public License
//= along with this program.  If not, see <http://www.gnu.org/licenses/>.
//=========================================================================
//= Option Master (Item Options NPC @see db/item_options.conf)
//================= Description ===========================================
//= Select from a list of your equipments, one to enhance with up to 5 options.
//= A list of the first 10 options are provided in this npc.
//================= Current Version =======================================
//= 1.0
//=========================================================================

prontera,153,180,4	script	Option Master	4_DOG01,{
	callsub(StartTalking);
	end;
	
OnInit:
	/**
	 * General Configuration
	 */
	/* Chance of the enhancement process to fail. (0 - 99 in percent) */
	.chance_of_failure = 10;
	/* Delete the item on failure? (true/false) */
	.delete_on_failure = true;
	/* Required amount of zeny for a try. */
	.zeny_requirement = 100;
	/* Minimum amount of the bonus value. 
	 * For negative effects or certain bonuses that require negative values
	 * Maximum possible value is -INT16_MAX)
	 */
	.minimum_bonus_amount = -100; // usually used with delay bonus options, although not provided in the script.
	/* Maximum amount of the bonus value. 
	 * Maximum possible value is INT16_MAX */
	.maximum_bonus_amount = 100;
	/* Disable selection of bonus value (true/false) */
	.enable_random_bonus = false;
	
	/* Item Option Descriptions */
	setarray(.options$[0], "Max HP", "Max SP", "STR", "AGI", "VIT", "INT", "DEX", "LUK");
	/* Item Option Constants */
	setarray(.option_constants[0], VAR_MAXHPAMOUNT, VAR_MAXSPAMOUNT, VAR_STRAMOUNT, VAR_AGIAMOUNT, VAR_VITAMOUNT, VAR_INTAMOUNT, VAR_DEXAMOUNT, VAR_LUKAMOUNT);
	end;
	
StartTalking:
	.@name$ = _("[ ^990099Option Master^000000 ]");
	disable_items();
	mes(.@name$);
	mesf("Hey there %s", strcharinfo(PC_NAME));
	mes("There's a new-found method of adding options to an equipment that I have been working on.");
	next();
	if (.enable_random_bonus) {
		mes(.@name$);
		mes("Equipment bonuses are added randomly per slot!");
		mes("So if you wind up with a low amount of bonus, don't hesitate to override the slot.");
		next();
	}
	mes(.@name$);
	mes("Would you like me to add extra stats to your equipment?");
	next();
	if (select("Of course!", "Meh, not right now.") == 2) {
		mes(.@name$);
		mes("Alright then, catch you later.");
		close();
	}
	// Build the Menu.
	setarray(.@position$[1], "Head", "Body", "Left Hand", "Right Hand", "Robe", "Shoes", "Accessory 1", "Accessory 2", "Head 2", "Head 3");
	.@menu$ = "";
	for (.@i = 1; .@i <= 10; ++.@i)
		.@menu$ += ((getequipisequiped(.@i)) ? getequipname(.@i) : .@position$[.@i] + "-[Not equipped]") + ":";
	// Select the part.
	.@equip_index = select(.@menu$);
	
	// Check if it's worn.
	if (!getequipisequiped(.@equip_index)) {
		mes(.@name$);
		mes("Brah, your item ain't equipped.");
		close();
	// Check if it allows options
	} else if (!getequipisenableopt(.@equip_index)) {
		mes(.@name$);
		mes("Brah, this equip can't have options.");
		close();
	// Check if equipment is identified.
	} else if (!getequipisidentify(.@equip_index)) {
		mes(.@name$);
		mes("Brah, this equip ain't identified.");
		close();
	}
	
	// Present a list of currently infused options.
	do {
		.@menu$ = "";
		.@used = false;
		// Build the menu of current options.
		for (.@i = 1; .@i <= MAX_ITEM_OPTIONS; ++.@i) {
			// call getequipoption(<equip_index>, <type>, <slot>);
			// if the return is <0, it's a script error.
			// if the return is 0, the slot is empty.
			// if the return is >0, the slot is unavailable.
			.@opt = getequipoption(.@equip_index, .@i, IT_OPT_INDEX);
			if (.@opt > 0)
				.@menu$ += (.@i) + ") " + .options$[.@opt - 1] + ":";
			else
				.@menu$ += (.@i) + ") ^999999Empty^000000" + ":";
		}
		// Option Slot is the actual option slot 0-MAX_ITEM_OPTIONS (@see mmo.h)
		.@option_slot = select(.@menu$);
		
		// Check for used slot and request user action if found.
		if (getequipoption(.@equip_index, .@option_slot, IT_OPT_INDEX) > 0) {
			mes(.@name$);
			mes("This slot is already used up!");
			if (select("^990000Override the slot.^000000", "Choose again.") == 2)
				.@used = true;
			next();
		}
	} while (.@used); // loop if the slot is not to be overridden
	
	// Present a list of available bonuses.
	mes(.@name$);
	mes("Which of the following item bonuses would you like to add to this item?");
	next();
	// Build the Options!
	.@menu$ = "";
	for (.@i = 0; .@i < getarraysize(.options$); ++.@i)
		.@menu$ += (.@i + 1) + ") " + .options$[.@i] + ":";
		
	do {
		// Select the options!
		.@option_variable = select(.@menu$);
		next();
		mes(.@name$);
		mesf("You chose ^009900%s^000000!", .options$[.@option_variable - 1]);
		mes("Are you sure?");
		next();
	} while (select("Fo Shizzle.", "I'ma re-evaluate, brah.") == 2);
	
	// Select a bonus or randomise.
	if (.enable_random_bonus) {
		.@value = rand(.maximum_bonus_amount);
	} else {
		do {
			mes(.@name$);
			mesf("Please input the bonus amount of ^009900%s^000000 you want to add!", .options$[.@option_variable - 1]);
			mesf("(Min: %d, Max: %d)", .minimum_bonus_amount, .maximum_bonus_amount);
			.@ok = input(.@value, .minimum_bonus_amount, .maximum_bonus_amount);
			next();
		} while (.@ok);
	}
	
	// If there's a chance of failure, inform the user.
	if (.chance_of_failure) {
		mes(.@name$);
		mes("Alright so,");
		mes("I'll have you know...");
		mesf("There's a ^990000%d%% chance of failure^000000.", .chance_of_failure);
		mes("Because, well... I didn't go to school.");
		next();
		mes(.@name$);
		if (.delete_on_failure) {
			mes("If I fail, your item will break and it ^990000will be destroyed^000000!");
		}
		mes("Are you still ready to go forward with this?");
		next();
		if (select("Fo shizzle.", "Hells naw, go back to school.") == 2) {
			mes(.@name$);
			mes("Geez, you don't have to be so harsh about it.");
			close();
		}
		next();
	}
	
	// If there's a Zeny Requirement, perform the usual.
	if (.zeny_requirement > 0) {
		mes(.@name$);
		mesf("You also have to pay %dZ.", .zeny_requirement);
		next();
		if (select("Of course!", "No way!") == 2) {
			mes(.@name$);
			mes("Well, see you around then...");
			close();
		}
		if (Zeny < .zeny_requirement) {
			mes(.@name$);
			mes("You don't have enough Zeny!");
			close();
		}
		Zeny -= .zeny_requirement;
	}
	
	// Check if there's a chance of failure, set and roll the dice.
	if (.chance_of_failure && rand(100) <= .chance_of_failure) {
		mes(.@name$);
		mes("^990000I failed!^000000");
		mes("Guess I should go back to school.");
		// Delete the item if flagged.
		if (.delete_on_failure)
			failedrefitem(.@equip_index); // Simulate failed refinement of the item and delete.
	} else {
		// Set the Item Option bonuses in the slot see db/item_options.conf for more info.
		setequipoption(.@equip_index, .@option_slot, .option_constants[.@option_variable - 1], .@value);
		mes(.@name$);
		mes("^009900Praise Jesus^000000");
		mes("I have added an option to your item.");
		mes("My skills are flawless!");
	}
	next();
	mes(.@name$);
	mes("See you around!");
	close();
}

 

Edited by iCORE

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 0
prontera,153,180,4	script	Option Master	4_DOG01,{
	mes "blah";
//	dispbottom getequipid(EQI_ACC_L) +" "+ getequipid(EQI_ACC_R);
	next;
	if ( getequipid(EQI_ACC_L) == -1 && getequipid(EQI_ACC_R) == -1 ) {
		mes "You don't have Accessory equipped";
		close;
	}
	.@s = select( getequipid(EQI_ACC_L)? getequipname(EQI_ACC_L) : "",  getequipid(EQI_ACC_R)? getequipname(EQI_ACC_R) : "" ) + 6;
//	dispbottom .@s +"";
	if ( getequipoption( .@s, 1, IT_OPT_INDEX ) ) {
		mes "this Accessory has already enchanted with Item Options";
		close;
	}
	mes "do you want to add +STR to this Accessory?";
	next;
	if ( select( "Yes", "No" ) == 2 ) close;
	setequipoption .@s, 1, VAR_STRAMOUNT, 1;
	close;
}

 

Share this post


Link to post
Share on other sites
  • 0

thanks again @AnnieRuru , please add (Random Option, Fixed Option, Replace Option) and still fix to only accessories and str only. and can add upto 5 options.

Share this post


Link to post
Share on other sites
  • 0
22 hours ago, iCORE said:

thanks again @AnnieRuru , please add (Random Option, Fixed Option, Replace Option) and still fix to only accessories and str only. and can add upto 5 options.

1. elaborate your question further

2. you post in script support so I assume you know how to fix yourself
if you don't know how to write it yourself, should post in script request

Share this post


Link to post
Share on other sites
  • 0
On 3/13/2019 at 4:14 AM, AnnieRuru said:

prontera,153,180,4 script Option Master 4_DOG01,{ mes "blah"; // dispbottom getequipid(EQI_ACC_L) +" "+ getequipid(EQI_ACC_R); next; if ( getequipid(EQI_ACC_L) == -1 && getequipid(EQI_ACC_R) == -1 ) { mes "You don't have Accessory equipped"; close; } .@s = select( getequipid(EQI_ACC_L)? getequipname(EQI_ACC_L) : "", getequipid(EQI_ACC_R)? getequipname(EQI_ACC_R) : "" ) + 6; // dispbottom .@s +""; if ( getequipoption( .@s, 1, IT_OPT_INDEX ) ) { mes "this Accessory has already enchanted with Item Options"; close; } mes "do you want to add +STR to this Accessory?"; next; if ( select( "Yes", "No" ) == 2 ) close; setequipoption .@s, 1, VAR_STRAMOUNT, 1; close; }


prontera,153,180,4	script	Option Master	4_DOG01,{
	mes "blah";
//	dispbottom getequipid(EQI_ACC_L) +" "+ getequipid(EQI_ACC_R);
	next;
	if ( getequipid(EQI_ACC_L) == -1 && getequipid(EQI_ACC_R) == -1 ) {
		mes "You don't have Accessory equipped";
		close;
	}
	.@s = select( getequipid(EQI_ACC_L)? getequipname(EQI_ACC_L) : "",  getequipid(EQI_ACC_R)? getequipname(EQI_ACC_R) : "" ) + 6;
//	dispbottom .@s +"";
	if ( getequipoption( .@s, 1, IT_OPT_INDEX ) ) {
		mes "this Accessory has already enchanted with Item Options";
		close;
	}
	mes "do you want to add +STR to this Accessory?";
	next;
	if ( select( "Yes", "No" ) == 2 ) close;
	setequipoption .@s, 1, VAR_STRAMOUNT, 1;
	close;
}

 

@AnnieRurusorry about the last post, this script work perfect and to be more specific.

i want this script have an option like this

//--------------------------------------------------------------//
//other configuration
//--------------------------------------------------------------//

setarray OptionList, STR, INT, DEX; //Choose what is only here

.MaxOption = 5; // here you can make a specific slot number 1 = 1 slot , 2 = 2 slots and so on.....

.FixOption = 100; // no min or max just fix.....
 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.