• 0
vilkhl

Ticket refiner fail rate

Question

Hi guys,

I need help with Euphy's ticker refiner script. Currently, the script is 100% success rate. How can I make there's a chance to fail refine and will not break the armor/weapons. But it still removes the ticket even failed.

Can anyone help me with this script?

Thanks in advance

ticket_refiner.txt

Share this post


Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 0
//===== rAthena Script ======================================= 
//= Ticket Refiner
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.1
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= [Official Conversion]
//= Refiner that uses +5~9/+11 refine tickets to refine
//= equipment with no chance of failure.
//= NOTE: This NPC is currently disabled on official servers.
//===== Additional Comments: =================================
//= 1.0 First version. [Euphy]
//= 1.1 Do not refine above ticket level. [Euphy]
//============================================================

// Main NPC :: safety_Ref_NPC
//============================================================
prontera,184,177,6	script	Refine Master	851,{
	disable_items;
	if (countitem(6238) || countitem(6228) || countitem(6229) || countitem(6230) || countitem(6231) || countitem(6456))
		set [email protected],1;
	if (countitem(6239) || countitem(6232) || countitem(6233) || countitem(6234) || countitem(6235) || countitem(6457))
		set [email protected],1;
	if ([email protected] && [email protected]) {
		mes "[Refine Master]";
		mes "Hello!";
		mes "What's up?";
		mes "I'm a specialist";
		mes "for refining items,";
		mes "but I don't work anymore.";
		next;
		switch(select("I'll go on my way.:Hmm... this makes me curious.")) {
		case 1:
			mes "[Refine Master]";
			mes "Take care, adventurer.";
			close;
		case 2:
			mes "[Refine Master]";
			mes "Actully, I sometimes provide refine services for adventurers with a ^006400Refine Ticket^000000...";
			mes "Bye bye~!";
			close;
		}
	}
	emotion ET_SURPRISE;
	mes "[Refine Master]";
	mes "Greetings!";
	mes "I can refine an item up to the ^006400same level as your ticket^000000.";
	mes "You don't have to worry! There's no chance of breaking your item.";
	next;
	if(select("I'll come back later.:Refine item with ticket.") == 1) {
		mes "[Refine Master]";
		mes "Okay.";
		mes "You can come again later.";
		close;
	}
	mes "[Refine Master]";
	mes "Which equipment would you like to refine?";
	next;
	setarray [email protected]$[1],"Head upper","Armor","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head middle","Head lower";
	setarray [email protected][1], EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_MID, EQI_HEAD_LOW;
	for(set [email protected],1; [email protected]<=10; set [email protected],[email protected]+1)
		set [email protected]$, [email protected]$+((getequipisequiped([email protected][[email protected]]))?getequipname([email protected][[email protected]]):[email protected]$[[email protected]]+"- [Empty]")+":";
	set [email protected], [email protected][ select([email protected]$) ];
	if (!getequipisequiped([email protected])) {
		mes "[Refine Master]";
		mes "You have to equip the item you want to refine.";
		close;
	}
	if (!getequipisenableref([email protected])) {
		emotion ET_OTL;
		mes "[Refine Master]";
		mes "Oh, I'm sorry.";
		mes "This item is impossible to refine.";
		close;
	}
	[email protected] = getequipid([email protected]); // save id of the item
	[email protected] = getequiprefinerycnt([email protected]); //save refinery count
	setarray [email protected][0], getequipcardid([email protected],0), getequipcardid([email protected],1), getequipcardid([email protected],2), getequipcardid([email protected],3);
	switch(getequipweaponlv([email protected])) {
	default:
	case 0:
		setarray [email protected][0],6457,6235,6234,6233,6232,6239;
		setarray [email protected][0],5,6,7,8,9,11;
		set [email protected]$,"Armor";
		set [email protected],[email protected];
		break;
	case 1:
	case 2:
	case 3:
	case 4:
		setarray [email protected][0],6456,6231,6230,6229,6228,6238;
		setarray [email protected][0],5,6,7,8,9,11;
		set [email protected]$,"Weapon";
		set [email protected],[email protected];
		break;
	}
	if ([email protected]) {
		emotion ET_THINK;
		mes "[Refine Master]";
		mes "If you want to refine this ^006400"[email protected]$+"^000000, please come along with ^006400"[email protected]$+" Refine Ticket^000000.";
		mes "See you later!";
		close;
	}
	mes "[Refine Master]";
	mes "Please choose which ^006400"[email protected]$+" Refine Ticket^000000 you want to use.";
	next;
	set [email protected]$,"";
	for(set [email protected],0; [email protected]<getarraysize([email protected]tickets); set [email protected]i,[email protected]i+1)
		set [email protected]menu$, [email protected]menu$+getitemname([email protected]tickets[[email protected]i])+":";
	set [email protected]select, select([email protected]menu$)-1;
	set [email protected]ticket_lv, [email protected]levels[[email protected]select];
	set [email protected]ticket_id, [email protected]tickets[[email protected]select];
	if (countitem([email protected]ticket_id) == 0) {
		emotion ET_QUESTION;
		mes "[Refine Master]";
		mes getitemname([email protected]ticket_id)+" is not in your inventory. Did you put it in your storage?";
		mes "Please check again.";
		mes "See you later!";
		close;
	}
	if (getequiprefinerycnt([email protected]part) >= [email protected]_lv) {
		emotion ET_PROFUSELY_SWEAT;
		mes "[Refine Master]";
		mes "^8B4513This item is already refined as much as your deed.^000000";
		mes "Please come along with an item refined less than your ticket.";
		close;
	}
	mes "[Refine Master]";
	mes "I'm going to refine ^006400"+getequipname([email protected])+"^8B4513 up to the +"[email protected]_lv+" level^000000 with ^006400"+getitemname([email protected]_id)+"^000000.";
	mes "May I proceed?";
	next;
	if(select("No.:Yes.") == 1) {
		emotion ET_THINK;
		mes "[Refine Master]";
		mes "Oh, you changed your mind.";
		mes "Ok.";
		mes "You can come back later.";
		close;
	}
	mes "[Refine Master]";
	mes "Great.";
	mes "As you wish!";
	mes "I have my own special way to refine...";
	mes ".......ka boom!";
	if (countitem([email protected]_id)) {
		delitem [email protected]_id,1;

		// anti-hack
		if (callfunc("F_IsEquipIDHack", [email protected], [email protected]) ||
			callfunc("F_IsEquipRefineHack", [email protected], [email protected]) || callfunc("F_IsEquipCardHack", [email protected], [email protected][0], [email protected][1], [email protected][2], [email protected][3])) {
			mes "[Refine Master]";
			emotion ET_FRET;
			mes "Wait a second...";
			mes "Do you think I'm stupid?!";
			mes "You switched the item while I wasn't looking! Get out of here!";
			close;
		}
	} else {
		next;
		mes "Error!";
		mes "Please report this.";
		close;
	}
	set .value, rand(0,100);
	if(.value >= 98){
	specialeffect EF_SUI_EXPLOSION;
	successrefitem [email protected], [email protected]_lv - getequiprefinerycnt([email protected]);
	}else{
	mes "Refinement failed, ticket was consuming. Try again.";
	}
	next;
	emotion ET_DELIGHT;
	mes "[Refine Master]";
	mes "Alright, here it is~";
	mes "Well, ^0000FF"+strcharinfo(0)+"^000000!";
	mes "Congratulations on your shining "[email protected]$+".";
	mes "You look GREAT!";
	mes "Farewell~!";
	close;
}
 
