//===== eAthena Script ======================================= //= PvP //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.2a //===== Compatible With: ===================================== //= eAthena 0.5.2 + //===== Description: ========================================= //= //===== Additional Comments: ================================= //= v1.1 Fixed arena names for Nightmare mode. Added room limit //= check.[kobra_k88] //= v1.2 Fixed the bug that you aways savepoint in geffen.[shadowlady] //= v1.2a Added PvP Narrator function. Using args for Fight //= Square Helpers. [kobra_k88] //============================================================ //========================================================================== // PvP Narrators //========================================================================== // Alberta ----------------------------------------- alberta_in.gat, 22, 146,4 script PvP Narrator#1 84, { callfunc "F_PvPNarr", "alberta_in.gat", 24, 143; end; } // Payon ------------------------------------- payon_in01.gat,173,109,3 script PvP Narrator#2 84, { callfunc "F_PvPNarr", "payon_in01.gat", 169, 108; end; } // Prontera ------------------------------------- prt_in.gat,56,140,4 script PvP Narrator#3 84, { callfunc "F_PvPNarr", "prt_in.gat", 54, 137; end; } // Morocc -------------------------------------- morocc_in.gat,144,138,4 script PvP Narrator#4 84, { callfunc "F_PvPNarr", "morocc_in.gat", 141, 140; end; } // Geffen -------------------------------------- geffen_in.gat, 67,63,4 script PvP Narrator#5 84, { callfunc "F_PvPNarr", "geffen_in.gat", 64, 60; end; } //******************************************************// // Function: PvP Narrator //******************************************************// // arg(0): mapname // arg(1): savepoint x cord. // arg(2): savepoint y cord. //============================= function script F_PvPNarr { mes "[PvP Narrator]"; mes "Hello and welcome! I am in charge of explaining the PvP mode to all of those who inquire. I am the PvP Narrator!"; M_Menu: next; menu "What is PvP?",M_0, "What are the PvP modes?",M_1, "What are the rules for PvP?",M_2, "Save position.",M_3; M_0: mes "[PvP Narrator]"; mes "PvP is short for 'Player versus Player'! It is a unique play mode that allows players to duel other players!"; next; mes "[PvP Narrator]"; mes "If you're interested just speak with the ^5533FFGate Keeper'^000000. He will let you into the PvP square."; next; mes "[PvP Narrator]"; mes "That IS, IF you have at least a base level of 31 and you have 500 zeny to pay for the enterance fee."; mes "Those are the requirements to participate in PvP."; goto M_Menu; M_1: mes "[PvP Narrator]"; mes "There are 2 PvP modes to choose from."; mes "One is called ^5533FF'Yoyo'^000000 Mode and the other is called ^5533FF'Nightmare'^000000 Mode."; next; mes "[PvP Narrator]"; mes "Yoyo mode essentially lets you play risk free. You can experience the thrill of PvP without any restrictions or penalties."; mes "It is recomended that you practice your skills in this mode before you move on."; next; mes "[PvP Narrator]"; mes "Nightmare Mode is very dangerous! Please use caution when trying this mode of play."; mes "You will lose some of your real EXP if you are defeated. There is also the small chance that you will drop some items and equipment."; next; mes "[PvP Narrator]"; mes "Of course if you win, the rewards can be great!! Even so you should really think twice before you attempt Nightmare Mode."; mes "Anyways, good luck."; goto M_Menu; M_2: mes "[PvP Narrator]"; mes "Before you enter any actual PvP areana, you must first choose your level of ability based on your base level."; mes "You will do this in the pre-fight room. There will be a row of narrators, each one representing a set of player levels."; next; mes "[PvP Narrator]"; mes "Speak to the narrator that represents your base level. You will then be asked to choose from five different fight maps."; mes "You will be able to see how many people are currently participating in any given map."; next; mes "[PvP Narrator]"; mes "This will be represented by the 'Attendee/Total' figure in the corner of the screen. There is a limit to how many can play on a map."; mes "There is a hidden EXP value in PvP mode. This EXP will only apply inside of the PvP zone and not outside."; next; mes "[PvP Narrator]"; mes "Every one will recieve a base EXP of 5 points when they first start. If you win a match your EXP with increase by 1 point."; mes "If you loose your EXP will drop by 5 points, so be carefull!"; next; mes "[PvP Narrator]"; mes "If you are defeated and your EXP is equal to or less than 0, you will be removed from the PvP arena."; mes "If your EXP is more than 0 than you may continue fighting and even get help from healers."; next; mes "[PvP Narrator]"; mes "The fighting commands inside of PvP are the same as outside. Just remember that you won't be able to save inside a PvP arena."; next; mes "[PvP Narrator]"; mes "Remember these rules well as they can help to ensure your victory."; goto M_Menu; M_3: savepoint getarg(0), getarg(1), getarg(2); mes "[PvP Narrator]"; mes "Your position has been saved."; close; } //========================================================================== // Gate Keepers //========================================================================== // Alberta ----------------------------------- alberta_in.gat, 26,146,4 script Gate Keeper#1::GateKeep 83, { mes "[Gate Keeper]"; mes "Hi. I'm glad to be of service. I will open the PvP fight square for you!"; mes "If you have any questions about the PvP modes or rules, please ask the Narrator....."; next; menu "^5533FF'PvP Yoyo Mode'^000000 Fight Square.",M_0, "^FF5533'PvP Nightmare Mode'^000000 Fight Square.",M_1, "^5533FF'PvP Duel (Fighting) Mode'^000000 Combat Square.",M_2, "End Conversation.",M_End; M_0: set @mode$, "Yoyo"; set @players1, 128; set @players2, 128; set @room1$, "Prontera"; set @room2$, "Izlude"; set @room3$, "Payon"; set @room4$, "Alberta"; set @room5$, "Morroc"; callsub sF_Move; warp "pvp_y_room.gat", 51, 23; end; M_1: set @mode$, "Nightmare"; set @players1, 64; set @players2, 32; set @room1$, "Sandwhich Arena"; set @room2$, "Rock Arena"; set @room3$, "Four Arena"; set @room4$, "UnderCross Arena"; set @room5$, "Copass Arena"; callsub sF_Move; warp "pvp_n_room.gat", 51, 23; end; M_2: mes "[Gate Keeper]"; mes "To enter the Duel (Fighting) Mode square you must have an admission ticket. Do you have one?"; next; menu "Yes I do.",-, "No I don't.",sM_1; if(countitem(7029) < 1) goto sM_1; delitem 7029, 1; set @mode$, "Fighting"; callsub sF_Move; warp "pvp_y_room.gat", 51, 23; end; sM_1: mes "[Gate Keeper]"; mes "Eh? You don't have one? I'm sorry but this fight square is only for people who have admission or viewing tickets."; mes "You cannot come in without one."; close; M_End: mes "[Gate Keeper]"; mes "In this war between Monsters and Humans this competition between people, PvP, encourages all of us to become stronger."; mes "Come again anytime. We welcome your challenge!"; close; sF_Move: mes "[Gate Keeper]"; mes "The admission fee is 500 Zeny. Do you want to move to the "+@mode$+" fight square?"; next; menu "Yes",-, "No",M_End; if(BaseLevel < 31) goto sL_LowLvl; if(Zeny < 500) goto sL_NdZeny; set Zeny, Zeny - 500; mes "[Gate Keeper]"; mes "Prepare to be warped to the arena....."; next; return; sL_LowLvl: mes "[Gate Keeper]"; mes "In order to participate in PvP you must have a base level of at least ^FF4444'31'^000000."; close; sL_NdZeny: mes "[Gate Keeper]"; mes "As I stated, the admission fee is ^FF4444'500'^000000 Zeny. You seem to be short on Zeny."; close; } // Geffen -------------------------------------------- geffen_in.gat, 63,63,4 duplicate(GateKeep) Gate Keeper#2 83 // Morroc---------------------------------------------- morocc_in.gat, 144,142,4 duplicate(GateKeep) Gate Keeper#3 83 // Payon ---------------------------------------------- payon_in01.gat,175,106,3 duplicate(GateKeep) Gate Keeper#4 83 // Prontera ------------------------------------------- prt_in.gat,52,140,4 duplicate(GateKeep) Gate Keeper#5 83 //==========================================================================// // PvP Yoyo Mode Fight Square Helpers //==========================================================================// // LV31 ~ 40 --------------------------------- pvp_y_room.gat,30,85,4 script Fight Square Helper::YHelper1 105,{ callfunc "F_PvPRoom", "y_1", 31, 40; OnInit: waitingroom "LV31 ~ LV40",0; end; } // LV41 ~ 50 -------------------------------- pvp_y_room.gat,38,85,4 script Fight Square Helper::YHelper2 105,{ callfunc "F_PvPRoom", "y_2", 41, 50; OnInit: waitingroom "LV41 ~ LV50",0; end; } // LV51 ~ 60 --------------------------------- pvp_y_room.gat,46,85,4 script Fight Square Helper::YHelper3 105,{ callfunc "F_PvPRoom", "y_3", 51, 60; OnInit: waitingroom "LV51 ~ LV60", 0; end; } // LV61 ~ 70 ------------------------------------ pvp_y_room.gat,54,85,4 script Fight Square Helper::YHelper4 105,{ callfunc "F_PvPRoom", "y_4", 61, 70; OnInit: waitingroom "LV61 ~ LV70", 0; end; } // LV71 ~ 80 ------------------------------------ pvp_y_room.gat,62,85,4 script Fight Square Helper::YHelper5 105,{ callfunc "F_PvPRoom", "y_5", 71, 80; OnInit: waitingroom "LV71 ~ LV80", 0; end; } // LV81 ~ 90 -------------------------------------- pvp_y_room.gat,70,85,4 script Fight Square Helper::YHelper6 105,{ callfunc "F_PvPRoom", "y_6", 81, 90; OnInit: waitingroom "LV81 ~ LV90", 0; end; } // LV91 ~ -------------------------------------------- pvp_y_room.gat,78,85,4 script Fight Square Helper::YHelper7 105,{ callfunc "F_PvPRoom", "y_7", 91, 255; OnInit: waitingroom "LV91 ~ ", 0; end; } // No Limit ----------------------------------------- pvp_y_room.gat,86,85,4 script Fight Square Helper::YHelper8 105,{ callfunc "F_PvPRoom", "y_8", 0, 255; OnInit: waitingroom "No Limit", 0; end; } //==========================================================================// // PvP Nightmare Mode Fight Square Helpers //==========================================================================// // LV31 ~ 40 ------------------------------------- pvp_n_room.gat,30,85,4 script Fight Square Helper#N1 105,{ callfunc "F_PvPRoom", "n_1", 31, 40; OnInit: waitingroom "LV31 ~ LV40",0; end; } // LV41 ~ 50 -------------------------------------- pvp_n_room.gat,38,85,4 script Fight Square Helper#N2 105,{ callfunc "F_PvPRoom", "n_2", 41, 50; OnInit: waitingroom "LV41 ~ LV50",0; end; } // LV51 ~ 60 ------------------------------------- pvp_n_room.gat,46,85,4 script Fight Square Helper#N3 105,{ callfunc "F_PvPRoom", "n_3", 51, 60; OnInit: waitingroom "LV51 ~ LV60", 0; end; } // LV61 ~ 70 ------------------------------------ pvp_n_room.gat,54,85,4 script Fight Square Helper#N4 105,{ callfunc "F_PvPRoom", "n_4", 61, 70; OnInit: waitingroom "LV61 ~ LV70", 0; end; } // LV71 ~ 80 ----------------------------------- pvp_n_room.gat,62,85,4 script Fight Square Helper#N5 105,{ callfunc "F_PvPRoom", "n_5", 71, 80; OnInit: waitingroom "LV71 ~ LV80", 0; end; } // LV81 ~ 90 ------------------------------------ pvp_n_room.gat,70,85,4 script Fight Square Helper#N6 105,{ callfunc "F_PvPRoom", "n_6", 81, 90; OnInit: waitingroom "LV81 ~ LV90", 0; end; } // LV91 ~ --------------------------------------- pvp_n_room.gat,78,85,4 script Fight Square Helper#N7 105,{ callfunc "F_PvPRoom", "n_7", 91, 255; OnInit: waitingroom "LV91 ~ ", 0; end; } // No Limit ---------------------------------- pvp_n_room.gat,86,85,4 script Fight Square Helper#N8 105,{ callfunc "F_PvPRoom", "n_8", 0, 255; OnInit: waitingroom "No Limit", 0; end; } //***************************************************************// // Function: PvP Fight Square Helper //***************************************************************// // arg(0): pvp room name // arg(1): minimum base lvl to enter arena // arg(2): maximum base lvl allowed to enter arena //=============================================== function script F_PvPRoom { mes "[Fight Square Helper]"; if(BaseLevel < getarg(1)) goto L_LowLvl; if(BaseLevel > getarg(2)) goto L_HiLvl; mes "Please choose an arena to fight in..."; M_Menu: next; menu @room1$ + " [" + getmapusers("pvp_" + getarg(0) + "-1.gat") + "/" +@players1+ "]",M_Rm1, @room2$ + " [" + getmapusers("pvp_" + getarg(0) + "-2.gat") + "/" +@players2+ "]",M_Rm2, @room3$ + " [" + getmapusers("pvp_" + getarg(0) + "-3.gat") + "/" +@players2+ "]",M_Rm3, @room4$ + " [" + getmapusers("pvp_" + getarg(0) + "-4.gat") + "/" +@players2+ "]",M_Rm4, @room5$ + " [" + getmapusers("pvp_" + getarg(0) + "-5.gat") + "/" +@players2+ "]",M_Rm5, "Cancel",M_End; M_Rm1: if (getmapusers("pvp_" + getarg(0) + "-1.gat") == @players1) goto L_Full; warp "pvp_" + getarg(0) + "-1.gat",0,0; end; M_Rm2: if (getmapusers("pvp_" + getarg(0) + "-2.gat") == @players2) goto L_Full; warp "pvp_" + getarg(0) + "-2.gat",0,0; end; M_Rm3: if (getmapusers("pvp_" + getarg(0) + "-3.gat") == @players2) goto L_Full; warp "pvp_" + getarg(0) + "-3.gat",0,0; end; M_Rm4: if (getmapusers("pvp_" + getarg(0) + "-4.gat") == @players2) goto L_Full; warp "pvp_" + getarg(0) + "-4.gat",0,0; end; M_Rm5: if (getmapusers("pvp_" + getarg(0) + "-5.gat") == @players2) goto L_Full; warp "pvp_" + getarg(0) + "-5.gat",0,0; end; M_End: close; L_LowLvl: mes "I'm sorry but you do not meet the Base Level requirements to enter. Please try a lower level room."; close; L_HiLvl: mes "I'm sorry but you exceed the Base Level requirements to enter. Please try a higher level room."; close; L_Full: mes "[Fight Square Helper]"; mes "I'm sorry but this arena is full. Please choose another one to participate in...."; goto M_Menu; }