Jump to content

agentmax

Members
  • Posts

    7
  • Joined

  • Last visited

Everything posted by agentmax

  1. When i try to test the mission it says that the mission removed due to expired? why does this happen? /* Credits : AnnieRuru [major bug fixes] */ /* DROP TABLE IF EXISTS `mission_board`; CREATE TABLE IF NOT EXISTS `mission_board` ( `id` int(11) unsigned NOT NULL, `title` varchar(30) NOT NULL default '', `desc` varchar(255) NOT NULL default '', `mob_list` varchar(50) NOT NULL default '', `mob_qty` varchar(50) NOT NULL default '', `item_list` varchar(50) NOT NULL default '', `item_qty` varchar(50) NOT NULL default '', `class_limitation` int(11) unsigned NOT NULL default '0', `class_branch` int(11) unsigned NOT NULL default '0', `min_lv` smallint(6) unsigned NOT NULL default '1', `max_lv` smallint(6) unsigned NOT NULL default '99', `repeat` smallint(6) unsigned NOT NULL default '0', `duration` int(11) unsigned NOT NULL default '0', `reward_list` varchar(50) NOT NULL default '', `reward_qty` varchar(50) NOT NULL default '', `base_exp` int(11) unsigned NOT NULL default '0', `job_exp` int(11) unsigned NOT NULL default '0', `zeny` int(11) unsigned NOT NULL default '0', `cash` int(11) unsigned NOT NULL default '0', `aid` int(11) unsigned NOT NULL default '0', `name` varchar(30) NOT NULL default '', `time_update` datetime NOT NULL default '0000-00-00 00:00:00', `npc_id` varchar(255) NOT NULL default '', `redo_delay` smallint(6) unsigned NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS `player_mission`; CREATE TABLE IF NOT EXISTS `player_mission` ( `id` int(11) unsigned NOT NULL, `mission_id` int(11) unsigned NOT NULL, `aid` int(11) unsigned NOT NULL default '0', `cid` int(11) unsigned NOT NULL default '0', `name` varchar(30) NOT NULL default '', `mob_hunt` varchar(50) NOT NULL default '', `expire` int(11) unsigned NOT NULL default '0', `starting` datetime NOT NULL default '0000-00-00 00:00:00', `completion` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; */ - script mission_board -1,{ [email protected]_level = getgmlevel(); [email protected]_name$ = strnpcinfo(1); [email protected]_npc_num = atoi( strnpcinfo(2) ); // check npc if it's a valid npc with number 1 ~ 500 if( [email protected]_npc_num || [email protected]_npc_num > 500 ){ message strcharinfo(0),"This NPC isnt working, invalid <'"+strnpcinfo(2)+"'>"; disablenpc strnpcinfo(0); end; } // to assign offset index. [email protected]_npc_num--; query_sql( "SELECT COUNT(`id`) FROM `mission_board` WHERE `npc_id` LIKE '%|"[email protected]_npc_num+"|%' ",[email protected]_count ); query_sql( "SELECT `id`,`mission_id`,`mob_hunt`,`expire` FROM `player_mission` WHERE `mission_id` IN ( SELECT `id` FROM `mission_board` WHERE `npc_id` LIKE '%|"[email protected]_npc_num+"|%' ) AND `cid` = "+getcharid(0)+" AND `completion` = '0000-00-00 00:00:00' ",[email protected],[email protected]_id,[email protected]_hunt$,[email protected] ); [email protected]_mission_size = getarraysize( [email protected] ); mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "A mission board may provide various missions for adventures. Each players may pick "; mes " ^FF0000"+.max_mission_per_char+" missions^000000"; mes "from each mission npc."; next; switch( select( ( [email protected]_mission_size )?"Submit Mission":"", ( [email protected]_mission_size < .max_mission_per_char )?"Pick Mission":"", ( [email protected]_mission_size )?"Drop Mission":"", ( [email protected]_level < .gm_level || [email protected]_count )?"":"^FF0000[GM] Update Mission^000000", ( [email protected]_level < .gm_level )?"":"^FF0000[GM] Setup Mission^000000", ( [email protected]_level < .gm_level || [email protected]_count )?"":"^FF0000[GM] Delete Mission^000000" ) ){ case 1: [email protected]_time = gettimetick(2); query_sql( "SELECT `id`,`title`,`min_lv`,`max_lv` FROM `mission_board` WHERE `npc_id` LIKE '%|"[email protected]_npc_num+"|%' AND `id` IN ( SELECT `mission_id` FROM `player_mission` WHERE `cid` = "+getcharid(0)+" AND `completion` = '0000-00-00 00:00:00' )",[email protected]_id,[email protected]$,[email protected]_lv,[email protected]_lv ); [email protected] = getarraysize( [email protected]_id ); for( [email protected] = 0; [email protected] < [email protected]; [email protected]++ ){ if( [email protected][[email protected]] && [email protected][[email protected]] < [email protected]_time ) [email protected]_menu$ = [email protected]_menu$ + "^FF0000[Expired]^000000"; [email protected]_menu$ = [email protected]_menu$ + "["[email protected]_lv[[email protected]]+"~"[email protected]_lv[[email protected]]+"] "[email protected]$[[email protected]] +":"; } [email protected] = select( [email protected]_menu$ ) - 1; if( [email protected][[email protected]] && [email protected][[email protected]] < [email protected]_time ){ dispbottom " ~ Mission expired "+callsub( OnTime2Str,( gettimetick(2) + ( [email protected]_time - [email protected][[email protected]] ) ) )+" ago."; dispbottom " ~ You may drop this mission."; close; } // get mission data from sql query_sql( "SELECT * FROM `mission_board` WHERE `id` = "[email protected]_id[[email protected]]+" LIMIT 1", [email protected]_id, [email protected]$, [email protected]$, [email protected]_list$, [email protected]_qty$, [email protected]_list$, [email protected]_qty$, [email protected]_job_bitmask, [email protected]_branch_bitmask, [email protected]_lv, [email protected]_lv, [email protected], [email protected], [email protected]_list$, [email protected]_qty$, [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]$, [email protected]_update$, [email protected]_id$, [email protected]_delay ); // explode all saved strings to array value. [email protected]_size = callsub( OnExplodeArray,[email protected]_list$,[email protected]_list,0 ); if( [email protected]_size ) callsub( OnExplodeArray,[email protected]_qty$,[email protected]_qty,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_list$,[email protected]_list,0 ); if( [email protected]_size ) callsub( OnExplodeArray,[email protected]_qty$,[email protected]_qty,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_list$,[email protected]_list,0 ); if( [email protected]_size ) callsub( OnExplodeArray,[email protected]_qty$,[email protected]_qty,0 ); [email protected]_npc_size = callsub( OnExplodeArray,[email protected]_id$,[email protected]_npc_array$,1 ); setarray [email protected]_range,[email protected]_lv,[email protected]_lv; // display the information of mission [email protected] = callsub( OnDisplayMissionInfo, [email protected]_id, [email protected]$, [email protected]$, [email protected]_range, [email protected], [email protected][[email protected]], [email protected]_list, [email protected]_qty, [email protected]_list, [email protected]_qty, [email protected]_job_bitmask, [email protected]_branch_bitmask, [email protected], [email protected], [email protected], [email protected], [email protected]_list, [email protected]_qty, [email protected]_npc_array$, [email protected]_update$, [email protected]_delay, 1|2|4|8 ); // submit mission or not if( [email protected] ){ message strcharinfo(0),"Failed to submit this mission."; }else{ next; if( select( "Submit Completed Mission","Cancel" ) == 1 ){ for( [email protected] = ( @ms_size - 1 ); [email protected] >= 0; [email protected] ) if( @ms_list$[[email protected]] == ""[email protected]_id ){ mes "^0055FF[ "[email protected]_name$+" ]^000000"; query_sql( "UPDATE `player_mission` SET `completion` = NOW() WHERE `cid` = "+getcharid(0)+" AND `mission_id` = "[email protected]_id +" AND `completion` = '0000-00-00 00:00:00'" ); mes "Mission accomplished."; @ms_size--; // clear requirement. setd( "@ms_"[email protected]_id+"_expire" ),0; deletearray getd( "@ms_"[email protected]_id+"_list" ); deletearray getd( "@ms_"[email protected]_id+"_qty" ); deletearray getd( "@ms_"[email protected]_id+"_hunt" ); if( [email protected]_size ) for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ){ // debugmes getitemname( [email protected]_list[[email protected]] )+" - "[email protected]_qty[[email protected]]; delitem [email protected]_list[[email protected]],[email protected]_qty[[email protected]]; } mes "Gained some mission's rewards."; // rewards getexp [email protected],[email protected]; if( [email protected]_size ) for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ) getitem [email protected]_list[[email protected]],[email protected]_qty[[email protected]]; #CASHPOINTS += [email protected]; Zeny += [email protected]; break; } mes "Something went wrong .."; } } break; case 2: // get info from SQL. do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; deletearray [email protected]; query_sql( "SELECT `id`,`title`,`min_lv`,`max_lv` FROM `mission_board` WHERE `npc_id` LIKE '%|"[email protected]_npc_num+"|%' AND `id` NOT IN ( SELECT `mission_id` FROM `player_mission` WHERE `cid` = "+getcharid(0)+" AND `completion` = '0000-00-00 00:00:00' ) LIMIT "+.max_page_size+" OFFSET "[email protected],[email protected],[email protected]$,[email protected]_lv,[email protected]_lv ); [email protected] += .max_page_size; [email protected] = getarraysize( [email protected] ); if( [email protected] ){ mes "There are no other available missions to pick."; close; }else{ mes "Pick a mission."; [email protected]_menu$ = ""; for( [email protected] = 0; [email protected] < [email protected]; [email protected]++ ) [email protected]_menu$ = [email protected]_menu$ + "["[email protected]_lv[[email protected]]+"~"[email protected]_lv[[email protected]]+"] "[email protected]$[[email protected]] +":"; } next; [email protected] = select( [email protected]_menu$+ ( ( [email protected] < .max_page_size )?"":"- next page" ) ) - 1; }while( [email protected] == [email protected] ); query_sql( "SELECT * FROM `mission_board` WHERE `id` = "[email protected][[email protected]]+" LIMIT 1", [email protected]_id, [email protected]$, [email protected]$, [email protected]_list$, [email protected]_qty$, [email protected]_list$, [email protected]_qty$, [email protected]_job_bitmask, [email protected]_branch_bitmask, [email protected]_lv, [email protected]_lv, [email protected], [email protected], [email protected]_list$, [email protected]_qty$, [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]$, [email protected]_update$, [email protected]_id$, [email protected]_delay ); // explode all saved strings to array value. [email protected]_size = callsub( OnExplodeArray,[email protected]_list$,[email protected]_list,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_qty$,[email protected]_qty,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_list$,[email protected]_list,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_qty$,[email protected]_qty,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_list$,[email protected]_list,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_qty$,[email protected]_qty,0 ); [email protected]_npc_size = callsub( OnExplodeArray,[email protected]_id$,[email protected]_npc_array$,1 ); setarray [email protected]_range,[email protected]_lv,[email protected]_lv; // display the information of mission [email protected] = callsub( OnDisplayMissionInfo, [email protected]_id, [email protected]$, [email protected]$, [email protected]_range, [email protected], ( [email protected] + gettimetick(2) ), [email protected]_list, [email protected]_qty, [email protected]_list, [email protected]_qty, [email protected]_job_bitmask, [email protected]_branch_bitmask, [email protected], [email protected], [email protected], [email protected], [email protected]_list, [email protected]_qty, [email protected]_npc_array$, [email protected]_update$, [email protected]_delay, 1|8 ); // check completed how many times. if ( [email protected] ) { query_sql "select count(id) from player_mission where mission_id = "+ [email protected][[email protected]] +" and completion != '0000-00-00 00:00:00' and cid = "+ getcharid(0), [email protected]_completed; if( [email protected]_completed >= [email protected] ) { next; mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes " "; mes "You cant pick this mission, you have mission completion reach the max repeatable attempt of "[email protected]_completed+" times."; close; } } if ( [email protected]_delay ) { query_sql "select timestampdiff( hour, completion, now() ), unix_timestamp( date_add( completion, interval "+ [email protected]_delay +" hour ) ) from player_mission where cid = "+ getcharid(0) +" and mission_id = "+ [email protected][[email protected]] +" order by completion desc limit 1", [email protected]_delay, [email protected]_time; if ( [email protected]_delay < [email protected]_delay ) { next; mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes " "; mes "You cant pick this mission, you have mission redo delay isnt finish yet."; mes "^FF0000"+ callfunc( "Time2Str", [email protected]_time ) +"^000000"; close; } } if( [email protected] ){ message strcharinfo(0),"Failed to pick this mission."; }else{ if( select( "Pick Mission","Cancel" ) == 1 ){ query_sql( "INSERT INTO `player_mission` VALUES ( "+gettimetick(2)+","[email protected]_id+","+getcharid(3)+","+getcharid(0)+",'"+escape_sql( strcharinfo(0) )+"','',"+( ( [email protected] )? ( [email protected] + gettimetick(2) ) : 0 )+",NOW(),'0000-00-00 00:00:00' );" ); message strcharinfo(0),"Picked Mission # "[email protected]_id; @ms_list$[ @ms_size ] = ""[email protected]_id; @ms_title$[ @ms_size ] = ""[email protected]$; @ms_size++; copyarray getd( "@ms_"[email protected]_id+"_list[0]" ),[email protected]_list[0],[email protected]_size; copyarray getd( "@ms_"[email protected]_id+"_qty[0]" ),[email protected]_qty[0],[email protected]_size; deletearray getd( "@ms_"[email protected]_id+"_hunt" ); if ( [email protected] ) { setd( "@ms_"[email protected]_id+"_expire" ),( [email protected] + gettimetick(2) ); addtimer ( [email protected] * 1000 ),.npc_name$+"::OnTimeCheck"; } } } break; case 3: query_sql( "SELECT `id`,`title`,`min_lv`,`max_lv` FROM `mission_board` WHERE `npc_id` LIKE '%|"[email protected]_npc_num+"|%' AND `id` IN ( SELECT `mission_id` FROM `player_mission` WHERE `cid` = "+getcharid(0)+" AND `completion` = '0000-00-00 00:00:00' )",[email protected],[email protected]$,[email protected]_lv,[email protected]_lv ); [email protected]_size = getarraysize( [email protected] ); for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ) [email protected]_menu$ = [email protected]_menu$ + "["[email protected]_lv[[email protected]]+"~"[email protected]_lv[[email protected]]+"] "[email protected]$[[email protected]] +":"; mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Pick a Mission to remove."; next; [email protected] = select( [email protected]_menu$ ) - 1; mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Confirm remove ^0055FFMission # "[email protected][[email protected]]+"^000000?"; mes "Title : ^0055FF"[email protected]$[[email protected]]+"^000000"; mes "^777777( this cant be un-done )^000000"; if( select( "nope","Confirm" ) == 2 ){ message strcharinfo(0),"Dropped Mission # "[email protected][[email protected]]; query_sql( "DELETE FROM `player_mission` WHERE `mission_id` = "[email protected][[email protected]]+" AND `cid` = "+getcharid(0)+" AND `completion` = '0000-00-00 00:00:00'" ); setd( "@ms_"[email protected][[email protected]]+"_expire" ),0; deletearray getd( "@ms_"[email protected][[email protected]]+"_list" ); deletearray getd( "@ms_"[email protected][[email protected]]+"_qty" ); deletearray getd( "@ms_"[email protected][[email protected]]+"_hunt" ); for( [email protected] = 0; [email protected] < @ms_size; [email protected]++ ) if( ""[email protected][[email protected]] == @ms_list$[[email protected]] ){ deletearray @ms_list$[[email protected]],1; deletearray @ms_title$[[email protected]],1; @ms_size--; break; } } break; case 4: // get info from SQL. do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; deletearray [email protected]; query_sql( "SELECT `id`,`title`,`min_lv`,`max_lv` FROM `mission_board` WHERE `npc_id` LIKE '%|"[email protected]_npc_num+"|%' LIMIT "+.max_page_size+" OFFSET "[email protected],[email protected],[email protected]$,[email protected]_lv,[email protected]_lv ); [email protected] += .max_page_size; [email protected] = getarraysize( [email protected] ); if( [email protected] ){ mes "There are no available mission to update."; close; }else{ mes "Pick a mission."; [email protected]_menu$ = ""; for( [email protected] = 0; [email protected] < [email protected]; [email protected]++ ) [email protected]_menu$ = [email protected]_menu$ + "["[email protected]_lv[[email protected]]+"~"[email protected]_lv[[email protected]]+"] "[email protected]$[[email protected]] +":"; } next; [email protected] = select( [email protected]_menu$+ ( ( [email protected] < .max_page_size )?"":"- next page" ) ) - 1; }while( [email protected] == [email protected] ); query_sql( "SELECT * FROM `mission_board` WHERE `id` = "[email protected][[email protected]], [email protected]_mission_id, [email protected]$, [email protected]$, [email protected]_list$, [email protected]_qty$, [email protected]_list$, [email protected]_qty$, [email protected]_job_bitmask, [email protected]_branch_bitmask, [email protected]_lv, [email protected]_lv, [email protected], [email protected], [email protected]_list$, [email protected]_qty$, [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]$, [email protected]_update$, [email protected]_id$, [email protected]_delay ); // explode all saved strings to array value. [email protected]_size = callsub( OnExplodeArray,[email protected]_list$,[email protected]_list,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_qty$,[email protected]_qty,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_list$,[email protected]_list,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_qty$,[email protected]_qty,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_list$,[email protected]_list,0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_qty$,[email protected]_qty,0 ); [email protected]_npc_size = callsub( OnExplodeArray,[email protected]_id$,[email protected]_npc_array$,1 ); setarray [email protected]_range,[email protected]_lv,[email protected]_lv; case 5: do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; // display the information of mission callsub( OnDisplayMissionInfo, [email protected]_mission_id, [email protected]$, [email protected]$, [email protected]_range, [email protected], ( [email protected] + gettimetick(2) ), [email protected]_list, [email protected]_qty, [email protected]_list, [email protected]_qty, [email protected]_job_bitmask, [email protected]_branch_bitmask, [email protected], [email protected], [email protected], [email protected], [email protected]_list, [email protected]_qty, [email protected]_npc_array$, [email protected]_update$, [email protected]_delay, 0 ); // check if required info complete for setup mission [email protected] = 0; if( [email protected]$ == "" ) [email protected] |= 1; if( [email protected]$ == "" ) [email protected] |= 2; if( [email protected]_size && [email protected]_size ) [email protected] |= 4; if( getarraysize( [email protected]_range ) != 2 || [email protected]_job_bitmask || [email protected]_branch_bitmask ) [email protected] |= 8; if( [email protected]_size && [email protected] && [email protected] && [email protected] && [email protected] ) [email protected] |= 16; if( [email protected]_npc_size ) [email protected] |= 32; [email protected]_option = select( "Edit Title "+(( [email protected] & 1 )?"^FF0000-incomplete-^000000":"" ), "Edit Description "+(( [email protected] & 2 )?"^FF0000-incomplete-^000000":"" ), "Edit Monster List "+(( [email protected] & 4 )?"^FF0000-incomplete-^000000":( ( [email protected]_size )?"^777777-none-^000000":"" )), "Edit Item List "+(( [email protected] & 4 )?"^FF0000-incomplete-^000000":( ( [email protected]_size )?"^777777-none-^000000":"" )), "Edit Class/Level Limitation "+(( [email protected] & 8 )?"^FF0000-incomplete-^000000":"" ), "Edit Time/Repeat/Mission Limitation ", "Edit Reward List "+(( [email protected] & 16 )?"^FF0000-incomplete-^000000":"" ), "Edit NPC Limitation "+(( [email protected] & 32 )?"^FF0000-incomplete-^000000":"" ), ( [email protected] )?"":"^0055FF - Complete Setup Mission^000000" ); next; switch( [email protected]_option ){ case 1: mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Enter Title"; mes "^777777( Length: 4 ~ 30 )^000000"; while( input( [email protected]$,4,30 ) ); [email protected]_result = replacestr( [email protected]$,":"," " ); break; case 2: [email protected]$ = ""; do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Enter Description"; mes "^777777( Length: 4 ~ 255 )^000000"; mes " "; mes "^0055FF"[email protected]$+"^000000"; [email protected] = getstrlen( [email protected]$ ); do{ [email protected]_result = input( [email protected]_input$,4,255 ); if( [email protected]_result ) message strcharinfo(0),"Input length must between 4 ~ 255"; }while( [email protected]_result ); [email protected]$ = [email protected]$ + " "+ [email protected]_input$; mes "^0055FF"[email protected]_input$+"^000000"; [email protected] = getstrlen( [email protected]$ ); next; }while( select( ( [email protected] >= 255 )?"":"add more ^777777( left "+( 255 - [email protected] )+" words )^000000","-back" ) == 1 ); [email protected]$ = replacestr( [email protected]$,":"," " ); break; case 3: if( [email protected]_mission_id ){ dispbottom "Editing monster list might caused unwanted behaviours of scripts. Which may included :"; dispbottom " > Script/Missions isnt working properly."; dispbottom " > Deletion of player mission's progress."; dispbottom " > etc."; dispbottom "Overall it's not suggested to edit monster list that you have set early."; dispbottom "( Recommend for Re-Adding mission, if needed )"; } do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Monster List:"; if( [email protected]_size ){ [email protected]_menu$ = ""; [email protected]_mob_list$ = "|"; deletearray [email protected]_mob$; for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ){ [email protected]_name$ = getmonsterinfo( [email protected]_list[[email protected]],MOB_NAME ); [email protected]_menu$ = [email protected]_menu$ + [email protected]_qty[[email protected]] +" x "[email protected]_name$ +":"; mes " ^777777 ~ "[email protected]_qty[[email protected]]+" x "[email protected]_name$+"^000000"; [email protected]_mob_list$ = [email protected]_mob_list$ + [email protected]_list[[email protected]] +"|"; } }else{ mes " ^777777 ~ none ^000000"; } mes " "; [email protected] = select( ( [email protected]_size >= .max_required_monster )?"":"Add Monster",( [email protected]_size )?"Delete Monster":"","- Back" ); switch( [email protected] ){ case 1: mes "Enter Monster ID"; do{ input [email protected]_id; if( [email protected]_id ) break; [email protected]_name$ = getmonsterinfo( [email protected]_id,MOB_NAME ); }while( [email protected]_name$ == "null" ); if( [email protected]_name$ != "null" && [email protected]_id ){ mes "How many "[email protected]_name$+" need to hunt ?"; input [email protected],0,30000; if( [email protected] ){ if( compare( "|"[email protected]_mob_list$+"|","|"[email protected]_id+"|" ) ){ for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ) if( [email protected]_list[[email protected]] == [email protected]_id ){ [email protected]_qty[[email protected]] += [email protected]; break; } }else{ [email protected]_list[[email protected]_size] = [email protected]_id; [email protected]_qty[[email protected]_size] = [email protected]; [email protected]_size++; } } } break; case 2: mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Pick a Monster to Remove."; [email protected] = select( [email protected]_menu$+"- Back" ) - 1; if( [email protected] < [email protected]_size ){ deletearray [email protected]_list[[email protected]],1; deletearray [email protected]_qty[[email protected]],1; [email protected]_size--; } default: break; } if( [email protected] < 3 ) next; }while( [email protected] < 3 ); break; case 4: do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Required Item List: "; if( [email protected]_size ){ [email protected]_menu$ = ""; [email protected]_item_list$ = "|"; deletearray [email protected]_item$; for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ){ [email protected]_name$ = getitemname( [email protected]_list[[email protected]] ); [email protected]_menu$ = [email protected]_menu$ + [email protected]_qty[[email protected]] +"x "[email protected]_name$ +":"; mes " ^777777 ~ "[email protected]_qty[[email protected]]+" x "[email protected]_name$+"^000000"; [email protected]_item_list$ = [email protected]_item_list$ + [email protected]_list[[email protected]] + "|"; } }else{ mes " ^777777 ~ none ^000000"; } mes " "; [email protected] = select( ( [email protected]_size >= .max_required_item )?"":"Add Item",( [email protected]_size )?"Delete Item":"","- Back" ); switch( [email protected] ){ case 1: do{ input [email protected]_id; if( [email protected]_id ) break; [email protected]_name$ = getitemname( [email protected]_id ); }while( [email protected]_name$ == "null" || [email protected]_name$ == "" ); if( [email protected]_id && [email protected]_name$ != "null" && [email protected]_name$ != "" ){ mes "How many "[email protected]_name$+" need to collect ?"; input [email protected],0,30000; if( [email protected] ){ if( compare( "|"[email protected]_item_list$+"|","|"[email protected]_id+"|" ) ){ for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ) if( [email protected]_list[[email protected]] == [email protected]_id ){ [email protected]_qty[[email protected]] += [email protected]; break; } }else{ [email protected]_list[[email protected]_size] = [email protected]_id; [email protected]_qty[[email protected]_size] = [email protected]; [email protected]_size++; } } } break; case 2: mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Pick an Item to Remove."; [email protected] = select( [email protected]_menu$+" - Back" ) - 1; if( [email protected] < [email protected]_size ){ mes "Removed "[email protected]_qty[[email protected]]+" x "+getitemname( [email protected]_list[[email protected]] ); deletearray [email protected]em_list[[email protected]],1; deletearray [email protected]_qty[[email protected]],1; [email protected]_size--; } default: break; } if( [email protected] < 3 ) next; }while( [email protected] < 3 ); break; case 5: // class limitation if( [email protected]_job_bitmask ){ // enable all job by default. for( [email protected] = 0; [email protected] < .base_job_size; [email protected]++ ){ [email protected]_value = ( 1 << [email protected] ); [email protected]_job_bitmask |= [email protected]_value; } // enable all inherited classes by default. for( [email protected] = 0; [email protected] < .job_branch_size; [email protected]++ ){ [email protected]_value = ( 1 << [email protected] ); [email protected]_branch_bitmask |= [email protected]_value; } } do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Level Range : "+( ( [email protected]_range[1] )? "^777777"[email protected]_range[0]+" ~ "[email protected]_range[1]:"^FF0000-incomplete-" )+"^000000"; mes "Available Job Setting"; if( [email protected]_job_bitmask ){ for( [email protected] = 0; [email protected] < .base_job_size; [email protected]++ ) if( [email protected]_job_bitmask & ( 1 << [email protected] ) ) mes " ^777777 ~ "+jobname( roclass( .base_job[[email protected]] ) )+" ^000000"; }else{ mes " ^FF0000 -incomplete-^000000"; } mes " "; mes "Inherited Branch Setting"; if( [email protected]_branch_bitmask ){ for( [email protected] = 0; [email protected] < .job_branch_size; [email protected]++ ) if( [email protected]_branch_bitmask & ( 1 << [email protected] ) ) mes " ^777777 ~ "+.job_branch_name$[[email protected]]+" ^000000"; }else{ mes " ^FF0000 -incomplete-^000000"; } next; [email protected] = select( "Edit Base Job","Edit Job Branch","Edit Level Range","- Back" ); switch( [email protected] ){ case 1: dispbottom "[ Base Job Class ] RED = Disable , GREEN = Enable"; do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Available Job List:"; [email protected]_job_menu$ = ""; for( [email protected] = 0; [email protected] < .base_job_size; [email protected]++ ){ [email protected]_name$ = jobname( roclass( .base_job[[email protected]] ) ); if( [email protected]_job_bitmask & ( 1 << [email protected] ) ) mes " ^777777 ~ "[email protected]_name$+" ^000000"; [email protected]_job_menu$ = [email protected]_job_menu$ + (( [email protected]_job_bitmask & ( 1 << [email protected] ) )?"^4EEE94":"^FF0000" ) + [email protected]_name$ +"^000000:"; } next; [email protected] = select( [email protected]_job_menu$+"- Back" ) - 1; if( [email protected] < .base_job_size ){ [email protected]_value = ( 1 << [email protected] ); if( [email protected]_job_bitmask & [email protected]_value ) [email protected]_job_bitmask -= [email protected]_value; else [email protected]_job_bitmask |= [email protected]_value; } }while( [email protected] < .base_job_size ); break; case 2: dispbottom "[ Inherited Job Branch ] RED = Disable , GREEN = Enable"; do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Inherited Job Branch List:"; [email protected]_branch_menu$ = ""; for( [email protected] = 0; [email protected] < .job_branch_size; [email protected]++ ){ if( [email protected]_branch_bitmask & ( 1 << [email protected] ) ) mes " ^777777 ~ "+.job_branch_name$[[email protected]]+" ^000000"; [email protected]_branch_menu$ = [email protected]_branch_menu$ + (( [email protected]_branch_bitmask & ( 1 << [email protected] ) )?"^4EEE94":"^FF0000" ) + .job_branch_name$[[email protected]] +"^000000:"; } next; [email protected] = select( [email protected]_branch_menu$+"- Back" ) - 1; if( [email protected] < .job_branch_size ){ [email protected]_value = ( 1 << [email protected] ); if( [email protected]_branch_bitmask & [email protected]_value ) [email protected]_branch_bitmask -= [email protected]_value; else [email protected]_branch_bitmask |= [email protected]_value; } }while( [email protected] < .job_branch_size ); break; case 3: mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Minimum Level"; input [email protected]_range[0],1,.server_max_level ; mes "Maximum Level"; input [email protected]_range[1],[email protected]_range[0],.server_max_level; default: break; } if( [email protected] < 4 ) next; }while( [email protected] < 4 ); break; case 6: // mission limitation do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Repeatable: ^777777"+( ( [email protected] )?"unlimit":""[email protected] )+" time^000000"; mes "Redo Delay: ^777777"+( ( [email protected]_delay )?"none":callsub( OnTime2Str,( ( [email protected]_delay * 3600 ) + gettimetick(2) ) ))+"^000000"; mes "Time Limit: ^777777"+( ( [email protected] )?"none":callsub( OnTime2Str,( [email protected] + gettimetick(2) ) ) )+"^000000"; [email protected] = select( "Edit Repeatable Status","Edit Time Limit","Edit Re-do Delay","Edit Required Mission","- Back" ); switch( [email protected] ){ case 1: mes "How many time can this mission repeat ??"; mes "^777777( 0 = unlimited )^000000"; input [email protected],0,100; break; case 2: mes "Time Limit of mission"; mes " 1 = 1 minute"; mes " 60 = 1 hour"; mes "1440 = 1 day"; input [email protected],0,50000; [email protected] *= 60; break; case 3: mes "Time Delay to re-take the mission"; mes " 1 = 1 hour"; mes " 24 = 1 day"; mes " 720 = 30 day"; input [email protected]_delay,0,50000; break; case 4: mes "This is not fully implemented yet.. still in beta test"; break; do{ mes "Required Mission:"; if( [email protected]_mission_size ){ for( [email protected] = 0; [email protected] < [email protected]_mission_size; [email protected]++ ){ mes " ^777777 ~ "[email protected]_mission$[[email protected]]+"^000000"; [email protected]_mission_menu$ = [email protected]_mission_menu$ + [email protected]_mission$[[email protected]] +":"; } }else{ mes "^777777 none ^000000"; } next; [email protected]_option = select( ( [email protected]_mission_size < .max_required_mission )?"Add required mission":"", ( [email protected]_mission_size )?"Remove required mission":"", "- Back"); switch( [email protected]_option ){ case 1: mes "Enter mission ID"; mes "^777777( enter 0 to cancel )^000000"; do{ input [email protected]_id$; if( [email protected]_id$ == "0" ) break; }while( compare( "|"[email protected]_mission_menu$+"|","|"[email protected]_id$+"|" ) ); [email protected]_id$ = replacestr( [email protected]_id$,":","" ); if( [email protected]_id$ != "0" ){ [email protected]_mission$[[email protected]_mission_size] = [email protected]_id$; [email protected]_mission_size++; } break; case 2: mes "Select a mission to remove."; [email protected] = select( [email protected]_mission_menu$ ) - 1; deletearray [email protected]_mission$[[email protected]],1; default: break; } }while( [email protected]_option < 3 ); default: break; } if( [email protected] < 5 ) next; }while( [email protected] < 5 ); break; case 7: // reward list do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes " "; mes "Cash : ^777777"+( ( [email protected] )? [email protected]:"none" )+"^000000"; mes "Zeny : ^777777"+( ( [email protected] )? [email protected]:"none" )+"^000000"; mes "Reward Item List: "; if( [email protected]_size ){ [email protected]_menu$ = ""; deletearray [email protected]_reward$; for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ){ [email protected]_name$ = getitemname( [email protected]_list[[email protected]] ); [email protected]_menu$ = [email protected]_menu$ + [email protected]_qty[[email protected]] +"x "[email protected]_name$ +":"; [email protected]_reward$[[email protected]] = [email protected]_name$; mes " ^777777 ~ "[email protected]_qty[[email protected]]+" x "[email protected]_name$+"^000000"; } [email protected]_reward_list$ = implode( [email protected]_reward$,"|" ); }else{ mes " ^777777 ~ none ^000000"; } mes "Base EXP : ^777777"+( ( [email protected] )? [email protected]:"none" )+"^000000"; mes "Job EXP : ^777777"+( ( [email protected] )? [email protected]:"none" )+"^000000"; mes " "; next; [email protected] = select( ( [email protected]_size >= .max_required_item )?"":"Add Item Reward", ( [email protected]_size )?"Delete Item Reward":"", "Edit Cash Reward", "Edit Zeny Reward", "Edit Base EXP Reward", "Edit Job EXP Reward", "- Back" ); mes "^0055FF[ "[email protected]_name$+" ]^000000"; switch( [email protected] ){ case 1: mes "Enter Reward Item ID"; do{ input [email protected]_id; if( [email protected]_id ) break; [email protected]_name$ = getitemname( [email protected]_id ); }while( [email protected]_name$ == "null" || [email protected]_name$ == "" ); if( [email protected]_id && [email protected]_name$ != "null" && [email protected]_name$ != "" ){ mes "How many "[email protected]_name$+" will be rewarded ?"; input [email protected],0,30000; if( [email protected] ){ if( compare( "|"[email protected]_reward_list$+"|","|"[email protected]_name$+"|" ) ){ for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ) if( [email protected]_list[[email protected]] == [email protected]_id ){ [email protected]_qty[[email protected]] += [email protected]; break; } }else{ [email protected]_list[[email protected]_size] = [email protected]_id; [email protected]_qty[[email protected]_size] = [email protected]; [email protected]_size++; } } } break; case 2: mes "Pick an Reward to Remove."; [email protected] = select( [email protected]_menu$ ) - 1; mes "Removed "[email protected]_qty[[email protected]]+"x "+getitemname( [email protected]_list[[email protected]] ); deletearray [email protected]_list[[email protected]],1; deletearray [email protected]_qty[[email protected]],1; [email protected]_size--; break; case 3: mes "How many Cash will be given ?"; mes "^777777( value: 0 ~ "+.max_integer_value+" )^000000"; input [email protected],0,.max_integer_value; break; case 4: mes "How many Zeny will be given ?"; mes "^777777( value: 0 ~ "+.max_integer_value+" )^000000"; input [email protected],0,.max_integer_value; break; case 5: mes "How many Base EXP reward ?"; mes "^777777( value: 0 ~ "+.max_integer_value+" )^000000"; input [email protected],0,.max_integer_value; break; case 6: mes "How many Job EXP reward ?"; mes "^777777( value: 0 ~ "+.max_integer_value+" )^000000"; input [email protected],0,.max_integer_value; default: break; } next; }while( [email protected] < 7 ); break; case 8: // npc limitation mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "By default, the mission will be available from each mission board npc ^FF0000unless you have specified which NPC may offer this mission.^000000"; mes " "; mes "Just pick all the NPC that may offer this mission if you wish."; next; if( !getarraysize( [email protected]_npc_array$ ) ) for( [email protected] = 0; [email protected] < .mission_npc_count; [email protected]++ ){ [email protected]_npc_array$[[email protected]] = ""[email protected]; [email protected]_npc_size++; } dispbottom "[ NPC Limitation ] RED = Disable , GREEN = Enable"; do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Mission offered by: "; [email protected]_npc_menu$ = ""; if( [email protected]_npc_size >= 2 ){ [email protected]_npc$ = "|"+implode( [email protected]_npc_array$,"|" )+"|"; }else{ [email protected]_npc$ = "|"[email protected]_npc_array$+"|"; } for( [email protected] = 0; [email protected] < .mission_npc_count; [email protected]++ ){ getmapxy( [email protected]$,[email protected],[email protected],1,.npc_unique_list$[[email protected]] ); [email protected]_npc_name$ = ( ( compare( "|"[email protected]_npc$+"|","|"[email protected]+"|" ) )?"^44EE00":"^FF0000" ); [email protected]_npc_name$ = [email protected]_npc_name$ + .npc_name_list$[[email protected]]; mes "^777777("[email protected]$+") "[email protected]_npc_name$; [email protected]_npc_menu$ = [email protected]_npc_menu$ + [email protected]_npc_name$ +":"; } next; [email protected] = select( [email protected]_npc_menu$+"^000000- Back" ) - 1; if( [email protected] < .mission_npc_count ){ if( compare( "|"[email protected]_npc$+"|","|"[email protected]+"|" ) ) [email protected]_npc_array$[[email protected]] = ""; else [email protected]_npc_array$[[email protected]] = ""[email protected]; [email protected]_npc_size = getarraysize( [email protected]_npc_array$ ); } // dispbottom "["+rand(10,99)+"] "+implode( [email protected]_npc_array$,"|" ); }while( [email protected] < .mission_npc_count ); break; default: break; } next; }while( [email protected]_option < 9 ); // finalise all variable if( [email protected]_size ){ [email protected]_mob_list$ = "|"; [email protected]_mob_qty$ = "|"; for( .[email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ){ [email protected]_mob_list$ = [email protected]_mob_list$ + [email protected]_list[[email protected]] +"|"; [email protected]_mob_qty$ = [email protected]_mob_qty$ + [email protected]_qty[[email protected]] +"|"; } } if( [email protected]_size ){ [email protected]_item_list$ = "|"; [email protected]_item_qty$ = "|"; for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ){ [email protected]_item_list$ = [email protected]_item_list$ + [email protected]_list[[email protected]] +"|"; [email protected]_item_qty$ = [email protected]_item_qty$ + [email protected]_qty[[email protected]] +"|"; } } if( [email protected]_size ){ [email protected]_reward_list$ = "|"; [email protected]_reward_qty$ = "|"; for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ){ [email protected]_reward_list$ = [email protected]_reward_list$ + [email protected]_list[[email protected]] +"|"; [email protected]_reward_qty$ = [email protected]_reward_qty$ + [email protected]_qty[[email protected]] +"|"; } } if( [email protected]_npc_size ){ [email protected]_npc_list$ = "|"; for( [email protected] = 0; [email protected] < [email protected]_npc_size; [email protected]++ ) [email protected]_npc_list$ = [email protected]_npc_list$ + [email protected]_npc_array$[[email protected]] +"|"; } if( [email protected]_mission_id ){ [email protected]_mission_id = gettimetick(2); message strcharinfo(0),"Mission # "[email protected]_mission_id+" has been added."; }else{ message strcharinfo(0),"Mission # "[email protected]_mission_id+" has been updated."; // attach and inform other online players. callsub( OnRemoveMission,[email protected]_mission_id,"A GM updated Mission # "[email protected]_mission_id ); } // add new mission into SQL query_sql( "REPLACE INTO `mission_board` VALUES ( " + [email protected]_mission_id+", " + "'"+escape_sql( [email protected]$ )+"', " + "'"+escape_sql( [email protected]$ )+"', " + "'"+escape_sql( [email protected]_mob_list$ )+"', " + "'"+escape_sql( [email protected]_mob_qty$ )+"', " + "'"+escape_sql( [email protected]_item_list$ )+"', " + "'"+escape_sql( [email protected]_item_qty$ )+"', " + [email protected]_job_bitmask+", " + [email protected]_branch_bitmask+", " + [email protected]_range[0]+", " + [email protected]_range[1]+", " + [email protected]+", " + [email protected]+", " + "'"+escape_sql( [email protected]_reward_list$ )+"', " + "'"+escape_sql( [email protected]_reward_qty$ )+"', " + [email protected]+", " + [email protected]+", " + [email protected]+", " + [email protected]+", " + getcharid(3)+", " + "'"+escape_sql( strcharinfo(0) )+"', " + "NOW(), " + "'"+escape_sql( [email protected]_npc_list$ )+"', " + [email protected]_delay + " ); " ); break; case 6: // delete mission do{ mes "^0055FF[ "[email protected]_name$+" ]^000000"; deletearray [email protected]; query_sql( "SELECT `id`,`title`,`min_lv`,`max_lv` FROM `mission_board` WHERE `npc_id` LIKE '%|"[email protected]_npc_num+"|%' LIMIT "+.max_page_size+" OFFSET "[email protected],[email protected],[email protected]$,[email protected]_lv,[email protected]_lv ); [email protected] += .max_page_size; [email protected] = getarraysize( [email protected] ); if( [email protected] ){ mes "There are no available mission to update."; close; }else{ mes "Pick a mission."; for( [email protected] = 0; [email protected] < [email protected]; [email protected]++ ) [email protected]_menu$ = [email protected]_menu$ + "["[email protected]_lv[[email protected]]+"~"[email protected]_lv[[email protected]]+"] "[email protected]$[[email protected]] +":"; } next; [email protected] = select( [email protected]_menu$+ ( ( [email protected] < .max_page_size )?"":"- next page" ) ) - 1; }while( [email protected] == [email protected] ); [email protected]_id = [email protected][[email protected]]; mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes "Are you sure to remove this mission ?"; if( select( "nope","Delete Mission" ) == 2 ){ query_sql( "DELETE FROM `mission_board` WHERE `id` = "[email protected]_id+" LIMIT 1" ); mes "Removed mission from mission list."; // attach other online players and remove the missions. callsub( OnRemoveMission,[email protected]_id,"A GM removed Mission # "[email protected]_id ); query_sql( "DELETE FROM `player_mission` WHERE `completion` = '0000-00-00 00:00:00' AND `mission_id` = "[email protected]_id ); mes "Removed mission from all players."; } default: break; } close; OnInit: initnpctimer "mission_board"; // initialize settings if( strnpcinfo(0) == "mission_board" ){ // gm level to access panel .gm_level = 90; // max no. of required monster .max_required_monster = 10; // max no. of required item .max_required_item = 10; // max no. of required mission ( un-implement yet ) .max_required_mission = 10; // max no. of available mission .max_mission_available = 50; // max value of integer input .max_integer_value = 2000000000; // max amount of mission per page .max_page_size = 30; // max mission per npc take by character .max_mission_per_char = 4; // predefined values. .npc_name$ = strnpcinfo(0); .server_max_level = MAX_LEVEL; setarray .base_job, EAJ_SWORDMAN, EAJ_MAGE, EAJ_ARCHER, EAJ_ACOLYTE, EAJ_MERCHANT, EAJ_THIEF, EAJ_TAEKWON, EAJ_GUNSLINGER, EAJ_NINJA; .base_job_size = getarraysize( .base_job ); setarray .job_branch_name$, "2-1 Classes", "2-2 Classes", "Rebirth Classes", "Baby Classes", "Third Classes"; setarray .job_branch, EAJL_2_1, EAJL_2_2, EAJL_UPPER, EAJL_BABY, EAJL_THIRD; .job_branch_size = getarraysize( .job_branch ); bindatcmd "mission", strnpcinfo(0)+"::OnCommand"; }else{ // delay the process [email protected] = atoi( strnpcinfo(2) ); if( [email protected] && [email protected] <= 500 && .mission_npc_count < 100 ){ sleep( [email protected] + 1 ); .npc_name_list$[ .mission_npc_count ] = strnpcinfo(1); .npc_unique_list$[ .mission_npc_count ] = strnpcinfo(0); // debugmes "["+.mission_npc_count+"]"+.npc_name_list$[ .mission_npc_count ]+"|"+.npc_unique_list$[ .mission_npc_count ]; .mission_npc_count++; end; }else if( [email protected] ){ debugmes "[Removed] "+strnpcinfo(0)+", invalid <num:'"+strnpcinfo(2)+"'>"; }else if( .mission_npc_count >= 100 ){ debugmes "[Skipped] "+strnpcinfo(0)+", max: 100 Total NPC."; } disablenpc strnpcinfo(0); } end; // just used to display how many total Mission Board NPC. OnTimer1000: stopnpctimer; debugmes "[ Mission Board ] Total NPC Loaded : "+.mission_npc_count+" ..."; end; OnCommand: if ( !strcmp( strnpcinfo(0), .npc_name$ ) ) { if ( @ms_size ) { for ( [email protected] = 0; [email protected] < @ms_size; [email protected]++ ) { [email protected]_size = getarraysize( getd( "@ms_"+ @ms_list$[[email protected]] +"_list" ) ); query_sql "select id, title, item_list, item_qty from mission_board where id = "+ @ms_list$[[email protected]], [email protected]_id, [email protected]$, [email protected]_id$, [email protected]_amount$; if ( [email protected]_size ) { if ( getd( "@ms_"+ [email protected]_id +"_expire" ) ) dispbottom "[Mission '"+ [email protected]$ +"' Progress] Time limit -> "+ callfunc( "Time2Str", getd( "@ms_"+ [email protected]_id +"_expire" ) ); for ( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ) dispbottom "[Mission '"+ [email protected]$ +"' Progress] Hunted "+ getd( "@ms_"+ @ms_list$[[email protected]] +"_hunt["+ [email protected] +"]" ) +"/"+ getd( "@ms_"+ @ms_list$[[email protected]] +"_qty[" + [email protected] +"]" ) +" x "+ getmonsterinfo( getd( "@ms_"+ @ms_list$[[email protected]] +"_list["+ [email protected] +"]" ), MOB_NAME ); explode [email protected]_id_array$, [email protected]_id$, "|"; explode [email protected]_amount_array$, [email protected]_amount$, "|"; [email protected] = getarraysize( [email protected]_id_array$ ); for ( [email protected] = 1; [email protected] < [email protected]; [email protected]++ ) dispbottom "[Mission '"+ [email protected]$ +"' Progress] Collected "+ countitem( atoi( [email protected]_id_array$[[email protected]] ) ) +"/"+ [email protected]_amount_array$[[email protected]] +" x "+ getitemname( atoi( [email protected]_id_array$[[email protected]] ) ); } } } } end; OnPCLoginEvent: if( strnpcinfo(0) == .npc_name$ ){ [email protected] = gettimetick(2); [email protected] = query_sql( "SELECT `mission_id`,`expire`,`mob_hunt` FROM `player_mission` WHERE `completion` = '0000-00-00 00:00:00' AND `cid` = "+getcharid(0),@ms_list$,[email protected],[email protected]_hunt$ ); @ms_size = [email protected]; if( @ms_size ){ for( [email protected] = 0; [email protected] < @ms_size; [email protected]++ ) { query_sql( "SELECT `title`,`mob_list`,`mob_qty` FROM `mission_board` WHERE `id` = "[email protected]_list$[[email protected]],@ms_title$,[email protected]_list$,[email protected]_qty$ ); if ( [email protected][[email protected]] ) { [email protected] = ( [email protected][[email protected]] - [email protected] ); addtimer ( [email protected] * 1000 ),.npc_name$+"::OnTimeCheck"; dispbottom "[ Mission Progress : "[email protected]_title$+" , expire in "+ callfunc( "Time2Str", [email protected] + [email protected] )+" ]"; } else dispbottom "[ Mission Progress : "[email protected]_title$ +" ]"; setd( "@ms_"[email protected]_list$[[email protected]]+"_expire" ),[email protected][[email protected]]; if( callsub( OnExplodeArray,[email protected]_list$,getd( "@ms_"[email protected]_list$[[email protected]]+"_list" ),0 ) ){ callsub( OnExplodeArray,[email protected]_hunt$[[email protected]],getd( "@ms_"[email protected]_list$[[email protected]]+"_hunt" ),0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_qty$,getd( "@ms_"[email protected]_list$[[email protected]]+"_qty" ),0 ); // for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ) // dispbottom " ~ killed "+getd( "@ms_"[email protected]_list$[[email protected]]+"_hunt["[email protected]+"]" )+"/"+getd( "@ms_"[email protected]_list$[[email protected]]+"_qty["[email protected]+"]" )+" x "+getmonsterinfo( getd( "@ms_"[email protected]_list$[[email protected]]+"_list["[email protected]+"]" ),MOB_NAME ); } } } } end; OnPCLogoutEvent: if( strnpcinfo(0) == .npc_name$ ){ if( @ms_size ) for( [email protected] = 0; [email protected] < @ms_size; [email protected]++ ){ debugmes "Saving "[email protected]_list$[[email protected]]; [email protected]_size = getarraysize( getd( "@ms_"[email protected]_list$[[email protected]]+"_list" ) ); if( [email protected]_size ){ copyarray [email protected]_array[0],getd( "@ms_"[email protected]_list$[[email protected]]+"_list[0]" ),[email protected]_size; [email protected]_hunt$ = "|"; for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ) [email protected]_hunt$ = [email protected]_hunt$ + getd( "@ms_"[email protected]_list$[[email protected]]+"_hunt["[email protected]+"]" ) +"|"; query_sql( "UPDATE `player_mission` SET `mob_hunt` = '"+escape_sql( [email protected]_hunt$ )+"' WHERE `mission_id` = "[email protected]_list$[[email protected]]+" AND `completion` = '0000-00-00 00:00:00' AND `cid` = "+getcharid(0) ); } } } end; OnNPCKillEvent: if( strnpcinfo(0) == .npc_name$ ){ if( @ms_size ){ [email protected]$ = strcharinfo(3); // by default mission wont work in PVP,GVG,Instance,Event maps if( compare( [email protected]$,"@" ) || getmapflag( [email protected]$,mf_gvg ) || getmapflag( [email protected]$,mf_pvp )){ // dispbottom "[Mission Board] PvP/GvG Map , Instance Map , Event Map , include monsters will not affect Mission Progress."; end; } [email protected] = gettimetick(2); for( [email protected] = ( @ms_size - 1 ); [email protected] >= 0; [email protected] ){ if( getd( "@ms_"[email protected]_list$[[email protected]]+"_expire" ) && getd( "@ms_"[email protected]_list$[[email protected]]+"_expire" ) < [email protected] ){ setd( "@ms_"[email protected]_list$[[email protected]]+"_expire" ),0; deletearray getd( "@ms_"[email protected]_list$[[email protected]]+"_list" ); deletearray getd( "@ms_"[email protected]_list$[[email protected]]+"_qty" ); deletearray getd( "@ms_"[email protected]_list$[[email protected]]+"_hunt" ); dispbottom "[Mission # "[email protected]_title$[[email protected]]+"] Mission removed due to expired. "; deletearray @ms_list$[[email protected]],1; @ms_size--; }else{ [email protected]_size = getarraysize( getd( "@ms_"[email protected]_list$[[email protected]]+"_list" ) ); if( [email protected]_size ){ copyarray [email protected]_array[0],getd( "@ms_"[email protected]_list$[[email protected]]+"_list[0]" ),[email protected]_size; for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ) if( [email protected]_array[[email protected]] == killedrid ){ [email protected] = getd( "@ms_"[email protected]_list$[[email protected]]+"_hunt["[email protected]+"]" ) + 1; setd( "@ms_"[email protected]_list$[[email protected]]+"_hunt["[email protected]+"]" ),[email protected]; // dispbottom "[Mission # "[email protected]_title$[[email protected]]+" Progress] Hunted "[email protected]+" x "+getmonsterinfo( [email protected]_array[[email protected]],MOB_NAME ); break; } deletearray [email protected]_array; } } } } } end; OnTimeCheck: if( @ms_size ){ [email protected] = gettimetick(2); for( [email protected] = ( @ms_size - 1 ); [email protected] >= 0; [email protected] ){ if( getd( "@ms_"[email protected]_list$[[email protected]]+"_expire" ) <= [email protected] ){ setd( "@ms_"[email protected]_list$[[email protected]]+"_expire" ),0; deletearray getd( "@ms_"[email protected]_list$[[email protected]]+"_list" ); deletearray getd( "@ms_"[email protected]_list$[[email protected]]+"_qty" ); deletearray getd( "@ms_"[email protected]_list$[[email protected]]+"_hunt" ); dispbottom "[Mission # "[email protected]_title$[[email protected]]+"] Mission removed due to expired. "; deletearray @ms_list$[[email protected]],1; deletearray @ms_title$[[email protected]],1; @ms_size--; } } } end; OnRemoveMission: [email protected]_id = getarg(0); [email protected]$ = getarg(1); query_sql( "SELECT `aid`,`cid` FROM `player_mission` WHERE `cid` IN ( SELECT `char_id` FROM `char` WHERE `online` = 1 ) AND `mission_id` = "[email protected]_id+" AND `completion` = '0000-00-00 00:00:00' LIMIT 128",[email protected],[email protected] ); [email protected]_size = getarraysize( [email protected] ); [email protected] = 0; [email protected]_aid = getcharid(3); while( [email protected] < [email protected]_size ){ if( isloggedin( [email protected][[email protected]],[email protected][[email protected]] ) ){ attachrid( [email protected][[email protected]] ); for( [email protected] = @ms_size; [email protected] >= 0; [email protected] ) if( @ms_list$[[email protected]] == ""[email protected]_id ){ message strcharinfo(0),[email protected]$; dispbottom "Please visit Mission NPC to gain latest information."; setd( "@ms_"[email protected]_list$[[email protected]]+"_expire" ),0; deletearray getd( "@ms_"[email protected]_list$[[email protected]]+"_list" ); deletearray getd( "@ms_"[email protected]_list$[[email protected]]+"_qty" ); deletearray getd( "@ms_"[email protected]_list$[[email protected]]+"_hunt" ); deletearray @ms_list$[[email protected]],1; deletearray @ms_title$[[email protected]],1; @ms_size--; break; } detachrid; [email protected]++; } [email protected]++; } attachrid( [email protected]_aid ); dispbottom "Total "[email protected]+" online players affected."; return; // usage : // [email protected] = callsub( OnTime2Str,<time> ); OnTime2Str: [email protected] = getarg(0); [email protected] = ( [email protected] - gettimetick(2) ); [email protected] = ( [email protected] / 3600 ); [email protected] = ( [email protected] % 3600 / 60 ); [email protected] = ( [email protected] % 60 ); if( [email protected] ) return "none"; else return "^777777"+( ( [email protected] )? [email protected]+" hr ":"" ) + ( ( [email protected] || [email protected] )? [email protected]+" min ":"" ) [email protected]+" sec^000000"; // usage : // [email protected]_array_size = callsub( OnExplodeArray,<old string variable>,<new array variable>,<save '0'> ); OnExplodeArray: [email protected] = getarg(2); explode( getarg(0),getarg(0),"|" ); [email protected] = getarraysize( getarg(0) ); if ( [email protected] ) return 0; while( [email protected] < [email protected] ){ if( [email protected] ){ [email protected] = atoi( getelementofarray( getarg(0),[email protected] ) ); if( [email protected] ){ set getelementofarray( getarg(1),[email protected]_size ),[email protected]; [email protected]_size++; } }else{ set getelementofarray( getarg(1),[email protected]_size ),getelementofarray( getarg(0),[email protected] ); [email protected]_size++; } [email protected]++; } return [email protected]_size; // display mission information + optional progress checking OnDisplayMissionInfo: [email protected]_id = getarg(0); [email protected]$ = getarg(1); [email protected]$ = getarg(2); [email protected] = getarg(4); [email protected] = getarg(5); [email protected]_size = getarraysize( getarg(6) ); [email protected]_size = getarraysize( getarg(8) ); [email protected]_job_bitmask = getarg(10); [email protected]_branch_bitmask = getarg(11); [email protected] = getarg(12); [email protected] = getarg(13); [email protected] = getarg(14); [email protected] = getarg(15); [email protected]_size = getarraysize( getarg(16) ); [email protected]_npc_size = getarraysize( getarg(18) ); [email protected]_update$ = getarg(19); [email protected]_delay = getarg(20); [email protected]_progress = getarg(21); if( [email protected]_progress & 8 ) [email protected] = eaclass(); // display mission info mes ""+(( [email protected]_id )? "^FF0000Mission ID # "[email protected]_id:" " )+"^000000"; mes "Title : "+( ( [email protected]$ != "" )?"^777777"[email protected]$:"^FF0000-incomplete-" )+"^000000"; mes "Description : "+( ( [email protected]$ != "" )?"^777777"[email protected]$:"^FF0000-incomplete-" )+"^000000"; mes "Level Range : "+( ( getelementofarray( getarg(3),0 ) )? "^777777"+getelementofarray( getarg(3),0 )+" ~ "+getelementofarray( getarg(3),1 ):"^FF0000-incomplete-" )+"^000000"; if( [email protected]_progress & 1 ) if( BaseLevel >= getelementofarray( getarg(3),0 ) && BaseLevel <= getelementofarray( getarg(3),1 ) ) [email protected]_progress = 1; mes "Repeatable: ^777777"+( ( [email protected] )?"unlimit":[email protected]+" time" )+"^000000"; mes "Redo Delay: ^777777"+( ( [email protected]_delay )?"none":callsub( OnTime2Str,( ( [email protected]_delay * 3600 ) + gettimetick(2) ) ) )+"^000000"; mes "Expire in: ^777777"+( ( [email protected] )?"none":callsub( OnTime2Str,[email protected] ) )+"^000000"; mes " "; [email protected]$ = (( [email protected]_size && [email protected]_size )?"^FF0000incomplete":"^777777none" ); mes "Monster List : "+( ( [email protected]_size )?"":[email protected]$ )+"^000000"; if( [email protected]_size ) for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ){ [email protected]_id = getelementofarray( getarg(6),[email protected] ); [email protected] = getelementofarray( getarg(7),[email protected] ); if( [email protected]_progress & 2 ){ [email protected]_count = getd( "@ms_"[email protected]_id+"_hunt["[email protected]+"]" ); if( [email protected]_count >= [email protected] ){ [email protected]_progress++; [email protected]_color$ = "44EE99"; }else{ [email protected]_color$ = "FF0000"; } } mes " ^777777"[email protected]+" x "+getmonsterinfo( [email protected]_id,MOB_NAME )+" "+( ( [email protected]_progress & 2 )?"^"[email protected]_color$+"(killed "[email protected]_count+")":"" )+"^000000"; } mes "Item List : "+( ( [email protected]_size )?"":[email protected]$ )+"^000000"; if( [email protected]_size ) for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ){ [email protected]_id = getelementofarray( getarg(8),[email protected] ); [email protected] = getelementofarray( getarg(9),[email protected] ); [email protected]_type = getiteminfo( [email protected]_id,2 ); if( [email protected]_progress & 4 ){ [email protected]_count = countitem( [email protected]_id ); if( [email protected]_count >= [email protected] ){ [email protected]_progress++; [email protected]_color$ = "44EE99"; }else{ [email protected]_color$ = "FF0000"; } } mes " ^777777"[email protected]+" x "+getitemname( [email protected]_id )+" "+( ( [email protected]_type == 4 || [email protected]_type == 5 )?"["+getitemslots( [email protected]_id )+"]":"" )+" "+( ( [email protected]_progress & 4 )?"^"[email protected]_color$+"(have "[email protected]_count+")":"" )+"^000000"; } mes " "; mes "Available Job Classes :"; if( [email protected]_job_bitmask ){ deletearray [email protected]_job$; deletearray [email protected]_branch$; [email protected]_job_size = 0; [email protected]_branch_size = 0; for( [email protected] = 0; [email protected] < .base_job_size; [email protected]++ ) if( [email protected]_job_bitmask & ( 1 << [email protected] ) ){ [email protected] = roclass( .base_job[[email protected]] ); [email protected]_job$[[email protected]_job_size] = jobname( [email protected] ); if( [email protected]_progress & 8 && BaseClass == [email protected] ) [email protected]_progress = 1; [email protected]_job_size++; } mes " ^777777"+implode( [email protected]_job$,"," )+" ^000000"; if( [email protected]_branch_bitmask && [email protected]_progress ){ for( [email protected] = 0; [email protected] < .job_branch_size; [email protected]++ ) if( [email protected]_branch_bitmask & ( 1 << [email protected] ) ){ if( [email protected]_progress & 8 && ( [email protected] & .job_branch[[email protected]] ) ) [email protected]_progress++; [email protected]_branch$[[email protected]_branch_size] = .job_branch_name$[[email protected]]; [email protected]_branch_size++; } mes "Inherited: ^777777"+implode( [email protected]_branch$,", " )+" ^000000"; } }else{ mes " ^FF0000-incomplete^000000"; } mes " "; mes "Reward List : "; mes "^777777 ~ Base EXP: "+( ( [email protected] )? [email protected]:"none" )+"^000000"; mes "^777777 ~ Job EXP: "+( ( [email protected] )? [email protected]:"none" )+"^000000"; mes "^777777 ~ Cash: "+( ( [email protected] )? [email protected]:"none" )+"^000000"; mes "^777777 ~ Zeny: "+( ( [email protected] )? [email protected]:"none" )+"^000000"; mes "Reward Item List: "+( ( [email protected]_size )?"":"^777777none" )+"^000000"; if( [email protected]_size ) for( [email protected] = 0; [email protected] < [email protected]_size; [email protected]++ ){ [email protected]_id = getelementofarray( getarg(16),[email protected] ); [email protected]_type = getiteminfo( [email protected]_id,2 ); mes " ^777777 ~ "+getelementofarray( getarg(17),[email protected] )+" x "+getitemname( [email protected]_id )+" "+( ( [email protected]_type == 4 || [email protected]_type == 5 )?"["+getitemslots( [email protected]_id )+"]":"" )+"^000000"; } mes " "; mes "Mission Offered by: "+( ( [email protected]_npc_size )?"":"^FF0000-incomplete" )+"^000000"; if( [email protected]_npc_size ){ if( [email protected]_npc_size >= 2 ) [email protected]_npc$ = "|"+implode( getarg(18),"|" )+"|"; else [email protected]_npc$ = "|"+getarg(18)+"|"; for( [email protected] = 0; [email protected] < .mission_npc_count; [email protected]++ ) if( ( compare( "|"[email protected]_npc$+"|","|"[email protected]+"|" ) ) ){ getmapxy( [email protected]$,[email protected],[email protected],1,.npc_unique_list$[[email protected]] ); [email protected]_npc_name$ = "^777777("[email protected]$+") "; [email protected]_npc_name$ = [email protected]_npc_name$ + .npc_name_list$[[email protected]] + "^000000"; mes " ~ "[email protected]_npc_name$; } mes " "; } if( [email protected]_update$ != "0000-00-00 00:00:00" && [email protected]_update$ != "" ){ mes "Last Mission Update:"; mes "^777777"[email protected]_update$+"^000000"; } if( [email protected]_progress ){ if( [email protected]_progress & 1 && [email protected]_progress ){ dispbottom "[Failed] Your level didnt meet the requirements."; [email protected]_result |= 1; } if( [email protected]_progress & 2 && [email protected]_size != [email protected]_progress ){ dispbottom "[Failed] Your Monsters Hunt didnt meet the requirements."; [email protected]_result |= 2; } if( [email protected]_progress & 4 && [email protected]_size != [email protected]_progress ){ dispbottom "[Failed] Your Items collecting didnt meet the requirements."; [email protected]_result |= 4; } if( [email protected]_progress & 8 && ( [email protected]_progress && [email protected]_progress ) ){ dispbottom "[Failed] Your Class didnt meet the requirements."; [email protected]_result |= 8; } } return [email protected]_result; } // the number behind the NPC name must be NUMBER with range of ( 1 ~ 500 ) // the number should stay the same for eternity, if you change it frequently, it might affect your missions for each NPC. // ( to conclude, once you assigned the number, dont change it for the sake of your mission board ... ) prontera,151,171,4 duplicate(mission_board) Mission A#1 837 prontera,154,174,4 duplicate(mission_board) Mission B#2 837 prontera,156,176,4 duplicate(mission_board) Mission C#3 837 prontera,159,179,4 duplicate(mission_board) Mission D#4 837 prontera,151,161,4 duplicate(mission_board) Mission E#5 837 prontera,154,164,4 duplicate(mission_board) Mission F#6 837 prontera,156,166,4 duplicate(mission_board) Mission G#7 837 prontera,159,169,4 duplicate(mission_board) Mission H#8 837
  2. Hi need help... the current rathena custom script allows a level 99 assasin to directly promote himself to a guillotine cross without going throught the asssasin cross job... can you help me modify the script so that all 2nd job should undergo 3rd job before going towards the 4th job? thanks //===== rAthena Script ======================================= //= Job Master //===== By: ================================================== //= Euphy //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= A fully functional job changer. //===== Additional Comments: ================================= //= 1.0 Initial script. //= 1.1 Fixed reset on Baby job change. //= 1.2 Added Expanded Super Novice support and initial Kagerou/Oboro support. //= 1.3 Kagerou/Oboro added. //= 1.4 Rebellion added. //============================================================ prontera,153,193,6 script Job Master 123,{ function Job_Menu; mes "[Job Master]"; if (Class > Job_Soul_Linker) { mes "No more jobs are available."; close; } if (checkfalcon() || checkcart() || checkriding() || ismounting()) { mes "Please remove your " + ((checkfalcon()) ? "falcon" : "") + ((checkcart()) ? "cart" : "") + ((checkriding()) ? "Peco" : "") + ((ismounting()) ? "mount" : "") + " before proceeding."; close; } if (.SkillPointCheck && SkillPoint) { mes "Please use all your skill points before proceeding."; close; } [email protected] = eaclass(); [email protected] = ((.ThirdClass) ? roclass([email protected]&EAJ_UPPERMASK) : Class); if ([email protected] >= Job_Knight && [email protected] <= Job_Crusader2) { if (BaseLevel < .Rebirth[0] || JobLevel < .Rebirth[1]) { [email protected] = .Rebirth[0] - BaseLevel; [email protected] = .Rebirth[1] - JobLevel; mes "You need " + (([email protected] > 0) ? [email protected] + " more base levels " + (([email protected] > 0) ? "/ " : "") : "") + (([email protected] > 0) ? [email protected] + " more job levels " : "") + "to continue."; close; } if (Class > Job_Thief) { mes "Switch to third class?"; next; Job_Menu(roclass([email protected]|EAJL_THIRD)); close; } while(1) { mes "Select an option."; next; [email protected] = select(" ~ ^0055FFRebirth^000000:" + ((.ThirdClass) ? " ~ ^FF0000Third Class^000000" : "") + ": ~ ^777777Cancel^000000"); if ([email protected] == 3) close; mes "[Job Master]"; mes "Are you sure?"; next; Job_Menu((([email protected] == 1) ? Job_Novice_High : roclass([email protected]|EAJL_THIRD))); mes "[Job Master]"; } } [email protected] = roclass([email protected]|EAJL_2_1); [email protected] = roclass([email protected]|EAJL_2_2); if (([email protected]&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE) setarray [email protected][0], roclass([email protected]|EAJL_THIRD), 99; if (Class == Job_Ninja || Class == Job_Gunslinger) setarray [email protected][0], [email protected], 70; if ([email protected][0] && .SecondExpanded) { if (BaseLevel < .Rebirth[0] || JobLevel < [email protected][1]) { [email protected] = .Rebirth[0] - BaseLevel; [email protected] = [email protected][1] - JobLevel; mes "You need " + (([email protected] > 0) ? [email protected] + " more base levels " + (([email protected] > 0) ? "/ " : "") : "") + (([email protected] > 0) ? [email protected] + " more job levels " : "") + "to continue."; close; } mes "Switch to " + jobname([email protected][0]) + "?"; next; Job_Menu([email protected][0]); close; } if ([email protected]&EAJL_2) if ([email protected]&(EAJL_UPPER|EAJL_BABY) || roclass([email protected]|EAJL_UPPER) == -1) { mes "No more jobs are available."; close; } if (([email protected]&EAJ_BASEMASK) == EAJ_NOVICE) { if (JobLevel < .JobReq[0]) mes "A job level of " + .JobReq[0] + " is required to change into the 1st Class."; else if (Class == Job_Novice_High && .LastJob && lastJob) { mes "Switch classes now?"; next; Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER)); } else { switch(Class) { case Job_Novice: Job_Menu( Job_Swordman, Job_Mage, Job_Archer, Job_Acolyte, Job_Merchant, Job_Thief, Job_SuperNovice, Job_Taekwon, Job_Gunslinger, Job_Ninja, Job_Baby ); break; case Job_Novice_High: Job_Menu( Job_Swordman_High, Job_Mage_High, Job_Archer_High, Job_Acolyte_High, Job_Merchant_High, Job_Thief_High ); break; case Job_Baby: Job_Menu( Job_Baby_Swordman, Job_Baby_Mage, Job_Baby_Archer, Job_Baby_Acolyte, Job_Baby_Merchant, Job_Baby_Thief, Job_Super_Baby ); break; default: mes "An error has occurred."; break; } } close; } if (roclass([email protected]|EAJL_2_1) == -1 || roclass([email protected]|EAJL_2_2) == -1) mes "No more jobs are available."; else if (!([email protected]&EAJL_2) && JobLevel < .JobReq[1]) mes "A job level of " + .JobReq[1] + " is required to change into the 2nd Class."; else if (.LastJob && lastJob && ([email protected]&EAJL_UPPER)) { mes "Switch classes now?"; next; Job_Menu(lastJob + Job_Novice_High); } else Job_Menu([email protected], [email protected]); close; function Job_Menu { while(1) { if (getargcount() > 1) { mes "Select a job."; [email protected]$ = ""; for ([email protected] = 0; [email protected] < getargcount(); [email protected]++) [email protected]$ = [email protected]$ + " ~ " + jobname(getarg([email protected])) + ":"; [email protected]$ = [email protected]$+" ~ ^777777Cancel^000000"; next; [email protected] = getarg(select([email protected]$) - 1, 0); if ([email protected]) close; if (([email protected] == Job_SuperNovice || [email protected] == Job_Super_Baby) && BaseLevel < .SNovice) { mes "[Job Master]"; mes "A base level of " + .SNovice + " is required to turn into a " + jobname([email protected]) + "."; close; } mes "[Job Master]"; mes "Are you sure?"; next; } else [email protected] = getarg(0); if (select(" ~ Change into ^0055FF" + jobname([email protected]) + "^000000 class: ~ ^777777" + ((getargcount() > 1) ? "Go back" : "Cancel") + "^000000") == 1) { mes "[Job Master]"; mes "You are now " + callfunc("F_InsertArticle", jobname([email protected])) + "!"; if ([email protected] == Job_Novice_High && .LastJob) lastJob = Class; jobchange [email protected]; if ([email protected] == Job_Novice_High) resetlvl(1); else if ([email protected] == Job_Baby) { resetstatus; resetskill; set SkillPoint,0; } specialeffect2 EF_ANGEL2; specialeffect2 EF_ELECTRIC; if (.Platinum) callsub Get_Platinum; close; } if (getargcount() == 1) return; mes "[Job Master]"; } end; } Get_Platinum: skill "NV_FIRSTAID",1,0; switch (BaseClass) { case Job_Novice: if (Class != Job_SuperNovice) skill "NV_TRICKDEAD",1,0; break; case Job_Swordman: skill "SM_MOVINGRECOVERY",1,0; skill "SM_FATALBLOW",1,0; skill "SM_AUTOBERSERK",1,0; break; case Job_Mage: skill "MG_ENERGYCOAT",1,0; break; case Job_Archer: skill "AC_MAKINGARROW",1,0; skill "AC_CHARGEARROW",1,0; break; case Job_Acolyte: skill "AL_HOLYLIGHT",1,0; break; case Job_Merchant: skill "MC_CARTREVOLUTION",1,0; skill "MC_CHANGECART",1,0; skill "MC_LOUD",1,0; break; case Job_Thief: skill "TF_SPRINKLESAND",1,0; skill "TF_BACKSLIDING",1,0; skill "TF_PICKSTONE",1,0; skill "TF_THROWSTONE",1,0; break; default: break; } switch (BaseJob) { case Job_Knight: skill "KN_CHARGEATK",1,0; break; case Job_Priest: skill "PR_REDEMPTIO",1,0; break; case Job_Wizard: skill "WZ_SIGHTBLASTER",1,0; break; case Job_Blacksmith: skill "BS_UNFAIRLYTRICK",1,0; skill "BS_GREED",1,0; break; case Job_Hunter: skill "HT_PHANTASMIC",1,0; break; case Job_Assassin: skill "AS_SONICACCEL",1,0; skill "AS_VENOMKNIFE",1,0; break; case Job_Crusader: skill "CR_SHRINK",1,0; break; case Job_Monk: skill "MO_KITRANSLATION",1,0; skill "MO_BALKYOUNG",1,0; break; case Job_Sage: skill "SA_CREATECON",1,0; skill "SA_ELEMENTWATER",1,0; skill "SA_ELEMENTGROUND",1,0; skill "SA_ELEMENTFIRE",1,0; skill "SA_ELEMENTWIND",1,0; break; case Job_Rogue: skill "RG_CLOSECONFINE",1,0; break; case Job_Alchemist: skill "AM_BIOETHICS",1,0; break; case Job_Bard: skill "BA_PANGVOICE",1,0; break; case Job_Dancer: skill "DC_WINKCHARM",1,0; break; default: break; } return; OnInit: setarray .Rebirth[0],99,50; // Minimum base level, job level to rebirth OR change to third class setarray .JobReq[0],10,40; // Minimum job level to turn into 1st class, 2nd class .ThirdClass = 1; // Enable third classes? (1: yes / 0: no) .SecondExpanded = 1; // Enable new expanded second classes: Ex. Super Novice, Kagerou/Oboro, Rebellion? (1: yes / 0: no) .SNovice = 45; // Minimum base level to turn into Super Novice .LastJob = 1; // Enforce linear class changes? (1: yes / 0: no) .SkillPointCheck = 1; // Force player to use up all skill points? (1: yes / 0: no) .Platinum = 1; // Get platinum skills automatically? (1: yes / 0: no) end; }
  3. oh!! thanks a lot.. that makes sense.. For custom Item/Headgears https://rathena.org/wiki/Custom_Items For custom monster https://rathena.org/wiki/Custom_Mobs For scripting npc https://rathena.org/wiki/Scripting For installation https://rathena.org/wiki/Category:Installation For version/episode There's no specific ep or version here in rA. will take time to read. thank you how about my client thing? client version? where do i look it up? my current rathena server have a job changer for rebellion but once it job changes it's job becomes a poring. hahaha
  4. Hi! I have paid a hosting site to host and install rathena server for me.. im a noob but i want to learn to customized and improve my server... i have been reading some old post about getting the version but it seems i cant get any decent information on how to check... : ( pls help
  5. noob question.. need instruction with the Freebies NPC - Version 3?
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.