Jump to content
  • 0

R> Transfer Random Option


shumalaku

Question


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.01
  • Content Count:  3
  • Reputation:   0
  • Joined:  06/01/24
  • Last Seen:  

Anyone can help me with the npc script. I want to transfer my random option to another same type of equip. for example I equipped muffler with 5 random option and I want to transfer it to manteau that in my inventory. the rules is you can only transfer random option with the same type only. it is not possible to transfer it like for example in accessories to shoes. please help me thanks in advance

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  210
  • Reputation:   92
  • Joined:  06/02/12
  • Last Seen:  

Hi

//===== Script for rAthena by Racaae =========================
//= Enchant Transferer
//= https://rathena.org/board/topic/142357-question-about-transfer-enchant-npc-random-option/
//===== Additional Comments: ================================= 
//= Modified from Sader1992' enchant npc
//= 1.1 = Added option to transfer all effects at same time; Option
//= to enable only 1 type of tranfer; and option to enforce same
//= equipment type only.
//============================================================ 

prontera,165,215,5	script	Enchant Transferer	4_BULL,{
	disable_items;
	mes "[Enchant Transferer]";
	mes "Hello! Do you want to ^0000FFtransfer " + .s$[.TransferType] + "^000000 from your equipped item to another item?";
	mes "The process has no chance of failure and items keep their refine, cards and other effects.";
	if (.ZenyCost)
		mes "This will cost ^0000FF" + F_InsertComma(.ZenyCost) + "z^000000 only!";
	next;
	if (.TransferType == 2) {
		if (select("Random Option Transfer", "Enchant Socket Transfer", "Cancel") == 3)
			close;
	}
	if (.TransferType == 1 || @menu == 1)
		.@mode = true;
	mes "[Enchant Transferer]";
	mes "Which equipped item has the " + .s$[.@mode] + "s?"; 
	for(.@i = 0; .@i < getarraysize(.loc_names$); .@i++) {
		if (getequipid(.loc_EQI[.@i])>-1)
			set .@armor_menu$, .@armor_menu$ + .loc_names$[.@i] + " [ ^E81B02" + getitemname(getequipid(.loc_EQI[.@i])) + "^000000 ]:";
		else
			set .@armor_menu$, .@armor_menu$ + .loc_names$[.@i] + " [ ^D6C4E8" + "No Equip" + "^000000 ]:";
	}
	.@input_loc = select(.@armor_menu$) -1;
	clear;
	mes "[Enchant Transferer]";
	if (getequipid(.loc_EQI[.@input_loc]) < 0){
		mes "You don't have item equipped there.";
		close;
	}
	.@item = getequipid(.loc_EQI[.@input_loc]);
	.@refine = getequiprefinerycnt(.loc_EQI[.@input_loc]);
	.@card0 = getequipcardid(.loc_EQI[.@input_loc],0);
	.@card1 = getequipcardid(.loc_EQI[.@input_loc],1);
	.@card2 = getequipcardid(.loc_EQI[.@input_loc],2);
	.@card3 = getequipcardid(.loc_EQI[.@input_loc],3);
	for(.@i=0; .@i < (MAX_ITEM_RDM_OPT); .@i++) {
		.@r_id[.@i] = getequiprandomoption(.loc_EQI[.@input_loc],.@i,ROA_ID);
		.@r_v[.@i] = getequiprandomoption(.loc_EQI[.@input_loc],.@i,ROA_VALUE);
		.@r_p[.@i] = getequiprandomoption(.loc_EQI[.@input_loc],.@i,ROA_PARAM);
		if (.@r_id[.@i])
			.@r_LastOcupedSlot = .@i;
	}
	if (.@mode) {
		if (getarraysize(.@r_id) == 0) {
			mes "This item has no Random Options...";
			close;
		}
		if (getarraysize(.@r_id) == 1)
			.@HasOnlyOneEnchant = true;
	}
	else if (!.@card0 && !.@card1 && !.@card2 && !.@card3) {
		mes "This item has no enchants...";
		close;
	}
	if (.CanChoose) {
		if (!.@HasOnlyOneEnchant) {
			mes "Which effect to transfer?";
			if (.@mode) {
				for(.@i=0; .@i < 5; .@i++) {
					if (.@r_id[.@i])
						.@slot_menu$ += F_RDMOPT_Name(.@r_id[.@i],.@r_v[.@i]);
					.@slot_menu$ += ":";
				}
			}
			else {
				for(.@i=0; .@i < 4; .@i++) {
					if (getequipcardid(.loc_EQI[.@input_loc], .@i))
						.@slot_menu$ += "[ ^E81B02" + getitemname(getequipcardid(.loc_EQI[.@input_loc],.@i)) + "^000000 ]:";
					else
						.@slot_menu$ += ":";
				}
			}
			.@input_slot = select(.@slot_menu$) -1;
			set .@item, getequipid(.loc_EQI[.@input_loc]);
			clear;
			mes "[Enchant Transferer]";
		}
	}
	else
		mes "All " + .s$[.@mode] + "s from this item will be transferred.";
	if (.AnyEquip) {
		.@armor_menu$ = "";
		for(.@i=0; .@i < getarraysize(.loc_names$); .@i++)
			.@armor_menu$ += .loc_names$[.@i] + ":";
		.@output_type = select(.@armor_menu$) -1;
	}
	else
		.@output_type = .@input_loc;	
	getinventorylist;
	for(.@i = 0; .@i < @inventorylist_count; .@i++) {
		.@item_id = @inventorylist_id[.@i];
		if (getiteminfo(.@item_id, ITEMINFO_TYPE) != IT_ARMOR && getiteminfo(.@item_id, ITEMINFO_TYPE) != IT_WEAPON && getiteminfo(.@item_id, ITEMINFO_TYPE) != IT_SHADOWGEAR)
			continue;
		.@item_type = getiteminfo(.@item_id, ITEMINFO_LOCATIONS);
		if (.@item_type & .loc_EQP[.@output_type] && !@inventorylist_equip[.@i]) {
			.@item_ref = getarraysize(.@equipment_id_list);
			if (countinarray(.@equipment_id_list, .@item_id))
				continue;
			.@equipment_id_list[.@item_ref] = @inventorylist_id[.@i];
			.@menu_labels$[.@item_ref] = getitemname(@inventorylist_id[.@i]);
		}
	}
	if (!getarraysize(.@equipment_id_list[0])) {
		mes "But there are no items of this category in your inventory.";
		mes "The transfer can't happen.";
		close;
	}
	mes "To what item in your inventory you want to transfer?";
	next;
	.@index = select(implode(.@menu_labels$, ":")) - 1;
	.@output_id = .@equipment_id_list[.@index];
	mes "[Enchant Transferer]";
	mes "You selected " + getitemname(.@output_id) + ".";	
	if (countitem(.@output_id) > 1) {
		mes "You have more than one of this item.";
		mes "I won't touch items that you have more than one with you. It's to avoid mistakes.";
		close;
	}
	getinventorylist;
	.@i2 = inarray(@inventorylist_id, .@output_id);
	.@output_refine = @inventorylist_refine[.@i2];
	.@output_card0 = @inventorylist_card1[.@i2];
	.@output_card1 = @inventorylist_card2[.@i2];
	.@output_card2 = @inventorylist_card3[.@i2];
	.@output_card3 = @inventorylist_card4[.@i2];
	for(.@i = 0; .@i < (MAX_ITEM_RDM_OPT); .@i++) {
		.@output_r_id[.@i] = getd("@inventorylist_option_id" + (.@i + 1) + "[" + .@i2 + "]");
		.@output_r_v[.@i] = getd("@inventorylist_option_value" + (.@i + 1) + "[" + .@i2 + "]");
		.@output_r_p[.@i] = getd("@inventorylist_option_parameter" + (.@i + 1) + "[" + .@i2 + "]");
	}
	if (.@mode) {
		for(.@i = 0; .@i < MAX_ITEM_RDM_OPT; .@i++) {
			if (.@output_r_id[.@i] == 0) {
				.@output_slot = .@i;
				.@ok = true;
				break;
			}
		}
		if (!.@ok) {
			mes "You already have full Random Options in this item.";
			close;
		}
	}
	else {
		mes "Transfer to which slot?";
		.@slot_menu$ = "";
		for(.@i = 0; .@i < 4; .@i++) {
			if (getd(".@output_card" + .@i))
				.@slot_menu$ += "[^E81B02" + getitemname(getd(".@output_card" + .@i)) + "^000000 ]:";
			else
				.@slot_menu$ += "[^D6C4E8" + "Empty" + "^000000 ]:";
		}
		.@output_slot = select(.@slot_menu$) -1;
		if (!.Overwrite) {
			if(getd(".@output_card" + .@output_slot)) {
				mes "You already have enchant in this slot.";
				close;
			}
		}
	}
	clear;
	mes "[Enchant Transferer]";
	if (.@mode) {
		if (!.CanChoose && !.@HasOnlyOneEnchant) {
			mes "Transfer:";
			for(.@i = 0; .@i < MAX_ITEM_RDM_OPT; .@i++) {
				if (.@r_id[.@i])
					mes "* ^FF7700" + F_RDMOPT_Name(.@r_id[.@i],.@r_v[.@i]) + "^000000";
			}
		}
		else {
			if (.@HasOnlyOneEnchant)
				.@input_slot = .@r_LastOcupedSlot;
			mes "Transfer: ^FF7700" + F_RDMOPT_Name(.@r_id[.@input_slot],.@r_v[.@input_slot]) + "^000000";
		}
	}	
	else
		mes "Transfer: " + mesitemlink(getequipcardid(.loc_EQI[.@input_loc], .@input_slot));
	mes "^FF0000From: " + (.@refine?"+" + .@refine + " ":"") + getitemname(getequipid(.loc_EQI[.@input_loc])) + "^000000";
	mes "^0000FFTo: " + (.@output_refine?"+" + .@output_refine + " ":"") + getitemname(.@output_id) + "^000000";
	mes "Are you sure?";
	next;
	if(select("Cancel.", "Confirm") == 1)
		close;
	mes "[Enchant Transferer]";
	if (.ZenyCost && Zeny < .ZenyCost) {
		mes "Sorry, but you don't have enough zeny.";
		close;
	}
	mes "Stay put while the process is ongoing.";
	close2;
	specialeffect2 EF_MAPPILLAR;
	progressbar "ffff00", .progress_time;

	// anti-hack
	if (callfunc("F_IsEquipIDHack", .loc_EQI[.@input_loc], .@item) || callfunc("F_IsEquipCardHack", .loc_EQI[.@input_loc], .@card0, .@card1, .@card2, .@card3) ||
	    callfunc("F_IsEquipRefineHack", .loc_EQI[.@input_loc], .@refine) ||
	    countitem(.@output_id) != 1) {
		mes "[Enchant Transferer]";
		mes "You switched the item while I wasn't looking! Get out of here!";
		close;
	}

	if (.ZenyCost && Zeny < .ZenyCost) {
		mes "Sorry, but you don't have enough zeny.";
		close;
	}
	Zeny -= .ZenyCost;
	if (.@mode) {
		if (.CanChoose || getarraysize(.@r_id) < 2) {
			.@output_r_id[.@output_slot] = .@r_id[.@input_slot];
			.@output_r_v[.@output_slot] = .@r_v[.@input_slot];
			.@output_r_p[.@output_slot] = .@r_p[.@input_slot];
			deletearray .@r_id[.@input_slot], 1;
			deletearray .@r_v[.@input_slot], 1;
			deletearray .@r_p[.@input_slot], 1;
		}
		else {
			copyarray .@output_r_id[0], .@r_id[0], MAX_ITEM_RDM_OPT;
			copyarray .@output_r_v[0], .@r_v[0], MAX_ITEM_RDM_OPT;
			copyarray .@output_r_p[0], .@r_p[0], MAX_ITEM_RDM_OPT;
			deletearray .@r_id[0], MAX_ITEM_RDM_OPT;
			deletearray .@r_v[0], MAX_ITEM_RDM_OPT;
			deletearray .@r_p[0], MAX_ITEM_RDM_OPT;
		}
	}
	else {
		setd(".@output_card" + .@output_slot, getd(".@card" + .@input_slot));
		setd(".@card" + .@input_slot, 0);
	}
	delequip .loc_EQI[.@input_loc];
	delitem .@output_id, 1;
	getitem3 .@item, 1, 1, .@refine, 0, .@card0, .@card1, .@card2, .@card3,.@r_id,.@r_v,.@r_p;
	getitem3 .@output_id, 1, 1, .@output_refine, 0, .@output_card0, .@output_card1, .@output_card2, .@output_card3,.@output_r_id,.@output_r_v,.@output_r_p;
	equip .@item;
	npctalk "Transfer successful!", strnpcinfo(0), bc_self;
	end;

OnInit:
	//--------------------------------------------------------------//
	//--------------------   configuration   -----------------------//
	//--------------------------------------------------------------//
	
	//--------------------------------------------------------------//
	//if you want to remove one from the menu you need to remove it down too!! /or add
	//--------------------------------------------------------------//
	setarray .loc_names$, "Upper Headgear","Middle Headgear","Lower Headgear","Weapon","Left Hand","Armor","Garment","Shoes","Accessory Left","Accessory Right";
	setarray .loc_EQI, EQI_HEAD_TOP,EQI_HEAD_MID,EQI_HEAD_LOW,EQI_HAND_R,EQI_HAND_L,EQI_ARMOR,EQI_GARMENT,EQI_SHOES,EQI_ACC_L,EQI_ACC_R;

	.TransferType = 1;		//0=Socket Enchant only / 1=Random Option only / 2=Both
	.CanChoose = false;		//if true then can choose which effects to transfer
	.ZenyCost = 500000;		//if you don't want zeny requirment set it to 0
	.AnyEquip = false;		//if true then can transfer to any equipment type
	.Overwrite = true;		//if true then you can overwrite the enchant
	.progress_time = 3;		//the time (seconds) that needed to wait until the end
	//--------------------------------------------------------------//
	//--------------------------------------------------------------//


	setarray .s$, "enchantment", "Random Option", "random option or socket enchantment";
	for(.@i = 0; .@i < getarraysize(.loc_EQI); .@i++) {
		switch(.loc_EQI[.@i]) {
			case EQI_HEAD_TOP:
	        	.loc_EQP[.@i] = EQP_HEAD_TOP;
				break;
			case EQI_ARMOR:
			    .loc_EQP[.@i] = EQP_ARMOR;
				break;
			case EQI_HAND_L:
			    .loc_EQP[.@i] = EQP_HAND_L;
				break;
			case EQI_HAND_R:
			    .loc_EQP[.@i] = EQP_HAND_R;
				break;
			case EQI_GARMENT:
			    .loc_EQP[.@i] = EQP_GARMENT;
				break;
			case EQI_SHOES:
			    .loc_EQP[.@i] = EQP_SHOES;
				break;
			case EQI_ACC_L:
			    .loc_EQP[.@i] = EQP_ACC_L;
				break;
			case EQI_ACC_R:
			    .loc_EQP[.@i] = EQP_ACC_R;
				break;
			case EQI_HEAD_MID:
			    .loc_EQP[.@i] = EQP_HEAD_MID;
				break;
			case EQI_HEAD_LOW:
			    .loc_EQP[.@i] = EQP_HEAD_LOW;
				break;
			case EQI_COSTUME_HEAD_LOW:
			    .loc_EQP[.@i] = EQP_COSTUME_HEAD_LOW;
				break;
			case EQI_COSTUME_HEAD_MID:
			    .loc_EQP[.@i] = EQP_COSTUME_HEAD_MID;
				break;
			case EQI_COSTUME_HEAD_TOP:
			    .loc_EQP[.@i] = EQP_COSTUME_HEAD_TOP;
				break;
			case EQI_COSTUME_GARMENT:
			    .loc_EQP[.@i] = EQP_COSTUME_GARMENT;
				break;
			case EQI_SHADOW_ARMOR:
			    .loc_EQP[.@i] = EQP_SHADOW_ARMOR;
				break;
			case EQI_SHADOW_WEAPON:
			    .loc_EQP[.@i] = EQP_SHADOW_WEAPON;
				break;
			case EQI_SHADOW_SHIELD:
			    .loc_EQP[.@i] = EQP_SHADOW_SHIELD;
				break;
			case EQI_SHADOW_SHOES:
			    .loc_EQP[.@i] = EQP_SHADOW_SHOES;
				break;
			case EQI_SHADOW_ACC_R:
			    .loc_EQP[.@i] = EQP_SHADOW_ACC_R;
				break;
			case EQI_SHADOW_ACC_L:
			    .loc_EQP[.@i] = EQP_SHADOW_ACC_L;
				break;
		}
	}
	end;
}

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  4
  • Reputation:   0
  • Joined:  12/14/23
  • Last Seen:  

On 10/7/2024 at 7:49 PM, Racaae said:

Hi

//===== Script for rAthena by Racaae =========================
//= Enchant Transferer
//= https://rathena.org/board/topic/142357-question-about-transfer-enchant-npc-random-option/
//===== Additional Comments: ================================= 
//= Modified from Sader1992' enchant npc
//= 1.1 = Added option to transfer all effects at same time; Option
//= to enable only 1 type of tranfer; and option to enforce same
//= equipment type only.
//============================================================ 

prontera,165,215,5	script	Enchant Transferer	4_BULL,{
	disable_items;
	mes "[Enchant Transferer]";
	mes "Hello! Do you want to ^0000FFtransfer " + .s$[.TransferType] + "^000000 from your equipped item to another item?";
	mes "The process has no chance of failure and items keep their refine, cards and other effects.";
	if (.ZenyCost)
		mes "This will cost ^0000FF" + F_InsertComma(.ZenyCost) + "z^000000 only!";
	next;
	if (.TransferType == 2) {
		if (select("Random Option Transfer", "Enchant Socket Transfer", "Cancel") == 3)
			close;
	}
	if (.TransferType == 1 || @menu == 1)
		.@mode = true;
	mes "[Enchant Transferer]";
	mes "Which equipped item has the " + .s$[.@mode] + "s?"; 
	for(.@i = 0; .@i < getarraysize(.loc_names$); .@i++) {
		if (getequipid(.loc_EQI[.@i])>-1)
			set .@armor_menu$, .@armor_menu$ + .loc_names$[.@i] + " [ ^E81B02" + getitemname(getequipid(.loc_EQI[.@i])) + "^000000 ]:";
		else
			set .@armor_menu$, .@armor_menu$ + .loc_names$[.@i] + " [ ^D6C4E8" + "No Equip" + "^000000 ]:";
	}
	.@input_loc = select(.@armor_menu$) -1;
	clear;
	mes "[Enchant Transferer]";
	if (getequipid(.loc_EQI[.@input_loc]) < 0){
		mes "You don't have item equipped there.";
		close;
	}
	.@item = getequipid(.loc_EQI[.@input_loc]);
	.@refine = getequiprefinerycnt(.loc_EQI[.@input_loc]);
	.@card0 = getequipcardid(.loc_EQI[.@input_loc],0);
	.@card1 = getequipcardid(.loc_EQI[.@input_loc],1);
	.@card2 = getequipcardid(.loc_EQI[.@input_loc],2);
	.@card3 = getequipcardid(.loc_EQI[.@input_loc],3);
	for(.@i=0; .@i < (MAX_ITEM_RDM_OPT); .@i++) {
		.@r_id[.@i] = getequiprandomoption(.loc_EQI[.@input_loc],.@i,ROA_ID);
		.@r_v[.@i] = getequiprandomoption(.loc_EQI[.@input_loc],.@i,ROA_VALUE);
		.@r_p[.@i] = getequiprandomoption(.loc_EQI[.@input_loc],.@i,ROA_PARAM);
		if (.@r_id[.@i])
			.@r_LastOcupedSlot = .@i;
	}
	if (.@mode) {
		if (getarraysize(.@r_id) == 0) {
			mes "This item has no Random Options...";
			close;
		}
		if (getarraysize(.@r_id) == 1)
			.@HasOnlyOneEnchant = true;
	}
	else if (!.@card0 && !.@card1 && !.@card2 && !.@card3) {
		mes "This item has no enchants...";
		close;
	}
	if (.CanChoose) {
		if (!.@HasOnlyOneEnchant) {
			mes "Which effect to transfer?";
			if (.@mode) {
				for(.@i=0; .@i < 5; .@i++) {
					if (.@r_id[.@i])
						.@slot_menu$ += F_RDMOPT_Name(.@r_id[.@i],.@r_v[.@i]);
					.@slot_menu$ += ":";
				}
			}
			else {
				for(.@i=0; .@i < 4; .@i++) {
					if (getequipcardid(.loc_EQI[.@input_loc], .@i))
						.@slot_menu$ += "[ ^E81B02" + getitemname(getequipcardid(.loc_EQI[.@input_loc],.@i)) + "^000000 ]:";
					else
						.@slot_menu$ += ":";
				}
			}
			.@input_slot = select(.@slot_menu$) -1;
			set .@item, getequipid(.loc_EQI[.@input_loc]);
			clear;
			mes "[Enchant Transferer]";
		}
	}
	else
		mes "All " + .s$[.@mode] + "s from this item will be transferred.";
	if (.AnyEquip) {
		.@armor_menu$ = "";
		for(.@i=0; .@i < getarraysize(.loc_names$); .@i++)
			.@armor_menu$ += .loc_names$[.@i] + ":";
		.@output_type = select(.@armor_menu$) -1;
	}
	else
		.@output_type = .@input_loc;	
	getinventorylist;
	for(.@i = 0; .@i < @inventorylist_count; .@i++) {
		.@item_id = @inventorylist_id[.@i];
		if (getiteminfo(.@item_id, ITEMINFO_TYPE) != IT_ARMOR && getiteminfo(.@item_id, ITEMINFO_TYPE) != IT_WEAPON && getiteminfo(.@item_id, ITEMINFO_TYPE) != IT_SHADOWGEAR)
			continue;
		.@item_type = getiteminfo(.@item_id, ITEMINFO_LOCATIONS);
		if (.@item_type & .loc_EQP[.@output_type] && !@inventorylist_equip[.@i]) {
			.@item_ref = getarraysize(.@equipment_id_list);
			if (countinarray(.@equipment_id_list, .@item_id))
				continue;
			.@equipment_id_list[.@item_ref] = @inventorylist_id[.@i];
			.@menu_labels$[.@item_ref] = getitemname(@inventorylist_id[.@i]);
		}
	}
	if (!getarraysize(.@equipment_id_list[0])) {
		mes "But there are no items of this category in your inventory.";
		mes "The transfer can't happen.";
		close;
	}
	mes "To what item in your inventory you want to transfer?";
	next;
	.@index = select(implode(.@menu_labels$, ":")) - 1;
	.@output_id = .@equipment_id_list[.@index];
	mes "[Enchant Transferer]";
	mes "You selected " + getitemname(.@output_id) + ".";	
	if (countitem(.@output_id) > 1) {
		mes "You have more than one of this item.";
		mes "I won't touch items that you have more than one with you. It's to avoid mistakes.";
		close;
	}
	getinventorylist;
	.@i2 = inarray(@inventorylist_id, .@output_id);
	.@output_refine = @inventorylist_refine[.@i2];
	.@output_card0 = @inventorylist_card1[.@i2];
	.@output_card1 = @inventorylist_card2[.@i2];
	.@output_card2 = @inventorylist_card3[.@i2];
	.@output_card3 = @inventorylist_card4[.@i2];
	for(.@i = 0; .@i < (MAX_ITEM_RDM_OPT); .@i++) {
		.@output_r_id[.@i] = getd("@inventorylist_option_id" + (.@i + 1) + "[" + .@i2 + "]");
		.@output_r_v[.@i] = getd("@inventorylist_option_value" + (.@i + 1) + "[" + .@i2 + "]");
		.@output_r_p[.@i] = getd("@inventorylist_option_parameter" + (.@i + 1) + "[" + .@i2 + "]");
	}
	if (.@mode) {
		for(.@i = 0; .@i < MAX_ITEM_RDM_OPT; .@i++) {
			if (.@output_r_id[.@i] == 0) {
				.@output_slot = .@i;
				.@ok = true;
				break;
			}
		}
		if (!.@ok) {
			mes "You already have full Random Options in this item.";
			close;
		}
	}
	else {
		mes "Transfer to which slot?";
		.@slot_menu$ = "";
		for(.@i = 0; .@i < 4; .@i++) {
			if (getd(".@output_card" + .@i))
				.@slot_menu$ += "[^E81B02" + getitemname(getd(".@output_card" + .@i)) + "^000000 ]:";
			else
				.@slot_menu$ += "[^D6C4E8" + "Empty" + "^000000 ]:";
		}
		.@output_slot = select(.@slot_menu$) -1;
		if (!.Overwrite) {
			if(getd(".@output_card" + .@output_slot)) {
				mes "You already have enchant in this slot.";
				close;
			}
		}
	}
	clear;
	mes "[Enchant Transferer]";
	if (.@mode) {
		if (!.CanChoose && !.@HasOnlyOneEnchant) {
			mes "Transfer:";
			for(.@i = 0; .@i < MAX_ITEM_RDM_OPT; .@i++) {
				if (.@r_id[.@i])
					mes "* ^FF7700" + F_RDMOPT_Name(.@r_id[.@i],.@r_v[.@i]) + "^000000";
			}
		}
		else {
			if (.@HasOnlyOneEnchant)
				.@input_slot = .@r_LastOcupedSlot;
			mes "Transfer: ^FF7700" + F_RDMOPT_Name(.@r_id[.@input_slot],.@r_v[.@input_slot]) + "^000000";
		}
	}	
	else
		mes "Transfer: " + mesitemlink(getequipcardid(.loc_EQI[.@input_loc], .@input_slot));
	mes "^FF0000From: " + (.@refine?"+" + .@refine + " ":"") + getitemname(getequipid(.loc_EQI[.@input_loc])) + "^000000";
	mes "^0000FFTo: " + (.@output_refine?"+" + .@output_refine + " ":"") + getitemname(.@output_id) + "^000000";
	mes "Are you sure?";
	next;
	if(select("Cancel.", "Confirm") == 1)
		close;
	mes "[Enchant Transferer]";
	if (.ZenyCost && Zeny < .ZenyCost) {
		mes "Sorry, but you don't have enough zeny.";
		close;
	}
	mes "Stay put while the process is ongoing.";
	close2;
	specialeffect2 EF_MAPPILLAR;
	progressbar "ffff00", .progress_time;

	// anti-hack
	if (callfunc("F_IsEquipIDHack", .loc_EQI[.@input_loc], .@item) || callfunc("F_IsEquipCardHack", .loc_EQI[.@input_loc], .@card0, .@card1, .@card2, .@card3) ||
	    callfunc("F_IsEquipRefineHack", .loc_EQI[.@input_loc], .@refine) ||
	    countitem(.@output_id) != 1) {
		mes "[Enchant Transferer]";
		mes "You switched the item while I wasn't looking! Get out of here!";
		close;
	}

	if (.ZenyCost && Zeny < .ZenyCost) {
		mes "Sorry, but you don't have enough zeny.";
		close;
	}
	Zeny -= .ZenyCost;
	if (.@mode) {
		if (.CanChoose || getarraysize(.@r_id) < 2) {
			.@output_r_id[.@output_slot] = .@r_id[.@input_slot];
			.@output_r_v[.@output_slot] = .@r_v[.@input_slot];
			.@output_r_p[.@output_slot] = .@r_p[.@input_slot];
			deletearray .@r_id[.@input_slot], 1;
			deletearray .@r_v[.@input_slot], 1;
			deletearray .@r_p[.@input_slot], 1;
		}
		else {
			copyarray .@output_r_id[0], .@r_id[0], MAX_ITEM_RDM_OPT;
			copyarray .@output_r_v[0], .@r_v[0], MAX_ITEM_RDM_OPT;
			copyarray .@output_r_p[0], .@r_p[0], MAX_ITEM_RDM_OPT;
			deletearray .@r_id[0], MAX_ITEM_RDM_OPT;
			deletearray .@r_v[0], MAX_ITEM_RDM_OPT;
			deletearray .@r_p[0], MAX_ITEM_RDM_OPT;
		}
	}
	else {
		setd(".@output_card" + .@output_slot, getd(".@card" + .@input_slot));
		setd(".@card" + .@input_slot, 0);
	}
	delequip .loc_EQI[.@input_loc];
	delitem .@output_id, 1;
	getitem3 .@item, 1, 1, .@refine, 0, .@card0, .@card1, .@card2, .@card3,.@r_id,.@r_v,.@r_p;
	getitem3 .@output_id, 1, 1, .@output_refine, 0, .@output_card0, .@output_card1, .@output_card2, .@output_card3,.@output_r_id,.@output_r_v,.@output_r_p;
	equip .@item;
	npctalk "Transfer successful!", strnpcinfo(0), bc_self;
	end;

OnInit:
	//--------------------------------------------------------------//
	//--------------------   configuration   -----------------------//
	//--------------------------------------------------------------//
	
	//--------------------------------------------------------------//
	//if you want to remove one from the menu you need to remove it down too!! /or add
	//--------------------------------------------------------------//
	setarray .loc_names$, "Upper Headgear","Middle Headgear","Lower Headgear","Weapon","Left Hand","Armor","Garment","Shoes","Accessory Left","Accessory Right";
	setarray .loc_EQI, EQI_HEAD_TOP,EQI_HEAD_MID,EQI_HEAD_LOW,EQI_HAND_R,EQI_HAND_L,EQI_ARMOR,EQI_GARMENT,EQI_SHOES,EQI_ACC_L,EQI_ACC_R;

	.TransferType = 1;		//0=Socket Enchant only / 1=Random Option only / 2=Both
	.CanChoose = false;		//if true then can choose which effects to transfer
	.ZenyCost = 500000;		//if you don't want zeny requirment set it to 0
	.AnyEquip = false;		//if true then can transfer to any equipment type
	.Overwrite = true;		//if true then you can overwrite the enchant
	.progress_time = 3;		//the time (seconds) that needed to wait until the end
	//--------------------------------------------------------------//
	//--------------------------------------------------------------//


	setarray .s$, "enchantment", "Random Option", "random option or socket enchantment";
	for(.@i = 0; .@i < getarraysize(.loc_EQI); .@i++) {
		switch(.loc_EQI[.@i]) {
			case EQI_HEAD_TOP:
	        	.loc_EQP[.@i] = EQP_HEAD_TOP;
				break;
			case EQI_ARMOR:
			    .loc_EQP[.@i] = EQP_ARMOR;
				break;
			case EQI_HAND_L:
			    .loc_EQP[.@i] = EQP_HAND_L;
				break;
			case EQI_HAND_R:
			    .loc_EQP[.@i] = EQP_HAND_R;
				break;
			case EQI_GARMENT:
			    .loc_EQP[.@i] = EQP_GARMENT;
				break;
			case EQI_SHOES:
			    .loc_EQP[.@i] = EQP_SHOES;
				break;
			case EQI_ACC_L:
			    .loc_EQP[.@i] = EQP_ACC_L;
				break;
			case EQI_ACC_R:
			    .loc_EQP[.@i] = EQP_ACC_R;
				break;
			case EQI_HEAD_MID:
			    .loc_EQP[.@i] = EQP_HEAD_MID;
				break;
			case EQI_HEAD_LOW:
			    .loc_EQP[.@i] = EQP_HEAD_LOW;
				break;
			case EQI_COSTUME_HEAD_LOW:
			    .loc_EQP[.@i] = EQP_COSTUME_HEAD_LOW;
				break;
			case EQI_COSTUME_HEAD_MID:
			    .loc_EQP[.@i] = EQP_COSTUME_HEAD_MID;
				break;
			case EQI_COSTUME_HEAD_TOP:
			    .loc_EQP[.@i] = EQP_COSTUME_HEAD_TOP;
				break;
			case EQI_COSTUME_GARMENT:
			    .loc_EQP[.@i] = EQP_COSTUME_GARMENT;
				break;
			case EQI_SHADOW_ARMOR:
			    .loc_EQP[.@i] = EQP_SHADOW_ARMOR;
				break;
			case EQI_SHADOW_WEAPON:
			    .loc_EQP[.@i] = EQP_SHADOW_WEAPON;
				break;
			case EQI_SHADOW_SHIELD:
			    .loc_EQP[.@i] = EQP_SHADOW_SHIELD;
				break;
			case EQI_SHADOW_SHOES:
			    .loc_EQP[.@i] = EQP_SHADOW_SHOES;
				break;
			case EQI_SHADOW_ACC_R:
			    .loc_EQP[.@i] = EQP_SHADOW_ACC_R;
				break;
			case EQI_SHADOW_ACC_L:
			    .loc_EQP[.@i] = EQP_SHADOW_ACC_L;
				break;
		}
	}
	end;
}

 