It's like 2% success, you'll see it will fail!

Just edit the value down there again to correct it for 40 ..

I changed the effect of success for when it succeeds, I have no way to test or refine the code now, because I'm in the company ...
 
  • MVP 1

Share this post


Link to post
Share on other sites
  • 0

Find

successrefitem [email protected], [email protected]_lv - getequiprefinerycnt([email protected]);

Alter :

	set .value, rand(0,100);
	if(.value >= 20){
	successrefitem [email protected], [email protected]_lv - getequiprefinerycnt([email protected]);
	}else{
	mes "Refinement failed, ticket was consuming. Try again.";
	}
 
It has a 20% failure rate and 80% success rate, it will consume the ticket anyway, it will not break if it fails.
If it's different rates for each level of refinement, just do an OnInit stating the odds and check on an array.

Share this post


Link to post
Share on other sites
  • 0
8 minutes ago, Disabled LOOLP said:

Find

successrefitem [email protected], [email protected]_lv - getequiprefinerycnt([email protected]);

Alter :

	set .value, rand(0,100);
	if(.value >= 20){
	successrefitem [email protected], [email protected]_lv - getequiprefinerycnt([email protected]);
	}else{
	mes "Refinement failed, ticket was consuming. Try again.";
	}
 
It has a 20% failure rate and 80% success rate, it will consume the ticket anyway, it will not break if it fails.
If it's different rates for each level of refinement, just do an OnInit stating the odds and check on an array.

