Jump to content
  • 0

how to make SQL for Euphys Mission QUest


Question

Posted

i really dont know how to do it please help me

thnx in advance

 

i have the script but it shows like this


/*
	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,{
.@gm_level = getgmlevel();
.@npc_name$ = strnpcinfo(1);
.@mission_npc_num = atoi( strnpcinfo(2) );
 
// check npc if it's a valid npc with number 1 ~ 500
if( !.@mission_npc_num || .@mission_npc_num > 500 ){
	message strcharinfo(0),"This NPC isnt working, invalid <'"+strnpcinfo(2)+"'>";
	disablenpc strnpcinfo(0);
	end;
}
 
// to assign offset index.
.@mission_npc_num--;
query_sql( "SELECT COUNT(`id`) FROM `mission_board` WHERE `npc_id` LIKE '%|"+.@mission_npc_num+"|%' ",.@mission_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 '%|"+.@mission_npc_num+"|%' ) AND `cid` = "+getcharid(0)+" AND `completion` = '0000-00-00 00:00:00' ",.@id,.@mission_id,.@mob_hunt$,.@expire );
.@current_mission_size = getarraysize( .@id );
 
mes "^0055FF[ "+.@npc_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( ( .@current_mission_size )?"Submit Mission":"",
				( .@current_mission_size < .max_mission_per_char )?"Pick Mission":"",
				( .@current_mission_size )?"Drop Mission":"",
				( .@gm_level < .gm_level || !.@mission_count )?"":"^FF0000[GM] Update Mission^000000",
				( .@gm_level < .gm_level )?"":"^FF0000[GM] Setup Mission^000000",
				( .@gm_level < .gm_level || !.@mission_count  )?"":"^FF0000[GM] Delete Mission^000000" ) ){
	case 1:
		.@current_time = gettimetick(2);
		query_sql( "SELECT `id`,`title`,`min_lv`,`max_lv` FROM `mission_board` WHERE `npc_id` LIKE '%|"+.@mission_npc_num+"|%' AND `id` IN ( SELECT `mission_id` FROM `player_mission` WHERE `cid` = "+getcharid(0)+" AND `completion` = '0000-00-00 00:00:00' )",.@mission_id,.@title$,.@min_lv,.@max_lv );
		.@size = getarraysize( .@mission_id );
		for( .@i = 0; .@i < .@size; .@i++ ){
			if( .@expire[.@i] && .@expire[.@i] < .@current_time )
				.@submit_menu$ = .@submit_menu$ + "^FF0000[Expired]^000000";
			.@submit_menu$ = .@submit_menu$ + "["+.@min_lv[.@i]+"~"+.@max_lv[.@i]+"] "+.@title$[.@i] +":";
		}
		.@i = select( .@submit_menu$ ) - 1;
 
		if( .@expire[.@i] && .@expire[.@i] < .@current_time ){
			dispbottom " ~ Mission expired "+callsub( OnTime2Str,( gettimetick(2) + ( .@current_time - .@expire[.@i] ) ) )+" ago.";
			dispbottom " ~ You may drop this mission.";
			close;
		}
 
		// get mission data from sql
		query_sql( "SELECT * FROM `mission_board` WHERE `id` = "+.@mission_id[.@i]+" LIMIT 1",
			.@mission_id,
			.@title$,
			.@description$,
			.@mob_list$,
			.@mob_qty$,
			.@item_list$,
			.@item_qty$,
			.@base_job_bitmask,
			.@job_branch_bitmask,
			.@min_lv,
			.@max_lv,
			.@repeatable,
			.@timelimit,
			.@reward_list$,
			.@reward_qty$,
			.@baseexp,
			.@jobexp,
			.@zeny,
			.@cash,
			.@aid,
			.@name$,
			.@time_update$,
			.@npc_id$,
			.@redo_delay
		);
 
		// explode all saved strings to array value.
		.@monster_size = callsub( OnExplodeArray,.@mob_list$,.@monster_list,0 );
		if( .@monster_size )
			callsub( OnExplodeArray,.@mob_qty$,.@monster_qty,0 );
 
		.@item_size = callsub( OnExplodeArray,.@item_list$,.@item_list,0 );
		if( .@item_size )
			callsub( OnExplodeArray,.@item_qty$,.@item_qty,0 );
 
		.@reward_size = callsub( OnExplodeArray,.@reward_list$,.@reward_list,0 );
		if( .@reward_size )
			callsub( OnExplodeArray,.@reward_qty$,.@reward_qty,0 );
 
		.@selected_npc_size = callsub( OnExplodeArray,.@npc_id$,.@selected_npc_array$,1 );
 
		setarray .@level_range,.@min_lv,.@max_lv;
 
		// display the information of mission
		.@result = callsub( OnDisplayMissionInfo,
					.@mission_id,
					.@title$,
					.@description$,
					.@level_range,
					.@repeatable,
					.@expire[.@i],
					.@monster_list,
					.@monster_qty,
					.@item_list,
					.@item_qty,
					.@base_job_bitmask,
					.@job_branch_bitmask,
					.@baseexp,
					.@jobexp,
					.@cash,
					.@zeny,
					.@reward_list,
					.@reward_qty,
					.@selected_npc_array$,
					.@time_update$,
					.@redo_delay,
					1|2|4|8
				);
 
		// submit mission or not
		if( .@result ){
			message strcharinfo(0),"Failed to submit this mission.";
		}else{
			next;
			if( select( "Submit Completed Mission","Cancel" ) == 1 ){
				for( .@ms = ( @ms_size - 1 ); .@ms >= 0; .@ms-- )
					if( @ms_list$[.@ms] == ""+.@mission_id ){
						mes "^0055FF[ "+.@npc_name$+" ]^000000";
						query_sql( "UPDATE `player_mission` SET `completion` = NOW() WHERE `cid` = "+getcharid(0)+" AND `mission_id` = "+.@mission_id +" AND `completion` = '0000-00-00 00:00:00'" );
						mes "Mission accomplished.";
						@ms_size--;
 
						// clear requirement.
						setd( "@ms_"+.@mission_id+"_expire" ),0;
						deletearray getd( "@ms_"+.@mission_id+"_list" );
						deletearray getd( "@ms_"+.@mission_id+"_qty" );
						deletearray getd( "@ms_"+.@mission_id+"_hunt" );
						if( .@item_size )
							for( .@i = 0; .@i < .@item_size; .@i++ ){
								// debugmes getitemname( .@item_list[.@i] )+" - "+.@item_qty[.@i];
								delitem .@item_list[.@i],.@item_qty[.@i];
							}
 
						mes "Gained some mission's rewards.";
						// rewards
						getexp .@baseexp,.@jobexp;
						if( .@reward_size )
							for( .@i = 0; .@i < .@reward_size; .@i++ )
								getitem .@reward_list[.@i],.@reward_qty[.@i];
						#CASHPOINTS += .@cash;
						Zeny += .@zeny;
						break;
					}
				mes "Something went wrong ..";
			}
		}
		break;
	case 2:
		// get info from SQL.
		do{
			mes "^0055FF[ "+.@npc_name$+" ]^000000";
			deletearray .@id;
			query_sql( "SELECT `id`,`title`,`min_lv`,`max_lv` FROM `mission_board` WHERE `npc_id` LIKE '%|"+.@mission_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 "+.@offset,.@id,.@title$,.@min_lv,.@max_lv );
			.@offset += .max_page_size;
			.@size = getarraysize( .@id );
			if( !.@size ){
				mes "There are no other available missions to pick.";
				close;
 
			}else{
				mes "Pick a mission.";
				.@mission_menu$ = "";
				for( .@i = 0; .@i < .@size; .@i++ )
					.@mission_menu$ = .@mission_menu$ + "["+.@min_lv[.@i]+"~"+.@max_lv[.@i]+"] "+.@title$[.@i] +":";
			}
			next;
			.@i = select( .@mission_menu$+ ( ( .@size < .max_page_size )?"":"- next page" ) ) - 1;
		}while( .@i == .@size );
 
		query_sql( "SELECT * FROM `mission_board` WHERE `id` = "+.@id[.@i]+" LIMIT 1",
			.@mission_id,
			.@title$,
			.@description$,
			.@mob_list$,
			.@mob_qty$,
			.@item_list$,
			.@item_qty$,
			.@base_job_bitmask,
			.@job_branch_bitmask,
			.@min_lv,
			.@max_lv,
			.@repeatable,
			.@timelimit,
			.@reward_list$,
			.@reward_qty$,
			.@baseexp,
			.@jobexp,
			.@zeny,
			.@cash,
			.@aid,
			.@name$,
			.@time_update$,
			.@npc_id$,
			.@redo_delay
		);
 
		// explode all saved strings to array value.
		.@monster_size = callsub( OnExplodeArray,.@mob_list$,.@monster_list,0 );
		.@monster_size = callsub( OnExplodeArray,.@mob_qty$,.@monster_qty,0 );
 
		.@item_size = callsub( OnExplodeArray,.@item_list$,.@item_list,0 );
		.@item_size = callsub( OnExplodeArray,.@item_qty$,.@item_qty,0 );
 
		.@reward_size = callsub( OnExplodeArray,.@reward_list$,.@reward_list,0 );
		.@reward_size = callsub( OnExplodeArray,.@reward_qty$,.@reward_qty,0 );
 
		.@selected_npc_size = callsub( OnExplodeArray,.@npc_id$,.@selected_npc_array$,1 );
 
		setarray .@level_range,.@min_lv,.@max_lv;
 
		// display the information of mission
		.@result = callsub( OnDisplayMissionInfo,
				.@mission_id,
				.@title$,
				.@description$,
				.@level_range,
				.@repeatable,
				( .@timelimit + gettimetick(2) ),
				.@monster_list,
				.@monster_qty,
				.@item_list,
				.@item_qty,
				.@base_job_bitmask,
				.@job_branch_bitmask,
				.@baseexp,
				.@jobexp,
				.@cash,
				.@zeny,
				.@reward_list,
				.@reward_qty,
				.@selected_npc_array$,
				.@time_update$,
				.@redo_delay,
				1|8
		);
 
		// check completed how many times.
		if ( .@repeatable ) {
			query_sql "select count(id) from player_mission where mission_id = "+ .@id[.@i] +" and completion != '0000-00-00 00:00:00' and cid = "+ getcharid(0), .@mission_completed;
			if( .@mission_completed >= .@repeatable ) {
				next;
				mes "^0055FF[ "+.@npc_name$+" ]^000000";
				mes " ";
				mes "You cant pick this mission, you have mission completion reach the max repeatable attempt of "+.@mission_completed+" times.";
				close;
			}
		}

		if ( .@redo_delay ) {
			query_sql "select timestampdiff( hour, completion, now() ), unix_timestamp( date_add( completion, interval "+ .@redo_delay +" hour ) ) from player_mission where cid = "+ getcharid(0) +" and mission_id = "+ .@id[.@i] +" order by completion desc limit 1", .@diff_delay, .@deny_time;
			if ( .@diff_delay < .@redo_delay ) {
				next;
				mes "^0055FF[ "+.@npc_name$+" ]^000000";
				mes " ";
				mes "You cant pick this mission, you have mission redo delay isnt finish yet.";
				mes "^FF0000"+ callfunc( "Time2Str", .@deny_time ) +"^000000";
				close;
			}
		}

		if( .@result ){
			message strcharinfo(0),"Failed to pick this mission.";
		}else{
			if( select( "Pick Mission","Cancel" ) == 1 ){
				query_sql( "INSERT INTO `player_mission` VALUES ( "+gettimetick(2)+","+.@mission_id+","+getcharid(3)+","+getcharid(0)+",'"+escape_sql( strcharinfo(0) )+"','',"+( ( .@timelimit )? ( .@timelimit + gettimetick(2) ) : 0 )+",NOW(),'0000-00-00 00:00:00' );" );
				message strcharinfo(0),"Picked Mission # "+.@mission_id;
 
				@ms_list$[ @ms_size ] = ""+.@mission_id;
				@ms_title$[ @ms_size ] = ""+.@title$;
				@ms_size++;
 
				copyarray getd( "@ms_"+.@mission_id+"_list[0]" ),.@monster_list[0],.@monster_size;
				copyarray getd( "@ms_"+.@mission_id+"_qty[0]" ),.@monster_qty[0],.@monster_size;
				deletearray getd( "@ms_"+.@mission_id+"_hunt" );
				if ( .@timelimit ) {
					setd( "@ms_"+.@mission_id+"_expire" ),( .@timelimit + gettimetick(2) );
					addtimer ( .@timelimit * 1000 ),.npc_name$+"::OnTimeCheck";
				}
			}
		}
		break;
	case 3:
		query_sql( "SELECT `id`,`title`,`min_lv`,`max_lv` FROM `mission_board` WHERE `npc_id` LIKE '%|"+.@mission_npc_num+"|%' AND `id` IN ( SELECT `mission_id` FROM `player_mission` WHERE `cid` = "+getcharid(0)+" AND `completion` = '0000-00-00 00:00:00' )",.@id,.@title$,.@min_lv,.@max_lv );
		.@id_size = getarraysize( .@id );
		for( .@i = 0; .@i < .@id_size; .@i++ )
			.@mission_menu$ = .@mission_menu$ + "["+.@min_lv[.@i]+"~"+.@max_lv[.@i]+"] "+.@title$[.@i] +":";
		mes "^0055FF[ "+.@npc_name$+" ]^000000";
		mes "Pick a Mission to remove.";
		next;
		.@i = select( .@mission_menu$ ) - 1;
		mes "^0055FF[ "+.@npc_name$+" ]^000000";
		mes "Confirm remove ^0055FFMission # "+.@id[.@i]+"^000000?";
		mes "Title : ^0055FF"+.@title$[.@i]+"^000000";
		mes "^777777( this cant be un-done )^000000";
		if( select( "nope","Confirm" ) == 2 ){
			message strcharinfo(0),"Dropped Mission # "+.@id[.@i];
			query_sql( "DELETE FROM `player_mission` WHERE `mission_id` = "+.@id[.@i]+" AND `cid` = "+getcharid(0)+" AND `completion` = '0000-00-00 00:00:00'" );
			setd( "@ms_"+.@id[.@i]+"_expire" ),0;
			deletearray getd( "@ms_"+.@id[.@i]+"_list" );
			deletearray getd( "@ms_"+.@id[.@i]+"_qty" );
			deletearray getd( "@ms_"+.@id[.@i]+"_hunt" );
			for( .@ms = 0; .@ms < @ms_size; .@ms++ )
				if( ""+.@id[.@i] == @ms_list$[.@ms] ){
					deletearray @ms_list$[.@ms],1;
					deletearray @ms_title$[.@ms],1;
					@ms_size--;
					break;
				}
		}
		break;
	case 4:
		// get info from SQL.
		do{
			mes "^0055FF[ "+.@npc_name$+" ]^000000";
			deletearray .@id;
			query_sql( "SELECT `id`,`title`,`min_lv`,`max_lv` FROM `mission_board` WHERE `npc_id` LIKE '%|"+.@mission_npc_num+"|%' LIMIT "+.max_page_size+" OFFSET "+.@offset,.@id,.@title$,.@min_lv,.@max_lv );
			.@offset += .max_page_size;
			.@size = getarraysize( .@id );
			if( !.@size ){
				mes "There are no available mission to update.";
				close;
 
			}else{
				mes "Pick a mission.";
				.@mission_menu$ = "";
				for( .@i = 0; .@i < .@size; .@i++ )
					.@mission_menu$ = .@mission_menu$ + "["+.@min_lv[.@i]+"~"+.@max_lv[.@i]+"] "+.@title$[.@i] +":";
			}
			next;
			.@i = select( .@mission_menu$+ ( ( .@size < .max_page_size )?"":"- next page" ) ) - 1;
		}while( .@i == .@size );
		query_sql( "SELECT * FROM `mission_board` WHERE `id` = "+.@id[.@i],
			.@new_mission_id,
			.@title$,
			.@description$,
			.@mob_list$,
			.@mob_qty$,
			.@item_list$,
			.@item_qty$,
			.@base_job_bitmask,
			.@job_branch_bitmask,
			.@min_lv,
			.@max_lv,
			.@repeatable,
			.@timelimit,
			.@reward_list$,
			.@reward_qty$,
			.@baseexp,
			.@jobexp,
			.@zeny,
			.@cash,
			.@aid,
			.@name$,
			.@time_update$,
			.@npc_id$,
			.@redo_delay
		);
		// explode all saved strings to array value.
		.@monster_size = callsub( OnExplodeArray,.@mob_list$,.@monster_list,0 );
		.@monster_size = callsub( OnExplodeArray,.@mob_qty$,.@monster_qty,0 );
 
		.@item_size = callsub( OnExplodeArray,.@item_list$,.@item_list,0 );
		.@item_size = callsub( OnExplodeArray,.@item_qty$,.@item_qty,0 );
 
		.@reward_size = callsub( OnExplodeArray,.@reward_list$,.@reward_list,0 );
		.@reward_size = callsub( OnExplodeArray,.@reward_qty$,.@reward_qty,0 );
 
		.@selected_npc_size = callsub( OnExplodeArray,.@npc_id$,.@selected_npc_array$,1 );
 
		setarray .@level_range,.@min_lv,.@max_lv;
 
	case 5:
		do{
			mes "^0055FF[ "+.@npc_name$+" ]^000000";
			// display the information of mission
			callsub( OnDisplayMissionInfo,
				.@new_mission_id,
				.@title$,
				.@description$,
				.@level_range,
				.@repeatable,
				( .@timelimit + gettimetick(2) ),
				.@monster_list,
				.@monster_qty,
				.@item_list,
				.@item_qty,
				.@base_job_bitmask,
				.@job_branch_bitmask,
				.@baseexp,
				.@jobexp,
				.@cash,
				.@zeny,
				.@reward_list,
				.@reward_qty,
				.@selected_npc_array$,
				.@time_update$,
				.@redo_delay,
				0
			);
 
			// check if required info complete for setup mission
			.@incomplete = 0;
			if( .@title$ == "" ) .@incomplete |= 1;
			if( .@description$ == "" ) .@incomplete |= 2;
			if( !.@monster_size && !.@item_size ) .@incomplete |= 4;
			if( getarraysize( .@level_range ) != 2 || !.@base_job_bitmask || !.@job_branch_bitmask ) .@incomplete |= 8;
			if( !.@reward_size && !.@baseexp && !.@jobexp && !.@cash && !.@zeny ) .@incomplete |= 16;
			if( !.@selected_npc_size ) .@incomplete |= 32;
 
			.@main_option = select( "Edit Title "+(( .@incomplete & 1 )?"^FF0000-incomplete-^000000":"" ),
							"Edit Description "+(( .@incomplete & 2 )?"^FF0000-incomplete-^000000":"" ),
							"Edit Monster List "+(( .@incomplete & 4 )?"^FF0000-incomplete-^000000":( ( !.@monster_size )?"^777777-none-^000000":"" )),
							"Edit Item List "+(( .@incomplete & 4 )?"^FF0000-incomplete-^000000":( ( !.@item_size )?"^777777-none-^000000":"" )),
							"Edit Class/Level Limitation "+(( .@incomplete & 8 )?"^FF0000-incomplete-^000000":"" ),
							"Edit Time/Repeat/Mission Limitation ",
							"Edit Reward List "+(( .@incomplete & 16 )?"^FF0000-incomplete-^000000":"" ),
							"Edit NPC Limitation "+(( .@incomplete & 32 )?"^FF0000-incomplete-^000000":"" ),
							( .@incomplete )?"":"^0055FF - Complete Setup Mission^000000" );
			next;				
			switch( .@main_option ){
				case 1:
					mes "^0055FF[ "+.@npc_name$+" ]^000000";
					mes "Enter Title";
					mes "^777777( Length: 4 ~ 30 )^000000";
					while( input( .@title$,4,30 ) );
					.@input_result = replacestr( .@title$,":"," " );
					break;
				case 2:
					.@description$ = "";
					do{
						mes "^0055FF[ "+.@npc_name$+" ]^000000";
						mes "Enter Description";
						mes "^777777( Length: 4 ~ 255 )^000000";
						mes " ";
						mes "^0055FF"+.@description$+"^000000";
						.@length = getstrlen( .@description$ );
						do{
							.@input_result = input( .@temp_input$,4,255 );
							if( .@input_result )
								message strcharinfo(0),"Input length must between 4 ~ 255";
						}while( .@input_result );
						.@description$ = .@description$ + " "+ .@temp_input$;
						mes "^0055FF"+.@temp_input$+"^000000";
						.@length = getstrlen( .@description$ );
						next;
					}while( select( ( .@length >= 255 )?"":"add more ^777777( left "+( 255 - .@length )+" words )^000000","-back" ) == 1 );
					.@description$  = replacestr( .@description$,":"," " );
					break;
				case 3:
					if( .@new_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[ "+.@npc_name$+" ]^000000";
						mes "Monster List:";
						if( .@monster_size ){
							.@mob_menu$ = "";
							.@current_mob_list$ = "|";
							deletearray .@current_mob$;
							for( .@i = 0; .@i < .@monster_size; .@i++ ){
								.@mob_name$ = getmonsterinfo( .@monster_list[.@i],MOB_NAME );
								.@mob_menu$ = .@mob_menu$ + .@monster_qty[.@i] +" x "+.@mob_name$ +":";
								mes " ^777777 ~ "+.@monster_qty[.@i]+" x "+.@mob_name$+"^000000";
								.@current_mob_list$ = .@current_mob_list$ + .@monster_list[.@i] +"|";
							}
 
						}else{
							mes " ^777777 ~ none ^000000";
						}
						mes " ";
						.@option = select( ( .@monster_size >= .max_required_monster )?"":"Add Monster",( .@monster_size )?"Delete Monster":"","- Back" );
						switch( .@option ){
							case 1:
								mes "Enter Monster ID";
								do{
									input .@mob_id;
									if( !.@mob_id ) break;
									.@mob_name$ = getmonsterinfo( .@mob_id,MOB_NAME );
								}while( .@mob_name$ == "null" );
								if( .@mob_name$ != "null" && .@mob_id ){
									mes "How many "+.@mob_name$+" need to hunt ?";
									input .@amount,0,30000;
									if( .@amount ){
										if( compare( "|"+.@current_mob_list$+"|","|"+.@mob_id+"|" ) ){
											for( .@i = 0; .@i < .@monster_size; .@i++ )
												if( .@monster_list[.@i] == .@mob_id ){
													.@monster_qty[.@i] += .@amount;
													break;
												}
 
										}else{
											.@monster_list[.@monster_size] = .@mob_id;
											.@monster_qty[.@monster_size] = .@amount;
											.@monster_size++;
										}
									}
								}
								break;
							case 2:
								mes "^0055FF[ "+.@npc_name$+" ]^000000";
								mes "Pick a Monster to Remove.";
								.@i = select( .@mob_menu$+"- Back" ) - 1;
								if( .@i < .@monster_size ){
									deletearray .@monster_list[.@i],1;
									deletearray .@monster_qty[.@i],1;
									.@monster_size--;
								}
							default: break;
						}
						if( .@option < 3 ) next;
					}while( .@option < 3 );
					break;
				case 4:
					do{
						mes "^0055FF[ "+.@npc_name$+" ]^000000";
						mes "Required Item List: ";
						if( .@item_size ){
							.@item_menu$ = "";
							.@current_item_list$ = "|";
							deletearray .@current_item$;
							for( .@i = 0; .@i < .@item_size; .@i++ ){
								.@item_name$ = getitemname( .@item_list[.@i] );
								.@item_menu$ = .@item_menu$ + .@item_qty[.@i] +"x "+.@item_name$ +":";
								mes " ^777777 ~ "+.@item_qty[.@i]+" x "+.@item_name$+"^000000";
								.@current_item_list$ = .@current_item_list$ + .@item_list[.@i] + "|";
							}
 
						}else{
							mes " ^777777 ~ none ^000000";
						}
						mes " ";
						.@option = select( ( .@item_size >= .max_required_item )?"":"Add Item",( .@item_size )?"Delete Item":"","- Back" );
						switch( .@option ){
							case 1:
								do{
									input .@item_id;
									if( !.@item_id ) break;
									.@item_name$ = getitemname( .@item_id );
								}while( .@item_name$ == "null" || .@item_name$ == "" );
								if( .@item_id && .@item_name$ != "null" && .@item_name$ != "" ){
									mes "How many "+.@item_name$+" need to collect ?";
									input .@amount,0,30000;
									if( .@amount ){
										if( compare( "|"+.@current_item_list$+"|","|"+.@item_id+"|" ) ){
											for( .@i = 0; .@i < .@item_size; .@i++ )
												if( .@item_list[.@i] == .@item_id ){
													.@item_qty[.@i] += .@amount;
													break;
												}
										}else{
											.@item_list[.@item_size] = .@item_id;
											.@item_qty[.@item_size] = .@amount;
											.@item_size++;
										}
									}
								}
								break;
							case 2:
								mes "^0055FF[ "+.@npc_name$+" ]^000000";
								mes "Pick an Item to Remove.";
								.@i = select( .@item_menu$+" - Back" ) - 1;
								if( .@i < .@item_size ){
									mes "Removed "+.@item_qty[.@i]+" x "+getitemname( .@item_list[.@i] );
									deletearray .@item_list[.@i],1;
									deletearray .@item_qty[.@i],1;
									.@item_size--;
								}
							default: break;
						}
						if( .@option < 3 ) next;
					}while( .@option < 3 );
					break;
				case 5: // class limitation
					if( !.@base_job_bitmask ){
						// enable all job by default.
						for( .@i = 0; .@i < .base_job_size; .@i++ ){
							.@bitmask_value = ( 1 << .@i );
							.@base_job_bitmask |= .@bitmask_value;
						}
						// enable all inherited classes by default.
						for( .@i = 0; .@i < .job_branch_size; .@i++ ){
							.@bitmask_value = ( 1 << .@i );
							.@job_branch_bitmask |= .@bitmask_value;
						}
					}
 
					do{
						mes "^0055FF[ "+.@npc_name$+" ]^000000";
						mes "Level Range : "+( ( .@level_range[1] )? "^777777"+.@level_range[0]+" ~ "+.@level_range[1]:"^FF0000-incomplete-" )+"^000000";
						mes "Available Job Setting";
						if( .@base_job_bitmask ){
							for( .@i = 0; .@i < .base_job_size; .@i++ )
								if( .@base_job_bitmask & ( 1 << .@i ) )
									mes " ^777777 ~ "+jobname( roclass( .base_job[.@i] ) )+" ^000000";
						}else{
							mes " ^FF0000 -incomplete-^000000";
						}
						mes " ";
						mes "Inherited Branch Setting";
						if( .@job_branch_bitmask ){
							for( .@i = 0; .@i < .job_branch_size; .@i++ )
								if( .@job_branch_bitmask & ( 1 << .@i ) )
									mes " ^777777 ~ "+.job_branch_name$[.@i]+" ^000000";	
						}else{
							mes " ^FF0000 -incomplete-^000000";
						}	
						next;
						.@option = select( "Edit Base Job","Edit Job Branch","Edit Level Range","- Back" );
						switch( .@option ){
							case 1:
								dispbottom "[ Base Job Class ] RED = Disable , GREEN = Enable";
								do{
									mes "^0055FF[ "+.@npc_name$+" ]^000000";
									mes "Available Job List:";
									.@base_job_menu$ = "";
									for( .@i = 0; .@i < .base_job_size; .@i++ ){
										.@job_name$ = jobname( roclass( .base_job[.@i] ) );
										if( .@base_job_bitmask & ( 1 << .@i ) )
											mes " ^777777 ~ "+.@job_name$+" ^000000";						
										.@base_job_menu$ = .@base_job_menu$ + (( .@base_job_bitmask & ( 1 << .@i ) )?"^4EEE94":"^FF0000" ) + .@job_name$ +"^000000:";
									}
									next;
									.@i = select( .@base_job_menu$+"- Back" ) - 1;
									if( .@i < .base_job_size ){
										.@bitmask_value = ( 1 << .@i );
										if( .@base_job_bitmask & .@bitmask_value )
											.@base_job_bitmask -= .@bitmask_value;
										else
											.@base_job_bitmask |= .@bitmask_value;
									}
								}while( .@i < .base_job_size );
								break;
							case 2:
								dispbottom "[ Inherited Job Branch ] RED = Disable , GREEN = Enable";
								do{
									mes "^0055FF[ "+.@npc_name$+" ]^000000";
									mes "Inherited Job Branch List:";
									.@job_branch_menu$ = "";
									for( .@i = 0; .@i < .job_branch_size; .@i++ ){
										if( .@job_branch_bitmask & ( 1 << .@i ) )
											mes " ^777777 ~ "+.job_branch_name$[.@i]+" ^000000";						
										.@job_branch_menu$ = .@job_branch_menu$ + (( .@job_branch_bitmask & ( 1 << .@i ) )?"^4EEE94":"^FF0000" ) + .job_branch_name$[.@i] +"^000000:";
									}
									next;
									.@i = select( .@job_branch_menu$+"- Back" ) - 1;
									if( .@i < .job_branch_size ){
										.@bitmask_value = ( 1 << .@i );
										if( .@job_branch_bitmask & .@bitmask_value )
											.@job_branch_bitmask -= .@bitmask_value;
										else
											.@job_branch_bitmask |= .@bitmask_value;
									}
								}while( .@i < .job_branch_size );
								break;
							case 3:
								mes "^0055FF[ "+.@npc_name$+" ]^000000";
								mes "Minimum Level";
								input .@level_range[0],1,.server_max_level ;
								mes "Maximum Level";
								input .@level_range[1],.@level_range[0],.server_max_level;
							default: break;
						}
						if( .@option < 4 ) next;
					}while( .@option < 4 );
					break;
				case 6: // mission limitation
					do{
						mes "^0055FF[ "+.@npc_name$+" ]^000000";
						mes "Repeatable: ^777777"+( ( !.@repeatable )?"unlimit":""+.@repeatable )+" time^000000";
						mes "Redo Delay: ^777777"+( ( !.@redo_delay )?"none":callsub( OnTime2Str,( ( .@redo_delay * 3600 ) + gettimetick(2) ) ))+"^000000";
						mes "Time Limit: ^777777"+( ( !.@timelimit )?"none":callsub( OnTime2Str,( .@timelimit + gettimetick(2) ) ) )+"^000000";
						.@option = select( "Edit Repeatable Status","Edit Time Limit","Edit Re-do Delay","Edit Required Mission","- Back" );
						switch( .@option ){
							case 1:
								mes "How many time can this mission repeat ??";
								mes "^777777( 0 = unlimited )^000000";
								input .@repeatable,0,100;
								break;
							case 2:
								mes "Time Limit of mission";
								mes "      1 = 1 minute";
								mes "    60 = 1 hour";
								mes "1440 = 1 day";
								input .@timelimit,0,50000;
								.@timelimit *= 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 .@redo_delay,0,50000;
								break;
							case 4:
								mes "This is not fully implemented yet.. still in beta test";
								break;
 
								do{
									mes "Required Mission:";
									if( .@required_mission_size ){
										for( .@i = 0; .@i < .@required_mission_size; .@i++ ){
											mes " ^777777 ~ "+.@required_mission$[.@i]+"^000000";
											.@required_mission_menu$ = .@required_mission_menu$ + .@required_mission$[.@i] +":";
										}
 
									}else{
										mes "^777777 none ^000000";
									}
									next;
									.@sub_option = select( ( .@required_mission_size < .max_required_mission )?"Add required mission":"",
														( .@required_mission_size )?"Remove required mission":"",
														"- Back");
									switch( .@sub_option ){
										case 1:
											mes "Enter mission ID";
											mes "^777777( enter 0 to cancel )^000000";
											do{
												input .@mission_id$;
												if( .@mission_id$ == "0" ) break;
											}while( compare( "|"+.@required_mission_menu$+"|","|"+.@mission_id$+"|" ) );
											.@mission_id$ = replacestr( .@mission_id$,":","" );
											if( .@mission_id$ != "0" ){
												.@required_mission$[.@required_mission_size] = .@mission_id$;
												.@required_mission_size++;
											}
											break;
										case 2:
											mes "Select a mission to remove.";
											.@i = select( .@required_mission_menu$ ) - 1;
											deletearray .@required_mission$[.@i],1;
										default: break;
									}
								}while( .@sub_option < 3 );
							default: break;
						}
						if( .@option < 5 ) next;
					}while( .@option < 5 );
					break;
				case 7: // reward list
					do{
						mes "^0055FF[ "+.@npc_name$+" ]^000000";
						mes " ";
						mes "Cash : ^777777"+( ( .@cash )? .@cash:"none" )+"^000000";
						mes "Zeny : ^777777"+( ( .@zeny )? .@zeny:"none" )+"^000000";
						mes "Reward Item List: ";
						if( .@reward_size ){
							.@reward_menu$ = "";
							deletearray .@current_reward$;
							for( .@i = 0; .@i < .@reward_size; .@i++ ){
								.@reward_name$ = getitemname( .@reward_list[.@i] );
								.@reward_menu$ = .@item_menu$ + .@reward_qty[.@i] +"x "+.@reward_name$ +":";
								.@current_reward$[.@i] = .@reward_name$;
								mes " ^777777 ~ "+.@reward_qty[.@i]+" x "+.@reward_name$+"^000000";
							}
							.@current_reward_list$ = implode( .@current_reward$,"|" );
 
						}else{
							mes " ^777777 ~ none ^000000";
						}
						mes "Base EXP : ^777777"+( ( .@baseexp )? .@baseexp:"none" )+"^000000";
						mes "Job EXP : ^777777"+( ( .@jobexp )? .@jobexp:"none" )+"^000000";
						mes " ";
						next;
						.@option = select( ( .@reward_size >= .max_required_item )?"":"Add Item Reward",
										( .@reward_size )?"Delete Item Reward":"",
										"Edit Cash Reward",
										"Edit Zeny Reward",
										"Edit Base EXP Reward",
										"Edit Job EXP Reward",
										"- Back" );
						mes "^0055FF[ "+.@npc_name$+" ]^000000";
						switch( .@option ){
							case 1:
								mes "Enter Reward Item ID";
								do{
									input .@reward_id;
									if( !.@reward_id ) break;
									.@reward_name$ = getitemname( .@reward_id );
								}while( .@reward_name$ == "null" || .@reward_name$ == "" );
								if( .@reward_id && .@reward_name$ != "null" && .@reward_name$ != "" ){
									mes "How many "+.@reward_name$+" will be rewarded ?";
									input .@amount,0,30000;
									if( .@amount ){
										if( compare( "|"+.@current_reward_list$+"|","|"+.@reward_name$+"|" ) ){
											for( .@i = 0; .@i < .@reward_size; .@i++ )
												if( .@reward_list[.@i] == .@item_id ){
													.@reward_qty[.@i] += .@amount;
													break;
												}
										}else{
											.@reward_list[.@reward_size] = .@reward_id;
											.@reward_qty[.@reward_size] = .@amount;
											.@reward_size++;
										}
									}
								}
								break;
							case 2:
								mes "Pick an Reward to Remove.";
								.@i = select( .@reward_menu$ ) - 1;
								mes "Removed "+.@reward_qty[.@i]+"x "+getitemname( .@reward_list[.@i] );
								deletearray .@reward_list[.@i],1;
								deletearray .@reward_qty[.@i],1;
								.@reward_size--;
								break;
							case 3:
								mes "How many Cash will be given ?";
								mes "^777777( value: 0 ~ "+.max_integer_value+" )^000000";
								input .@cash,0,.max_integer_value;
								break;
							case 4:
								mes "How many Zeny will be given ?";
								mes "^777777( value: 0 ~ "+.max_integer_value+" )^000000";
								input .@zeny,0,.max_integer_value;
								break;
							case 5:
								mes "How many Base EXP reward ?";
								mes "^777777( value: 0 ~ "+.max_integer_value+" )^000000";
								input .@baseexp,0,.max_integer_value;
								break;
							case 6:
								mes "How many Job EXP reward ?";
								mes "^777777( value: 0 ~ "+.max_integer_value+" )^000000";
								input .@jobexp,0,.max_integer_value;
							default: break;
						}
						next;
					}while( .@option < 7 );
					break;
				case 8: // npc limitation
					mes "^0055FF[ "+.@npc_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( .@selected_npc_array$ ) )
						for( .@i = 0; .@i < .mission_npc_count; .@i++ ){
							.@selected_npc_array$[.@i] = ""+.@i;
							.@selected_npc_size++;
						}
					dispbottom "[ NPC Limitation ] RED = Disable , GREEN = Enable";
 
					do{
						mes "^0055FF[ "+.@npc_name$+" ]^000000";
						mes "Mission offered by: ";
						.@selected_npc_menu$ = "";
						if( .@selected_npc_size >= 2 ){
							.@selected_npc$ = "|"+implode( .@selected_npc_array$,"|" )+"|";
						}else{
							.@selected_npc$ = "|"+.@selected_npc_array$+"|";
						}
						for( .@i = 0; .@i < .mission_npc_count; .@i++ ){
							getmapxy( .@map$,.@x,.@y,1,.npc_unique_list$[.@i] );
							.@sub_npc_name$ = ( ( compare( "|"+.@selected_npc$+"|","|"+.@i+"|" ) )?"^44EE00":"^FF0000" );
							.@sub_npc_name$ = .@sub_npc_name$ + .npc_name_list$[.@i];
							mes "^777777("+.@map$+") "+.@sub_npc_name$;
							.@selected_npc_menu$ = .@selected_npc_menu$ + .@sub_npc_name$ +":";
						}
						next;
						.@option = select( .@selected_npc_menu$+"^000000- Back" ) - 1;
						if( .@option < .mission_npc_count ){
							if( compare( "|"+.@selected_npc$+"|","|"+.@option+"|" ) )
								.@selected_npc_array$[.@option] = "";
							else
								.@selected_npc_array$[.@option] = ""+.@option;
							.@selected_npc_size = getarraysize( .@selected_npc_array$ );
						}
						// dispbottom "["+rand(10,99)+"] "+implode( .@selected_npc_array$,"|" );
					}while( .@option < .mission_npc_count );
					break;
				default: break;
			}
			next;
		}while( .@main_option < 9 );
 
		// finalise all variable
		if( .@monster_size ){
			.@final_mob_list$ = "|";
			.@final_mob_qty$ = "|";
			for( .@i = 0; .@i < .@monster_size; .@i++ ){
				.@final_mob_list$ = .@final_mob_list$ + .@monster_list[.@i] +"|";
				.@final_mob_qty$ = .@final_mob_qty$ + .@monster_qty[.@i] +"|";
			}	
		}
 
		if( .@item_size ){
			.@final_item_list$ = "|";
			.@final_item_qty$ = "|";
			for( .@i = 0; .@i < .@item_size; .@i++ ){
				.@final_item_list$ = .@final_item_list$ + .@item_list[.@i] +"|";
				.@final_item_qty$ = .@final_item_qty$ + .@item_qty[.@i] +"|";
			}
		}
 
		if( .@reward_size ){
			.@final_reward_list$ = "|";
			.@final_reward_qty$ = "|";
			for( .@i = 0; .@i < .@reward_size; .@i++ ){
				.@final_reward_list$ = .@final_reward_list$ + .@reward_list[.@i] +"|";
				.@final_reward_qty$ = .@final_reward_qty$ + .@reward_qty[.@i] +"|";
			}
		}
 
		if( .@selected_npc_size ){
			.@final_npc_list$ = "|";
			for( .@i = 0; .@i < .@selected_npc_size; .@i++ )
				.@final_npc_list$ = .@final_npc_list$ + .@selected_npc_array$[.@i] +"|";
		}
 
		if( !.@new_mission_id ){
			.@new_mission_id = gettimetick(2);
			message strcharinfo(0),"Mission # "+.@new_mission_id+" has been added.";
		}else{
			message strcharinfo(0),"Mission # "+.@new_mission_id+" has been updated.";
			// attach and inform other online players.
			callsub( OnRemoveMission,.@new_mission_id,"A GM updated Mission # "+.@new_mission_id );
		}
 
		// add new mission into SQL
		query_sql( 
			"REPLACE INTO `mission_board` VALUES ( " +
				.@new_mission_id+", " +
				"'"+escape_sql( .@title$ )+"', " +
				"'"+escape_sql( .@description$ )+"', " +
				"'"+escape_sql( .@final_mob_list$ )+"', " +
				"'"+escape_sql( .@final_mob_qty$ )+"', " +
				"'"+escape_sql( .@final_item_list$ )+"', " +
				"'"+escape_sql( .@final_item_qty$ )+"', " +
				.@base_job_bitmask+", " +
				.@job_branch_bitmask+", " +
				.@level_range[0]+", " +
				.@level_range[1]+", " +
				.@repeatable+", " +
				.@timelimit+", " +
				"'"+escape_sql( .@final_reward_list$ )+"', " +
				"'"+escape_sql( .@final_reward_qty$ )+"', " +
				.@baseexp+", " +
				.@jobexp+", " +
				.@zeny+", " +
				.@cash+", " +
				getcharid(3)+", " +
				"'"+escape_sql( strcharinfo(0) )+"', " +
				"NOW(), " +
				"'"+escape_sql( .@final_npc_list$ )+"', " +
				.@redo_delay +
			" ); " 
		);
		break;
	case 6: // delete mission
		do{
			mes "^0055FF[ "+.@npc_name$+" ]^000000";
			deletearray .@id;
			query_sql( "SELECT `id`,`title`,`min_lv`,`max_lv` FROM `mission_board` WHERE `npc_id` LIKE '%|"+.@mission_npc_num+"|%' LIMIT "+.max_page_size+" OFFSET "+.@offset,.@id,.@title$,.@min_lv,.@max_lv );
			.@offset += .max_page_size;
			.@size = getarraysize( .@id );
			if( !.@size ){
				mes "There are no available mission to update.";
				close;
 
			}else{
				mes "Pick a mission.";
				for( .@i = 0; .@i < .@size; .@i++ )
					.@mission_menu$ = .@mission_menu$ + "["+.@min_lv[.@i]+"~"+.@max_lv[.@i]+"] "+.@title$[.@i] +":";
			}
			next;
			.@i = select( .@mission_menu$+ ( ( .@size < .max_page_size )?"":"- next page" ) ) - 1;
		}while( .@i == .@size );
		.@mission_id = .@id[.@i];
		mes "^0055FF[ "+.@npc_name$+" ]^000000";
		mes "Are you sure to remove this mission ?";
		if( select( "nope","Delete Mission" ) == 2 ){
			query_sql( "DELETE FROM `mission_board` WHERE `id` = "+.@mission_id+" LIMIT 1" );
			mes "Removed mission from mission list.";
 
			// attach other online players and remove the missions.
			callsub( OnRemoveMission,.@mission_id,"A GM removed Mission # "+.@mission_id );
			query_sql( "DELETE FROM `player_mission` WHERE `completion` = '0000-00-00 00:00:00' AND `mission_id` = "+.@mission_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
	.@num = atoi( strnpcinfo(2) );
	if( .@num && .@num <= 500 && .mission_npc_count < 100 ){
		sleep( .@num + 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( !.@num ){
		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 ( .@i = 0; .@i < @ms_size; .@i++ ) {
				.@mob_size = getarraysize( getd( "@ms_"+ @ms_list$[.@i] +"_list" ) );
				query_sql "select id, title, item_list, item_qty from mission_board where id = "+ @ms_list$[.@i], .@m_id, .@title$, .@item_id$, .@item_amount$;
				if ( .@mob_size ) {
					if ( getd( "@ms_"+ .@m_id +"_expire" ) )
						dispbottom "[Mission '"+ .@title$ +"' Progress] Time limit -> "+ callfunc( "Time2Str", getd( "@ms_"+ .@m_id +"_expire" ) );
					for ( .@j = 0; .@j < .@mob_size; .@j++ )
						dispbottom "[Mission '"+ .@title$ +"' Progress] Hunted "+ getd( "@ms_"+ @ms_list$[.@i] +"_hunt["+ .@j +"]" ) +"/"+ getd( "@ms_"+ @ms_list$[.@i] +"_qty[" + .@j +"]" ) +" x "+ getmonsterinfo( getd( "@ms_"+ @ms_list$[.@i] +"_list["+ .@j +"]" ), MOB_NAME );
					explode .@item_id_array$, .@item_id$, "|";
					explode .@item_amount_array$, .@item_amount$, "|";
					.@size = getarraysize( .@item_id_array$ );
					for ( .@j = 1; .@j < .@size; .@j++ )
						dispbottom "[Mission '"+ .@title$ +"' Progress] Collected "+ countitem( atoi( .@item_id_array$[.@j] ) ) +"/"+ .@item_amount_array$[.@j] +" x "+ getitemname( atoi( .@item_id_array$[.@j] ) );
				}
			}
		}
	}
	end;
 
OnPCLoginEvent:
if( strnpcinfo(0) == .npc_name$ ){
	.@timetick = gettimetick(2);
	.@nb = 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$,.@expire,.@mob_hunt$ );
	@ms_size = .@nb;
	if( @ms_size ){
		for( .@i = 0; .@i < @ms_size; .@i++ ) {
			query_sql( "SELECT `title`,`mob_list`,`mob_qty` FROM `mission_board` WHERE `id` = "+@ms_list$[.@i],@ms_title$,.@mob_list$,.@mob_qty$ );
			if ( .@expire[.@i] ) {
				.@timeleft = ( .@expire[.@i] - .@timetick );
				addtimer ( .@timeleft * 1000 ),.npc_name$+"::OnTimeCheck";
				dispbottom "[ Mission Progress : "+@ms_title$+" , expire in "+ callfunc( "Time2Str", .@timeleft + .@timetick )+" ]";
			}
			else
				dispbottom "[ Mission Progress : "+@ms_title$ +" ]";
			setd( "@ms_"+@ms_list$[.@i]+"_expire" ),.@expire[.@i];
			if( callsub( OnExplodeArray,.@mob_list$,getd( "@ms_"+@ms_list$[.@i]+"_list" ),0 ) ){
				callsub( OnExplodeArray,.@mob_hunt$[.@i],getd( "@ms_"+@ms_list$[.@i]+"_hunt" ),0 );
				.@monster_size = callsub( OnExplodeArray,.@mob_qty$,getd( "@ms_"+@ms_list$[.@i]+"_qty" ),0 );
//				for( .@mob = 0; .@mob < .@monster_size; .@mob++ )
//					dispbottom  " ~ killed "+getd( "@ms_"+@ms_list$[.@i]+"_hunt["+.@mob+"]" )+"/"+getd( "@ms_"+@ms_list$[.@i]+"_qty["+.@mob+"]" )+" x "+getmonsterinfo( getd( "@ms_"+@ms_list$[.@i]+"_list["+.@mob+"]" ),MOB_NAME );
			}
		}
	}
}
end;
 
OnPCLogoutEvent:
if( strnpcinfo(0) == .npc_name$ ){
	if( @ms_size )
		for( .@ms = 0; .@ms < @ms_size; .@ms++ ){
			debugmes "Saving "+@ms_list$[.@ms];
			.@mob_size = getarraysize( getd( "@ms_"+@ms_list$[.@ms]+"_list" ) );
			if( .@mob_size ){
				copyarray .@temp_array[0],getd( "@ms_"+@ms_list$[.@ms]+"_list[0]" ),.@mob_size;
				.@mob_hunt$ = "|";
				for( .@mob = 0; .@mob < .@mob_size; .@mob++ )
					.@mob_hunt$ = .@mob_hunt$ + getd( "@ms_"+@ms_list$[.@ms]+"_hunt["+.@mob+"]" ) +"|";
				query_sql( "UPDATE `player_mission` SET `mob_hunt` = '"+escape_sql( .@mob_hunt$ )+"' WHERE `mission_id` = "+@ms_list$[.@ms]+" AND `completion` = '0000-00-00 00:00:00' AND `cid` = "+getcharid(0) );
			}
		}
}
end;
 
OnNPCKillEvent:
if( strnpcinfo(0) == .npc_name$ ){
	if( @ms_size ){
		.@map$ = strcharinfo(3);
 
		// by default mission wont work in PVP,GVG,Instance,Event maps
		if( compare( .@map$,"@" ) || getmapflag( .@map$,mf_gvg ) || getmapflag( .@map$,mf_pvp )){
			// dispbottom "[Mission Board] PvP/GvG Map , Instance Map , Event Map , include monsters will not affect Mission Progress.";
			end;
		}
 
		.@timetick = gettimetick(2);
		for( .@ms = ( @ms_size - 1 ); .@ms >= 0; .@ms-- ){
			if( getd( "@ms_"+@ms_list$[.@ms]+"_expire" ) && getd( "@ms_"+@ms_list$[.@ms]+"_expire" ) < .@timetick ){
				setd( "@ms_"+@ms_list$[.@ms]+"_expire" ),0;
				deletearray getd( "@ms_"+@ms_list$[.@ms]+"_list" );
				deletearray getd( "@ms_"+@ms_list$[.@ms]+"_qty" );
				deletearray getd( "@ms_"+@ms_list$[.@ms]+"_hunt" );
				dispbottom "[Mission # "+@ms_title$[.@ms]+"] Mission removed due to expired. ";
				deletearray @ms_list$[.@ms],1;
				@ms_size--;
 
			}else{
				.@mob_size = getarraysize( getd( "@ms_"+@ms_list$[.@ms]+"_list" ) );
				if( .@mob_size ){
					copyarray .@temp_array[0],getd( "@ms_"+@ms_list$[.@ms]+"_list[0]" ),.@mob_size;
					for( .@mob = 0; .@mob < .@mob_size; .@mob++ )
						if( .@temp_array[.@mob] == killedrid ){
							.@value = getd( "@ms_"+@ms_list$[.@ms]+"_hunt["+.@mob+"]" ) + 1;
							setd( "@ms_"+@ms_list$[.@ms]+"_hunt["+.@mob+"]" ),.@value;
							// dispbottom "[Mission # "+@ms_title$[.@ms]+" Progress] Hunted "+.@value+" x "+getmonsterinfo( .@temp_array[.@mob],MOB_NAME );
							break;
						}
					deletearray .@temp_array;
				}
			}
		}
	}
}
end;
 
OnTimeCheck:
	if( @ms_size ){
		.@timetick = gettimetick(2);
		for( .@i = ( @ms_size - 1 ); .@i >= 0; .@i-- ){
			if( getd( "@ms_"+@ms_list$[.@i]+"_expire" ) <= .@timetick ){
				setd( "@ms_"+@ms_list$[.@i]+"_expire" ),0;
				deletearray getd( "@ms_"+@ms_list$[.@i]+"_list" );
				deletearray getd( "@ms_"+@ms_list$[.@i]+"_qty" );
				deletearray getd( "@ms_"+@ms_list$[.@i]+"_hunt" );
				dispbottom "[Mission # "+@ms_title$[.@i]+"] Mission removed due to expired. ";
				deletearray @ms_list$[.@i],1;
				deletearray @ms_title$[.@i],1;
				@ms_size--;
			}
		}
	}
	end;
 
OnRemoveMission:
	.@mission_id = getarg(0);
	.@message$ = getarg(1);
 
	query_sql( "SELECT `aid`,`cid` FROM `player_mission` WHERE `cid` IN ( SELECT `char_id` FROM `char` WHERE `online` = 1 ) AND `mission_id` = "+.@mission_id+" AND `completion` = '0000-00-00 00:00:00' LIMIT 128",.@aid,.@cid );
	.@aid_size = getarraysize( .@aid );
	.@i = 0;
	.@origin_aid = getcharid(3);
	while( .@i < .@aid_size ){
		if( isloggedin( .@aid[.@i],.@cid[.@i] ) ){
			attachrid( .@aid[.@i] );
			for( .@ms = @ms_size; .@ms >= 0; .@ms-- )
				if( @ms_list$[.@ms] == ""+.@mission_id ){
					message strcharinfo(0),.@message$;
					dispbottom "Please visit Mission NPC to gain latest information.";
					setd( "@ms_"+@ms_list$[.@ms]+"_expire" ),0;
					deletearray getd( "@ms_"+@ms_list$[.@ms]+"_list" );
					deletearray getd( "@ms_"+@ms_list$[.@ms]+"_qty" );
					deletearray getd( "@ms_"+@ms_list$[.@ms]+"_hunt" );
					deletearray @ms_list$[.@ms],1;
					deletearray @ms_title$[.@ms],1;
					@ms_size--;
					break;
				}
			detachrid;
			.@count++;
		}
		.@i++;
	}
	attachrid( .@origin_aid );
	dispbottom "Total "+.@count+" online players affected.";
	return;
 
// usage :
// .@timeleft = callsub( OnTime2Str,<time> );
OnTime2Str:
	.@time = getarg(0);
	.@left = ( .@time - gettimetick(2) );
	.@hour = ( .@left / 3600 );
	.@min = ( .@left % 3600 / 60 );
	.@sec = ( .@left % 60 );
	if( !.@left ) 
		return "none";
	else
		return "^777777"+( ( .@hour )? .@hour+" hr ":"" ) + ( ( .@hour || .@min )? .@min+" min ":"" ) +.@sec+" sec^000000";
 
 
// usage : 
// .@new_array_size = callsub( OnExplodeArray,<old string variable>,<new array variable>,<save '0'> );
OnExplodeArray:
	.@type = getarg(2);
	explode( getarg(0),getarg(0),"|" );
	.@size = getarraysize( getarg(0) );
	if ( !.@size )
		return 0;
	while( .@i < .@size ){
		if( !.@type ){
			.@value = atoi( getelementofarray( getarg(0),.@i ) );
			if( .@value ){
				set getelementofarray( getarg(1),.@new_size ),.@value;
				.@new_size++;
			}
		}else{
			set getelementofarray( getarg(1),.@new_size ),getelementofarray( getarg(0),.@i );
			.@new_size++;
		}
		.@i++;
	}
 
	return .@new_size;
 
 
// display mission information + optional progress checking
OnDisplayMissionInfo:
		.@mission_id = getarg(0);
		.@title$ = getarg(1);
		.@description$ = getarg(2);
		.@repeatable = getarg(4);
		.@timelimit = getarg(5);
		.@monster_size = getarraysize( getarg(6) );
		.@item_size = getarraysize( getarg(8) );
		.@base_job_bitmask = getarg(10);
		.@job_branch_bitmask = getarg(11);
		.@baseexp = getarg(12);
		.@jobexp = getarg(13);
		.@cash = getarg(14);
		.@zeny = getarg(15);
		.@reward_size = getarraysize( getarg(16) );
		.@selected_npc_size = getarraysize( getarg(18) );
		.@time_update$ = getarg(19);
		.@redo_delay = getarg(20);
		.@check_progress = getarg(21);
 
		if( .@check_progress & 8 )
			.@eac = eaclass();
 
		// display mission info
		mes ""+(( .@mission_id )? "^FF0000Mission ID # "+.@mission_id:" " )+"^000000";
		mes "Title : "+( ( .@title$ != "" )?"^777777"+.@title$:"^FF0000-incomplete-" )+"^000000";
		mes "Description : "+( ( .@description$ != "" )?"^777777"+.@description$:"^FF0000-incomplete-" )+"^000000";
		mes "Level Range : "+( ( getelementofarray( getarg(3),0 ) )? "^777777"+getelementofarray( getarg(3),0 )+" ~ "+getelementofarray( getarg(3),1 ):"^FF0000-incomplete-" )+"^000000";
		if( .@check_progress & 1 )
			if( BaseLevel >= getelementofarray( getarg(3),0 ) && BaseLevel <= getelementofarray( getarg(3),1 ) )
				.@lv_progress = 1;
 
		mes "Repeatable: ^777777"+( ( !.@repeatable )?"unlimit":.@repeatable+" time" )+"^000000";
		mes "Redo Delay: ^777777"+( ( !.@redo_delay )?"none":callsub( OnTime2Str,( ( .@redo_delay * 3600 ) + gettimetick(2) ) ) )+"^000000";
		mes "Expire in: ^777777"+( ( !.@timelimit )?"none":callsub( OnTime2Str,.@timelimit ) )+"^000000";
		mes " ";
 
		.@word$ = (( !.@monster_size && !.@item_size )?"^FF0000incomplete":"^777777none" );
		mes "Monster List : "+( ( .@monster_size )?"":.@word$ )+"^000000";
		if( .@monster_size )
			for( .@i = 0; .@i < .@monster_size; .@i++ ){
				.@mob_id = getelementofarray( getarg(6),.@i );
				.@quantity = getelementofarray( getarg(7),.@i );
				if( .@check_progress & 2 ){
					.@killed_count = getd( "@ms_"+.@mission_id+"_hunt["+.@i+"]" );
					if( .@killed_count >= .@quantity ){
						.@monster_progress++;
						.@temp_color$ = "44EE99";
					}else{
						.@temp_color$ = "FF0000";
					}
				}
				mes " ^777777"+.@quantity+" x "+getmonsterinfo( .@mob_id,MOB_NAME )+"  "+( ( .@check_progress & 2 )?"^"+.@temp_color$+"(killed "+.@killed_count+")":"" )+"^000000";
			}
		mes "Item List : "+( ( .@item_size )?"":.@word$ )+"^000000";
		if( .@item_size )
			for( .@i = 0; .@i < .@item_size; .@i++ ){
				.@item_id = getelementofarray( getarg(8),.@i );
				.@quantity = getelementofarray( getarg(9),.@i );
				.@item_type = getiteminfo( .@item_id,2 );
				if( .@check_progress & 4 ){
					.@item_count = countitem( .@item_id );
					if( .@item_count >= .@quantity ){
						.@item_progress++;
						.@temp_color$ = "44EE99";
					}else{
						.@temp_color$ = "FF0000";
					}
				}
				mes " ^777777"+.@quantity+" x "+getitemname( .@item_id )+" "+( ( .@item_type == 4 || .@item_type == 5 )?"["+getitemslots( .@item_id )+"]":"" )+"  "+( ( .@check_progress & 4 )?"^"+.@temp_color$+"(have "+.@item_count+")":"" )+"^000000";
			}
		mes " ";
		mes "Available Job Classes :";
		if( .@base_job_bitmask ){
			deletearray .@available_job$;
			deletearray .@available_branch$;
			.@available_job_size = 0;
			.@available_branch_size = 0;
			for( .@i = 0; .@i < .base_job_size; .@i++ )
				if( .@base_job_bitmask & ( 1 << .@i ) ){
					.@class = roclass( .base_job[.@i] );
					.@available_job$[.@available_job_size] = jobname( .@class );
					if( .@check_progress & 8 && BaseClass == .@class )
						.@class_progress = 1;
					.@available_job_size++;
				}
			mes " ^777777"+implode( .@available_job$,"," )+" ^000000";	
			if( .@job_branch_bitmask && .@class_progress ){
				for( .@i = 0; .@i < .job_branch_size; .@i++ )
					if( .@job_branch_bitmask & ( 1 << .@i ) ){
						if( .@check_progress & 8 && ( .@eac & .job_branch[.@i] ) )
							.@branch_progress++;
						.@available_branch$[.@available_branch_size] = .job_branch_name$[.@i];	
						.@available_branch_size++;
					}
				mes "Inherited: ^777777"+implode( .@available_branch$,", " )+" ^000000";			
			}
		}else{
			mes " ^FF0000-incomplete^000000";
		}
 
		mes " ";
		mes "Reward List : ";
		mes "^777777 ~ Base EXP: "+( ( .@baseexp )? .@baseexp:"none" )+"^000000";
		mes "^777777 ~ Job EXP: "+( ( .@jobexp )? .@jobexp:"none" )+"^000000";
		mes "^777777 ~ Cash: "+( ( .@cash )? .@cash:"none" )+"^000000";
		mes "^777777 ~ Zeny: "+( ( .@zeny )? .@zeny:"none" )+"^000000";
		mes "Reward Item List: "+( ( .@reward_size )?"":"^777777none" )+"^000000";
		if( .@reward_size )
			for( .@i = 0; .@i < .@reward_size; .@i++ ){
				.@item_id = getelementofarray( getarg(16),.@i );
				.@item_type = getiteminfo( .@item_id,2 );
				mes " ^777777 ~ "+getelementofarray( getarg(17),.@i )+" x "+getitemname( .@item_id )+" "+( ( .@item_type == 4 || .@item_type == 5 )?"["+getitemslots( .@item_id )+"]":"" )+"^000000";
			}
		mes " ";
 
		mes "Mission Offered by: "+( ( .@selected_npc_size )?"":"^FF0000-incomplete" )+"^000000";
		if( .@selected_npc_size ){
			if( .@selected_npc_size >= 2 )
				.@selected_npc$ = "|"+implode( getarg(18),"|" )+"|";
			else
				.@selected_npc$ = "|"+getarg(18)+"|";
			for( .@i = 0; .@i < .mission_npc_count; .@i++ )
				if( ( compare( "|"+.@selected_npc$+"|","|"+.@i+"|" ) ) ){
					getmapxy( .@map$,.@x,.@y,1,.npc_unique_list$[.@i] );
					.@sub_npc_name$ = "^777777("+.@map$+") ";
					.@sub_npc_name$ = .@sub_npc_name$ + .npc_name_list$[.@i] + "^000000";
					mes " ~ "+.@sub_npc_name$;
				}
			mes " ";
		}
		if( .@time_update$ != "0000-00-00 00:00:00" && .@time_update$ != "" ){
			mes "Last Mission Update:";
			mes "^777777"+.@time_update$+"^000000";
		}
 
		if( .@check_progress ){
			if( .@check_progress & 1 && !.@lv_progress ){
				dispbottom "[Failed] Your level didnt meet the requirements.";
				.@check_result |= 1;
			}
			if( .@check_progress & 2 && .@monster_size != .@monster_progress ){
				dispbottom "[Failed] Your Monsters Hunt didnt meet the requirements.";
				.@check_result |= 2;
			}
			if( .@check_progress & 4 && .@item_size != .@item_progress ){
				dispbottom "[Failed] Your Items collecting didnt meet the requirements.";
				.@check_result |= 4;
			}
			if( .@check_progress & 8 && ( !.@branch_progress && !.@class_progress ) ){
				dispbottom "[Failed] Your Class didnt meet the requirements.";
				.@check_result |= 8;
			}
		}
	return .@check_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,147,166,6	duplicate(mission_board)	Hard Mission#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

and  found this script somewhere here
i tried it and after i created the mission it shows that no mission available

 

 


**RESOLVE**

Tnx for some guides here


i  found out how to fix Emistry sql quest board

but i dunno how to fix euphys quest boad T_T

bump

TY in advance

 

post-35940-0-92512800-1467316589_thumb.jpg

post-35940-0-74852600-1467323227_thumb.jpg

2 answers to this question

Recommended Posts

  • 0
Posted

did you try to add this into your mysql or local sql database?, you can add it manually or making a new file.sql an uploadit and run it in your mysql

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;

  • 0
Posted

 

did you try to add this into your mysql or local sql database?, you can add it manually or making a new file.sql an uploadit and run it in your mysql

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;

this sql is for Emistry

quest board and i fix that already

 

the not working one is the Euphy Mission Quest board

 

i dunno why i dunno where to get the SQL for that

 

all i have is the SQL for Emistry

T_T

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...