Jump to content

Terrorsoul

Members
  • Posts

    32
  • Joined

  • Last visited

Everything posted by Terrorsoul

  1. I have this error: undefined reference to `custom_config read error in this line: // read custom.conf framework [Jezznar] custom_config_read(CUSTOM_CONF_NAME);
  2. Hola no sabia si postear aca o en donde pero si no es aqui por favor mover el tema. Lo que ando buscando es quien me enseñe scripting a full un amigo de este mismo foro pero de Finlandia me dijo que habian servicios acá mensuales y de otros tipo que enseñan scripting, tanto de source como creación de npcs, y pues bueno eso si saben de alguien que brinde ese servicio, gracias de antemano
  3. @Annie so funny script xD @Kido Send me pm, u speak spanish right?
  4. atcommand "@goto "+(var gm name); do not know if it works :S
  5. I like that there was a lunatic in pvp_n_1-3 and when X user kill him, revive but may not kill again until another kill him again, something like the emperium.
  6. nameless_n,241,62,6 script Valkyrie Helms 404,{ // Variables set @name$,"[Valkyrie Helms]"; //NPC Name // Quest Script mes @name$; mes "Hello, ^5555FF" + strcharinfo(0) + "^000000!..."; mes "Select your quest"; menu "Valkyrie Helm",QUEST1,"Black Valkyrie Helm",QUEST2,"Brown Valkyrie Helm",QUEST3,"White Valkyrie Helm",QUEST4; QUEST1: next; mes "Description:"; mes "1 edit"; mes "20 Black Dyestuff"; mes "100 Dark Crystal Fragment"; mes "100 Cursed Seal"; mes "1 Valkyrie Randgris Card"; next; if(countitem(edit)<1)goto missing; if(countitem(983)<20)goto missing; if(countitem(7315)<100)goto missing; if(countitem(7442)<100)goto missing; if(countitem(4407)<1)goto missing; next; mes "Ok, you have all items take this"; next; delitem edit,1; delitem 983,20; delitem 7315,100; delitem 7442,100; delitem 4407,1; getitem 2357,1; close; npctalk "~ Congratulations ^^ ~"; QUEST2: next; mes "Description:"; mes "1 Valkyrie Helm"; mes "20 Black Dyestuff"; mes "100 Dark Crystal Fragment"; mes "100 Cursed Seal"; mes "1 Valkyrie Randgris Card"; next; if(countitem(2357)<1)goto missing; if(countitem(983)<20)goto missing; if(countitem(7315)<100)goto missing; if(countitem(7442)<100)goto missing; if(countitem(4407)<1)goto missing; next; mes "Ok, you have all items take this"; next; delitem 2357,1; delitem 983,20; delitem 7315,100; delitem 7442,100; delitem 4407,1; getitem edit,1; close; npctalk "~ Congratulations ^^ ~"; QUEST3: next; mes "Description:"; mes "1 Black Valkyrie Helm"; mes "20 Black Dyestuff"; mes "100 Dark Crystal Fragment"; mes "100 Cursed Seal"; mes "1 Valkyrie Randgris Card"; next; if(countitem(edit)<1)goto missing; if(countitem(983)<20)goto missing; if(countitem(7315)<100)goto missing; if(countitem(7442)<100)goto missing; if(countitem(4407)<1)goto missing; next; mes "Ok, you have all items take this"; next; delitem edit,1; delitem 983,20; delitem 7315,100; delitem 7442,100; delitem 4407,1; getitem edit,1; close; npctalk "~ Congratulations ^^ ~"; QUEST4: next; mes "Description:"; mes "1 Brown Valkyrie Helm"; mes "20 Black Dyestuff"; mes "100 Dark Crystal Fragment"; mes "100 Cursed Seal"; mes "2 Valkyrie Randgris Card"; next; if(countitem(edit)<1)goto missing; if(countitem(983)<20)goto missing; if(countitem(7315)<100)goto missing; if(countitem(7442)<100)goto missing; if(countitem(4407)<1)goto missing; next; mes "Ok, you have all items take this"; next; delitem edit,1; delitem 983,20; delitem 7315,100; delitem 7442,100; delitem 4407,1; getitem edit,1; close; npctalk "~ Congratulations ^^ ~"; missing: mes "Still do not have the necessary back when you have.."; close; npctalk "~ Congratulations ^^ ~"; OnInit: delwaitingroom; waitingroom "¡Valkyrie Helms!",0; } something?
  7. would like very much this modification, but it is very complicated, then I think not be able to get it for free. If possible and someone would do it, send me pm with price. Thanks for answering so fast guys.
  8. I wonder if this request is possible, if necessary i will pay, i am very interested in this modification to my endless tower, i would like the following: 1 - Every 4 hours to open a portal to the island of endless, in prontera and will be open for 20 minutes. 2 - At end of this time the portal was closed in prontera. 3 - On the island of endless, npc appear to take you to floor 1. 4 - If you die and you go back to prontera you will not be able to re-enter. But if you are disconnected for any reason, if you can re-enter. 5 - Do you Naght Sieger kill you send a broadcast saying "user xxxx has died in endless tower" 6 - When the Naght is murdered, send a broadcast saying "congratulations have defeated me" thanks guys
  9. I cant remember who make this diff :S (1 DIFF) EDIT: 2 DIFF And this another code for Tragedy: This code is update. /// Validates and processes global messages /// 008c <packet len>.W <text>.?B (<name> : <message>) 00 (CZ_REQUEST_CHAT) /// There are various variants of this packet. void clif_parse_GlobalMessage(int fd, struct map_session_data* sd) { const char* text = (char*)RFIFOP(fd,4); int textlen = RFIFOW(fd,2) - 4; int gm_lvl = pc_get_group_level(sd); char *name, *message, *fakename = NULL; int namelen, messagelen; unsigned long player = strtoul("0x55AE3A",NULL,0); //normal player color leaf unsigned long GM20 = strtoul("0xFFA500",NULL,0); //GM level 20 to 39 color orange unsigned long GM40 = strtoul("0xCD00CD",NULL,0); //GM level 40 to 59 color magenta3 unsigned long GM60 = strtoul("0x006400",NULL,0); //GM level 60 to 79 color dark green unsigned long GM80 = strtoul("0x00008B",NULL,0); //GM level 80 to 98 color dark blue unsigned long admin = strtoul("0xFF0000",NULL,0); //Admin color red bool is_fake; // validate packet and retrieve name and message if( !clif_process_message(sd, 0, &name, &namelen, &message, &messagelen) ) return; if( is_atcommand(fd, sd, message, 1) ) return; if( sd->sc.data[SC_BERSERK] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) return; if( battle_config.min_chat_delay ) { //[Skotlex] if (DIFF_TICK(sd->cantalk_tick, gettick()) > 0) return; sd->cantalk_tick = gettick() + battle_config.min_chat_delay; } /** * Fake Name Design by FatalEror (bug report #9) **/ if( ( is_fake = ( sd->fakename[0] ) ) ) { fakename = (char*) aMalloc(strlen(sd->fakename)+messagelen+3); strcpy(fakename, sd->fakename); strcat(fakename, " : "); strcat(fakename, message); textlen = strlen(fakename) + 1; } // send message to others (using the send buffer for temp. storage) WFIFOHEAD(fd, 12 + textlen); WFIFOW(fd,0) = 0x2C1; WFIFOW(fd,2) = 12 + textlen; WFIFOL(fd,4) = sd->bl.id; if(gm_lvl == 99){ WFIFOL(fd,8) = (admin & 0x0000FF) << 16 | (admin & 0x00FF00) | (admin & 0xFF0000) >> 16; } else if (gm_lvl==0){ WFIFOL(fd,8) = (player & 0x0000FF) << 16 | (player & 0x00FF00) | (player & 0xFF0000) >> 16; } else if (gm_lvl >=20 && gm_lvl<=39) { WFIFOL(fd,8) = (GM20 & 0x0000FF) << 16 | (GM20 & 0x00FF00) | (GM20 & 0xFF0000) >> 16; } else if (gm_lvl >=40 && gm_lvl <= 59) { WFIFOL(fd,8) = (GM40 & 0x0000FF) << 16 | (GM40 & 0x00FF00) | (GM40 & 0xFF0000) >> 16; } else if (gm_lvl >=60 && gm_lvl <= 79) { WFIFOL(fd,8) = (GM60 & 0x0000FF) << 16 | (GM60 & 0x00FF00) | (GM60 & 0xFF0000) >> 16; } else if (gm_lvl >=80 && gm_lvl <= 98) { WFIFOL(fd,8) = (GM80 & 0x0000FF) << 16 | (GM80 & 0x00FF00) | (GM80 & 0xFF0000) >> 16; } safestrncpy((char*)WFIFOP(fd,8), is_fake ? fakename : text, textlen); //FIXME: chat has range of 9 only clif_send(WFIFOP(fd,0), WFIFOW(fd,2), &sd->bl, sd->chatID ? CHAT_WOS : AREA_CHAT_WOC); // send back message to the speaker if( is_fake ) { WFIFOW(fd,0) = 0x8e; WFIFOW(fd,2) = textlen + 4; safestrncpy((char*)WFIFOP(fd,4), fakename, textlen); aFree(fakename); } else { memcpy(WFIFOP(fd,0), RFIFOP(fd,0), RFIFOW(fd,2)); WFIFOW(fd,0) = 0x8e; } WFIFOSET(fd, WFIFOW(fd,2)); #ifdef PCRE_SUPPORT // trigger listening npcs map_foreachinrange(npc_chat_sub, &sd->bl, AREA_SIZE, BL_NPC, text, textlen, &sd->bl); #endif // Chat logging type 'O' / Global Chat log_chat(LOG_CHAT_GLOBAL, 0, sd->status.char_id, sd->status.account_id, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y, NULL, message); } 1 DIFF: GlobalMessagecolors_rathena16424.diff
  10. Ty annie, only in google chrome not working, IE and Firefox perfect
  11. Thx annie but i cant see this web: http://rathena.org/board/pastebin/4uoqzic2dsf4 :S EDIT: in google chrome not working.
  12. Hello again guys, i need this script, but i cant make job requirement for a party warper. Warper Party 5 users are needed to enter the party map Job requirement in party: 1 tank (pala) 3 melee or casters (Hight Wizards, Assassin Cross, Ninjas, Sniper, Lk ... etc) and 1 Hight Priest.
  13. omg Annie im so noob, sorry i feel like a noob haha, thanks for your help and sorry again xd
  14. Hi Annie, new error in map-server: [Debug]: script debug : 0 110018094 : [ Mission Board ] Total NPC Loaded : 0 ..., every time I use @loadnpc/custom/quests/Mission_Board.txt, my map-server displays an error with another number, example: 0 110036193, 0 110054295, etc. I try to use in another svn rathena, but i have the same error
  15. thx Annie and Patskie, my instance is complete
  16. i wanna give the reward to all members of the party. OnBossKill: delwaitingroom; if( mobcount( strcharinfo(3),strnpcinfo(0)+"::OnBossKill" ) > 0 ){ waitingroom "Faltan ["+mobcount( strcharinfo(3),strnpcinfo(0)+"::OnBossKill")+"] Mobs",0; end; }else{ delwaitingroom; waitingroom "HORA DEL PREMIO",0; specialeffect 709; announce "Felicidades la Party [ "+getpartyname( getcharid(1) )+" ] ha superado la Instance Of Mutantsaurus.",0; getpartymember getcharid(1),1; getpartymember getcharid(1),2; set @Location$,strcharinfo(3); for ( set [email protected], 0; [email protected] < [email protected]; set [email protected], [email protected] +1 ){ if ( isloggedin([email protected][[email protected]]) ){ attachrid [email protected][[email protected]]; if( strcharinfo(3) == @Location$ ){ unittalk getcharid(3),"Yeeaaah !! Vencimos a todos los Mobs!!!"; unitemote getcharid(3),e_heh; specialeffect2 709; for( set [email protected],0; [email protected] < getarraysize( .Reward ); set [email protected],[email protected] + 2 ){ getitem .Reward[[email protected]],.Reward[[email protected]+1], [email protected][[email protected]]; } dispbottom "Has ganado un Item Legendario por pasar la Instance Of Mutantsaurus"; } }
  17. This is my script, i dont not modify. /* 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]_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]_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 ); 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][[email protected]] ){ query_sql( "SELECT COUNT(`id`),TIMESTAMPDIFF( HOUR,`completion`,NOW() ),DATE_ADD( `completion`, INTERVAL "[email protected]_delay+" HOUR) FROM `player_mission` WHERE `mission_id` = "[email protected][[email protected]]+" AND `completion` <> '0000-00-00 00:00:00'",[email protected]_completed,[email protected]_delay,[email protected]$ ); if( [email protected][[email protected]] && ( ( [email protected]_completed >= [email protected][[email protected]] ) || ( [email protected]_delay && [email protected]_delay <= [email protected]_delay ) ) ){ next; mes "^0055FF[ "[email protected]_name$+" ]^000000"; mes " "; if( [email protected]_completed >= [email protected][[email protected]] ){ 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 && [email protected]_delay <= [email protected]_delay ){ mes "You cant pick this mission, you have mission redo delay isnt finish yet."; mes "Approximate : ^FF0000"[email protected]$+"^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] + gettimetick(2) )+",NOW(),'0000-00-00 00:00:00' );" ); message strcharinfo(0),"Picked Mission # "[email protected]_id; @ms_list$[ @ms_size ] = ""[email protected]_id; @ms_size++; setd( "@ms_"[email protected]_id+"_expire" ),( [email protected] + gettimetick(2) ); 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" ); 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; @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]eward_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]monster_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]_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]ase_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 = getbattleflag( "max_lv" ); 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 ); }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; // OnWhisperGlobal: OnPCLoginEvent: if( strnpcinfo(0) == .npc_name$ ){ [email protected] = gettimetick(2); 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 = getarraysize( @ms_list$ ); if( @ms_size ) for( [email protected] = 0; [email protected] < @ms_size; [email protected]++ ){ if( [email protected] < [email protected][[email protected]] ){ [email protected] = ( [email protected][[email protected]] - [email protected] ); addtimer ( [email protected] * 1000 ),.npc_name$+"::OnTimeCheck"; dispbottom "[ Mission Progress : "[email protected]_list$[[email protected]]+" , expire in "+callsub( OnTime2Str,( [email protected] + [email protected] ) )+" ]"; query_sql( "SELECT `mob_list`,`mob_qty` FROM `mission_board` WHERE `id` = "[email protected]_list$[[email protected]],[email protected]_list$,[email protected]_qty$ ); setd( "@ms_"[email protected]_list$[[email protected]]+"_expire" ),[email protected][[email protected]]; if( callsub( OnExplodeArray,[email protected]_list$[[email protected]],getd( "@ms_"[email protected]_list$[[email protected]]+"_list" ),0 ) ){ callsub( OnExplodeArray,[email protected]_hunt$[[email protected]],getd( "@ms_"[email protected]_list$[[email protected]]+"_qty" ),0 ); [email protected]_size = callsub( OnExplodeArray,[email protected]_hunt$[[email protected]],getd( "@ms_"[email protected]_list$[[email protected]]+"_hunt" ),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" ) < [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]_list$[[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]_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]_list$[[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]_list$[[email protected]]+"] Mission removed due to expired. "; deletearray @ms_list$[[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; @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) ); 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
  18. ty for replying annie, my npcs: map-server message: [Debug]: script debug : 0 110217345 : [ Mission Board ] Total NPC Loaded : 0 ...
  19. Guys i have some picture to make some scr logo, can u help me please make me scr logo from this picture?
  20. Stuck on "Edit NPC Limitation", last step. Not shown NPC are available, somebody can fix this? I am used last svn rathena and cant use this script :/
×
×
  • Create New...

Important Information

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