diff options
Diffstat (limited to 'npc/re/other/pvp.txt')
-rw-r--r-- | npc/re/other/pvp.txt | 540 |
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; + } +} |