viewing paste topic/4886- quest_random_require | Athena

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
//  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;
}
Viewed 1517 times, submitted by AnnieRuru.