Jump to content
  • 0
MikZ

Daily random supplies

Question

Hi!

May I request a sample random prize giver.
What I'm looking for is.

This npc will give all 3 set  1 type of item from set A,B to C randomly, with random number of pieces too.

Set A: random (1x,10x) pcs

random :656 , 657 , 505 , 645 , 506 , 14510 

Set B: random (5x,15x) pcs

random :656 , 657 , 505 , 645 , 506 , 14510 

Set C: random (10x,20x) pcs

random :656 , 657 , 505 , 645 , 506 , 14510 

please help me. 

thanks!

Share this post


Link to post
Share on other sites

12 answers to this question

Recommended Posts

  • 0
Spoiler

function	script	F_MesItemInfo	{
	.@item = getarg(0);
	.@itemname$ = getitemname(.@item);
	if (.@itemname$ != "null") {
		.@itemslot = getitemslots(.@item);
		if (.@itemslot)
			.@itemname$ = sprintf("%s [%d]", .@itemname$, .@itemslot);
	}
	else
		.@itemname$ = "Unknown Item";
	if (PACKETVER >= 20150729)
		return sprintf("<ITEM>%s<INFO>%d</INFO></ITEM>", .@itemname$, .@item);
	else if (PACKETVER >= 20130130)
		return sprintf("<ITEMLINK>%s<INFO>%d</INFO></ITEMLINK>", .@itemname$, .@item);
	else
		return .@itemname$;
}

function	script	timeleft__	{
	.@left = getarg(0);
	if ( .@left <= 0 )
		return getarg(0);
	.@day = .@left / 86400;
	.@hour = .@left % 86400 / 3600;
	.@min = .@left % 3600 / 60;
	.@sec = .@left % 60;
	if ( .@day )
		return sprintf( _$( "%d day %d hour" ), .@day, .@hour );
	else if ( .@hour )
		return sprintf( _$( "%d hour %d min" ), .@hour, .@min );
	else if ( .@min )
		return sprintf( _$( "%d min %d sec" ), .@min, .@sec );
	else
		return sprintf( _$( "%d sec" ), .@sec );
}

prontera,155,185,5	script	kjdsfhskhf	1_F_MARIA,{
//	#daily_supply = 0;
	.@today = atoi( gettimestr( "%Y%m%d", 9 ) );
	if ( #daily_supply == .@today ) {
		mes "You have already taken today's supply";
		mesf "You have to wait %s countdown to get next supply", timeleft__( getcalendartime(0,0) - gettimetick(2) );
	}
	else if ( checkweight( Knife, 3 ) == false ) {
		mes "It appears you have overweight";
	}
	else {
		mes "Retrieving today's supply...";
		for ( .@i = 1; .@i <= 3; ++.@i ) {
			.@r = rand(.totalchance[.@i]);
			for ( .@j = 3; ( .@r -= getd(".item"+ .@i +"["+ .@j +"]") ) >= 0; .@j += 2 );
			getitem getd(".item"+ .@i +"["+( .@j -1 )+"]"), rand( getd(".item"+ .@i +"[0]"), getd(".item"+ .@i +"[1]") );
		}	
		#daily_supply = .@today;
	}
	next;
//	chinese government enforce the law when giving items based on probability
	mes "The Chances are:-";
	for ( .@i = 1; .@i <= 3; ++.@i ) {
		mes " ";
		mesf "Set %d :", .@i;
		mesf "Randomly get any one type of these item, the amount between %d~%d", getd(".item"+ .@i +"[0]"), getd(".item"+ .@i +"[1]");
		for ( .@j = 3; .@j < getd(".item"+ .@i +"size"); .@j += 2 )
			mesf "%s : %s", F_MesItemInfo( getd(".item"+ .@i +"["+( .@j -1 )+"]") ), getd(".chance_display_item"+ .@i +"$["+ .@j +"]");
	}
	close;
OnInit:
	setarray .item1,
		1, 10, // amount : rand(1,10)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Red_Potion,    5,
		Orange_Potion, 4,
		Yellow_Potion, 3,
		White_Potion,  2,
		Blue_Potion,   1,
		Green_Potion,  6;

	setarray .item2,
		5, 15, // amount : rand(5,15)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Red_Herb,    5,
		Yellow_Herb, 4,
		White_Herb,  3,
		Blue_Herb,   2,
		Green_Herb,  1;

	setarray .item3,
		10, 20, // amount : rand(10,20)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Apple,        5,
		Banana,       4,
		Grape,        3,
		Carrot,       2,
		Sweet_Potato, 1,
		Meat,         99, 
		Honey,        50,
		Milk,         100;

	for ( .@i = 1; .@i <= 3; ++.@i ) {
		setd ".item"+ .@i +"size", getarraysize( getd(".item"+ .@i) );
		for ( .@j = 3; .@j < getd(".item"+ .@i +"size"); .@j += 2 )
			.totalchance[.@i] += getd(".item"+ .@i +"["+ .@j +"]");
		for ( .@j = 3; .@j < getd(".item"+ .@i +"size"); .@j += 2 ) {
			.@chance = getd(".item"+ .@i +"["+ .@j +"]") *10000 / .totalchance[.@i];
			.@division = .@chance / 100;
			.@remainder$ = .@chance % 100;
			while ( getstrlen(.@remainder$) < 2 )
				.@remainder$ = insertchar(.@remainder$, "0", 0);
			setd ".chance_display_item"+ .@i +"$["+ .@j +"]", .@division +"."+ .@remainder$ +"%";
		}
	}
	end;
}

 

