Jump to content
  • 0

need help random option NPC by sader1992


AinsLord

Question


  • Group:  Members
  • Topic Count:  261
  • Topics Per Day:  0.08
  • Content Count:  758
  • Reputation:   20
  • Joined:  11/21/15
  • Last Seen:  

so i received this kind of error using the latest rathena git

image.png.7fb8abca23ab39fef9ab84cd7cb8151a.png

while in my old rathena it is working fine

i dunno why i got error with the script

here is the script by @sader1992

//===== rAthena Script =======================================
//= saders All in one Random Option Script
//= Free Script!!!!
//===== By: ==================================================
//= sader1992
//= https://sader1992.com/
//= https://rathena.org/board/profile/30766-sader1992/
//= https://sader1992.com/?page=item&item=54
//= For more , check out here >
//= https://sader1992.com/?page=ra_services
//= https://sader1992.com/?page=store
//= https://rathena.org/board/profile/30766-sader1992/content/?type=downloads_file
//===== Current Version: =====================================
//= 1.0
//===== Compatible With: ===================================== 
//= rAthena Project
//https://rathena.org/board/files/file/4309-all-in-one-random-options-script/
//https://github.com/sader1992/sader_scripts
//===== Update Log: =========================================
//= Version 1.0 Creating the script.
//===== Description: =========================================
//= This is a Highly Custumizable random option script
//= you can reuse the script by just creating a new file with different setting!.
//= read and understand the settings.
//============================================================
byako,111,144,5	script	Base HG Options	444,{
	disable_items; function rnd;
	switch(select("Insert Random Options:Allowed Items List")){
		case 1:
			mes "You must equip the item to appear here!";
			for(.@i=0;.@i<EQI_MAX;.@i++){
				if(getequipisequiped(.@i)) {
					.@m1$ += (inarray(.item_list,getequipid(.@i)) != -1?"^11AD09":"^F73831") + F_getpositionname(.@i) + "-[" + getequipname(.@i) + "]^000000";
					.@exist = true;
				}
				.@m1$ += ":";
			}
			if(!.@exist){
				mes "You have to equip the item you want to insert the random options into!.";
				end;
			}
			.@eq = select(.@m1$) -1;
			clear;
			.@id = getequipid(.@eq);
			if(inarray(.item_list,.@id) == -1){
				mes "Sorry , I cannot deal with this item!";
				end;
			}
			.@gid = .it[.@id];
			if(!.@gid){
				mes "Something went wrong!";
				end;
			}
			if(!getequiprandomoption(.@eq,0,ROA_ID)){
				.@zeny = .nz[.@gid];
				.@cashpoint = .nk[.@gid];
				.@costumpoint = .nc[.@gid];
				copyarray(.@item,getd(".ni_" + .@gid),getarraysize(getd(".ni_" + .@gid)));
				copyarray(.@amount,getd(".na_" + .@gid),getarraysize(getd(".na_" + .@gid)));
			}else{
				if(!.g_reroll[.@gid]){
					mes "Sorry , i cannot reroll the random options in this item!";
					end;
				}
				.@zeny = .rz[.@gid];
				.@cashpoint = .rk[.@gid];
				.@costumpoint = .rc[.@gid];
				copyarray(.@item,getd(".ri_" + .@gid),getarraysize(getd(".ri_" + .@gid)));
				copyarray(.@amount,getd(".ra_" + .@gid),getarraysize(getd(".ra_" + .@gid)));
			}
			mes "Selected Item [" + getequipname(.@eq) + "]";
			mes "==== Cost ====";
			if(.@zeny) mes "Zeny: " + .@zeny;
			if(.@cashpoint) mes "CashPoint: " + .@cashpoint;
			if(.@costumpoint) mes .CustomPointsName$ + ": " + .@costumpoint;
			for(.@i=0;.@i<getarraysize(.@item);.@i++){
				mes "(" + .@amount[.@i] + ") " + getitemname(.@item[.@i]);
			}
			if(!.KeepItemData){
				mes "^E01E00You will loss all the refine and cards in the item if you continue.^000000";
			}
			mes "Would you like to continue?";
			if(select("Yes:No") == 2){
				clear;
				mes "Ok, see you next time!";
				end;
			}
			clear;
			if(Zeny < .@zeny){
				mes "You don't have " + .@zeny + " Zeny";
				.@close = true;
			}
			if(#CASHPOINTS < .@cashpoint){
				mes "You don't have " + .@cashpoint + " CashPoints";
				.@close = true;
			}
			if(getd(.CustomPointsVariable$) < .@costumpoint){
				mes "You don't have " + .@costumpoint + " " + .CustomPointsName$;
				.@close = true;
			}
			for(.@i=0;.@i<getarraysize(.@item);.@i++){
				if(countitem(.@item[.@i]) < .@amount[.@i]){
					mes "You don't have (" + .@amount[.@i] + ") " + getitemname(.@item[.@i]);
					.@close = true;
				}
			}
			if(.@close) end;
			.@r = getequiprefinerycnt(.@eq);
			for(.@i=0;.@i<4;.@i++){
				if(getequipcardid(.@eq,.@i)){
					setd ".@c" + .@i,getequipcardid(.@eq,.@i);
					.@re[getarraysize(.@re)] = true;
				}
			}
			copyarray(.@opt_id,getd(".ro_id_" + .@gid + "_0"),getarraysize(getd(".ro_id_" + .@gid + "_0")));
			copyarray(.@opt_mn,getd(".ro_mn_" + .@gid + "_0"),getarraysize(getd(".ro_mn_" + .@gid + "_0")));
			copyarray(.@opt_mx,getd(".ro_mx_" + .@gid + "_0"),getarraysize(getd(".ro_mx_" + .@gid + "_0")));
			for(.@i=1;.@i<6;.@i++){
				copyarray(getd(".@opt_id" + .@i),getd(".ro_id_" + .@gid + "_" + .@i),getarraysize(getd(".ro_id_" + .@gid + "_" + .@i)));
				copyarray(getd(".@opt_mn" + .@i),getd(".ro_mn_" + .@gid + "_" + .@i),getarraysize(getd(".ro_mn_" + .@gid + "_" + .@i)));
				copyarray(getd(".@opt_mx" + .@i),getd(".ro_mx_" + .@gid + "_" + .@i),getarraysize(getd(".ro_mx_" + .@gid + "_" + .@i)));
			}
			for(.@i=1;.@i<6;.@i++){
				if(rand(100) > getd(".s_" + .@i + "[" + .@gid + "]"))
					break;
				if(getd(".ro_id_" + .@gid + "_" + .@i)){
					if(!getarraysize(getd(".@opt_id" + .@i))) break;
					.@ndx = rand(getarraysize(getd(".@opt_id" + .@i)));
					.@result_id = getd(".@opt_id" + .@i + "[" + .@ndx + "]");
					.@result_vl = rnd(getd(".@opt_mn" + .@i + "[" + .@ndx + "]"),getd(".@opt_mx" + .@i + "[" + .@ndx + "]"));
					deletearray(getd(".@opt_id" + .@i + "[" + .@ndx + "]"),1);
					deletearray(getd(".@opt_mn" + .@i + "[" + .@ndx + "]"),1);
					deletearray(getd(".@opt_mx" + .@i + "[" + .@ndx + "]"),1);
				}else{
					if(!.@opt_id) break;
					.@ndx = rand(getarraysize(.@opt_id));
					.@result_id = .@opt_id[.@ndx];
					.@result_vl = rnd(.@opt_mn[.@ndx],.@opt_mx[.@ndx]);
					if(!.g_reuse[.@gid]){
						deletearray(.@opt_id[.@ndx],1);
						deletearray(.@opt_mn[.@ndx],1);
						deletearray(.@opt_mx[.@ndx],1);
					}
				}
				if(.ex[.@result_id]){
					for(.@i2=0;.@i2<getarraysize(.@r_id);.@i2++){
						if(.ex[.@result_id] == .ex[.@r_id[.@i2]]){
							.@reject = true;
						}
					}
				}
				if(!.@reject){
					.@s1 = getarraysize(.@r_id);
					.@r_id[.@s1] = .@result_id;
					.@r_v[.@s1] = .@result_vl;
				}else{
					.@i--;
					.@failsafe++;
					if(.@failsafe > 50){
						mes "Something went wrong , The server admin need to make sure that the config is done correctly!";
						end;
					}
				}
			}
			if(Zeny < .@zeny) end;
			if(#CASHPOINTS < .@cashpoint) end;
			if(getd(.CustomPointsVariable$) < .@costumpoint) end;
			for(.@i=0;.@i<getarraysize(.@item);.@i++){
				if(countitem(.@item[.@i]) < .@amount[.@i]){
					end;
				}
			}
			// anti-hack
			if (callfunc("F_IsEquipIDHack", .@eq, .@id) || callfunc("F_IsEquipCardHack", .@eq, .@c0, .@c1, .@c2, .@c3)) {
				// anti-hack
				emotion ET_FRET;
				mes "Item Switch detected!";
				end;
			}
			Zeny -= .@zeny;
			#CASHPOINTS-= .@cashpoint;
			setd(.CustomPointsVariable$,getd(.CustomPointsVariable$) - .@costumpoint);
			for(.@i=0;.@i<getarraysize(.@item);.@i++){
				delitem(.@item[.@i],.@amount[.@i]);
			}
			if(!.@r_id){
				specialeffect2 EF_REFINEOK;
				mes "Look Like you didn't get any random option, your luck is really bad!";
				end;
			}
			delequip(.@eq);
			specialeffect2 EF_REFINEOK;
			if(.KeepItemData)
				getitem3(.@id,1,1,.@r,0,.@c0,.@c1,.@c2,.@c3,.@r_id,.@r_v,.@null);
			else
				getitem3(.@id,1,1,0,0,0,0,0,0,.@r_id,.@r_v,.@null);
			equip(.@id);
			mes "Done!";
		end;
		
		case 2:
			mes "The list of the allowed items in this npc!";
			for(.@i=0;.@i<getarraysize(.item_list);.@i++){
				mes "<ITEM>" + getitemname(.item_list[.@i]) + "[" + getitemslots(.item_list[.@i]) + "]<INFO>" + .item_list[.@i] + "</INFO></ITEM>";
				if(.@i >= 10 && !(.@i%10)) next;
			}
		end;
	}
end;

	function	rnd	{
		if(.HardBalance){
			return rand(getarg(0),rand(getarg(0),getarg(1)));
		}
		return rand(getarg(0),getarg(1));
	}

	function	AddGroup	{
		.@id = getarg(0);
		for(.@i=1;.@i<getargcount();.@i++){
			.it[getarg(.@i)] = .@id;
			.item_list[getarraysize(.item_list)] = getarg(.@i);
			
		}
		return;
	}
	
	function	AddGroupOption	{
		.@id = getarg(0);
		.g_reroll[.@id] = getarg(1);
		.g_reuse[.@id] = getarg(2);
		return;
	}
	
	function	AddGroupCost	{
		.@id = getarg(0);
		.nz[.@id] = getarg(1);
		.nk[.@id] = getarg(2);
		.nc[.@id] = getarg(3);
		for(.@i=4;.@i<getargcount();.@i+=2){
			.@s = getarraysize(getd(".ni_" + .@id));
			setd(".ni_" + .@id + "[" + .@s + "]",getarg(.@i));
			setd(".na_" + .@id + "[" + .@s + "]",getarg(.@i+1));
		}
		return;
	}
	
	function	AddGroupReRollCost	{
		.@id = getarg(0);
		.rz[.@id] = getarg(1);
		.rk[.@id] = getarg(2);
		.rc[.@id] = getarg(3);
		for(.@i=4;.@i<getargcount();.@i+=2){
			.@s = getarraysize(getd(".ri_" + .@id));
			setd(".ri_" + .@id + "[" + .@s + "]",getarg(.@i));
			setd(".ra_" + .@id + "[" + .@s + "]",getarg(.@i+1));
		}
		return;
	}
	
	function	AddGroupChance	{
		.@id = getarg(0);
		.s_1[.@id] = getarg(1);
		.s_2[.@id] = getarg(2);
		.s_3[.@id] = getarg(3);
		.s_4[.@id] = getarg(4);
		.s_5[.@id] = getarg(5);
		return;
	}
	
	function	AddOpt	{
		.@id = getarg(0);
		.@loc = getarg(1);
		.@s = getarraysize(getd(".ro_id_" + .@id + "_" + .@loc));
		setd(".ro_id_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(2));
		setd(".ro_mn_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(3));
		setd(".ro_mx_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(4));
		return;
	}
	
	function	AddExclusiveOpt	{
		.@s1 = getarraysize(.exv);
		.exv[.@s1] = true;
		for(.@i=0;.@i<getargcount();.@i++){
			.ex[getarg(.@i)] = .@s1;
		}
		return;
	}

OnInit:
	.exv = true;//DO NOT REMOVE THIS.
	.KeepItemData = true;//if this is 'false , the player will loss the refine+cards from the item when he use this npc.
	.CustomPointsVariable$ = "#COSTUMPOINTS";//The variable name of the costum points.
	.CustomPointsName$ = "Server RO Points";//The name of the costum points, this what the player will see.
	.HardBalance = true;//if this is true , it would be much harder to get high value in the random option.
	
	
	//AddGroup(<Group ID>,<ItemID>,<ItemID>,<ItemID>,<ItemID>,<ItemID>);
	/*
	AddGroup Doc
		<Group ID> = a number between 1 and MAX_INT64
		DO NOT REUSE THE GROUP ID IN THE SAME FILE CONFIG!
		DO NOT REUSE THE SAME ITEM ID IN DIFFERENT GROUP!
		will create a group id 
		you can add as many as you want items inside a group.
	*/
	
	//AddGroupOption(<Group ID>,<Allow ReRoll?true:false>,<Allow reuse already gotten option?true:false>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>);
	/*
	AddGroupOption Doc
		<Group ID> = A group id that is already created in AddGroup()!.
		<Allow ReRoll?true:false> = allow reroll an item with random option or not
		<Allow reuse already gotten option?true:false> = for exammple if you have str in the options and the player gor it , can he get it again in another slot?
		
	*/
	
	//AddGroupCost(<Group ID>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>);
	/*
	AddGroupCost Doc
		<Group ID> = A group id that is already created in AddGroup()!.
		<Zeny Cost> = the zeny cost (can be 0)
		<CashPoint Cost> = the cashpoints cost (can be 0)
		<Custom Points Cost> = if you are using costum points in the script , check out .CustomPointsVariable$ and .CustomPointsName$ at the start of the script (can be 0)
		<Item1 ID Cost> = the item cost
		<Item1 Amount Cost> = the item amount cost
		
		You can use as many item,amount cost at the end of the function.
	*/
	
	//AddGroupReRollCost(<Group ID>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>);
	/*
	AddGroupReRollCost Doc
		<Group ID> = A group id that is already created in AddGroup()!.
		<Zeny Cost> = the zeny cost (can be 0)
		<CashPoint Cost> = the cashpoints cost (can be 0)
		<Custom Points Cost> = if you are using costum points in the script , check out .CustomPointsVariable$ and .CustomPointsName$ at the start of the script (can be 0)
		<Item1 ID Cost> = the item cost
		<Item1 Amount Cost> = the item amount cost
		
		You can use as many item,amount cost at the end of the function.
	*/
	
	//AddGroupChance(<Group ID>,<1st Option Chance>,<2nd Option Chance>,<3rd Option Chance>,<4th Option Chance>,<5th Option Chance>);
	/*
	AddGroupChance Doc
		<Group ID> = A group id that is already created in AddGroup()!.
		<1st Option Chance> = the Chance to get one of the random options in the slot 1 (can be 0)
		<2nd Option Chance> = the Chance to get one of the random options in the slot 2 (can be 0)
		<3rd Option Chance> = the Chance to get one of the random options in the slot 3 (can be 0)
		<4th Option Chance> = the Chance to get one of the random options in the slot 4 (can be 0)
		<5th Option Chance> = the Chance to get one of the random options in the slot 5 (can be 0)
		
		Keep inmind that if the player didn't get lucky for example at the slot 2 , all the chances after will be ignored
		you cannot skip a random option slot that would bug the game client.
	*/
	
	//AddOpt(<Group ID>,<Location>,<Random Option ID>,<Minimum Value>,<Maximum Value>);
	/*
	AddOpt Doc
		<Group ID> = A group id that is already created in AddGroup()!.
		<Location> = you can spisfiy random option to a location from 1 to 5 , but you can use 0 , if you used 0 it will apply to all locations that doesn't have spisfied random options.
		<Random Option ID> = random option id , you can use the id or the variable , check out the file /rathena/db/re/item_randomopt_db.yml
		<Minimum Value> = the minimum value
		<Maximum Value> = the maximum value
	*/
	
	//AddExclusiveOpt(<Random Option ID>,<Random Option ID>,<Random Option ID>,<Random Option ID>,<Random Option ID>);
	/*
	AddExclusiveOpt Doc
		this will help you to prevent a group of random opions typs in the same item in different slots
		for example
			RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET
			RDMOPT_DAMAGE_PROPERTY_WATER_TARGET
			RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET
			RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET
			RDMOPT_DAMAGE_PROPERTY_WIND_TARGET
			RDMOPT_DAMAGE_PROPERTY_POISON_TARGET
			RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET
			RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET
			RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET
			RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET
		if the player got 1 of them in a slot , he wont get another one to another slot
	*/

//Example!!!>
//this is just an example , this script allow you to create any random option system you want.

	//Creating Group id 1 , with Hat items inside.
	AddGroup(1,50000,50001,50002);
	//Group id 1 Options
	AddGroupOption(1,true,false);
	//Group id 1 Cost
	AddGroupCost(1,1500000,0,0,0,0,0,0);
	//Group id 1 ReRoll Cost
	AddGroupReRollCost(1,750000,0,0,502,5,503,2);
	//Group id 1 Chances.
	AddGroupChance(1,100,100,100,100,100);
	//Group id 1 Random Option List. location 0 mean all the slot locations
	AddOpt(1,0,RDMOPT_VAR_STRAMOUNT,1,10);
	AddOpt(1,0,RDMOPT_VAR_INTAMOUNT,1,10);
	AddOpt(1,0,RDMOPT_VAR_VITAMOUNT,1,10);
	AddOpt(1,0,RDMOPT_VAR_LUKAMOUNT,1,10);
	AddOpt(1,0,RDMOPT_VAR_AGIAMOUNT,1,10);
	AddOpt(1,0,RDMOPT_VAR_DEXAMOUNT,1,10);
	AddOpt(1,0,RDMOPT_VAR_MAXHPPERCENT,1,25);
	AddOpt(1,0,RDMOPT_VAR_MAXSPPERCENT,1,25);
	//those enchantment you wont get unless in slot 5
	AddOpt(1,5,RDMOPT_ATTR_TOLERACE_NOTHING,1,5);
	AddOpt(1,5,RDMOPT_ATTR_TOLERACE_WATER,1,5);
	AddOpt(1,5,RDMOPT_ATTR_TOLERACE_GROUND,1,5);
	AddOpt(1,5,RDMOPT_ATTR_TOLERACE_FIRE,1,5);
	AddOpt(1,5,RDMOPT_ATTR_TOLERACE_WIND,1,5);
	AddOpt(1,5,RDMOPT_ATTR_TOLERACE_POISON,1,5);
	AddOpt(1,5,RDMOPT_ATTR_TOLERACE_SAINT,1,5);
	AddOpt(1,5,RDMOPT_ATTR_TOLERACE_DARKNESS,1,5);
	AddOpt(1,5,RDMOPT_ATTR_TOLERACE_TELEKINESIS,1,5);
	AddOpt(1,5,RDMOPT_ATTR_TOLERACE_UNDEAD,1,5);
	AddOpt(1,5,RDMOPT_ATTR_TOLERACE_ALLBUTNOTHING,1,5);
	
	//this mean those random options cannot coexist in the same item!.
	AddExclusiveOpt(RDMOPT_ATTR_TOLERACE_NOTHING,
			RDMOPT_ATTR_TOLERACE_WATER,
			RDMOPT_ATTR_TOLERACE_GROUND,
			RDMOPT_ATTR_TOLERACE_FIRE,
			RDMOPT_ATTR_TOLERACE_WIND,
			RDMOPT_ATTR_TOLERACE_POISON,
			RDMOPT_ATTR_TOLERACE_SAINT,
			RDMOPT_ATTR_TOLERACE_DARKNESS,
			RDMOPT_ATTR_TOLERACE_TELEKINESIS,
			RDMOPT_ATTR_TOLERACE_UNDEAD,
			RDMOPT_ATTR_TOLERACE_ALLBUTNOTHING);
	

end;

}

thanks in advance ❤️❤️

 

PS: Solved already

Edited by AinsLord
more info
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

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

1 hour ago, Asterzu said:

Necroing this post, I haven't figured this out too.

OP shared solution on the script topic:

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  5
  • Reputation:   0
  • Joined:  06/15/24
  • Last Seen:  

Necroing this post, I haven't figured this out too.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  5
  • Reputation:   0
  • Joined:  06/15/24
  • Last Seen:  

7 hours ago, Racaae said:

OP shared solution on the script topic:

 

 

Where? It is just a script, no solutions dropped by OP. I had the script and it still has the error.

Screenshot2024-10-12114757.png.dd28be86f07da3e78f315b9556f8de8a.pngScreenshot2024-10-12114916.png.c6d116e069fb29319e2c651fafef4621.png
Here are the errors that I had reloading itemdb and the script itself, I did all the recommended fix from past threads, like moving the db/re random option yml to db/import side.
Removing Renewal tags
Changing group ID, etc etc I have no other way to see how I can fix it.

Edited by Asterzu
Images attached
Link to comment
Share on other sites

  • 0

  • Group:  Content Moderator
  • Topic Count:  55
  • Topics Per Day:  0.01
  • Content Count:  1691
  • Reputation:   716
  • Joined:  12/21/14
  • Last Seen:  

20 hours ago, Asterzu said:

Where? It is just a script, no solutions dropped by OP. I had the script and it still has the error.

Screenshot2024-10-12114757.png.dd28be86f07da3e78f315b9556f8de8a.pngScreenshot2024-10-12114916.png.c6d116e069fb29319e2c651fafef4621.png
Here are the errors that I had reloading itemdb and the script itself, I did all the recommended fix from past threads, like moving the db/re random option yml to db/import side.
Removing Renewal tags
Changing group ID, etc etc I have no other way to see how I can fix it.

click here

image.png.bdc9b6d3691da7ef8f03bfb4707eaf46.png

 

if you still have a problem applying the random options system from renewal to pre-renewal please open a new post

and if you had a problem with the script , please reply on the script post instead of opening a new post

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...