Hello @Racaae,

I'm not that good with scripting, how can i fix this?

 

    parse_line: expect command, missing function name or calling undeclared function
    66 :                if (!.@HasOnlyOneEnchant) {
    67 :                        mes "Which effect to transfer?";
    68 :                        if (.@mode) {
    69 :                                for(.@i=0; .@i < 5; .@i++) {
    70 :                                        if (.@r_id[.@i])
*   71 :                                                .@slot_menu$ += F_RDMOPT_Name('.'@r_id[.@i],.@r_v[.@i]);
    72 :                                        .@slot_menu$ += ":";
    73 :                                }
    74 :                        }
    75 :                        else {
    76 :                                for(.@i=0; .@i < 4; .@i++) {

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  210
  • Reputation:   92
  • Joined:  06/02/12
  • Last Seen:  

32 minutes ago, Takun said:

Hello @Racaae,

I'm not that good with scripting, how can i fix this?

 

    parse_line: expect command, missing function name or calling undeclared function
    66 :                if (!.@HasOnlyOneEnchant) {
    67 :                        mes "Which effect to transfer?";
    68 :                        if (.@mode) {
    69 :                                for(.@i=0; .@i < 5; .@i++) {
    70 :                                        if (.@r_id[.@i])
*   71 :                                                .@slot_menu$ += F_RDMOPT_Name('.'@r_id[.@i],.@r_v[.@i]);
    72 :                                        .@slot_menu$ += ":";
    73 :                                }
    74 :                        }
    75 :                        else {
    76 :                                for(.@i=0; .@i < 4; .@i++) {

 

Hi. Put the following function above the NPC:
 

//////////////////////////////////////////////////////////////////////////////////
// Returns Random Option name and value
// -- callfunc "F_RDMOPT_Name",<ROA_ID>{,<Value>{,<2nd value>}};
//////////////////////////////////////////////////////////////////////////////////
function	script	F_RDMOPT_Name	{
	if (getargcount() > 2)
		.@s$ = getarg(1) + "~" + getarg(2);
	else if (getargcount() > 1)
		.@s$ = getarg(1);
	else
		.@s$ = "?";

	if (#langtype = 8) {
		//POR
		switch(getarg(0)){
			case 3: return "FOR +" + .@s$;
			case 6: return "INT +" + .@s$;
			case 7: return "DES +" + .@s$;
			case 8: return "SOR +" + .@s$;
			case 232: return "EXP ganha de Amorfos +" + .@s$ + "%";
			case 233: return "EXP ganha de Morto-Vivos +" + .@s$ + "%";
			case 234: return "EXP ganha de Brutos +" + .@s$ + "%";
			case 235: return "EXP ganha de Plantas +" + .@s$ + "%";
			case 236: return "EXP ganha de Insetos +" + .@s$ + "%";
			case 237: return "EXP ganha de Peixes +" + .@s$ + "%";
			case 238: return "EXP ganha de Demônios +" + .@s$ + "%";
			case 239: return "EXP ganha de Humanoides +" + .@s$ + "%";
			case 240: return "EXP ganha de Anjos +" + .@s$ + "%";
			case 241: return "EXP ganha de Dragões +" + .@s$ + "%";
			case 242: return "EXP ganha de todas raças +" + .@s$ + "%";
		}
	}
	switch(getarg(0)){
		case 1: return "MaxHP +" + .@s$;
		case 2: return "MaxSP +" + .@s$;
		case 3: return "STR +" + .@s$;
		case 4: return "AGI +" + .@s$;
		case 5: return "VIT +" + .@s$;
		case 6: return "INT +" + .@s$;
		case 7: return "DEX +" + .@s$;
		case 8: return "LUK +" + .@s$;
		case 9: return "MaxHP +" + .@s$ + "%";
		case 10: return "MaxSP +" + .@s$ + "%";
		case 11: return "HP regen +" + .@s$ + "%";
		case 12: return "SP regen +" + .@s$ + "%";
		case 13: return "ATK +" + .@s$ + "%";
		case 14: return "MATK +" + .@s$ + "%";
		case 15: return "ASPD +" + .@s$;
		case 16: return "Delay after attack -" + .@s$ + "%";
		case 17: return "ATK +" + .@s$;
		case 18: return "HIT +" + .@s$;
		case 19: return "MATK +" + .@s$;
		case 20: return "DEF +" + .@s$;
		case 21: return "MDEF +" + .@s$;
		case 22: return "FLEE +" + .@s$;
		case 23: return "Perfect dodge +" + .@s$;
		case 24: return "CRIT +" + .@s$;
		case 25: return "Neutral elemental resistance +" + .@s$ + "%";
		case 26: return "Water elemental resistance +" + .@s$ + "%";
		case 27: return "Earth elemental resistance +" + .@s$ + "%";
		case 28: return "Fire elemental resistance +" + .@s$ + "%";
		case 29: return "Wind elemental resistance +" + .@s$ + "%";
		case 30: return "Poison elemental resistance +" + .@s$ + "%";
		case 31: return "Holy elemental resistance +" + .@s$ + "%";
		case 32: return "Shadow elemental resistance +" + .@s$ + "%";
		case 33: return "Ghost elemental resistance +" + .@s$ + "%";
		case 34: return "Undead elemental resistance +" + .@s$ + "%";
		case 35: return "All elemental (except Neutral) resistance +" + .@s$ + "%";
		case 36: return "Neutral monster resistance +" + .@s$ + "%";
		case 37: return "ATK +" + .@s$ + "% against Neutral monster";
		case 38: return "Water monster resistance +" + .@s$ + "%";
		case 39: return "ATK +" + .@s$ + "% against Water monster";
		case 40: return "Earth monster resistance +" + .@s$ + "%";
		case 41: return "ATK +" + .@s$ + "% against Earth monster";
		case 42: return "Fire monster resistance +" + .@s$ + "%";
		case 43: return "ATK +" + .@s$ + "% against Fire monster";
		case 44: return "Wind monster resistance +" + .@s$ + "%";
		case 45: return "ATK +" + .@s$ + "% against Wind monster";
		case 46: return "Poison monster resistance +" + .@s$ + "%";
		case 47: return "ATK +" + .@s$ + "% against Poison monster";
		case 48: return "Holy monster resistance +" + .@s$ + "%";
		case 49: return "ATK +" + .@s$ + "% against Holy monster";
		case 50: return "Shadow monster resistance +" + .@s$ + "%";
		case 51: return "ATK +" + .@s$ + "% against Shadow monster";
		case 52: return "Ghost monster resistance +" + .@s$ + "%";
		case 53: return "ATK +" + .@s$ + "% against Ghost monster";
		case 54: return "Undead monster resistance +" + .@s$ + "%";
		case 55: return "ATK +" + .@s$ + "% against Undead monster";
		case 56: return "Neutral monster magic resistance +" + .@s$ + "%";
		case 57: return "MATK +" + .@s$ + "% against Neutral monster";
		case 58: return "Water monster magic resistance +" + .@s$ + "%";
		case 59: return "MATK +" + .@s$ + "% against Water monster";
		case 60: return "Earth monster magic resistance +" + .@s$ + "%";
		case 61: return "MATK +" + .@s$ + "% against  Earth monster";
		case 62: return "Fire monster magic resistance +" + .@s$ + "%";
		case 63: return "MATK +" + .@s$ + "% against Fire monster";
		case 64: return "Wind monster magic resistance +" + .@s$ + "%";
		case 65: return "MATK +" + .@s$ + "% against Wind monster";
		case 66: return "Poison monster magic resistance +" + .@s$ + "%";
		case 67: return "MATK +" + .@s$ + "% against Poison monster";
		case 68: return "Holy monster magic resistance +" + .@s$ + "%";
		case 69: return "MATK +" + .@s$ + "% against Holy monster";
		case 70: return "Shadow monster magic resistance +" + .@s$ + "%";
		case 71: return "MATK +" + .@s$ + "% against Shadow monster";
		case 72: return "Ghost monster magic resistance +" + .@s$ + "%";
		case 73: return "MATK +" + .@s$ + "% against Ghost monster";
		case 74: return "Undead monster magic resistance +" + .@s$ + "%";
		case 75: return "MATK +" + .@s$ + "% against Undead monster";
		case 76: return "Armor element Neutral";
		case 77: return "Armor element Water";
		case 78: return "Armor element Earth";
		case 79: return "Armor element Fire";
		case 80: return "Armor element Wind";
		case 81: return "Armor element Poison";
		case 82: return "Armor element Holy";
		case 83: return "Armor element Shadow";
		case 84: return "Armor element Ghost";
		case 85: return "Armor element Undead";
		case 87: return "Formless monster resistance +" + .@s$ + "%";
		case 88: return "Undead monster resistance +" + .@s$ + "%";
		case 89: return "Brute monster resistance +" + .@s$ + "%";
		case 90: return "Plant monster resistance +" + .@s$ + "%";
		case 91: return "Insect monster resistance +" + .@s$ + "%";
		case 92: return "Fish monster resistance +" + .@s$ + "%";
		case 93: return "Demon monster resistance +" + .@s$ + "%";
		case 94: return "Demihuman monster resistance +" + .@s$ + "%";
		case 95: return "Angel monster resistance +" + .@s$ + "%";
		case 96: return "Dragon monster resistance +" + .@s$ + "%";
		case 97: return "ATK +" + .@s$ + "% against Formless monster";
		case 98: return "ATK +" + .@s$ + "% against Undead monster";
		case 99: return "ATK +" + .@s$ + "% against Brute monster";
		case 100: return "ATK +" + .@s$ + "% against Plant monster";
		case 101: return "ATK +" + .@s$ + "% against Insect monster";
		case 102: return "ATK +" + .@s$ + "% against Fish monster";
		case 103: return "ATK +" + .@s$ + "% against Demon monster";
		case 104: return "ATK +" + .@s$ + "% against Demihuman monster";
		case 105: return "ATK +" + .@s$ + "% against Angel monster";
		case 106: return "ATK +" + .@s$ + "% against Dragon monster";
		case 107: return "MATK +" + .@s$ + "% against Formless monster";
		case 108: return "MATK +" + .@s$ + "% against Undead monster";
		case 109: return "MATK +" + .@s$ + "% against Brute monster";
		case 110: return "MATK +" + .@s$ + "% against Plant monster";
		case 111: return "MATK +" + .@s$ + "% against Insect monster";
		case 112: return "MATK +" + .@s$ + "% against Fish monster";
		case 113: return "MATK +" + .@s$ + "% against Devil monster";
		case 114: return "MATK +" + .@s$ + "% against Demihuman monster";
		case 115: return "MATK +" + .@s$ + "% against Angel monster";
		case 116: return "MATK +" + .@s$ + "% against Dragon monster";
		case 117: return "CRIT +" + .@s$ + " against Formless monster";
		case 118: return "CRIT +" + .@s$ + " against Undead monster";
		case 119: return "CRIT +" + .@s$ + " against Brute monster";
		case 120: return "CRIT +" + .@s$ + " against Plant monster";
		case 121: return "CRIT +" + .@s$ + " against Insect monster";
		case 122: return "CRIT +" + .@s$ + " against Fish monster";
		case 123: return "CRIT +" + .@s$ + " against Demon monster";
		case 124: return "CRIT +" + .@s$ + " against Demihuman monster";
		case 125: return "CRIT +" + .@s$ + " against Angel monster";
		case 126: return "CRIT +" + .@s$ + " against Dragon monster";
		case 127: return "Pierces " + .@s$ + "% DEF of Formless monster";
		case 128: return "Pierces " + .@s$ + "% DEF of Undead monster";
		case 129: return "Pierces " + .@s$ + "% DEF of Brute monster";
		case 130: return "Pierces " + .@s$ + "% DEF of Plant monster";
		case 131: return "Pierces " + .@s$ + "% DEF of Insect monster";
		case 132: return "Pierces " + .@s$ + "% DEF of Fish monster";
		case 133: return "Pierces " + .@s$ + "% DEF of Demon monster";
		case 134: return "Pierces " + .@s$ + "% DEF of Demihuman monster";
		case 135: return "Pierces " + .@s$ + "% DEF of Angel monster";
		case 136: return "Pierces " + .@s$ + "% DEF of Dragon monster";
		case 137: return "Pierces " + .@s$ + "% MDEF of Formless monster";
		case 138: return "Pierces " + .@s$ + "% MDEF of Undead monster";
		case 139: return "Pierces " + .@s$ + "% MDEF of Brute monster";
		case 140: return "Pierces " + .@s$ + "% MDEF of Plant monster";
		case 141: return "Pierces " + .@s$ + "% MDEF of Insect monster";
		case 142: return "Pierces " + .@s$ + "% MDEF of Fish monster";
		case 143: return "Pierces " + .@s$ + "% MDEF of Demon monster";
		case 144: return "Pierces " + .@s$ + "% MDEF of Demihuman monster";
		case 145: return "Pierces " + .@s$ + "% MDEF of Angel monster";
		case 146: return "Pierces " + .@s$ + "% MDEF of Dragon monster";
		case 147: return "ATK +" + .@s$ + "% against Normal monster";
		case 148: return "ATK +" + .@s$ + "% against Boss monster";
		case 149: return "Normal monster resistance +" + .@s$ + "%";
		case 150: return "Boss monster resistance +" + .@s$ + "%";
		case 151: return "MATK +" + .@s$ + "% against Normal monster";
		case 152: return "MATK +" + .@s$ + "% against Boss monster";
		case 153: return "Pierces " + .@s$ + "% DEF of Normal monster";
		case 154: return "Pierces " + .@s$ + "% DEF of Boss monster";
		case 155: return "Pierces " + .@s$ + "% MDEF of Normal monster";
		case 156: return "Pierces " + .@s$ + "% MDEF of Boss monster";
		case 157: return "ATK +" + .@s$ + "% against Small size monster";
		case 158: return "ATK +" + .@s$ + "% against Medium size monster";
		case 159: return "ATK +" + .@s$ + "% against Large size monster";
		case 160: return "Small monster resistance +" + .@s$ + "%";
		case 161: return "Medium monster resistance +" + .@s$ + "%";
		case 162: return "Large monster resistance +" + .@s$ + "%";
		case 163: return "Nullify weapon's DMG size penalty";
		case 164: return "Critical attack +" + .@s$ + "%";
		case 165: return "Critical DMG -" + .@s$ + "%";
		case 166: return "Long range physical attack +" + .@s$ + "%";
		case 167: return "Long range physical DMG -" + .@s$ + "%";
		case 168: return "Healing skills +" + .@s$ + "%";
		case 169: return "Restoration gained from Healing skills +" + .@s$ + "%";
		case 170: return "Variable cast time -" + .@s$ + "%";
		case 171: return "After cast delay -" + .@s$ + "%";
		case 172: return "Reduces SP cost by " + .@s$ + "%";
		case 175: return "Weapon element Neutral";
		case 176: return "Weapon element Water";
		case 177: return "Weapon element Earth";
		case 178: return "Weapon element Fire";
		case 179: return "Weapon element Wind";
		case 180: return "Weapon element Poison";
		case 181: return "Weapon element Holy";
		case 182: return "Weapon element Shadow";
		case 183: return "Weapon element Ghost";
		case 184: return "Weapon element Undead";
		case 185: return "Indestructible in battle";
		case 186: return "Indestructible in battle";
		case 187: return "MATK against Small size monster +" + .@s$ + "%";
		case 188: return "MATK against Medium size monster +" + .@s$ + "%";
		case 189: return "MATK against Large size monster +" + .@s$ + "%";
		case 190: return "Small monster magic resistance +" + .@s$ + "%";
		case 191: return "Medium monster magic resistance +" + .@s$ + "%";
		case 192: return "Large monster magic resistance +" + .@s$ + "%";
		case 193: return "Elemental attacks resistance +" + .@s$ + "%";
		case 194: return "Formless monster resistance +" + .@s$ + "%";
		case 195: return "Undead monster resistance +" + .@s$ + "%";
		case 196: return "Brute monster resistance +" + .@s$ + "%";
		case 197: return "Plant monster resistance +" + .@s$ + "%";
		case 198: return "Insect monster resistance +" + .@s$ + "%";
		case 199: return "Fish monster resistance +" + .@s$ + "%";
		case 200: return "Demon monster resistance +" + .@s$ + "%";
		case 201: return "Demihuman monster resistance +" + .@s$ + "%";
		case 202: return "Angel monster resistance +" + .@s$ + "%";
		case 203: return "Dragon monster resistance +" + .@s$ + "%";
		case 206: return "Demi-Human players resistance + " + .@s$ + "%";
		case 207: return "Doram players resistance +" + .@s$ + "%";
		case 208: return "ATK against Demi-Human players +" + .@s$ + "%";
		case 209: return "ATK against Doram players +" + .@s$ + "%";
		case 210: return "MATK against Demi-Human players +" + .@s$ + "%";
		case 211: return "MATK against Doram players +" + .@s$ + "%";
		case 212: return "Critical +" + .@s$ + " for Demi-Human players";
		case 213: return "Critical +" + .@s$ + " for Doram players";
		case 214: return "Pierces " + .@s$ + "% DEF of Demi-Human players";
		case 215: return "Pierces " + .@s$ + "% DEF of Doram players";
		case 216: return "Pierces " + .@s$ + "% MDEF of Demi-Human players";
		case 217: return "Pierces " + .@s$ + "% MDEF of Doram players";
		case 218: return "Received reflected DMG -" + .@s$ + "%";
		case 219: return "Melee physical DMG +" + .@s$ + "%";
		case 220: return "Melee physical DMG -" + .@s$ + "%";
		case 221: return "Neutral elemental magic skill DMG +" + .@s$ + "%";
		case 222: return "Water elemental magic skill DMG +" + .@s$ + "%";
		case 223: return "Earth elemental magic skill DMG +" + .@s$ + "%";
		case 224: return "Fire elemental magic skill DMG +" + .@s$ + "%";
		case 225: return "Wind elemental magic skill DMG +" + .@s$ + "%";
		case 226: return "Poison elemental magic skill DMG +" + .@s$ + "%";
		case 227: return "Holy elemental magic skill DMG +" + .@s$ + "%";
		case 228: return "Shadow elemental magic skill DMG +" + .@s$ + "%";
		case 229: return "Ghost elemental magic skill DMG +" + .@s$ + "%";
		case 230: return "Undead elemental magic skill DMG +" + .@s$ + "%";
		case 231: return "All elemental magic skill DMG +" + .@s$ + "%";
		case 232: return "EXP gained from Formless race +" + .@s$ + "%";
		case 233: return "EXP gained from Undead race +" + .@s$ + "%";
		case 234: return "EXP gained from Brute race +" + .@s$ + "%";
		case 235: return "EXP gained from Plant race +" + .@s$ + "%";
		case 236: return "EXP gained from Insect race +" + .@s$ + "%";
		case 237: return "EXP gained from Fish race +" + .@s$ + "%";
		case 238: return "EXP gained from Demon race +" + .@s$ + "%";
		case 239: return "EXP gained from Demi-Human race +" + .@s$ + "%";
		case 240: return "EXP gained from Angel race +" + .@s$ + "%";
		case 241: return "EXP gained from Dragon race +" + .@s$ + "%";
		case 242: return "EXP gained from all races +" + .@s$ + "%";
		case 243: return "POW + " + .@s$;
		case 244: return "SPL + " + .@s$;
		case 245: return "STA + " + .@s$;
		case 246: return "WIS + " + .@s$;
		case 247: return "CON + " + .@s$;
		case 248: return "CRT + " + .@s$;
		case 249: return "P.ATK + " + .@s$;
		case 250: return "S.MATK + " + .@s$;
		case 251: return "RES + " + .@s$;
		case 252: return "MRES + " + .@s$;
		case 253: return "H.PLUS + " + .@s$;
		case 254: return "C.RATE + " + .@s$;
		default: return "Unknow Random Option";
	}
}

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  4
  • Reputation:   0
  • Joined:  12/14/23
  • Last Seen:  

Hello @Racaae,

 

Your script works and it's great! However, i have one concern.

Is it possible to transfer or swap the randomopt to the same item? Like a Muffler [1] (2 opt) to a Muffler [1] (4opt)?

image.png.b107e9c8e2d0176070ccaf773dcfc87d.png

WIll that be possible? and what mistake what would happen if so.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  2
  • Reputation:   0
  • Joined:  04/04/25
  • Last Seen:  

On 3/11/2025 at 9:35 AM, Takun said:

Hello @Racaae,

 

Your script works and it's great! However, i have one concern.

Is it possible to transfer or swap the randomopt to the same item? Like a Muffler [1] (2 opt) to a Muffler [1] (4opt)?

image.png.b107e9c8e2d0176070ccaf773dcfc87d.png

WIll that be possible? and what mistake what would happen if so. Drift Boss

Yes, it is technically possible to transfer or swap random options (randomopt) between two of the same item, such as from a Muffler [1] (2 options) to a Muffler [1] (4 options) — but not without limitations, careful scripting, and potential risks.

Link to comment
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.

×
×
  • Create New...