erm ... its getting interestingly ... complexity ...

Share this post


Link to post
Share on other sites
  • 0
On 3/16/2019 at 5:46 PM, MikZ said:

Hi!

May I request a sample random prize giver.
What I'm looking for is.

This npc will give all 3 set  1 type of item from set A,B to C randomly, with random number of pieces too.

Set A: random (1x,10x) pcs

random :656 , 657 , 505 , 645 , 506 , 14510 

Set B: random (5x,15x) pcs

random :656 , 657 , 505 , 645 , 506 , 14510 

Set C: random (10x,20x) pcs

random :656 , 657 , 505 , 645 , 506 , 14510 

please help me. 

thanks!

Like this?

prontera,158,167,3	script	Sample	4_M_SIT_NOVICE,{
if (#gotreward + .next_take> gettimetick(2)) {
	mes "[Random Item Giver]";
	mes "Please talk to me after 24 hours.";
	close;
}
	else {
	set .random1,rand(getarraysize (.count1));	
	set .random2,rand(getarraysize (.count2));
	set .random3,rand(getarraysize (.count3));
	mes "[Random Item Giver]";
	mes "Have some of these!";
		getitem .item[rand(getarraysize (.item))],.count1[.random1];
		getitem .item[rand(getarraysize (.item))],.count2[.random2];
		getitem .item[rand(getarraysize (.item))],.count3[.random3];
		#gotreward = gettimetick(2);
		next;
     	close;
}


OnInit:
.next_take = 24*60*60;
setarray .item[0],656,657,505,645,506,14510;
setarray .count1[0],1,10;
setarray .count2[0],5,15;
setarray .count3[0],10,20;
end;
}

Edit: 
Thought it was 1-10 , 5-15 , and 10-20 instead of 1,10 5,15 and 10,20

Edited by Kuroe
recode

Share this post


Link to post
Share on other sites
  • 0
On 3/16/2019 at 5:46 PM, MikZ said:

Set A: random (1x,10x) pcs

random :656 , 657 , 505 , 645 , 506 , 14510 

Set B: random (5x,15x) pcs

random :656 , 657 , 505 , 645 , 506 , 14510 

Set C: random (10x,20x) pcs

random :656 , 657 , 505 , 645 , 506 , 14510

curious, why all 3 sets have same item ID ?
so it means they can be repeated ?

 

prontera,155,185,5	script	kjdsfhskhf	1_F_MARIA,{	
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(1,10);
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(5,15);
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(10,20);
	end;
}

 

Share this post


Link to post
Share on other sites
  • 0

