diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 25f3b0777f..f831f61133 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -926,7 +926,7 @@ This special label triggers when a player kills another player. The variable OnNPCKillEvent: This special label triggers when a player kills a monster. The variable -'killedrid' is set to the Class of the monster killed. +'killedrid' is set to the Class (mob ID) of the monster killed. OnPCLoadMapEvent: diff --git a/npc/other/acolyte_warp.txt b/npc/other/acolyte_warp.txt new file mode 100644 index 0000000000..21d38166ba --- /dev/null +++ b/npc/other/acolyte_warp.txt @@ -0,0 +1,139 @@ +//===== rAthena Script ======================================= +//= Acolyte Warpers +//===== By: ================================================== +//= Euphy +//===== Current Version: ===================================== +//= 1.0 +//===== Compatible With: ===================================== +//= rAthena SVN +//===== Description: ========================================= +//= [Official Conversion] +//= Warpers to various towns. +//===== Additional Comments: ================================= +//= 1.0 First version. [Euphy] +//= Unsure if this is on kRO, so disabled for now. +//============================================================ + +prontera,98,121,4 script Acolyte#Prtclear 90,{ + mes "[Keiki]"; + mes "Hello there, adventurer."; + mes "I've been studying magic from all over Rune-Midgard to upgrade what I believe to be one of the greatest skills available to the acolyte class."; + next; + mes "[Keiki]"; + mes "I am the one and only Acolyte that has attained the Level 10 Warp Portal skill!"; + emotion e_dots,1; + next; + mes "[Keiki]"; + mes "That's right! And..."; + mes "I promise you that I don't forget locations that I have already memorized."; + mes "One day I will level up my skills to warp to wherever I please~"; + next; + mes "[Keiki]"; + mes "I am willing to warp you to the many locations that I have memorized for a small fee."; + mes "Would you like to use this service?"; + next; + switch(select("Yes:No")) { + case 1: + mes "[Keiki]"; + mes "Where would you like to go to?"; + mes "I wish you goodluck on your journey."; + next; + + setarray .@towns$[0], "Izlude", "Geffen", "Payon", "Morroc", "Alberta", "Al De Baran", "Comodo", "Umbala", "Juno"; + setarray .@maps$[0], "izlude", "geffen", "payon", "morocc", "alberta", "aldebaran", "comodo", "umbala", "yuno"; + setarray .@cost[0], 600, 1200, 1200, 1200, 1800, 2200, 2200, 2200, 1800; + + set .@size, getarraysize(.@towns$); + for(set .@i,0; .@i<.@size; set .@i,.@i+1) + set .@menu$, .@menu$+.@towns$[.@i]+" -> "+.@cost[.@i]+"z:"; + set .@i, select(.@menu$+"Cancel")-1; + if (.@i == .@size) + close; + if (Zeny < .@cost[.@i]) { + mes "[Keiki]"; + mes "I'm sorry, but you don't have"; + mes "enough zeny for the Teleport"; + mes "Service. The fee to teleport"; + mes "to "+.@towns$[.@i]+" is "+.@cost[.@i]+" zeny."; + close; + } + specialeffect2 EF_READYPORTAL; + specialeffect2 EF_TELEPORTATION; + specialeffect2 EF_PORTAL; + next; + set Zeny, Zeny - .@cost[.@i]; + switch(.@i) { + case 0: if (checkre(0)) warp "izlude",128,98; else warp "izlude",91,105; break; + case 1: warp "geffen",120,39; break; + case 2: warp "payon",161,58; break; + case 3: warp "morocc",156,46; break; + case 4: warp "alberta",117,56; break; + case 5: warp "aldebaran",168,112; break; + case 6: warp "comodo",209,143; break; + case 7: warp "umbala",100,154; break; + case 8: warp "yuno",158,125; break; + } + close; + case 2: + close; + } +} + +yuno,142,184,6 script Acolyte#Junoclear 90,{ + mes "[Isalei]"; + mes "Hello, adventurer."; + mes "My companion Keiki and I have discovered a way to increase our warp portal abilities."; + next; + mes "[Isalei]"; + mes "Though I have not mastered up to the level that she has, I have been able to attain Level 5."; + emotion e_dots,1; + next; + mes "[Isalei]"; + mes "Maybe one day I can level up my skills enough so that I can use Warp portal to more saved locations."; + next; + mes "[Isalei]"; + mes "I am willing to warp you to the many locations that I have memorized for a small fee."; + mes "Would you like to use this service?"; + next; + switch(select("Yes:No")) { + case 1: + mes "[Isalei]"; + mes "Where would you like to go to?"; + mes "I wish you goodluck on your journey."; + next; + + setarray .@towns$[0], "Einbroch", "Lighthalzen", "Hugel", "Rachel", "Prontera"; + setarray .@maps$[0], "einbroch", "lighthalzen", "hugel", "rachel", "prontera"; + setarray .@cost[0], 2200, 2200, 2200, 2200, 1800; + + set .@size, getarraysize(.@towns$); + for(set .@i,0; .@i<.@size; set .@i,.@i+1) + set .@menu$, .@menu$+.@towns$[.@i]+" -> "+.@cost[.@i]+"z:"; + set .@i, select(.@menu$+"Cancel")-1; + if (.@i == .@size) + close; + if (Zeny < .@cost[.@i]) { + mes "[Isalei]"; + mes "I'm sorry, but you don't have"; + mes "enough zeny for the Teleport"; + mes "Service. The fee to teleport"; + mes "to "+.@towns$[.@i]+" is "+.@cost[.@i]+" zeny."; + close; + } + specialeffect2 EF_READYPORTAL; + specialeffect2 EF_TELEPORTATION; + specialeffect2 EF_PORTAL; + next; + set Zeny, Zeny - .@cost[.@i]; + switch(.@i) { + case 0: warp "einbroch",67,195; break; + case 1: warp "lighthalzen",159,90; break; + case 2: warp "hugel",98,150; break; + case 3: warp "rachel",119,135; break; + case 4: warp "prontera",116,72; break; + } + close; + case 2: + close; + } +} diff --git a/npc/other/pvp.txt b/npc/other/pvp.txt index 9005147e8d..8aca6ab2ec 100644 --- a/npc/other/pvp.txt +++ b/npc/other/pvp.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= kobra_k88; L0ne_W0lf, Elias (og2) //===== Current Version: ===================================== -//= 2.4 +//= 2.5 //===== Compatible With: ===================================== //= rAthena SVN //===== Description: ========================================= @@ -15,8 +15,11 @@ //= 2.2 Some cleaning. [Euphy] //= 2.3 Fixed grammatical errors. [Joseph] //= 2.4 Fixed incorrect use of 'close' and some cleaning. [Joseph] +//= 2.5 Renewal/Pre-Renewal split. [Euphy] //============================================================ +// Information +//============================================================ - script PVP Narrator::pvpe -1,{ mes "[PVP Narrator]"; mes "Hello and welcome!"; @@ -24,147 +27,145 @@ mes "explaining the PVP Modes."; 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, 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 enter the PVP square."; - next; - mes "[PVP Narrator]"; - mes "But, you need to be at"; - mes "least level 31. And you"; - mes "must pay 500 zeny entrance fee in order"; - mes "to enter a PVP fight square."; - break; - case 2: - mes "[PVP Narrator]"; - mes "When you are qualified, you"; - mes "can choose one of the two modes."; - mes "Yoyo Mode or 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 be cautious,"; - mes "you will lose some of your"; - 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 twice"; - mes "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 and"; - mes "choose them 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, it will"; - mes "increase 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 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 successfully saved..."; - mes "Thank you very much!"; - mes "We 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 "With war raging between monsters"; - mes "and humans, this competition"; - mes "among people - PVP -"; - mes "encourages us all to get"; - mes "stronger. Come again,"; - mes "we welcome your challenge!"; - break; + 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, 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 enter the PVP square."; + next; + mes "[PVP Narrator]"; + mes "But, you need to be at"; + mes "least level 31. And you"; + mes "must pay 500 zeny entrance fee in order"; + mes "to enter a PVP fight square."; + break; + case 2: + mes "[PVP Narrator]"; + mes "When you are qualified, you"; + mes "can choose one of the two modes."; + mes "Yoyo Mode or 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 be cautious,"; + mes "you will lose some of your"; + 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 twice"; + mes "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 and"; + mes "choose them 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, it will"; + mes "increase 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 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 successfully saved..."; + mes "Thank you very much!"; + mes "We 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 "With war raging between monsters"; + mes "and humans, this competition"; + mes "among people - PVP -"; + mes "encourages us all to get"; + 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 @@ -172,7 +173,8 @@ 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) +// Mode Select +//============================================================ - script Gate Keeper::gkut -1,{ mes "[Gate Keeper]"; mes "Glad to be of service."; @@ -182,7 +184,7 @@ geffen_in,67,63,4 duplicate(pvpe) PVP Narrator#pe6 84 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")) { + 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."; @@ -195,10 +197,11 @@ geffen_in,67,63,4 duplicate(pvpe) PVP Narrator#pe6 84 mes "to the Yoyo Mode"; mes "fight square?"; next; - if(select("Move","Cancel")==1) { + switch(select("Move:Cancel")) { + case 1: if ((Zeny > 499) && (BaseLevel > 30)) { set Zeny, Zeny - 500; - warp "pvp_y_room",51,23; + callsub L_Warp,"pvp_y_room"; } else { mes "[Gate Keeper]"; @@ -209,15 +212,16 @@ geffen_in,67,63,4 duplicate(pvpe) PVP Narrator#pe6 84 mes "that you are at least level 31!"; } close; + case 2: + mes "[Gate Keeper]"; + mes "With war raging between monsters"; + mes "and humans, this competition"; + mes "among people - PVP -"; + mes "encourages us all to get"; + mes "stronger. Come again,"; + mes "we welcome your challenge!"; + close; } - mes "[Gate Keeper]"; - mes "With war raging between monsters"; - mes "and humans, this competition"; - mes "among people - PVP -"; - mes "encourages us all to get"; - mes "stronger. Come again,"; - mes "we welcome your challenge!"; - close; case 3: mes "[Gate Keeper]"; mes "Welcome!"; @@ -235,7 +239,8 @@ geffen_in,67,63,4 duplicate(pvpe) PVP Narrator#pe6 84 } mes "[Gate Keeper]"; mes "Yes, thank you for participating. Have fun!"; - warp "pvp_room",51,23; + if (Zeny >= 500) set Zeny, Zeny - 500; + callsub L_Warp,"pvp_room"; break; case 4: mes "[Gate Keeper]"; @@ -248,19 +253,48 @@ geffen_in,67,63,4 duplicate(pvpe) PVP Narrator#pe6 84 break; } close; -} -//Gate Keeper Duplicates +L_Warp: + set .@map$,getarg(0); + if (checkre(0)) { + switch(rand(1,10)) { + case 1: warp .@map$,34,38; break; + case 2: warp .@map$,46,38; break; + case 3: warp .@map$,58,38; break; + case 4: warp .@map$,70,38; break; + case 5: warp .@map$,82,38; break; + case 6: warp .@map$,82,58; break; + case 7: warp .@map$,65,58; break; + case 8: warp .@map$,49,58; break; + case 9: warp .@map$,33,58; break; + case 10: warp .@map$,52,24; break; + } + } else + warp .@map$,51,23; + return; +} 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") { - setarray .@Maps$[0], "pvp_y_8-1", "pvp_y_8-2", "pvp_y_8-3", "pvp_y_8-4", "pvp_y_8-5"; +// PVP Warper Function +//============================================================ +// Note: The warper NPCs are in the pre-re/re paths. + +//callfunc "F_PVP_FSRS"{,,}; +function script F_PVP_FSRS { + if (getargcount()) { + if (BaseLevel < getarg(0) || BaseLevel > getarg(1)) { + mes "[PVP Fight Square Reception Staff]"; + mes "Sorry, but you base level has to be between LV "+getarg(0)+" and LV "+getarg(1)+"."; + close; + } + } + if (strnpcinfo(4) == "pvp_y_room") { + set .@base$, "pvp_y_"+strnpcinfo(2); + setarray .@Maps$[0], .@base$+"-1", .@base$+"-2", .@base$+"-3", .@base$+"-4", .@base$+"-5"; setarray .@Name$[0], "Prontera", "Izlude", "Payon", "Alberta", "Morroc"; setarray .@Limit[0], 128, 128, 128, 128, 128; } else { @@ -280,25 +314,9 @@ payon_in01,140,53,4 duplicate(gkut) Gate Keeper#gke5 83 } warp .@Maps$[.@i],0,0; end; - -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 //============================================================ @@ -310,14 +328,12 @@ pvp_room,54,85,4 script Registration Staff#1 105,{ mes "For details about viewers please proceed to the Register Staff on your right."; close; } - set .@size, getarraysize(.warp_x); if (.@size == 0) { setarray .warp_x,40,59,20,40; setarray .warp_y,59,40,40,20; } - - if (select("Combat Square one :Cancel") == 1) { + if (select("Combat Square one:Cancel") == 1) { mes "[PVP Combat Square Register Staff]"; mes "'"+ strcharinfo(0) +"'"; mes "Are you ready?!"; @@ -354,17 +370,16 @@ OnInit: 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; + 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; @@ -373,7 +388,6 @@ 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 @@ -392,23 +406,26 @@ OnTouch: 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(select("To the side viewer seat.:Leave Combat Square.")) { + case 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; + 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; + case 2: + warp "pvp_c_room",84,39; + end; + } } // PVP Area Exit warp @@ -420,11 +437,11 @@ OnTouch: 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; + 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; } } diff --git a/npc/pre-re/other/pvp.txt b/npc/pre-re/other/pvp.txt new file mode 100644 index 0000000000..750cd48440 --- /dev/null +++ b/npc/pre-re/other/pvp.txt @@ -0,0 +1,34 @@ +//===== rAthena Script ======================================= +//= PvP NPCs +//===== By: ================================================== +//= Euphy +//===== Current Version: ===================================== +//= 1.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: ================================= +//= 1.0 First version, Pre-Renewal. +//============================================================ + +// PVP Warpers +//============================================================ +pvp_y_room,86,85,4 script Fight Square Reception#8 105,{ + callfunc "F_PVP_FSRS"; + end; + +OnInit: + waitingroom "Free for all",0; + end; +} + +pvp_n_room,30,85,4 script Fight Square Reception#n 105,{ + callfunc "F_PVP_FSRS"; + end; + +OnInit: + waitingroom "Free for all",0; + end; +} diff --git a/npc/pre-re/scripts_athena.conf b/npc/pre-re/scripts_athena.conf index 7a88f2bdfe..1a6c0cd496 100644 --- a/npc/pre-re/scripts_athena.conf +++ b/npc/pre-re/scripts_athena.conf @@ -45,6 +45,7 @@ npc: npc/pre-re/merchants/shops.txt // --------------------------- Others --------------------------- npc: npc/pre-re/other/bulletin_boards.txt npc: npc/pre-re/other/mercenary_rent.txt +npc: npc/pre-re/other/pvp.txt npc: npc/pre-re/other/msg_boards.txt npc: npc/pre-re/other/resetskill.txt npc: npc/pre-re/other/turbo_track.txt diff --git a/npc/quests/okolnir.txt b/npc/quests/okolnir.txt index e33ca6eec1..0e49177088 100644 --- a/npc/quests/okolnir.txt +++ b/npc/quests/okolnir.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= Joseph //===== Current Version: ===================================== -//= 1.0 +//= 1.1 //===== Compatible With: ===================================== //= rAthena SVN //===== Description: ========================================= @@ -12,6 +12,7 @@ //===== Additional Comments: ================================= //= 0.x Previous author: L0ne_W0lf //= 1.0 Merged Okolnir. [Joseph] +//= 1.1 Some bug fixes. [Toshiro90/Euphy] //============================================================ function script F_Okolnir { @@ -407,10 +408,10 @@ OnTouch: case 18: setarray .@n, 57,255,57,258,19; break; case 19: setarray .@n, 84,277,84,280,20; break; } - SMonster(.@sub$,.@n[0],.@n[1]); - setd "$@gqse_"+.@sub$+"_miro",.@n[4]; - warp "que_q"+.@sub$,.@n[2],.@n[3]; - end; + SMonster(.@sub$,.@n[0],.@n[1]); + setd "$@gqse_"+.@sub$+"_miro",.@n[4]; + warp "que_q"+.@sub$,.@n[2],.@n[3]; + end; } else { mes "There are too many people, you can't enter."; @@ -1645,7 +1646,7 @@ OnTimer55000: OnTimer85000: OnTimer120000: set .@sub$,callfunc("F_Okolnir"); - setarray .xy2, 226,294,227,294,228,294,229,294,230,295,231,296,231,297,231,298,231,299,230,300,229,301,228,301,227,301,226,301,225,300,224,299,224,298,224,297,224,296,225,295; + setarray .@xy2, 226,294,227,294,228,294,229,294,230,295,231,296,231,297,231,298,231,299,230,300,229,301,228,301,227,301,226,301,225,300,224,299,224,298,224,297,224,296,225,295; for (set .@i, 0; .@i < getarraysize(.@xy2); set .@i, .@i + 2) monster "que_q"+.@sub$,.@xy2[.@i],.@xy2[.@i+1],"Guard of Shadow",1752,1,"#nmsom"+.@sub$+"_jin01::OnMyMobDead"; end; @@ -1811,22 +1812,22 @@ OnTimer5000: OnTimer120000: set .@sub$,callfunc("F_Okolnir"); setarray .@xy2, 251,343,252,343,255,341,255,340,254,337,253,336,250,336,249,337,248,340,248,341; - for (set .@i, 0; .@i < getarraysize(.@xy); set .@i, .@i + 2) + for (set .@i, 0; .@i < getarraysize(.@xy2); set .@i, .@i + 2) monster "que_q"+.@sub$,.@xy2[.@i],.@xy2[.@i+1],"Keeper Of The Temple",1933,1,"#nmsom"+.@sub$+"_jin03::OnMyMobDead"; end; OnTimer240000: set .@sub$,callfunc("F_Okolnir"); setarray .@xy3, 250,343,252,343,254,342,255,340,255,338,253,336,250,336,248,338,248,340,249,342; - for (set .@i, 0; .@i < getarraysize(.@xy); set .@i, .@i + 2) - monster "que_q"+.@sub$,.@xy2[.@i],.@xy2[.@i+1],"Keeper Of The Temple",1933,1,"#nmsom"+.@sub$+"_jin03::OnMyMobDead"; + for (set .@i, 0; .@i < getarraysize(.@xy3); set .@i, .@i + 2) + monster "que_q"+.@sub$,.@xy3[.@i],.@xy3[.@i+1],"Keeper Of The Temple",1933,1,"#nmsom"+.@sub$+"_jin03::OnMyMobDead"; end; OnTimer360000: set .@sub$,callfunc("F_Okolnir"); setarray .@xy4, 250,343,252,343,254,342,255,340,255,338,253,336,251,336,249,337,248,339,248,341; - for (set .@i, 0; .@i < getarraysize(.@xy); set .@i, .@i + 2) - monster "que_q"+.@sub$,.@xy2[.@i],.@xy2[.@i+1],"Keeper Of The Temple",1933,1,"#nmsom"+.@sub$+"_jin03::OnMyMobDead"; + for (set .@i, 0; .@i < getarraysize(.@xy4); set .@i, .@i + 2) + monster "que_q"+.@sub$,.@xy4[.@i],.@xy4[.@i+1],"Keeper Of The Temple",1933,1,"#nmsom"+.@sub$+"_jin03::OnMyMobDead"; stopnpctimer; end; @@ -2148,10 +2149,10 @@ que_qsch05,251,255,3 duplicate(Wish Maiden#main_boss) Wish Maiden#sch05_boss 193 if (strcharinfo(0) == getguildmaster(.@GID)) { if (compare(.@sub$,"aru")) { setarray .@n, 7835,1,7836,1,7837,1,7838,1,2513,1,7291,10,7293,10,7063,100,985,20; - set .@rwd, 2541; + set .@rwd, 2541; //Asprika } else { setarray .@n, 7830,1,7831,1,7832,1,7833,1,7834,1,2357,1,7510,100,969,10,985,20; - set .@rwd, 2383; + set .@rwd, 2383; //Brynhild } for (set .@i, 0; .@i < getarraysize(.@n); set .@i, .@i + 2) { if (countitem(.@n[.@i]) >= .@n[.@i+1]) @@ -2180,7 +2181,7 @@ que_qsch05,251,255,3 duplicate(Wish Maiden#main_boss) Wish Maiden#sch05_boss 193 for (set .@i, 0; .@i < getarraysize(.@n); set .@i, .@i + 2) delitem .@n[.@i],.@n[.@i+1]; getitem .@rwd,1; - getitem 7840,1; + getitem 7840,1; //Valkyrie_Gift announce "["+ strcharinfo(0) +"], of guild ["+ GetGuildName(.@GID) +"] has brought a "+getitemname(.@rwd)+" into this world.",bc_all,"0x70dbdb"; close2; cutin "wish_maiden11",255; diff --git a/npc/re/other/item_merge.txt b/npc/re/other/item_merge.txt new file mode 100644 index 0000000000..b622f50e2e --- /dev/null +++ b/npc/re/other/item_merge.txt @@ -0,0 +1,71 @@ +//===== rAthena Script ======================================= +//= Mergician +//===== By: ================================================== +//= Euphy +//===== Current Version: ===================================== +//= 1.0 +//===== Compatible With: ===================================== +//= rAthena SVN +//===== Description: ========================================= +//= [Official Conversion] +//= Merges items taking up multiple slots in a player's +//= inventory. +//===== Additional Comments: ================================= +//= 1.0 First version, currently useless/disabled. +//============================================================ + +prontera,146,95,3 script Mergician#pron 64,{ + if (checkweight(1301,1) == 0) { + mes "- Wait a second !! -"; + mes "- You are carrying too many items -"; + mes "- or too much weight to proceed. -"; + mes "- Come back after -"; + mes "- arranging your inventory. -"; + close; + } + mes "[Mergician]"; + mes "Do you believe in the miracle of Merge god?? If so, repeat my spell loudly as I pronunce it!!!"; + mes "Merge Merge, Merrrrge!!!"; + next; + switch(select("What is the miracle of Merge?:Merrrrge!!!!:Abandon...")) { + case 1: + mes "[Mergician]"; + mes "There is an order which rules the world and keeps the world to go well."; + next; + mes "[Mergician]"; + mes "But there has been a bad factor which totally jeopardised this rule!!"; + next; + mes "[Mergician]"; + mes "Those things which are separated even if they are composed by the same material!!"; + next; + mes "[Mergician]"; + mes "Have you never experienced this bad incident??"; + mes "The fact that I had ^3131FFthe same potion, but appearing more than twice in your inventory!!^000000 So unpleasant!!!"; + next; + mes "[Mergician]"; + mes "Believe in Mergism. That is the truth."; + mes "Then I can help you be happy and content."; + close; + case 2: + mes "[Mergician]"; + mes "This is the total holy ritual to pray to the Great God, Merge! and I am borrowing the power for a while!!"; + next; + mes "[Mergician]"; + mes "And if you eagerly want to be blessed by Merge, be humble and shout out loud! Merge Merge, Merrrrge!!!"; + next; + switch(select("Merrrrge!:Don't follow what he says.")) { + case 1: +// MergeItem + mes "[Mergician]"; + mes "Merge just heard your wish and let it be realised!"; + mes "Open your inventory to check the miracle!"; + close; + case 2: + mes "[Mergician]"; + mes "You jerk!!! You just broke the whole rhythm! Why can't you get my flow and follow me?! Idiot!"; + close; + } + case 3: + close; + } +} diff --git a/npc/re/other/pvp.txt b/npc/re/other/pvp.txt new file mode 100644 index 0000000000..97d3639326 --- /dev/null +++ b/npc/re/other/pvp.txt @@ -0,0 +1,93 @@ +//===== rAthena Script ======================================= +//= PvP NPCs +//===== By: ================================================== +//= Euphy +//===== Current Version: ===================================== +//= 1.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: ================================= +//= 1.0 First version, Renewal. +//============================================================ + +// PVP Warpers +//============================================================ +pvp_y_room,30,85,4 script Fight Square Reception#1 105,{ //5,5 + callfunc "F_PVP_FSRS",50,69; + end; + +OnInit: + waitingroom "LV 50 ~ LV 69",0; + end; +} + +pvp_y_room,38,85,4 script Fight Square Reception#2 105,{ //5,5 + callfunc "F_PVP_FSRS",70,89; + end; + +OnInit: + waitingroom "LV 70 ~ LV 89",0; + end; +} + +pvp_y_room,46,85,4 script Fight Square Reception#3 105,{ //5,5 + callfunc "F_PVP_FSRS",90,99; + end; + +OnInit: + waitingroom "LV 90 ~ LV 99",0; + end; +} + +pvp_y_room,54,85,4 script Fight Square Reception#8 105,{ + callfunc "F_PVP_FSRS"; + end; + +OnInit: + waitingroom "Free for all",0; + end; +} + +pvp_y_room,62,85,4 script Fight Square Reception#4 105,{ + //if (ADVJOB > 0) { + if (Upper == 1) { + mes "[PVP Fight Square Reception Staff]"; + mes "You have been transcended."; + mes "You are not allowed to enter."; + close; + } + callfunc "F_PVP_FSRS"; + end; + +OnInit: + waitingroom "Normal Jobs Only",0; + end; +} + +pvp_y_room,70,85,4 script Fight Square Reception#5 105,{ + //if (ADVJOB == 0) { + if (Upper != 1) { + mes "[PVP Fight Square Reception Staff]"; + mes "You have not transcended."; + mes "You are not allowed to enter."; + close; + } + callfunc "F_PVP_FSRS"; + end; + +OnInit: + waitingroom "Trans Jobs Only",0; + end; +} + +pvp_n_room,86,85,4 script Fight Square Reception#n 105,{ + callfunc "F_PVP_FSRS"; + end; + +OnInit: + waitingroom "Free for all",0; + end; +} diff --git a/npc/re/merchants/stone_change.txt b/npc/re/other/stone_change.txt similarity index 100% rename from npc/re/merchants/stone_change.txt rename to npc/re/other/stone_change.txt diff --git a/npc/re/scripts_athena.conf b/npc/re/scripts_athena.conf index d37ac09381..8acaccfbcf 100644 --- a/npc/re/scripts_athena.conf +++ b/npc/re/scripts_athena.conf @@ -81,15 +81,17 @@ npc: npc/re/merchants/quivers.txt npc: npc/re/merchants/refine.txt npc: npc/re/merchants/renters.txt npc: npc/re/merchants/shops.txt -npc: npc/re/merchants/stone_change.txt //npc: npc/re/merchants/ticket_refiner.txt //npc: npc/re/merchants/enchan_upg.txt // --------------------------- Others --------------------------- npc: npc/re/other/bulletin_boards.txt +//npc: npc/re/other/item_merge.txt npc: npc/re/other/mail.txt npc: npc/re/other/mercenary_rent.txt +npc: npc/re/other/pvp.txt npc: npc/re/other/resetskill.txt +npc: npc/re/other/stone_change.txt npc: npc/re/other/turbo_track.txt // --------------------------- Quests --------------------------- diff --git a/npc/scripts_athena.conf b/npc/scripts_athena.conf index c330ad54cb..a7099762cd 100644 --- a/npc/scripts_athena.conf +++ b/npc/scripts_athena.conf @@ -170,6 +170,7 @@ npc: npc/other/arena/arena_party.txt npc: npc/other/arena/arena_point.txt npc: npc/other/arena/arena_room.txt // -------------------------------------------------------------- +//npc: npc/other/acolyte_warp.txt npc: npc/other/auction.txt npc: npc/other/books.txt npc: npc/other/bulletin_boards.txt