summaryrefslogtreecommitdiff
path: root/npc/re/other/pvp.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/re/other/pvp.txt')
-rw-r--r--npc/re/other/pvp.txt540
1 files changed, 540 insertions, 0 deletions
diff --git a/npc/re/other/pvp.txt b/npc/re/other/pvp.txt
new file mode 100644
index 000000000..6dfc0631b
--- /dev/null
+++ b/npc/re/other/pvp.txt
@@ -0,0 +1,540 @@
+//===== rAthena Script =======================================
+//= PvP NPCs
+//===== By: ==================================================
+//= kobra_k88; L0ne_W0lf, Elias (og2)
+//===== Current Version: =====================================
+//= 2.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= PvP NPCs that are found in the Inns in major cities.
+//= Includes Yoyo Mode, Nightmare Mode, and Event Mode
+//===== Additional Comments: =================================
+//= 2.0 Narrators/GateKeepers,etc. Translated from the Official 2011 [Elias]
+//= 2.1 Changed PVP Narrator and GateKeeper to Floating NPC [Elias]
+//============================================================
+
+- script PVP Narrator::pvpe -1,{
+ mes "[PVP Narrator]";
+ mes "Hello and welcome!";
+ mes "I am in charge of";
+ mes "explaining the PVP Mode.";
+ mes "I am the PVP Narrator!";
+ next;
+ switch(select("What is PVP?","What are the PVP Modes?","What are the rules for PVP?","Save Position.","End Dialog."))
+ {
+ case 1:
+ mes "[PVP Narrator]";
+ mes "In short form";
+ mes "PVP means,";
+ mes "' Player VS Player Mode '";
+ mes "It's a unique place for people";
+ mes "To duel with each other.";
+ next;
+ mes "[PVP Narrator]";
+ mes "Just tell the";
+ mes "^3355FFGate Keeper^000000";
+ mes "That you want to try. He will";
+ mes "let you into the PVP square.";
+ next;
+ mes "[PVP Narrator]";
+ mes "But, You need to be at";
+ mes "least level 31. And you";
+ mes "must pay the 500 zeny";
+ mes "entrance fee in order to";
+ mes "To enter a PVP Fight Square.";
+ break;
+ case 2:
+ mes "[PVP Narrator]";
+ mes "When you are qualified, You";
+ mes "can choose one of two Modes.";
+ mes "Yoyo Mode, Or";
+ mes "Nightmare Mode.";
+ next;
+ mes "[PVP Narrator]";
+ mes "Yoyo Mode is risk free.";
+ mes "You can experience PVP";
+ mes "without any restriction or";
+ mes "punishment. It is recommended";
+ mes "that you practice your skills";
+ mes "here before you move on.";
+ next;
+ mes "[PVP Narrator]";
+ mes "Nightmare Mode is very";
+ mes "dangerous! Please use caution.";
+ mes "You will lose some of your real";
+ mes "EXP when you are defeated. And";
+ mes "There is a small chance that";
+ mes "you will drop some equipment.";
+ next;
+ mes "[PVP Narrator]";
+ mes "However, if you win, the";
+ mes "rewards can be great!";
+ mes "To avoid misunderstanding.";
+ mes "You should think it over";
+ mes "twice before you go there...";
+ mes "Good Luck!";
+ break;
+ case 3:
+ mes "[PVP Narrator]";
+ mes "Each of the Fight squares";
+ mes "have a row of Narrators to";
+ mes "choose from based on your";
+ mes "qualifications.";
+ next;
+ mes "[PVP Narrator]";
+ mes "Each Narrator will ask";
+ mes "which of the five PVP maps";
+ mes "you wish to go to.";
+ mes "Choose, and go in!";
+ next;
+ mes "[PVP Narrator]";
+ mes "Each map has a limitation on";
+ mes "the number of people who can";
+ mes "participate. So you will see";
+ mes "figures in the corner showing";
+ mes "'Attendee/total'.";
+ next;
+ mes "[PVP Narrator]";
+ mes "Also, there is a hidden EXP";
+ mes "value in PVP mode. This EXP";
+ mes "score will only apply inside";
+ mes "of the PVP zone, so do not";
+ mes "worry.";
+ next;
+ mes "[PVP Narrator]";
+ mes "Every player's EXP at the";
+ mes "beginning is usually 5 points.";
+ mes "If you win, you will";
+ mes "increse your EXP by 1 point";
+ next;
+ mes "[PVP Narrator]";
+ mes "In the same way, when you";
+ mes "lose... Your EXP will";
+ mes "drop by 5 points.";
+ mes "So be careful!";
+ next;
+ mes "[PVP Narrator]";
+ mes "When you are defeated";
+ mes "And your EXP is equal";
+ mes "to or less than 0,";
+ mes "You will be removed from PVP";
+ mes "And your duel is finished!";
+ next;
+ mes "[PVP Narrator]";
+ mes "However, If your EXP is more";
+ mes "than 0. You can still get help";
+ mes "Through other players healing...";
+ mes "Do you get it?";
+ next;
+ mes "[PVP Narrator]";
+ mes "The fighting commands inside of";
+ mes "PVP Are the same as the normal.";
+ mes "All the basic controls are the";
+ mes "same.";
+ next;
+ mes "[PVP Narrator]";
+ mes "However, there is one thing...";
+ mes "Within the PVP fight square,";
+ mes "And in the PVP fighting zones";
+ mes "You cannot save your position.";
+ mes "Remember well... These rules";
+ mes "can help to ensure your victory.";
+ break;
+ case 4:
+ mes "[PVP Narrator]";
+ mes "Position saved...";
+ mes "Successfully.";
+ mes "Thank you very much, We";
+ mes "will see you again soon.";
+ if(strnpcinfo(4) == "morocc_in") { savepoint "morocc_in",141,139; }
+ if(strnpcinfo(4) == "alberta_in") { savepoint "alberta_in",22,148; }
+ if(strnpcinfo(4) == "prt_in") { savepoint "prt_in",54,137; }
+ if(strnpcinfo(4) == "geffen_in") { savepoint "geffen_in",70,59; }
+ if(strnpcinfo(4) == "payon_in01") { savepoint "payon_in01",142,46; }
+ break;
+ case 5:
+ mes "[PVP Narrator]";
+ mes "In this war between Monsters";
+ mes "and Humans. This competition";
+ mes "between people, The PVP Mode!";
+ mes "Encourages us all to become";
+ mes "stronger. Come again.";
+ mes "We welcome your challenge!";
+ break;
+ }
+close;
+}
+
+//PVP Narrator's Duplicates
+morocc_in,144,138,4 duplicate(pvpe) PVP Narrator#pe1 84
+alberta_in,22,146,4 duplicate(pvpe) PVP Narrator#pe2 84
+prt_in,56,140,4 duplicate(pvpe) PVP Narrator#pe3 84
+geffen_in,67,63,4 duplicate(pvpe) PVP Narrator#pe4 84
+payon_in01,142,50,4 duplicate(pvpe) PVP Narrator#pe5 84
+geffen_in,67,63,4 duplicate(pvpe) PVP Narrator#pe6 84
+
+//Gate Keeper (Floating NPC, Locations below)
+- script Gate Keeper::gkut -1,{
+ mes "[Gate Keeper]";
+ mes "Glad to be of service.";
+ mes "I will open the PVP fight";
+ mes "square for you! If you have";
+ mes "any questions about the PVP";
+ mes "modes or rules, Please ask";
+ mes "the Narrator...";
+ next;
+ switch(select("^FF5533' PvP Nightmare Mode'^000000","^3355FF' PvP Yoyo Mode'^000000","^3355FF' PvP Event Mode'^000000","Quit"))
+ {
+ case 1:
+ mes "[Gate Keeper]";
+ mes "I am sorry, but currently the Nightmare mode service is not available.";
+ mes "Please use the Yoyo mode instead. We apologize for the inconvenience.";
+ break;
+ case 2:
+ mes "[Gate Keeper]";
+ mes "The admission fee is 500 Zeny.";
+ mes "Do you want to move";
+ mes "to the Yoyo Mode";
+ mes "fight square?";
+ next;
+ switch(select("Move","Cancel")) {
+ case 1:
+ if ((Zeny > 499) && (BaseLevel > 30)) {
+ set Zeny, Zeny - 500;
+ warp "pvp_y_room",51,23;
+ }
+ else {
+ mes "[Gate Keeper]";
+ mes "Excuse me, but";
+ mes "did you not come prepared?";
+ mes "Double check that you have the";
+ mes "500 Zeny entrance fee, and";
+ mes "that you are at least level 31!";
+ }
+ break;
+ case 2:
+ mes "[Gate Keeper]";
+ mes "In this war between Monsters";
+ mes "and Humans. This competition";
+ mes "between people, The PVP Mode!";
+ mes "Encourages us all to become";
+ mes "stronger. Come again.";
+ mes "We welcome your challenge!";
+ break;
+ }
+ break;
+ case 3:
+ mes "[Gate Keeper]";
+ mes "Welcome";
+ mes "Please double check";
+ mes "That you have the admission or viewing ticket!";
+ next;
+ if ((countitem(7028) == 0) && (countitem(7029) == 0))
+ {
+ mes "[Gate Keeper]";
+ mes "Eh? You don't have it? Then I";
+ mes "am sorry, this fight square is";
+ mes "only for people who have";
+ mes "admission or viewing tickets.";
+ mes "You cannot come in without it.";
+ close;
+ }
+ mes "[Gate Keeper]";
+ mes "Yes, thank you for participating. Have fun!";
+ warp "pvp_room",51,23;
+ break;
+ case 4:
+ mes "[Gate Keeper]";
+ mes "In this war between Monsters";
+ mes "and Humans. This competition";
+ mes "between people, The PVP Mode!";
+ mes "Encourages us all to become";
+ mes "stronger. Come again.";
+ mes "We welcome your challenge!";
+ break;
+ }
+close;
+}
+
+//Gate Keeper's Duplicates
+morocc_in,144,142,4 duplicate(gkut) Gate Keeper#gke1 83
+alberta_in,26,146,4 duplicate(gkut) Gate Keeper#gke2 83
+prt_in,52,140,4 duplicate(gkut) Gate Keeper#gke3 83
+geffen_in,63,63,4 duplicate(gkut) Gate Keeper#gke4 83
+payon_in01,140,53,4 duplicate(gkut) Gate Keeper#gke5 83
+
+//Fight square Reception Staff (Locations below)
+- script FSRS::fsr -1,{
+if(strnpcinfo(4) == "pvp_y_room") {
+ set .@mapc1, getmapusers("pvp_y_8-1");
+ set .@mapc2, getmapusers("pvp_y_8-2");
+ set .@mapc3, getmapusers("pvp_y_8-3");
+ set .@mapc4, getmapusers("pvp_y_8-4");
+ set .@mapc5, getmapusers("pvp_y_8-5");
+ set .@showc1$, "Prontera [ "+.@mapc1+" / 128 ]";
+ set .@showc2$, "Izlude [ "+.@mapc2+" / 128 ]";
+ set .@showc3$, "Payon [ "+.@mapc3+" / 128 ]";
+ set .@showc4$, "Alberta [ "+.@mapc4+" / 128 ]";
+ set .@showc5$, "Morroc [ "+.@mapc5+" / 128 ]";
+ set .@showcexit$, "Cancel.";
+ switch(select(.@showc1$,.@showc2$,.@showc3$,.@showc4$,.@showc5$,.@showcexit$)) {
+ case 1:
+ if (.@mapc1 >= 128) {
+ mes "[PVP Fight Square Reception Staff]";
+ mes "This map is currently full.";
+ } else { warp "pvp_y_8-1",0,0; }
+ break;
+ case 2:
+ if (.@mapc2 >= 128) {
+ mes "[PVP Fight Square Reception Staff]";
+ mes "This map is currently full.";
+ } else { warp "pvp_y_8-2",0,0; }
+ break;
+ case 3:
+ if (.@mapc3 >= 128) {
+ mes "[PVP Fight Square Reception Staff]";
+ mes "This map is currently full.";
+ } else { warp "pvp_y_8-3",0,0; }
+ break;
+ case 4:
+ if (.@mapc4 >= 128) {
+ mes "[PVP Fight Square Reception Staff]";
+ mes "This map is currently full.";
+ } else { warp "pvp_y_8-4",0,0; }
+ break;
+ case 5:
+ if (.@mapc5 >= 128) {
+ mes "[PVP Fight Square Reception Staff]";
+ mes "This map is currently full.";
+ } else { warp "pvp_y_8-5",0,0; }
+ break;
+ case 6:
+ break;
+ }
+close;
+ } else {
+ set .@mapc1, getmapusers("pvp_n_8-1");
+ set .@mapc2, getmapusers("pvp_n_8-2");
+ set .@mapc3, getmapusers("pvp_n_8-3");
+ set .@mapc4, getmapusers("pvp_n_8-4");
+ set .@mapc5, getmapusers("pvp_n_8-5");
+ set .@showc1$, "Sandwich [ "+.@mapc1+" / 64 ]";
+ set .@showc2$, "Lock on [ "+.@mapc2+" / 32 ]";
+ set .@showc3$, "Four Room [ "+.@mapc3+" / 32 ]";
+ set .@showc4$, "Under cross [ "+.@mapc4+" / 32 ]";
+ set .@showc5$, "Compass Room [ "+.@mapc5+" / 32 ]";
+ set .@showcexit$, "Cancel.";
+ switch(select(.@showc1$,.@showc2$,.@showc3$,.@showc4$,.@showc5$,.@showcexit$)) {
+ case 1:
+ if (.@mapc1 >= 64) {
+ mes "[PVP Fight Square Reception Staff]";
+ mes "This map is currently full.";
+ } else { warp "pvp_n_8-1",0,0; }
+ break;
+ case 2:
+ if (.@mapc2 >= 64) {
+ mes "[PVP Fight Square Reception Staff]";
+ mes "This map is currently full.";
+ } else { warp "pvp_n_8-2",0,0; }
+ break;
+ case 3:
+ if (.@mapc3 >= 64) {
+ mes "[PVP Fight Square Reception Staff]";
+ mes "This map is currently full.";
+ } else { warp "pvp_n_8-3",0,0; }
+ break;
+ case 4:
+ if (.@mapc4 >= 64) {
+ mes "[PVP Fight Square Reception Staff]";
+ mes "This map is currently full.";
+ } else { warp "pvp_n_8-4",0,0; }
+ break;
+ case 5:
+ if (.@mapc5 >= 64) {
+ mes "[PVP Fight Square Reception Staff]";
+ mes "This map is currently full.";
+ } else { warp "pvp_n_8-5",0,0; }
+ break;
+ case 6:
+ break;
+ }
+close;
+}
+
+OnInit:
+ waitingroom "Free for all",0;
+end;
+}
+
+//Fight Square Reception Staff
+pvp_y_room,86,85,4 duplicate(fsr) Fight SQ Reception#f1 105
+pvp_n_room,30,85,4 duplicate(fsr) Fight SQ Reception#f2 105
+
+pvp_n_8-4,33,122,0 warp Link_1-11 0,2,pvp_n_8-4,0,0
+pvp_n_8-4,62,84,0 warp Link_1-12 1,1,pvp_n_8-4,0,0
+pvp_n_8-4,49,71,0 warp Link_1-21 1,1,pvp_n_8-4,0,0
+pvp_n_8-4,56,166,0 warp Link_1-22 1,1,pvp_n_8-4,0,0
+pvp_n_8-4,99,180,0 warp Link_1-31 2,1,pvp_n_8-4,0,0
+pvp_n_8-4,137,84,0 warp Link_1-32 1,1,pvp_n_8-4,0,0
+pvp_n_8-4,150,71,0 warp Link_1-41 1,1,pvp_n_8-4,0,0
+pvp_n_8-4,144,166,0 warp Link_1-42 1,1,pvp_n_8-4,0,0
+pvp_n_8-5,30,30,0 warp Link_1-99 3,3,pvp_n_8-5,100,100
+
+// Event Contestant Entrance
+//============================================================
+pvp_room,54,85,4 script Registration Staff#1 105,{
+ if (countitem(7028) == 0) {
+ mes "[PVP Combat Square Register Staff]";
+ mes "Eh? How did you get in here?";
+ mes "This is the entrance for players only.";
+ mes "For details about viewers please proceed to the Register Staff on your right.";
+ close;
+ }
+
+ if (.pvp_close_n_room == 1 && .pvp_close_s_room == 1 && .pvp_close_w_room == 1 && .pvp_close_e_room == 1) {
+ Set .pvp_close_n_room,0;
+ Set .pvp_close_s_room,0;
+ Set .pvp_close_w_room,0;
+ Set .pvp_close_e_room,0;
+ }
+
+ if (select("Combat Square one :Cancel") == 1) {
+ mes "[PVP Combat Square Register Staff]";
+ mes "'"+ strcharinfo(0) +"'";
+ mes "Are you ready?!";
+ next;
+ if (select("Yes!:No!") == 1) {
+ mes "[PVP Combat Square Register Staff]";
+ mes "OK! I will send you inside";
+ mes "Good luck!";
+ close2;
+ delitem 7028,1; //Invite_For_Duel
+ while(1) {
+ switch(rand(1,4)) {
+ case 1:
+ if (.pvp_close_n_room == 0) {
+ set .pvp_close_n_room,1;
+ warp "pvp_2vs2",40,59;
+ end;
+ }
+ case 2:
+ if (.pvp_close_s_room == 0) {
+ set .pvp_close_s_room,1;
+ warp "pvp_2vs2",59,40;
+ end;
+ }
+ case 3:
+ if (.pvp_close_w_room == 0) {
+ set .pvp_close_w_room,1;
+ warp "pvp_2vs2",20,40;
+ end;
+ }
+ case 4:
+ if (.pvp_close_e_room == 0) {
+ set .pvp_close_e_room,1;
+ warp "pvp_2vs2",40,20;
+ end;
+ }
+ }
+ }
+ }
+ mes "[PVP Combat Square Register Staff]";
+ mes "Come back anytime you are ready.";
+ close;
+ }
+ close;
+
+OnInit:
+ Set .pvp_close_n_room,0;
+ Set .pvp_close_s_room,0;
+ Set .pvp_close_w_room,0;
+ Set .pvp_close_e_room,0;
+ waitingroom "Combat Square players entrance only",0;
+ end;
+}
+
+// Spectator Entrance
+//============================================================
+- script Spectator's Entrance#dum::PVPSpectator -1,{
+ if (countitem(7029) == 0) {
+ mes "[PVP Compete Square Register Staff]";
+ mes "This is the entrance for viewers.";
+ mes "For details about players entrance please proceed to the Register Staff on your left.";
+ close;
+ }
+
+ if (select("Compete Square one:Cancel") == 1) {
+ mes "[PVP Combat Square Register Staff]";
+ mes "You got it, thanks for participating. Have fun!";
+ close2;
+ delitem 7029,1; //Admission_For_Duel
+ switch(rand(1,4)) {
+ case 1: warp "pvp_2vs2",39,7; end;
+ case 2: warp "pvp_2vs2",39,73; end;
+ case 3: warp "pvp_2vs2",7,39; end;
+ case 4: warp "pvp_2vs2",73,39; end;
+ }
+ }
+ close;
+
+OnInit:
+ waitingroom "Compete Square viewer's entrance",0;
+ end;
+}
+
+pvp_room,62,85,4 duplicate(PVPSpectator) Spectator's Entrance#1 105
+pvp_room,70,85,4 duplicate(PVPSpectator) Spectator's Entrance#2 105
+pvp_room,78,85,4 duplicate(PVPSpectator) Spectator's Entrance#3 105
+pvp_room,86,85,4 duplicate(PVPSpectator) Spectator's Entrance#4 105
+
+// Spectator Warps
+//============================================================
+- script Combat Square Staff#dum::PVPSpecWarp -1,{
+OnTouch:
+ mes "[Combat Square Staff]";
+ mes "May I help you?";
+ if (select("To the center viewer seat.:Leave Combat Square.") == 1) {
+ warp "pvp_2vs2",38,38;
+ end;
+ }
+ warp "pvp_room",84,39;
+ end;
+}
+
+pvp_2vs2,5,4,0 duplicate(PVPSpecWarp) Combat Square Staff#1 45,1,1,{
+pvp_2vs2,5,74,0 duplicate(PVPSpecWarp) Combat Square Staff#2 45,1,1
+pvp_2vs2,74,74,0 duplicate(PVPSpecWarp) Combat Square Staff#3 45,1,1
+pvp_2vs2,74,5,0 duplicate(PVPSpecWarp) Combat Square Staff#4 45,1,1
+pvp_2vs2,40,40,0 script Combat Square Staff#5 45,1,1,{
+ mes "[Combat Square Staff]";
+ mes "May I help you?";
+ if (select("To the side viewer seat.:Leave Combat Square.") == 1) {
+ switch(rand(1,4)) {
+ case 1: warp "pvp_2vs2",39,7; end;
+ case 2: warp "pvp_2vs2",39,73; end;
+ case 3: warp "pvp_2vs2",7,39; end;
+ case 4: warp "pvp_2vs2",73,39; end;
+ }
+ }
+ warp "pvp_c_room",84,39;
+ end;
+}
+
+// PVP Area Exit warp
+//============================================================
+pvp_room,51,19,0 script out#eventpvp 45,4,2,{
+OnTouch:
+ mes "[Combat Square Staff]";
+ mes "Did you have fun in Combat Square?";
+ mes "May I ask where you want to go?";
+ next;
+ switch(select("prontera.:morocc.:geffen.:payon.:alberta.:Cancel.")) {
+ case 1: warp "prontera",107,60; end;
+ case 2: warp "morocc",157,96; end;
+ case 3: warp "geffen",120,36; end;
+ case 4: warp "payon",96,100; end;
+ case 5: warp "alberta",41,243; end;
+ case 6: close;
+ }
+}