prontera,158,167,3	script	Sample	4_M_SIT_NOVICE,{

if (#xTaken + .next_take> gettimetick(2)) {
	mes "[Random Item Giver]";
	mes "Please talk to me after 24 hours.";
	close;
}
	else {

	mes "[Random Item Giver]";
	mes "Have some of these!";
		.@riRate1 = rand (.@Ai11,.@Ai12);
		.@riRate2 = rand (.@Ai21,.@Ai22);
		.@riRate3 = rand (.@Ai31,.@Ai32);
		.@rItemid1 = .@Aitem1[rand(getarraysize (.@Aitem1))];
		.@rItemid2 = .@Aitem2[rand(getarraysize (.@Aitem2))];
		.@rItemid3 = .@Aitem3[rand(getarraysize (.@Aitem3))];
		getitem ( .@rItemid1, .@riRate1 ) ;
//		dispbottom ( "rItemid1 :: " + .@rItemid1 + " riRate1 :: " + .@riRate1 + " Name :: " + getitemname ( .@rItemid1 ) ) ; // debug use only !!!
		getitem ( .@rItemid2, .@riRate2 ) ;
//		dispbottom ( "rItemid2 :: " + .@rItemid2 + " riRate2 :: " + .@riRate2 + " Name :: " + getitemname ( .@rItemid2 ) ) ; // debug use only !!!
		getitem ( .@rItemid3, .@riRate3 ) ;
//		dispbottom ( "rItemid3 :: " + .@rItemid3 + " riRate3 :: " + .@riRate3 + " Name :: " + getitemname ( .@rItemid3 ) ) ; // debug use only !!!
		#xTaken = gettimetick(2);
		next;
     	close;
}


OnInit:

	//set cooldown to take item again.
	.next_take = 24*60*60;

	//set item here
	setarray .Aitem1[0],501,502,503,504,505,14510; 
	setarray .Aitem2[0],601,602,603,604,605,14510;
	setarray .Aitem3[0],701,702,703,704,705,14510;
	//set rate here
	.Ai11 = 1;
	.Ai12 = 10;
	.Ai21 = 5;
	.Ai22 = 15;
	.Ai31 = 10;
	.Ai32 = 20;

	end;
}

Refined and fixed up npc variable..

Edited by utofaery

Share this post


Link to post
Share on other sites
  • 0
11 hours ago, utofaery said:


prontera,158,167,3	script	Sample	4_M_SIT_NOVICE,{

if (#xTaken + .next_take> gettimetick(2)) {
	mes "[Random Item Giver]";
	mes "Please talk to me after 24 hours.";
	close;
}
	else {

	mes "[Random Item Giver]";
	mes "Have some of these!";
		.@riRate1 = rand (.@Ai11,.@Ai12);
		.@riRate2 = rand (.@Ai21,.@Ai22);
		.@riRate3 = rand (.@Ai31,.@Ai32);
		.@rItemid1 = .@Aitem1[rand(getarraysize (.@Aitem1))];
		.@rItemid2 = .@Aitem2[rand(getarraysize (.@Aitem2))];
		.@rItemid3 = .@Aitem3[rand(getarraysize (.@Aitem3))];
		getitem ( .@rItemid1, .@riRate1 ) ;
//		dispbottom ( "rItemid1 :: " + .@rItemid1 + " riRate1 :: " + .@riRate1 + " Name :: " + getitemname ( .@rItemid1 ) ) ; // debug use only !!!
		getitem ( .@rItemid2, .@riRate2 ) ;
//		dispbottom ( "rItemid2 :: " + .@rItemid2 + " riRate2 :: " + .@riRate2 + " Name :: " + getitemname ( .@rItemid2 ) ) ; // debug use only !!!
		getitem ( .@rItemid3, .@riRate3 ) ;
//		dispbottom ( "rItemid3 :: " + .@rItemid3 + " riRate3 :: " + .@riRate3 + " Name :: " + getitemname ( .@rItemid3 ) ) ; // debug use only !!!
		#xTaken = gettimetick(2);
		next;
     	close;
}


OnInit:

	//set cooldown to take item again.
	.next_take = 24*60*60;

	//set item here
	setarray .Aitem1[0],501,502,503,504,505,14510; 
	setarray .Aitem2[0],601,602,603,604,605,14510;
	setarray .Aitem3[0],701,702,703,704,705,14510;
	//set rate here
	.Ai11 = 1;
	.Ai12 = 10;
	.Ai21 = 5;
	.Ai22 = 15;
	.Ai31 = 10;
	.Ai32 = 20;

	end;
}

Refined and fixed up npc variable..

@utofaery Hello, just what i wanted with success rate for rare ones, can you add countdown timer 

"you still have 00 hours, minute/s seconds countdown to get next supplies"

Also, im getting error like and no items were given.

Buildin_getitem: Nonexistant item 0 requested.

 

11 hours ago, AnnieRuru said:

curious, why all 3 sets have same item ID ?
so it means they can be repeated ?

 


prontera,155,185,5	script	kjdsfhskhf	1_F_MARIA,{	
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(1,10);
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(5,15);
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(10,20);
	end;
}

 

