// callfunc "shuffle", , , {, }; function script shuffle__ { .@static = getarg(0); .@range = getarg(1) +1 - .@static; .@count = getarg(3, 0); if ( .@range <= 0 ) return 0; if ( !.@count || .@count > .@range ) .@count = .@range; while ( .@i < .@count ) { .@r = .@save = rand( .@i, .@range -1 ) ; if ( !.@tmp1[.@i] ) { .@r = .@tmp1[.@r] ? .@tmp2[.@r] : .@r; .@tmp2[.@i] = .@r; .@tmp2[.@save] = .@i; .@tmp1[.@save] = 1; set getelementofarray( getarg(2), .@i ), .@r + .@static; if ( .@save < .@count ) set getelementofarray( getarg(2), .@save ), .@i + .@static; } .@i++; } return .@count; } prontera,156,184,5 script kjdshfksfjh#1 100,{ .@id = strnpcinfo(2); if ( getstrlen( quest_random_item$[.@id] ) ) { dispbottom quest_random_item$[.@id]; .@n = sscanf( quest_random_item$[.@id], "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:", .@rewardid, .@itemid[0], .@amount[0], .@itemid[1], .@amount[1], .@itemid[2], .@amount[2], .@itemid[3], .@amount[3], .@itemid[4], .@amount[4], .@itemid[5], .@amount[5], .@itemid[6], .@amount[6], .@itemid[7], .@amount[7], .@itemid[8], .@amount[8], .@itemid[9], .@amount[9] ); .@size = ( .@n -1 ) /2; mes "reward item "+ getitemname( .@rewardid ); for ( .@i = 0; .@i < .@size; .@i++ ) mes .@amount[.@i] +"x "+ getitemname( .@itemid[.@i] ); next; if ( select ( "Submit this quest", "Drop this quest" ) == 2 ) { mes "this quest have been dropped"; quest_random_item$[.@id] = ""; close; } if ( !checkweight( .@rewardid, 1 ) ) { mes "you can't carry "+ getitemname( .@rewardid ); mes "put some items in storage to continue"; close; } for ( .@i = 0; .@i < .@size; .@i++ ) { if ( countitem( .@itemid[.@i] ) < .@amount[.@i] ) { mes "you don't have enough "+ getitemname( .@itemid[.@i] ); close; } } for ( .@i = 0; .@i < .@size; .@i++ ) delitem .@itemid[.@i], .@amount[.@i]; getitem .@rewardid, 1; quest_random_item$[.@id] = ""; mes "congratulations ..."; close; } mes "want to take a quest for "+ getitemname( .rewardid ) +" ?"; next; if ( select ( "Yes", "No" ) == 2 ) close; callfunc "shuffle__", 0, .itemsize -1, .@r, .numberoftype; mes "reward item "+ getitemname( .rewardid ); for ( .@i = 0 ; .@i < .numberoftype; .@i++ ) { .@str$ = .@str$ + .itemid[ .@r[.@i] ] +":"+ .amount[ .@r[.@i] ] +":"; mes .amount[ .@r[.@i] ] +"x "+ getitemname( .itemid[ .@r[.@i] ] ); } quest_random_item$[.@id] = .rewardid +":"+ .@str$; close; OnInit: setarray .itemid, 501,502,503,504,505; setarray .amount, 100,200,300,400,500; .numberoftype = 2; // how many types of items needed for this quest ( max: 10 ) .rewardid = 1201; .itemsize = getarraysize( .itemid ); end; } prontera,159,184,5 script kjdshfksfjh#2 100,{ .@id = strnpcinfo(2); if ( getstrlen( quest_random_item$[.@id] ) ) { dispbottom quest_random_item$[.@id]; .@n = sscanf( quest_random_item$[.@id], "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:", .@rewardid, .@itemid[0], .@amount[0], .@itemid[1], .@amount[1], .@itemid[2], .@amount[2], .@itemid[3], .@amount[3], .@itemid[4], .@amount[4], .@itemid[5], .@amount[5], .@itemid[6], .@amount[6], .@itemid[7], .@amount[7], .@itemid[8], .@amount[8], .@itemid[9], .@amount[9] ); .@size = ( .@n -1 ) /2; mes "reward item "+ getitemname( .@rewardid ); for ( .@i = 0; .@i < .@size; .@i++ ) mes .@amount[.@i] +"x "+ getitemname( .@itemid[.@i] ); next; if ( select ( "Submit this quest", "Drop this quest" ) == 2 ) { mes "this quest have been dropped"; quest_random_item$[.@id] = ""; close; } if ( !checkweight( .@rewardid, 1 ) ) { mes "you can't carry "+ getitemname( .@rewardid ); mes "put some items in storage to continue"; close; } for ( .@i = 0; .@i < .@size; .@i++ ) { if ( countitem( .@itemid[.@i] ) < .@amount[.@i] ) { mes "you don't have enough "+ getitemname( .@itemid[.@i] ); close; } } for ( .@i = 0; .@i < .@size; .@i++ ) delitem .@itemid[.@i], .@amount[.@i]; getitem .@rewardid, 1; quest_random_item$[.@id] = ""; mes "congratulations ..."; close; } mes "want to take a quest for "+ getitemname( .rewardid ) +" ?"; next; if ( select ( "Yes", "No" ) == 2 ) close; callfunc "shuffle__", 0, .itemsize -1, .@r, .numberoftype; mes "reward item "+ getitemname( .rewardid ); for ( .@i = 0 ; .@i < .numberoftype; .@i++ ) { .@str$ = .@str$ + .itemid[ .@r[.@i] ] +":"+ .amount[ .@r[.@i] ] +":"; mes .amount[ .@r[.@i] ] +"x "+ getitemname( .itemid[ .@r[.@i] ] ); } quest_random_item$[.@id] = .rewardid +":"+ .@str$; close; OnInit: setarray .itemid, 512,513,514,515,516; setarray .amount, 600,700,800,900,999; .numberoftype = 2; // how many types of items needed for this quest ( max: 10 ) .rewardid = 1204; .itemsize = getarraysize( .itemid ); end; }