//================= Hercules Script =======================================
//= _ _ _
//= | | | | | |
//= | |_| | ___ _ __ ___ _ _| | ___ ___
//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
//= | | | | __/ | | (__| |_| | | __/\__ \
//= \_| |_/\___|_| \___|\__,_|_|\___||___/
//================= License ===============================================
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
//= Copyright (C) 2012-2020 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 <http://www.gnu.org/licenses/>.
//=========================================================================
// 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;
}