Hi @AnnieRuru yes can be repeated. can you add rates for the rare ones, like the above. thnx!

 

 

Edited by MikZ

Share this post


Link to post
Share on other sites
  • 0

https://github.com/AnnieRuru/Release/blob/master/Guides/Daily Quest - use gettimetick(2) or gettimestr.md

function	script	timeleft__	{
	.@left = getarg(0);
	if ( .@left <= 0 )
		return getarg(0);
	.@day = .@left / 86400;
	.@hour = .@left % 86400 / 3600;
	.@min = .@left % 3600 / 60;
	.@sec = .@left % 60;
	if ( .@day )
		return sprintf( _$( "%d day %d hour" ), .@day, .@hour );
	else if ( .@hour )
		return sprintf( _$( "%d hour %d min" ), .@hour, .@min );
	else if ( .@min )
		return sprintf( _$( "%d min %d sec" ), .@min, .@sec );
	else
		return sprintf( _$( "%d sec" ), .@sec );
}

prontera,155,185,5	script	kjdsfhskhf	1_F_MARIA,{
	.@today = atoi( gettimestr( "%Y%m%d", 9 ) );
	if ( #daily_supply == .@today ) {
		mes "You have already taken today's supply";
		mesf "You have to wait %s countdown to get next supply", timeleft__( getcalendartime(0,0) - gettimetick(2) );
		close;
	}
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(1,10);
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(5,15);
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(10,20);
	#daily_supply = .@today;
	end;
}

Share this post


Link to post
Share on other sites
  • 0
19 minutes ago, AnnieRuru said:

https://github.com/AnnieRuru/Release/blob/master/Guides/Daily Quest - use gettimetick(2) or gettimestr.md


function	script	timeleft__	{
	.@left = getarg(0);
	if ( .@left <= 0 )
		return getarg(0);
	.@day = .@left / 86400;
	.@hour = .@left % 86400 / 3600;
	.@min = .@left % 3600 / 60;
	.@sec = .@left % 60;
	if ( .@day )
		return sprintf( _$( "%d day %d hour" ), .@day, .@hour );
	else if ( .@hour )
		return sprintf( _$( "%d hour %d min" ), .@hour, .@min );
	else if ( .@min )
		return sprintf( _$( "%d min %d sec" ), .@min, .@sec );
	else
		return sprintf( _$( "%d sec" ), .@sec );
}

prontera,155,185,5	script	kjdsfhskhf	1_F_MARIA,{
	.@today = atoi( gettimestr( "%Y%m%d", 9 ) );
	if ( #daily_supply == .@today ) {
		mes "You have already taken today's supply";
		mesf "You have to wait %s countdown to get next supply", timeleft__( getcalendartime(0,0) - gettimetick(2) );
		close;
	}
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(1,10);
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(5,15);
	getitem F_Rand( 656, 657, 505, 645, 506, 14510 ), rand(10,20);
	#daily_supply = .@today;
	end;
}

That was fast,

I like to add some twist, can you add like rate for rare one.

example item 506 is @ 5% and item 14510 is @ 2% success chance to get in set A

for set b 505 @ 9% and 657 @ 1%

for Set C 657 @ 10% 14510 @ 1%.
of course ill be adding more item like bubble gums, Food items, TCGs

something like that. thanks!

Share this post


Link to post
Share on other sites
  • 0
1 hour ago, AnnieRuru said:
  Reveal hidden contents


function	script	F_MesItemInfo	{
	.@item = getarg(0);
	.@itemname$ = getitemname(.@item);
	if (.@itemname$ != "null") {
		.@itemslot = getitemslots(.@item);
		if (.@itemslot)
			.@itemname$ = sprintf("%s [%d]", .@itemname$, .@itemslot);
	}
	else
		.@itemname$ = "Unknown Item";
	if (PACKETVER >= 20150729)
		return sprintf("<ITEM>%s<INFO>%d</INFO></ITEM>", .@itemname$, .@item);
	else if (PACKETVER >= 20130130)
		return sprintf("<ITEMLINK>%s<INFO>%d</INFO></ITEMLINK>", .@itemname$, .@item);
	else
		return .@itemname$;
}

