// https://rathena.org/board/topic/115288-lotti-girl-ranker-wreward/ /* create table lotti_rank ( char_id int(11), name varchar(24), lotti_point int(11), primary key (char_id), key (lotti_point) ) engine = innodb; */ prontera,155,181,5 script Lotti Girl 1_F_MARIA,{ goto L_talk; OnInit: setarray .cost, 7227,300; // setarray .p1, 70, 607,25; // setarray .p2, 70, 13710,1; // setarray .p3, 40, 5471,1; // setarray .p4, 40, 5210,1; // setarray .p5, 40, 5224,1; // setarray .p6, 50, 2357,1, 2524,1, 2421,1, 2115,1; // setarray .p7, 25, 2701,1; // setarray .p8, 5, 2394,1; // setarray .p9, 30+30+60+60+60+50+75+95, 12214,1; setarray .p1, 10, 501, 1; setarray .p2, 8, 502, 1; setarray .p3, 5, 503, 1; setarray .p4, 3, 504, 1; setarray .p5, 1, 505, 1; setarray .p6, 90+92+95+97+99, 512, 10; setarray .itemid,1101,1201,1301,1501,1601; setarray .itemcost,10,20,30,40,50; for ( .@i = 1; getd(".p"+ .@i ); .@i++ ) { .itemtotalchance += getd(".p"+ .@i ); .itemsize[.@i] = ( getarraysize( getd(".p"+ .@i ) ) -1 ) /2; } // .points[ ] = ; // otherwise only get 1 point .points[10] = 10; .points[9] = 20; .points[8] = 30; .points[7] = 40; .points[6] = 50; .points[5] = 60; .points[4] = 70; .points[3] = 80; .points[2] = 90; .points[1] = 100; .shop_size = getarraysize(.itemid); npcshopdelitem "Lotti#hidden", 512; for ( .@i = 0; .@i < .shop_size; .@i++ ) npcshopadditem "Lotti#hidden", .itemid[.@i], .itemcost[.@i]; npcshopattach "Lotti#hidden"; end; L_talk: mes "[Lotti Girl]"; mes "Welcome to the blah blah where I can blah blah and shop shop"; // lazy dialog next; switch ( select ( "Play", "Lotti Ranking", "Lotti Shop" ) ) { mes "[Lotti Girl]"; case 1: mes "It costs "+ .cost[1] +"x "+ getitemname( .cost[0] ) +" to play."; if ( countitem( .cost[0] ) < .cost[1] ) close; next; if ( select( "Deal me in!", "No way..." ) == 2 ) close; mes "[Lotti Girl]"; while ( true ) { mes "Here we go..."; .@rand = rand(.itemtotalchance); .@r = 0; while ( ( .@rand = .@rand - getd( ".p"+ .@r +"[0]" ) ) >= 0 ) .@r++; deletearray .@itemid; deletearray .@itemamount; for ( .@i = 0; .@i < .itemsize[.@r]; .@i++ ) { .@itemid[.@i] = getd( ".p"+ .@r +"["+( .@i *2 +1 )+"]" ); .@itemamount[.@i] = getd( ".p"+ .@r +"["+( .@i *2 +2 )+"]" ); } if ( checkweight2( .@itemid, .@itemamount ) == false ) { mes "\rit appears you have overweight"; break; } delitem .cost[0], .cost[1]; for ( .@i = 0; .@i < .itemsize[.@r]; ++.@i ) getitem .@itemid[.@i], .@itemamount[.@i]; if ( .points[ getd( ".p"+ .@r +"[0]" ) ] > 0 ) .@points = .points[ getd( ".p"+ .@r +"[0]" ) ]; else .@points = 1; Lotti_Points = Lotti_Points + .@points; query_sql "insert into lotti_rank values ( "+ getcharid(0) +", '"+ escape_sql( strcharinfo(0) ) +"', "+ .@points +" ) on duplicate key update lotti_point = lotti_point + "+ .@points; dispbottom "Lotti_Points -> "+ Lotti_Points +" ++"+ .@points; mes "\rwanna try again ?"; next; if ( select( "Yes", "No" ) == 2 ) break; mes "[Lotti Girl]"; if ( countitem( .cost[0] ) < .cost[1] ) { mes "\rit seems you have ran out of "+ getitemname( .cost[0] ); break; } } mes "\rThank you for using Lotti service~"; close; case 2: .@query$ = "SELECT `name`, IF(@d=t.`lotti_point`, @r, @r:=@i), @d:=t.`lotti_point`, @i:=@i+1 "; .@query$ += "FROM `lotti_rank` t, (SELECT @d:=0, @r:=0, @i:=1)q "; .@query$ += "ORDER BY `lotti_point` DESC LIMIT 5"; .@nb = query_sql(.@query$, .@name$, .@rank, .@points, .@dummy); if ( !.@nb ) { mes "There's no ranking yet ~"; close; } for ( .@i = 0; .@i < .@nb; .@i++ ) mes .@rank[.@i] +"> "+ .@name$[.@i] +" > "+ .@points[.@i] +" Points."; if ( !query_sql( "SELECT `lotti_point`, 1+(SELECT COUNT(1) FROM `lotti_rank` t1 WHERE t1.lotti_point > t2.lotti_point) FROM `lotti_rank` t2 WHERE `char_id` = "+ getcharid(0), .@kills, .@rank ) ) { mes "\rYou are not in the rank."; close; } mes "\rYour current Point > "+ .@points; mes "Your current Rank > "+ .@rank; close; case 3: mes "You currently have "+ Lotti_Points +" Lotti Points."; dispbottom "You currently have "+ Lotti_Points +" Lotti Points."; close2; callshop "Lotti#hidden", 1; end; } close; OnBuyItem: mes "[Lotti Girl]"; if ( !@bought_quantity ) end; if ( checkweight2( @bought_nameid, @bought_quantity ) == false ) { mes "It appears you can't carry them all"; close; } .@size = getarraysize( @bought_nameid ); for ( .@i = 0; .@i < .@size; .@i++ ) { for ( .@j = 0; .@j < .shop_size; .@j++ ) if ( @bought_nameid[.@i] == .itemid[.@j] ) break; .@itemcost = .@itemcost + .itemcost[.@j] * @bought_quantity[.@i]; } if ( .@itemcost > Lotti_Points ) { mes "You don't have enough Lotti Points"; close; } Lotti_Points = Lotti_Points - .@itemcost; for ( .@i = 0; .@i < .@size; .@i++ ) getitem @bought_nameid[.@i], @bought_quantity[.@i]; deletearray @bought_nameid; deletearray @bought_quantity; mes "Thanks for buying ~"; close; } - shop Lotti#hidden -1,512:1000