if i want to increase the fail rate to 40%, i just need to change this value right?

if(.value >= 40){

Share this post


Link to post
Share on other sites
  • 0
2 minutes ago, vilkhl said:

if i want to increase the fail rate to 40%, i just need to change this value right?

if(.value >= 40){

Yeah!

set .value, rand(0,100);  // It will generate a value from 0 to 99 ..

Share this post


Link to post
Share on other sites
  • 0
13 minutes ago, Disabled LOOLP said:

Yeah!

set .value, rand(0,100);  // It will generate a value from 0 to 99 ..

i set it to 40% but it still gives 100% success. or do i need to change this too?

set .value, rand(0,100); // It will generate a value from 0 to 99 ..

Share this post


Link to post
Share on other sites
  • 0
33 minutes ago, dev LOOLP said:
//===== rAthena Script ======================================= 
//= Ticket Refiner
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.1
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= [Official Conversion]
//= Refiner that uses +5~9/+11 refine tickets to refine
//= equipment with no chance of failure.
//= NOTE: This NPC is currently disabled on official servers.
//===== Additional Comments: =================================
//= 1.0 First version. [Euphy]
//= 1.1 Do not refine above ticket level. [Euphy]
//============================================================

// Main NPC :: safety_Ref_NPC
//============================================================
prontera,184,177,6	script	Refine Master	851,{
	disable_items;
	if (countitem(6238) || countitem(6228) || countitem(6229) || countitem(6230) || countitem(6231) || countitem(6456))
		set .@bWeaponUp,1;
	if (countitem(6239) || countitem(6232) || countitem(6233) || countitem(6234) || countitem(6235) || countitem(6457))
		set .@bArmorUp,1;
	if (!.@bWeaponUp && !.@bArmorUp) {
		mes "[Refine Master]";
		mes "Hello!";
		mes "What's up?";
		mes "I'm a specialist";
		mes "for refining items,";
		mes "but I don't work anymore.";
		next;
		switch(select("I'll go on my way.:Hmm... this makes me curious.")) {
		case 1:
			mes "[Refine Master]";
			mes "Take care, adventurer.";
			close;
		case 2:
			mes "[Refine Master]";
			mes "Actully, I sometimes provide refine services for adventurers with a ^006400Refine Ticket^000000...";
			mes "Bye bye~!";
			close;
		}
	}
	emotion ET_SURPRISE;
	mes "[Refine Master]";
	mes "Greetings!";
	mes "I can refine an item up to the ^006400same level as your ticket^000000.";
	mes "You don't have to worry! There's no chance of breaking your item.";
	next;
	if(select("I'll come back later.:Refine item with ticket.") == 1) {
		mes "[Refine Master]";
		mes "Okay.";
		mes "You can come again later.";
		close;
	}
	mes "[Refine Master]";
	mes "Which equipment would you like to refine?";
	next;
	setarray .@position$[1],"Head upper","Armor","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head middle","Head lower";
	setarray .@indices[1], EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_MID, EQI_HEAD_LOW;
	for(set .@i,1; .@i<=10; set .@i,.@i+1)
		set .@menu$, .@menu$+((getequipisequiped(.@indices[.@i]))?getequipname(.@indices[.@i]):.@position$[.@i]+"- [Empty]")+":";
	set .@part, .@indices[ select(.@menu$) ];
	if (!getequipisequiped(.@part)) {
		mes "[Refine Master]";
		mes "You have to equip the item you want to refine.";
		close;
	}
	if (!getequipisenableref(.@part)) {
		emotion ET_OTL;
		mes "[Refine Master]";
		mes "Oh, I'm sorry.";
		mes "This item is impossible to refine.";
		close;
	}
	.@refineitemid = getequipid(.@part); // save id of the item
	.@refinerycnt = getequiprefinerycnt(.@part); //save refinery count
	setarray .@card[0], getequipcardid(.@part,0), getequipcardid(.@part,1), getequipcardid(.@part,2), getequipcardid(.@part,3);
	switch(getequipweaponlv(.@part)) {
	default:
	case 0:
		setarray .@tickets[0],6457,6235,6234,6233,6232,6239;
		setarray .@levels[0],5,6,7,8,9,11;
		set .@type$,"Armor";
		set .@check,.@bArmorUp;
		break;
	case 1:
	case 2:
	case 3:
	case 4:
		setarray .@tickets[0],6456,6231,6230,6229,6228,6238;
		setarray .@levels[0],5,6,7,8,9,11;
		set .@type$,"Weapon";
		set .@check,.@bWeaponUp;
		break;
	}
	if (!.@check) {
		emotion ET_THINK;
		mes "[Refine Master]";
		mes "If you want to refine this ^006400"+.@type$+"^000000, please come along with ^006400"+.@type$+" Refine Ticket^000000.";
		mes "See you later!";
		close;
	}
	mes "[Refine Master]";
	mes "Please choose which ^006400"+.@type$+" Refine Ticket^000000 you want to use.";
	next;
	set .@menu$,"";
	for(set .@i,0; .@i<getarraysize(.@tickets); set .@i,.@i+1)
		set .@menu$, .@menu$+getitemname(.@tickets[.@i])+":";
	set .@select, select(.@menu$)-1;
	set .@ticket_lv, .@levels[.@select];
	set .@ticket_id, .@tickets[.@select];
	if (countitem(.@ticket_id) == 0) {
		emotion ET_QUESTION;
		mes "[Refine Master]";
		mes getitemname(.@ticket_id)+" is not in your inventory. Did you put it in your storage?";
		mes "Please check again.";
		mes "See you later!";
		close;
	}
	if (getequiprefinerycnt(.@part) >= .@ticket_lv) {
		emotion ET_PROFUSELY_SWEAT;
		mes "[Refine Master]";
		mes "^8B4513This item is already refined as much as your deed.^000000";
		mes "Please come along with an item refined less than your ticket.";
		close;
	}
	mes "[Refine Master]";
	mes "I'm going to refine ^006400"+getequipname(.@part)+"^8B4513 up to the +"+.@ticket_lv+" level^000000 with ^006400"+getitemname(.@ticket_id)+"^000000.";
	mes "May I proceed?";
	next;
	if(select("No.:Yes.") == 1) {
		emotion ET_THINK;
		mes "[Refine Master]";
		mes "Oh, you changed your mind.";
		mes "Ok.";
		mes "You can come back later.";
		close;
	}
	mes "[Refine Master]";
	mes "Great.";
	mes "As you wish!";
	mes "I have my own special way to refine...";
	mes ".......ka boom!";
	if (countitem(.@ticket_id)) {
		delitem .@ticket_id,1;

		// anti-hack
		if (callfunc("F_IsEquipIDHack", .@part, .@refineitemid) ||
			callfunc("F_IsEquipRefineHack", .@part, .@refinerycnt) || callfunc("F_IsEquipCardHack", .@part, .@card[0], .@card[1], .@card[2], .@card[3])) {
			mes "[Refine Master]";
			emotion ET_FRET;
			mes "Wait a second...";
			mes "Do you think I'm stupid?!";
			mes "You switched the item while I wasn't looking! Get out of here!";
			close;
		}
	} else {
		next;
		mes "Error!";
		mes "Please report this.";
		close;
	}
	set .value, rand(0,100);
	if(.value >= 98){
	specialeffect EF_SUI_EXPLOSION;
	successrefitem .@part, .@ticket_lv - getequiprefinerycnt(.@part);
	}else{
	mes "Refinement failed, ticket was consuming. Try again.";
	}
	next;
	emotion ET_DELIGHT;
	mes "[Refine Master]";
	mes "Alright, here it is~";
	mes "Well, ^0000FF"+strcharinfo(0)+"^000000!";
	mes "Congratulations on your shining "+.@type$+".";
	mes "You look GREAT!";
	mes "Farewell~!";
	close;
}
 
It's like 2% success, you'll see it will fail!

Just edit the value down there again to correct it for 40 ..

I changed the effect of success for when it succeeds, I have no way to test or refine the code now, because I'm in the company ...

 

ok mate. thanks alot for your help. and its working now. problem solved ^_^

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.   Paste as plain text instead

  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...