function	script	timeleft__	{
	.@left = getarg(0);
	if ( .@left <= 0 )
		return getarg(0);
	.@day = .@left / 86400;
	.@hour = .@left % 86400 / 3600;
	.@min = .@left % 3600 / 60;
	.@sec = .@left % 60;
	if ( .@day )
		return sprintf( _$( "%d day %d hour" ), .@day, .@hour );
	else if ( .@hour )
		return sprintf( _$( "%d hour %d min" ), .@hour, .@min );
	else if ( .@min )
		return sprintf( _$( "%d min %d sec" ), .@min, .@sec );
	else
		return sprintf( _$( "%d sec" ), .@sec );
}

prontera,155,185,5	script	kjdsfhskhf	1_F_MARIA,{
//	#daily_supply = 0;
	.@today = atoi( gettimestr( "%Y%m%d", 9 ) );
	if ( #daily_supply == .@today ) {
		mes "You have already taken today's supply";
		mesf "You have to wait %s countdown to get next supply", timeleft__( getcalendartime(0,0) - gettimetick(2) );
	}
	else if ( checkweight( Knife, 3 ) == false ) {
		mes "It appears you have overweight";
	}
	else {
		mes "Retrieving today's supply...";
		for ( .@i = 1; .@i <= 3; ++.@i ) {
			.@r = rand(.totalchance[.@i]);
			for ( .@j = 3; ( .@r -= getd(".item"+ .@i +"["+ .@j +"]") ) >= 0; .@j += 2 );
			getitem getd(".item"+ .@i +"["+( .@j -1 )+"]"), rand( getd(".item"+ .@i +"[0]"), getd(".item"+ .@i +"[1]") );
		}	
		#daily_supply = .@today;
	}
	next;
//	chinese government enforce the law when giving items based on probability
	mes "The Chances are:-";
	for ( .@i = 1; .@i <= 3; ++.@i ) {
		mes " ";
		mesf "Set %d :", .@i;
		mesf "Randomly get any one type of these item, the amount between %d~%d", getd(".item"+ .@i +"[0]"), getd(".item"+ .@i +"[1]");
		for ( .@j = 3; .@j < getd(".item"+ .@i +"size"); .@j += 2 )
			mesf "%s : %s", F_MesItemInfo( getd(".item"+ .@i +"["+( .@j -1 )+"]") ), getd(".chance_display_item"+ .@i +"$["+ .@j +"]");
	}
	close;
OnInit:
	setarray .item1,
		1, 10, // amount : rand(1,10)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Red_Potion,    5,
		Orange_Potion, 4,
		Yellow_Potion, 3,
		White_Potion,  2,
		Blue_Potion,   1,
		Green_Potion,  6;

	setarray .item2,
		5, 15, // amount : rand(5,15)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Red_Herb,    5,
		Yellow_Herb, 4,
		White_Herb,  3,
		Blue_Herb,   2,
		Green_Herb,  1;

	setarray .item3,
		10, 20, // amount : rand(10,20)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Apple,        5,
		Banana,       4,
		Grape,        3,
		Carrot,       2,
		Sweet_Potato, 1,
		Meat,         99, 
		Honey,        50,
		Milk,         100;

	for ( .@i = 1; .@i <= 3; ++.@i ) {
		setd ".item"+ .@i +"size", getarraysize( getd(".item"+ .@i) );
		for ( .@j = 3; .@j < getd(".item"+ .@i +"size"); .@j += 2 )
			.totalchance[.@i] += getd(".item"+ .@i +"["+ .@j +"]");
		for ( .@j = 3; .@j < getd(".item"+ .@i +"size"); .@j += 2 ) {
			.@chance = getd(".item"+ .@i +"["+ .@j +"]") *10000 / .totalchance[.@i];
			.@division = .@chance / 100;
			.@remainder$ = .@chance % 100;
			while ( getstrlen(.@remainder$) < 2 )
				.@remainder$ = insertchar(.@remainder$, "0", 0);
			setd ".chance_display_item"+ .@i +"$["+ .@j +"]", .@division +"."+ .@remainder$ +"%";
		}
	}
	end;
}

 

erm ... its getting interestingly ... complexity ...

Perfect!
Thank you so much @AnnieRuru

Share this post


Link to post
Share on other sites
  • 0
3 hours ago, AnnieRuru said:
  Reveal hidden contents


