123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553 |
- //===== eAthena Script =======================================
- //= PvP NPCs
- //===== By: ==================================================
- //= kobra_k88; L0ne_W0lf
- //===== Current Version: =====================================
- //= 1.4
- //===== Compatible With: =====================================
- //= eAthena SVN
- //===== Description: =========================================
- //= [Aegis Conversion]
- //= PvP NPCs that are found in the Inns in major cities.
- //= Includes Yoyo Mode, Nightmare Mode, and Event Mode
- //=
- //= Breakdown of function "F_PVPNarrator"
- //= arg(0): Map to save player on
- //= arg(1): X position on getarg(0) map to save player
- //= arg(2): Y position on getarg(0) map to save player
- //===== Additional Comments: =================================
- //= 1.1 Fixed arena names for Nightmare mode. Added room limit
- //= check.[kobra_k88]
- //= 1.2 Fixed the bug that you aways savepoint in geffen.[shadowlady]
- //= 1.2a Added PvP Narrator function. Using args for Fight
- //= Square Helpers. [kobra_k88]
- //= 1.3 Rescripted to Aegis 10.3 standards. [L0ne_W0lf]
- //= Removed all receptioned for Yoyo mode, with the
- //= exception of the "Free for all" mode.
- //= Added PVP event NPCs.
- //= 1.4 Corrected NPC names to fall within proper restrictions. [L0ne_W0lf]
- //============================================================
- // Morroc
- //============================================================
- morocc_in,144,138,4 script PVPNarrator#moc 84,{
- callfunc "F_PVPNarrator","morocc_in",141,139;
- }
- morocc_in,144,142,4 script Gate Keeper#moc::PVPGateKeeper 83,{
- 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.";
- close;
- 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;
- end;
- }
- 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!";
- close;
- }
- 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!";
- close;
- }
- 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!";
- close2;
- warp "pvp_room",51,23;
- end;
- 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!";
- close;
- }
- }
- // Alberta
- //============================================================
- alberta_in,22,146,4 script PVP Narrator#alb 84,{
- callfunc "F_PVPNarrator","alberta_in",22,148;
- }
- alberta_in,26,146,4 duplicate(PVPGateKeeper) Gate Keeper#alb 83
- // Prontera
- //============================================================
- prt_in,56,140,4 script PVPNarrator#prt 84,{
- callfunc "F_PVPNarrator","prt_in",54,137;
- }
- prt_in,52,140,4 duplicate(PVPGateKeeper) Gate Keeper#prt 83
- // Geffen
- //============================================================
- geffen_in,67,63,4 script PVPNarrator#gef 84,{
- callfunc "F_PVPNarrator","geffen_in",70,59;
- }
- geffen_in,63,63,4 duplicate(PVPGateKeeper) Gate Keeper#gef 83
- // Payon
- //============================================================
- payon_in01,142,50,4 script PVPNarrator#pay 84,{
- callfunc "F_PVPNarrator","payon_in01",142,46;
- }
- payon_in01,140,53,4 duplicate(PVPGateKeeper) Gate Keeper#pay 83
- // PVP Yoyo Mode Staff
- //============================================================
- pvp_y_room,86,85,4 script Fight Square Reception#1 105,{
- set .@mapcount_1,getmapusers("pvp_y_8-1");
- set .@mapcount_2,getmapusers("pvp_y_8-2");
- set .@mapcount_3,getmapusers("pvp_y_8-3");
- set .@mapcount_4,getmapusers("pvp_y_8-4");
- set .@mapcount_5,getmapusers("pvp_y_8-5");
- while(1) {
- switch(select("Prontera [ "+.@mapcount_1+" / 128 ]:Izlude [ "+.@mapcount_2+" / 128 ]:Payon [ "+.@mapcount_3+" / 128 ]:Alberta [ "+.@mapcount_4+" / 128 ]:Morroc [ "+.@mapcount_5+" / 128 ]:Cancel")) {
- case 1:
- callsub S_CheckPVPRoom,@mapcount_1,"pvp_y_8-1";
- break;
- case 2:
- callsub S_CheckPVPRoom,@mapcount_2,"pvp_y_8-2";
- break;
- case 3:
- callsub S_CheckPVPRoom,@mapcount_3,"pvp_y_8-3";
- break;
- case 4:
- callsub S_CheckPVPRoom,@mapcount_4,"pvp_y_8-4";
- break;
- case 5:
- callsub S_CheckPVPRoom,@mapcount_5,"pvp_y_8-5";
- break;
- case 6:
- close;
- }
- }
- OnInit:
- waitingroom "Free For All",0;
- end;
- S_CheckPVPRoom:
- if (getarg(0) >= 128) {
- mes "[PVP Fight Square Reception Staff]";
- mes "This map is currently full.";
- next;
- return;
- }
- else {
- warp getarg(1),0,0;
- end;
- }
- }
- // PVP Nightmare Mode Staff
- //============================================================
- pvp_n_room,30,85,4 script Fight Square Reception#2 105,{
- set .@mapcount_1,getmapusers("pvp_n_8-1");
- set .@mapcount_2,getmapusers("pvp_n_8-2");
- set .@mapcount_3,getmapusers("pvp_n_8-3");
- set .@mapcount_4,getmapusers("pvp_n_8-4");
- set .@mapcount_5,getmapusers("pvp_n_8-5");
- while(1) {
- switch(select("Sandwich [ "+.@mapcount_1+" / 64 ]:Lock on [ "+.@mapcount_2+" / 32 ]:Four Room [ "+.@mapcount_3+" / 32 ]:Under cross [ "+.@mapcount_4+" / 32 ]:Compass Room [ "+.@mapcount_5+" / 32 ]:Cancel")) {
- case 1:
- callsub S_CheckPVPRoom,@mapcount_1,"pvp_n_8-1",64;
- break;
- case 2:
- callsub S_CheckPVPRoom,@mapcount_2,"pvp_n_8-2",32;
- break;
- case 3:
- callsub S_CheckPVPRoom,@mapcount_3,"pvp_n_8-3",32;
- break;
- case 4:
- callsub S_CheckPVPRoom,@mapcount_4,"pvp_n_8-4",32;
- break;
- case 5:
- callsub S_CheckPVPRoom,@mapcount_5,"pvp_n_8-5",32;
- break;
- case 6:
- close;
- }
- }
- OnInit:
- waitingroom "Free For All",0;
- end;
- S_CheckPVPRoom:
- if (getarg(0) >= getarg(2)) {
- mes "[PVP Fight Square Reception Staff]";
- mes "This map is currently full.";
- next;
- return;
- }
- else {
- warp getarg(1),0,0;
- end;
- }
- }
- // Function
- //============================================================
- function script F_PVPNarrator {
- 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.";
- close;
- 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!";
- close;
- 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.";
- close;
- case 4:
- mes "[PVP Narrator]";
- mes "Position saved...";
- mes "Successfully.";
- mes "Thank you very much, We";
- mes "will see you again soon.";
- close2;
- savepoint getarg(0),getarg(1),getarg(2);
- end;
- 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!";
- close;
- }
- }
- // 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
- //============================================================
- pvp_room,62,85,4 script Spectator's Entrance#1::PVPSpectator 105,{
- 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,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
- //============================================================
- pvp_2vs2,5,4,0 script Combat Square Staff#1::PVPSpecWarp 45,1,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,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,{
- set mapmove,0;
- 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;
- }
- }
|