MikZ 5 Posted March 16, 2019 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! Quote Share this post Link to post Share on other sites
0 AnnieRuru 957 Posted March 18, 2019 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 ... 1 MikZ reacted to this Quote Share this post Link to post Share on other sites
0 Kuroe 5 Posted March 17, 2019 (edited) 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 March 17, 2019 by Kuroe recode 1 MikZ reacted to this Quote Share this post Link to post Share on other sites
0 AnnieRuru 957 Posted March 17, 2019 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; } 1 MikZ reacted to this Quote Share this post Link to post Share on other sites
0 utofaery 7 Posted March 17, 2019 (edited) 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 March 17, 2019 by utofaery 1 MikZ reacted to this Quote Share this post Link to post Share on other sites
0 MikZ 5 Posted March 18, 2019 (edited) 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 March 18, 2019 by MikZ Quote Share this post Link to post Share on other sites
0 AnnieRuru 957 Posted March 18, 2019 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; } 1 MikZ reacted to this Quote Share this post Link to post Share on other sites
0 MikZ 5 Posted March 18, 2019 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! Quote Share this post Link to post Share on other sites
0 MikZ 5 Posted March 18, 2019 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 Quote Share this post Link to post Share on other sites
0 MikZ 5 Posted March 18, 2019 (edited) 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 March 18, 2019 by MikZ Quote Share this post Link to post Share on other sites
0 AnnieRuru 957 Posted March 18, 2019 (edited) can we do this with quest log system instead ? there is no need to waste a variable ... well, quest log system also support UI 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 March 18, 2019 by AnnieRuru Quote Share this post Link to post Share on other sites
0 MikZ 5 Posted March 19, 2019 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? Quote Share this post Link to post Share on other sites
0 AnnieRuru 957 Posted March 19, 2019 (edited) 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 March 19, 2019 by AnnieRuru 1 MikZ reacted to this Quote Share this post Link to post Share on other sites
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