function	script	F_MesItemInfo	{
	.@item = getarg(0);
	.@itemname$ = getitemname(.@item);
	if (.@itemname$ != "null") {
		.@itemslot = getitemslots(.@item);
		if (.@itemslot)
			.@itemname$ = sprintf("%s [%d]", .@itemname$, .@itemslot);
	}
	else
		.@itemname$ = "Unknown Item";
	if (PACKETVER >= 20150729)
		return sprintf("<ITEM>%s<INFO>%d</INFO></ITEM>", .@itemname$, .@item);
	else if (PACKETVER >= 20130130)
		return sprintf("<ITEMLINK>%s<INFO>%d</INFO></ITEMLINK>", .@itemname$, .@item);
	else
		return .@itemname$;
}

function	script	timeleft__	{
	.@left = getarg(0);
	if ( .@left <= 0 )
		return getarg(0);
	.@day = .@left / 86400;
	.@hour = .@left % 86400 / 3600;
	.@min = .@left % 3600 / 60;
	.@sec = .@left % 60;
	if ( .@day )
		return sprintf( _$( "%d day %d hour" ), .@day, .@hour );
	else if ( .@hour )
		return sprintf( _$( "%d hour %d min" ), .@hour, .@min );
	else if ( .@min )
		return sprintf( _$( "%d min %d sec" ), .@min, .@sec );
	else
		return sprintf( _$( "%d sec" ), .@sec );
}

prontera,155,185,5	script	kjdsfhskhf	1_F_MARIA,{
//	#daily_supply = 0;
	.@today = atoi( gettimestr( "%Y%m%d", 9 ) );
	if ( #daily_supply == .@today ) {
		mes "You have already taken today's supply";
		mesf "You have to wait %s countdown to get next supply", timeleft__( getcalendartime(0,0) - gettimetick(2) );
	}
	else if ( checkweight( Knife, 3 ) == false ) {
		mes "It appears you have overweight";
	}
	else {
		mes "Retrieving today's supply...";
		for ( .@i = 1; .@i <= 3; ++.@i ) {
			.@r = rand(.totalchance[.@i]);
			for ( .@j = 3; ( .@r -= getd(".item"+ .@i +"["+ .@j +"]") ) >= 0; .@j += 2 );
			getitem getd(".item"+ .@i +"["+( .@j -1 )+"]"), rand( getd(".item"+ .@i +"[0]"), getd(".item"+ .@i +"[1]") );
		}	
		#daily_supply = .@today;
	}
	next;
//	chinese government enforce the law when giving items based on probability
	mes "The Chances are:-";
	for ( .@i = 1; .@i <= 3; ++.@i ) {
		mes " ";
		mesf "Set %d :", .@i;
		mesf "Randomly get any one type of these item, the amount between %d~%d", getd(".item"+ .@i +"[0]"), getd(".item"+ .@i +"[1]");
		for ( .@j = 3; .@j < getd(".item"+ .@i +"size"); .@j += 2 )
			mesf "%s : %s", F_MesItemInfo( getd(".item"+ .@i +"["+( .@j -1 )+"]") ), getd(".chance_display_item"+ .@i +"$["+ .@j +"]");
	}
	close;
OnInit:
	setarray .item1,
		1, 10, // amount : rand(1,10)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Red_Potion,    5,
		Orange_Potion, 4,
		Yellow_Potion, 3,
		White_Potion,  2,
		Blue_Potion,   1,
		Green_Potion,  6;

	setarray .item2,
		5, 15, // amount : rand(5,15)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Red_Herb,    5,
		Yellow_Herb, 4,
		White_Herb,  3,
		Blue_Herb,   2,
		Green_Herb,  1;

	setarray .item3,
		10, 20, // amount : rand(10,20)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Apple,        5,
		Banana,       4,
		Grape,        3,
		Carrot,       2,
		Sweet_Potato, 1,
		Meat,         99, 
		Honey,        50,
		Milk,         100;

	for ( .@i = 1; .@i <= 3; ++.@i ) {
		setd ".item"+ .@i +"size", getarraysize( getd(".item"+ .@i) );
		for ( .@j = 3; .@j < getd(".item"+ .@i +"size"); .@j += 2 )
			.totalchance[.@i] += getd(".item"+ .@i +"["+ .@j +"]");
		for ( .@j = 3; .@j < getd(".item"+ .@i +"size"); .@j += 2 ) {
			.@chance = getd(".item"+ .@i +"["+ .@j +"]") *10000 / .totalchance[.@i];
			.@division = .@chance / 100;
			.@remainder$ = .@chance % 100;
			while ( getstrlen(.@remainder$) < 2 )
				.@remainder$ = insertchar(.@remainder$, "0", 0);
			setd ".chance_display_item"+ .@i +"$["+ .@j +"]", .@division +"."+ .@remainder$ +"%";
		}
	}
	end;
}

 

