//================= Hercules Script ======================================= //= _ _ _ //= | | | | | | //= | |_| | ___ _ __ ___ _ _| | ___ ___ //= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| //= | | | | __/ | | (__| |_| | | __/\__ \ //= \_| |_/\___|_| \___|\__,_|_|\___||___/ //================= License =============================================== //= This file is part of Hercules. //= http://herc.ws - http://github.com/HerculesWS/Hercules //= //= Copyright (C) 2012-2016 Hercules Dev Team //= Copyright (C) Euphy //= Copyright (C) L0ne_W0lf //= //= Hercules is free software: you can redistribute it and/or modify //= it under the terms of the GNU General Public License as published by //= the Free Software Foundation, either version 3 of the License, or //= (at your option) any later version. //= //= This program is distributed in the hope that it will be useful, //= but WITHOUT ANY WARRANTY; without even the implied warranty of //= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //= GNU General Public License for more details. //= //= You should have received a copy of the GNU General Public License //= along with this program. If not, see . //========================================================================= // BattleGround System - Common NPCs //================= Description =========================================== //= Battleground NPCs: //= - Generals and Aides //= - Battleground Warper //= - Kafra and Repairman. //= - GM Management NPC (disabled by default) //= - Badge Exchanger (Tierra and Flavius) //================= Current Version ======================================= //= 1.4 //========================================================================= //== Generals ============================================== bat_room,161,158,3 script Gen. Guillaume's Aide#01 4_M_KY_HEAD,{ end; } bat_room,161,160,3 script Gen. Guillaume's Aide#03 4_M_KY_HEAD,{ end; } bat_room,160,141,3 script Prince Croix 4_M_CRU_CRUA,{ cutin "bat_crua1",2; mes("[Prince Croix]"); mes("Wise adventurer, why don't you lend us your power for victory?"); next; switch(select("What's the reason for the Battle?", "Tell me about General Guillaume")) { case 1: cutin "bat_crua2",2; mes("[Prince Croix]"); mes("Maroll's great king, Marcel Marollo VII, is very sick lately."); mes("His Majesty has declared that he will be leaving the future of Maroll to me or the 3rd prince, General Guillaume."); next; mes("[Prince Croix]"); mes("General Guillaume may have an advantage in this battle as he is the great general of Maroll, but that doesn't automatically mean he'll win."); mes("I want to win this battle so that I can bring prosperity to the people of Maroll. They've suffered enough from war..."); next; switch(select("Yes, I want to join you.", "End Conversation")) { case 1: cutin "bat_crua1",2; mes("[Prince Croix]"); mes("Thank you so much. I feel like I can win with the help of adventurers like you."); mes("Now, please go downstairs and join your comrades in sharpening their skills to fight the enemy!"); break; case 2: mes("[Prince Croix]"); mes("For Maroll!"); break; } break; case 2: cutin "bat_crua2",2; mes("[Prince Croix]"); mes("The 3rd Prince Guillaume is the great general of Maroll."); mes("It's a waste of time to explain to you how great a leader or warlord he is, since he commands the great military power of Maroll."); next; mes("[Prince Croix]"); mes("Unfortunately, there's something he and his followers are unaware of:"); mes("Do the people of Maroll really want them to spend so much money on military power?"); mes("We have suffered enough from wars."); mes("I believe weapons aren't the best way to bring prosperity to a nation."); next; mes("[Prince Croix]"); mes("I do not wish to shed blood, but I have no choice but to fight for the possibility of peace and for the sake of my people."); next; switch(select("Yes, I want to join you.", "End Conversation")) { case 1: cutin "bat_crua1",2; mes("[Prince Croix]"); mes("Thank you so much. I feel like I can win with the help of adventurers like you."); mes("Now, please go downstairs and join your comrades in sharpening their skills to fight the enemy!"); break; case 2: mes("[Prince Croix]"); mes("For Maroll!"); break; } break; } close2; cutin "bat_crua1",255; cutin "bat_crua2",255; end; } bat_room,161,140,3 script Prince Croix's Aide#01 4_M_CRU_HEAD,{ end; } bat_room,161,142,3 script Prince Croix's Aide#02 4_M_CRU_HEAD,{ end; } bat_room,160,159,3 script General Guillaume 4_M_KY_KIYOM,{ cutin "bat_kiyom2",2; mes("[General Guillaume]"); mes("Hot-blooded adventurer, we need your ability to win this battle."); next; switch(select("What's the reason for the Battle?", "Tell me about Prince Croix")) { case 1: cutin "bat_kiyom1",2; mes("[General Guillaume]"); mes("Our great king, Marcel Marollo VII, is very sick lately."); mes("His Majesty has declared that he has chosen either me or Prince Croix as the next king amongst his 9 sons."); next; mes("[General Guillaume]"); mes("Two kings can't share a nation! Only the one victorious from His Majesty's appointed battle will be enthroned."); next; mes("[General Guillaume]"); mes("This is, however, not just a battle between us. This battle will determine the future of this country."); mes("I pledge on my honor to prove that I'm the one who can protect this Maroll from outside threats."); next; switch(select("Yes, I want to join you.", "End Conversation")) { case 1: cutin "bat_kiyom2",2; mes("[General Guillaume]"); mes("Welcome to my army, comrade."); mes("Your eyes tell me that you're a soldier that I can trust."); next; mes("[General Guillaume]"); mes("Now, go upstairs and apply for battle with your comrades."); mes("I'm sure they'll welcome you whole-heartedly!"); break; case 2: mes("[General Guillaume]"); mes("I'll be the one who will capture the flag!"); break; } break; case 2: cutin "bat_kiyom1",2; mes("[General Guillaume]"); mes("The 5th Prince Croix is currently titled as the Prime Minister of Maroll."); mes("He thinks all national matters of a nation can be discussed and determined on a desk,\r" "and believes in peaceful co-existence with other countries."); next; mes("[General Guillaume]"); mes("He's too ignorant to admit that so-called peace is built on countless lives that are sacrificed in " "wars while normal citizens and upper classes can live, oblivious to the horrors that allow them to live that way."); next; mes("[General Guillaume]"); mes("He's too naive to understand the reality...."); mes("I can't leave Maroll to someone like him who lives in a dream!"); next; mes("[General Guillaume]"); mes("His unrealistic beliefs will drown this country in poverty and make the people weak. If he becomes the king, " "Maroll will never rest from the onslaughts of other countries."); mes("I want to teach him what makes this small country so powerful and prosperous. It's military power!"); next; switch(select("I want to join your army!", "End Conversation")) { case 1: cutin "bat_kiyom2",2; mes("[General Guillaume]"); mes("Welcome to my army, comrade."); mes("Your eyes tell me that you're a soldier that I can trust."); next; mes("[General Guillaume]"); mes("Now, go upstairs and apply for battle from your comrades."); mes("I'm sure they'll welcome you whole-heartedly!"); break; case 2: mes("[General Guillaume]"); mes("I'll be the one who will capture the flag!"); break; } break; } close2; cutin "bat_kiyom1",255; cutin "bat_kiyom2",255; end; } //== Flags ================================================= //bat_room,140,160,3 script Guillaume Base#roomflag1 1_FLAG_LION,{ end; } //bat_room,167,160,3 script Guillaume Base#roomflag2 1_FLAG_LION,{ end; } //bat_room,140,139,3 script Croix Base#roomflag1 1_FLAG_EAGLE,{ end; } //bat_room,167,139,3 script Croix Base#roomflag2 1_FLAG_EAGLE,{ end; } //== BattleGround Warper =================================== bat_room,148,150,5 script Teleporter#Battlefield 4_F_TELEPORTER,{ mes("[Teleporter]"); mes("Do you wish to leave the battlefield? Use my services to return to town."); next; switch(select("Leave", "Don't Leave")) { case 1: mes("[Teleporter]"); switch(bat_return) { default: case 1: setarray .@mapname$[0], _("Prontera"), "prontera"; setarray .@xy[0],116,72; break; case 2: setarray .@mapname$[0], _("Morroc"), "moc_ruins"; setarray .@xy[0],152,48; break; case 3: setarray .@mapname$[0], _("Al De Baran"), "aldebaran"; setarray .@xy[0],168,112; break; case 4: setarray .@mapname$[0], _("Geffen"), "geffen"; setarray .@xy[0],120,39; break; case 5: setarray .@mapname$[0], _("Payon"), "payon"; setarray .@xy[0],161,58; break; case 6: setarray .@mapname$[0], _("Lighthalzen"), "lighthalzen"; setarray .@xy[0],159,93; break; case 7: setarray .@mapname$[0], _("Rachel"), "rachel"; setarray .@xy[0],115,124; break; } mesf("You will be sent back to %s.", .@mapname$[0]); close2; warp .@mapname$[1],.@xy[0],.@xy[1]; break; case 2: mes("[Teleporter]"); mes("I'll be here whenever you're in need of my services."); close; } end; } - script Maroll Battle Recruiter::BatRecruit 4_F_JOB_KNIGHT,{ mes("[Maroll Battle Recruiter]"); mes("Good day, adventurer."); mes("I'm a knight from a far country called Maroll Kingdom."); next; mes("[Maroll Battle Recruiter]"); mes("The two princes of the kingdom are now battling for the throne of Maroll, and are in need of experienced soldiers like you."); mes("How would you like to lend your power to one of the princes in the Maroll Kingdom?"); next; switch(select("Join", "Don't Join")) { case 1: mes("[Maroll Battle Recruiter]"); mes("May the war god bless you."); close2; getmapxy(.@mapname$, .@x, .@y, UNITTYPE_NPC); if (.@mapname$ == "prontera") bat_return = 1; else if (.@mapname$ == "moc_ruins") bat_return = 2; else if (.@mapname$ == "aldebaran") bat_return = 3; else if (.@mapname$ == "geffen") bat_return = 4; else if (.@mapname$ == "payon") bat_return = 5; else if (.@mapname$ == "lighthalzen") bat_return = 6; else if (.@mapname$ == "rachel") bat_return = 7; else bat_return = 1; warp "bat_room",154,150; break; case 2: mes("[Maroll Battle Recruiter]"); mes("I'll always be stationed here for more soldiers. Feel free to come back whenever you're interested."); close; } end; } prontera,123,83,3 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit1 4_F_JOB_KNIGHT moc_ruins,75,162,3 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit2 4_F_JOB_KNIGHT aldebaran,146,109,3 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit3 4_F_JOB_KNIGHT geffen,109,66,3 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit4 4_F_JOB_KNIGHT payon,189,105,3 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit5 4_F_JOB_KNIGHT lighthalzen,153,86,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit6 4_F_JOB_KNIGHT rachel,149,138,3 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit7 4_F_JOB_KNIGHT //== Additional warps ====================================== // Empty bat_room,57,81,0 warp bat1 1,1,bat_room,154,149 bat_room,57,90,0 warp bat2 1,1,bat_room,154,149 // Empty bat_room,85,81,0 warp bat5 1,1,bat_room,154,149 bat_room,85,90,0 warp bat6 1,1,bat_room,154,149 // Free BG bat_room,113,81,0 warp bat9 1,1,bat_room,154,149 bat_room,113,90,0 warp bat10 1,1,bat_room,154,149 // Free BG bat_room,141,81,0 warp bat13 1,1,bat_room,154,149 bat_room,141,90,0 warp bat14 1,1,bat_room,154,149 // Free BG bat_room,169,81,0 warp bat17 1,1,bat_room,154,149 bat_room,169,90,0 warp bat18 1,1,bat_room,154,149 // Free BG bat_room,197,81,0 warp bat21 1,1,bat_room,154,149 bat_room,197,90,0 warp bat22 1,1,bat_room,154,149 // Free BG bat_room,225,81,0 warp bat25 1,1,bat_room,154,149 bat_room,225,90,0 warp bat26 1,1,bat_room,154,149 // Empty bat_room,253,81,0 warp bat29 1,1,bat_room,154,149 bat_room,253,90,0 warp bat30 1,1,bat_room,154,149 // Empty bat_room,253,220,0 warp bat31 1,1,bat_room,154,149 bat_room,253,211,0 warp bat32 1,1,bat_room,154,149 //== Kafra ================================================= bat_room,148,147,4 script Kafra Staff::kaf_bat 4_F_KAFRA9,{ cutin "kafra_09",2; callfunc "F_Kafra",0,2,1,150,0; } //== Repairman ============================================= bat_room,138,144,4 script Repairman#bg 4_M_04,{ callfunc("repairmain", _("Repairman")); end; } //== GM Management NPC ===================================== bat_room,1,151,3 script Switch#batgnd 4_DOG01,{ .@i = callfunc("F_GM_NPC",1854,0); if (.@i == -1) { mes("The command has been cancelled."); close; } else if (.@i == 0) { end; } else { mes("May I help you?"); next; switch(select("Close Battlefield", "Open Battlefield", "Reset a01", "Reset b01", "Reset a02", "Reset b02")) { case 1: disablenpc "Tierra Gorge Officer#01a"; disablenpc "Tierra Gorge Officer#02a"; disablenpc "Tierra Gorge Officer#01b"; disablenpc "Tierra Gorge Officer#02b"; disablenpc "Flavius Officer#01a"; disablenpc "Flavius Officer#01b"; disablenpc "Flavius Officer#02a"; disablenpc "Flavius Officer#02b"; break; case 2: enablenpc "Tierra Gorge Officer#01a"; enablenpc "Tierra Gorge Officer#02a"; enablenpc "Tierra Gorge Officer#01b"; enablenpc "Tierra Gorge Officer#02b"; enablenpc "Flavius Officer#01a"; enablenpc "Flavius Officer#01b"; enablenpc "Flavius Officer#02a"; enablenpc "Flavius Officer#02b"; break; case 3: donpcevent "start#bat_a01::OnEnable"; break; case 4: donpcevent "start#bat_b01::OnEnable"; break; case 5: donpcevent "start#bat_a02::OnEnable"; break; case 6: donpcevent "start#bat_b02::OnEnable"; break; } mes("Complete"); close; } } //== Badges Exchange ======================================= bat_room,160,150,3 script Erundek 4_M_MANAGER,{ if (checkweight(Knife,1) == 0) { mes("- Wait a minute !! -"); mes("- Currently you're carrying -"); mes("- too many items with you. -"); mes("- Please try again -"); mes("- after you loose some weight. -"); close; } mes("[Erundek]"); mes("Do you have the battlefield badges?"); mes("I can exchange Bravery Badges and Valor Badges for reward items."); next; switch(select("Exchange Badges", "Check the Catalog")) { case 1: mes("[Erundek]"); mes("Which type of items would you like to exchange?"); mes("To check more information about the reward items, please use our ^3131FFCatalog^000000."); next; switch(select("Weapon", "Armor", "Accessory", "Consumable")) { case 1: mes("[Erundek]"); mes("You chose ^3131FFWeapon^000000."); mes("The following weapons are available for exchange with the battlefield badges."); mes("Please note that items for ^3131FFBravery Badges are indicated as (BB)^000000, and ^3131FFValor Badges as (VB)^000000."); next; switch(select("Dagger/OneSword/TwoSword/TwoSpear", "Staff/Mace/TwoAxe/Shuriken", "Bow/Katar/Music/Whip", "Book/Knuckle", "Revolver/Rifle/Gatling/Shotgun/Launcher")) { case 1: mes("[Erundek]"); mes("The following items are available in the ^3131FFDagger, One-Handed Sword, Two-Handed Sword, and Two-Handed Spear^000000 category."); next; setarray .@Weapons[0],13036,7828,13037,7829,13411,7828,13410,7829,1183,7828,1184,7829,1425,7828,1482,7829; break; case 2: mes("[Erundek]"); mes("The following items are available in the ^3131FFStaff / Mace / Two-Handed Axe / Huuma Shuriken^000000 category."); next; setarray .@Weapons[0],1632,7828,1633,7829,1634,7828,1635,7829,1543,7828,1542,7829,1380,7828,1379,7829,13305,7828,13306,7829; break; case 3: mes("[Erundek]"); mes("The following weapons are available in the ^3131FFBow / Katar / Musical Instrument / Whip^000000 category."); next; setarray .@Weapons[0],1739,7828,1738,7829,1279,7828,1280,7829,1924,7828,1923,7829,1978,7828,1977,7829; break; case 4: mes("[Erundek]"); mes("The following weapons are available in the ^3131FFBook / Knuckle^000000 category."); next; setarray .@Weapons[0],1574,7828,1575,7829,1824,7828,1823,7829; break; case 5: mes("[Erundek]"); mes("The following weapons are available in the ^3131FFRevolver / Rifle / Gatling Gun / Shotgun / Grenade Launcher^000000 category."); next; setarray .@Weapons[0],13108,7828,13171,7829,13172,7828,13173,7829,13174,7829; break; } .@menu$ = ""; for (.@i = 0; .@i < getarraysize(.@Weapons); .@i += 2) .@menu$ += getitemname(.@Weapons[.@i]) + ((.@Weapons[.@i+1]==7828) ? _("(BB)") : _("(VB)")) + ":"; .@i = (select(.@menu$)-1)*2; .@type$ = ((.@Weapons[.@i+1]==7828) ? _("(BB)") : _("(VB)")); mes("[Erundek]"); mesf("You chose ^3131FF%s%s^000000.", getitemname(.@Weapons[.@i]), .@type$); mesf("You can exchange for this item with ^FF0000100 %s^000000.", getitemname(.@Weapons[.@i+1])); mes("Would you like to exchange?"); next; switch(select("Do not exchange", "Exchange")) { case 1: break; case 2: mes("[Erundek]"); mesf("Would you like to spend ^FF0000100 %s^000000 and receive a ^3131FF%s%s^000000?", getitemname(.@Weapons[.@i+1]), getitemname(.@Weapons[.@i]), .@type$); next; mes("[Erundek]"); mes("Remember, Battleground Reward Items are ^FF0000Character Bound^000000. Are you sure you want this item?"); next; switch(select("Yes", "No")) { case 1: mes("[Erundek]"); if (countitem(.@Weapons[.@i+1]) >= 100) { mes("Thank you for exchanging."); delitem .@Weapons[.@i+1],100; getitem .@Weapons[.@i],1; } else mes("I'm sorry, but you don't have enough badges to exchange."); close; case 2: break; } break; } mes("[Erundek]"); mes("Do you need more time to check the items?"); close; case 2: mes("[Erundek]"); mes("You chose ^3131FFArmor^000000."); mes("The following armors are available for exchange with the battlefield badges."); next; switch(select("Garments / Shoes", "Armor")) { case 1: setarray .@items[0],2538,50,2539,50,2540,50,2435,50,2436,50,2437,50; break; case 2: setarray .@items[0],2376,80,2377,80,2378,80,2379,80,2380,80,2381,80,2382,80; break; } break; case 3: mes("[Erundek]"); mes("You chose ^3131FFAccessory^000000."); mes("You can exchange the Medal of Honors with your Badges according to the job classes, as follows:"); next; setarray .@items[0],2733,500,2720,500,2721,500,2722,500,2723,500,2724,500,2725,500; .@menu1$ = sprintf("%s:%s/%s:%s:%s:%s:%s:%s", jobname(Job_Gunslinger), jobname(Job_Swordman), jobname(Job_Star_Gladiator), jobname(Job_Thief), jobname(Job_Acolyte), jobname(Job_Mage), jobname(Job_Archer), jobname(Job_Merchant)); break; case 4: mes("[Erundek]"); mes("You chose ^3131FFConsumable^000000."); mes("The following consumable items are available for exchange with the battlefield badges:"); next; setarray .@items[0],12269,10,12270,10,12271,5,12272,10,12273,10; break; } break; case 2: mes("[Erundek]"); mes("We have many items, so please take a look and purchase deliberately."); close2; readbook 11010,1; end; } .@menu$ = ""; if (.@menu1$ != "") .@menu$ = .@menu1$; else for (.@i = 0; .@i < getarraysize(.@items); .@i += 2) .@menu$ += getitemname(.@items[.@i])+":"; .@i = (select(.@menu$)-1)*2; mes("[Erundek]"); mesf("You chose ^3131FF%s^000000.", getitemname(.@items[.@i])); switch(.@items[.@i]) { case 2720: mes("This item is for Swordman and Taekwon Master Class only."); break; case 2721: mes("This item is for Thief Class only."); break; case 2722: mes("This item is for Acolyte Class only."); break; case 2723: mes("This item is for Magician Class only."); break; case 2724: mes("This item is for Archer Class only."); break; case 2725: mes("This item is for Merchant Class only."); break; case 2733: mes("This item is for Gunslinger only."); break; default: break; } mesf("You can exchange for this item with ^FF0000%d %s or %d %s^000000.", .@items[.@i+1], getitemname(7828), .@items[.@i+1], getitemname(7829)); mes("Would you like to exchange?"); next; switch(select("Do not exchange", "Exchange")) { case 1: mes("[Erundek]"); mes("Do you need more time to check the items?"); break; case 2: mes("[Erundek]"); mes("Which Badge do you want to exchange?"); mesf("You need ^3131FF%d Badges^000000 to exchange.", .@items[.@i+1]); next; if (.@item[0] < 12269 || .@item[0] > 12273 ) { mes("[Erundek]"); mes("Remember, Battleground Reward Items are ^FF0000Character Bound^000000. Are you sure you want this item?"); next; } .@j = select("Bravery Badge", "Valor Badge", "Cancel"); mes("[Erundek]"); if (.@j == 3) { mes("You cancelled the exchange."); break; } .@cost = ((.@j==1)?7828:7829); if (countitem(.@cost) >= .@items[.@i+1]) { mes("Thank you for exchanging."); delitem .@cost, .@items[.@i+1]; getitem .@items[.@i],1; } else mesf("You do not have enough %ss.", getitemname(.@cost)); break; } close; }