// callfunc "shuffle", <min num>, <max num>, <output array> {, <count> };
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;
}