erm ... its getting interestingly ... complexity ...

@AnnieRuru sorry, what if I add case 2 for 12 hours.

 

Can i Just add these? but im getting infinity loop.

Case 2:
	mes "Retrieving today's half day supplies...";
		for ( .@i = 1; .@i <= 3; ++.@i ) {
			.@r = rand(.totalchance[.@i]);
			for ( .@j = 3; ( .@r -= getd(".twelve"+ .@i +"["+ .@j +"]") ) >= 0; .@j += 2 );
			getitem getd(".twelve"+ .@i +"["+( .@j -1 )+"]"), rand( getd(".twelve"+ .@i +"[0]"), getd(".twelve"+ .@i +"[1]") );
		}	
		#daily_twelvet = gettimetick(2);
	}

	close;
}

OnInit:
       setarray .twelve1,
		1, 10, // amount : rand(1,10)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Red_Potion,    5,
		Orange_Potion, 4,
		Yellow_Potion, 3,
		White_Potion,  2,
		Blue_Potion,   1,
		Green_Potion,  6;

	setarray .twelve2,
		5, 15, // amount : rand(5,15)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Red_Herb,    5,
		Yellow_Herb, 4,
		White_Herb,  3,
		Blue_Herb,   2,
		Green_Herb,  1;

	setarray .twelve3,
		10, 20, // amount : rand(10,20)
	//	chance of getting the items Set#1
	//	<Item ID>,<chance>
		Apple,        5,
		Banana,       4,
		Grape,        3,
		Carrot,       2,
		Sweet_Potato, 1,
		Meat,         99, 
		Honey,        50,
		Milk,         100;


	for ( .@i = 1; .@i <= 3; ++.@i ) {
		setd ".twelve"+ .@i +"size", getarraysize( getd(".twelve"+ .@i) );
		for ( .@j = 3; .@j < getd(".twelve"+ .@i +"size"); .@j += 2 )
			.totalchance[.@i] += getd(".twelve"+ .@i +"["+ .@j +"]");
		for ( .@j = 3; .@j < getd(".twelve"+ .@i +"size"); .@j += 2 ) {
			.@chance = getd(".twelve"+ .@i +"["+ .@j +"]") *10000 / .totalchance[.@i];
			.@division = .@chance / 100;
			.@remainder$ = .gchance % 100;
			while ( getstrlen(.@gremainder$) < 2 )
				.@remainder$ = insertchar(.@remainder$, "0", 0);
			setd ".chance_display_item"+ .@i +"$["+ .@j +"]", .@division +"."+ .@remainder$ +"%";
		}
	}

	end;
}

 

Edited by MikZ

Share this post


Link to post
Share on other sites
  • 0

can we do this with quest log system instead ?

there is no need to waste a variable ... well, quest log system also support UI

screen2019Hercules032.jpg

problem ? not every server use up to date client version

are you using client version in year 2018 ?
I'm using PACKETVER 20180621

and for your answer, just add *getcalendartime(12,0) something like that on the daily quest log script

if your server using up to date client version, then I could write this script easily with *getcalendartime script command
using outdated client version, then have to hijack another script variable

Edited by AnnieRuru

Share this post


Link to post
Share on other sites
  • 0
19 hours ago, AnnieRuru said:

problem ? not every server use up to date client version

are you using client version in year 2018 ?
I'm using PACKETVER 20180621

and for your answer, just add *getcalendartime(12,0) something like that on the daily quest log script

if your server using up to date client version, then I could write this script easily with *getcalendartime script command
using outdated client version, then have to hijack another script variable

I'm planning to, meantime I'm using 20141022 . Awaiting from AndRO dev how can I update my client in mobile and if it is free.

does 20180621 is stable?

Share this post


Link to post
Share on other sites
  • 0

https://rathena.org/board/topic/114244-andro-for-athena/
the latest AndRO is 20171227, and the new quest log is only for 2018-03-07b onward
use old school method then

https://github.com/AnnieRuru/Release/blob/master/scripts/Utility/daily supply/daily_supply_0.3.txt

 

20180621 is the default version rathena is using right now, so I guess its stable

Edited by AnnieRuru

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×
×
  • Create New...

Important Information

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