Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- prontera,155,175,5 script Sample#rank_ladder 757,{
- doevent "rank_system::OnLadder";
- }
- - script rank_system -1,{
- function add_exp;
- function integer;
- OnInit:
- .rank_limit = 10;
- setarray .rank_exp,
- 100000, // 100,000 EXP for level 1 -> 2
- 200000, // 200,000 EXP for level 2 -> 3
- 300000, // 300,000 EXP for level 3 -> 4
- 400000, // 400,000 EXP for level 4 -> 5
- 500000, // 500,000 EXP for level 5 -> 6
- 5000000, // 5,000,000 EXP for level 6 -> 7
- 500000000; // 500,00,000 EXP for level 7 -> 8 (ex.max)
- // etc...
- .rank_exp_size = getarraysize( .rank_exp ) - 1;
- bindatcmd "rankexp",strnpcinfo(3)+"::OnRankExp";
- end;
- OnLadder:
- message strcharinfo(0),"Loading...";
- // query_sql( "SELECT `value`,`name` FROM `global_reg_value` INNER JOIN `global_reg_value` ON `char`.`account_id` = `global_reg_value`.`account_id` WHERE `global_reg_value`.`str` = '#rank_level' GROUP BY `char`.`account_id` ORDER BY `global_reg_value`.`value` DESC,`char`.`base_level` DESC,`char`.`job_level` DESC,`char`.`char_id` DESC LIMIT "+.rank_limit,.@value,.@name$ );
- // .@db_size = getarraysize( .@name$ );
- query_sql( "SELECT `value`,`account_id` FROM `global_reg_value` WHERE `str` = '#rank_level' ORDER BY `value` DESC LIMIT 10",.@value,.@aid );
- .@db_size = getarraysize( .@aid );
- mes "Top "+.rank_limit+" Rank Record:";
- if ( .@name_size ) {
- for ( .@i = 0; .@i < .@db_size; .@i++ ) {
- // mes "^FF0000[Lv. "+( ( .rank_exp[ .@level[.@i] ] )? .@level[.@i]:"Max" )+"]^777777 "+.@name$[.@i]+"^000000";
- query_sql( "SELECT `name` FROM `char` WHERE `account_id` = "+.@aid[.@i]+" ORDER BY `base_level` DESC,`job_level` DESC,`char_id` DESC LIMIT 1",.@temp_name$ );
- mes "^FF0000[Lv. "+( ( .@value[.@i] )? .@value[.@i]:"Max" )+"]^777777 "+.@temp_name$+"^000000";
- }
- }
- else {
- mes "No records.";
- }
- close;
- OnRankExp:
- dispbottom "Rank "+( #rank_level+1 )+" "+( ( .rank_exp[ #rank_level ] )? "EXP: "+integer( #rank_exp )+" / "+integer( .rank_exp[ #rank_level ] ):"( Max Level )" );
- end;
- OnNPCKillEvent:
- .@rank_exp = getmonsterinfo( killedrid,MOB_BASEEXP );
- .@party_id = getcharid(1);
- if ( .@party_id ) {
- .@map$ = strcharinfo(3);
- getpartymember .@party_id;
- .@pt_size = $@partymembercount;
- copyarray .@pt_name$, $@partymembername$,.@pt_size;
- while ( .@i < .@pt_size ) {
- .@aid = getcharid( 3,.@pt_name$[.@i] );
- if ( attachrid( .@aid ) ) {
- if ( #rank_level <= .rank_exp_size && .@rank_exp )
- add_exp( .@rank_exp );
- }
- .@i++;
- }
- detachrid;
- }
- else if ( #rank_level <= .rank_exp_size && .@rank_exp ) {
- add_exp( .@rank_exp );
- }
- end;
- function add_exp {
- .@rank_exp = getarg(0);
- dispbottom "Rank EXP: +"+integer( .@rank_exp );
- #rank_exp += .@rank_exp;
- __OnGetEXP:
- if ( #rank_exp >= .rank_exp[#rank_level] && .rank_exp[#rank_level] ) {
- #rank_exp = ( #rank_exp - .rank_exp[#rank_level] );
- #rank_level++;
- dispbottom "Rank Level Up! "+( #rank_level+1 );
- if ( #rank_level >= .@rank_exp_size || !.rank_exp[#rank_level] )
- return;
- }
- jump_zero( #rank_exp < .rank_exp[#rank_level],__OnGetEXP );
- return;
- }
- function integer {
- .@str$ = getarg(0);
- for ( .@i = getstrlen(.@str$) - 3; .@i > 0; .@i -= 3 )
- .@str$ = insertchar( .@str$,",",.@i );
- return .@str$;
- }
- OnPCStatCalcEvent:
- .@level = #rank_level;
- if ( .@level > .rank_exp_size )
- .@level = .rank_exp_size;
- if ( .@level )
- switch ( .@level ) {
- // bonus from top level to lowest level
- // case <level>: { bonus }
- case 8:
- bonus bAgi,100; // level 8 +100 AGI
- case 5:
- bonus bStr,20; // level 5 +20 STR
- case 4:
- bonus bDex,15; // Level 4 +15 DEX
- case 3:
- bonus bVit,10; // Level 3 +10 VIT
- case 2:
- bonus bLuk,5; // Level 2 +LUK 5
- case 1:
- bonus bInt,5; // Level 1 +INT 1
- dispbottom "Rank Bonus Applied!";
- default:
- break;
- }
- end;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement