//===== eAthena Script =======================================
//= PvP
//===== By: ==================================================
//= kobra_k88
//===== Current Version: =====================================
//= 1.1
//===== Compatible With: =====================================
//= eAthena 0.5.2 +
//===== Description: =========================================
//=
//===== Additional Comments: =================================
//= v1.1 Fixed arena names for Nightmare mode. Added room limit check.
//============================================================
//***********************************************************************************************************************************************************//
// PvP Narrator and Gate Keeper Scripts //
//***********************************************************************************************************************************************************//
// Alberta =========================================================>\\
// PvP Narrator ------------------------------------------------------
alberta_in.gat, 22, 146,4 script PvP Narrator#1::PvPNarr 84,
{
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 "geffen_in.gat",64,60;
mes "[PvP Narrator]";
mes "Your position has been saved.";
close;
}
// Gate Keeper ---------------------------------------------------------------
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, 67,63,4 duplicate(PvPNarr) PvP Narrator#2 84
geffen_in.gat, 63,63,4 duplicate(GateKeep) Gate Keeper#2 83
// Morroc ===================================================>\\
morocc_in.gat,144,138,4 duplicate(PvPNarr) PvP Narrator#3 84
morocc_in.gat, 144,142,4 duplicate(GateKeep) Gate Keeper#3 83
// Payon ===================================================>\\
payon_in01.gat,6,55,4 duplicate(PvPNarr) PvP Narrator#5 84
payon_in01.gat,10,54,4 duplicate(GateKeep) Gate Keeper#5 83
// Prontera =================================================>\\
prt_in.gat,56,140,4 duplicate(PvPNarr) PvP Narrator#6 84
prt_in.gat,52,140,4 duplicate(GateKeep) Gate Keeper#6 83
//***********************************************************************************************************************************************//
// PvP Yoyo Mode Fight Square Helpers //
//***********************************************************************************************************************************************//
// LV31 ~ 40 ------------------------------------------------------------------------------
pvp_y_room.gat,30,85,4 script Fight Square Helper::YHelper1 105,
{
set @map$, "y_1";
set @lvl2, 40;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV31 ~ LV40",0;
end;
}
// LV41 ~ 50 ------------------------------------------------------------------------------
pvp_y_room.gat,38,85,4 script Fight Square Helper::YHelper2 105,
{
set @map$, "y_2";
set @lvl1, 41;
set @lvl2, 50;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV41 ~ LV50",0;
end;
}
// LV51 ~ 60 ------------------------------------------------------------------------------
pvp_y_room.gat,46,85,4 script Fight Square Helper::YHelper3 105,
{
set @map$, "y_3";
set @lvl1, 51;
set @lvl2, 60;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV51 ~ LV60", 0;
end;
}
// LV61 ~ 70 ------------------------------------------------------------------------------
pvp_y_room.gat,54,85,4 script Fight Square Helper::YHelper4 105,
{
set @map$, "y_4";
set @lvl1, 61;
set @lvl2, 70;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV61 ~ LV70", 0;
end;
}
// LV71 ~ 80 ------------------------------------------------------------------------------
pvp_y_room.gat,62,85,4 script Fight Square Helper::YHelper5 105,
{
set @map$, "y_5";
set @lvl1, 71;
set @lvl2, 80;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV71 ~ LV80", 0;
end;
}
// LV81 ~ 90 ------------------------------------------------------------------------------
pvp_y_room.gat,70,85,4 script Fight Square Helper::YHelper6 105,
{
set @map$, "y_6";
set @lvl1, 81;
set @lvl2, 90;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV81 ~ LV90", 0;
end;
}
// LV91 ~ ------------------------------------------------------------------------------
pvp_y_room.gat,78,85,4 script Fight Square Helper::YHelper7 105,
{
set @map$, "y_7";
set @lvl1, 91;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV91 ~ ", 0;
end;
}
// No Limit ------------------------------------------------------------------------------
pvp_y_room.gat,86,85,4 script Fight Square Helper::YHelper8 105,
{
set @map$, "y_8";
set @lvl1, 0;
set @lvl2, 200;
callfunc "F_PvPRoom";
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,
{
set @map$, "n_1";
set @lvl2, 40;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV31 ~ LV40",0;
end;
}
// LV41 ~ 50 ------------------------------------------------------------------------------
pvp_n_room.gat,38,85,4 script Fight Square Helper#N2 105,
{
set @map$, "n_2";
set @lvl1, 41;
set @lvl2, 50;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV41 ~ LV50",0;
end;
}
// LV51 ~ 60 ------------------------------------------------------------------------------
pvp_n_room.gat,46,85,4 script Fight Square Helper#N3 105,
{
set @map$, "n_3";
set @lvl1, 51;
set @lvl2, 60;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV51 ~ LV60", 0;
end;
}
// LV61 ~ 70 ------------------------------------------------------------------------------
pvp_n_room.gat,54,85,4 script Fight Square Helper#N4 105,
{
set @map$, "n_4";
set @lvl1, 61;
set @lvl2, 70;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV61 ~ LV70", 0;
end;
}
// LV71 ~ 80 ------------------------------------------------------------------------------
pvp_n_room.gat,62,85,4 script Fight Square Helper#N5 105,
{
set @map$, "n_5";
set @lvl1, 71;
set @lvl2, 80;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV71 ~ LV80", 0;
end;
}
// LV81 ~ 90 ------------------------------------------------------------------------------
pvp_n_room.gat,70,85,4 script Fight Square Helper#N6 105,
{
set @map$, "n_6";
set @lvl1, 81;
set @lvl2, 90;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV81 ~ LV90", 0;
end;
}
// LV91 ~ ------------------------------------------------------------------------------
pvp_n_room.gat,78,85,4 script Fight Square Helper#N7 105,
{
set @map$, "n_7";
set @lvl1, 91;
set @lvl2, 255;
callfunc "F_PvPRoom";
OnInit:
waitingroom "LV91 ~ ", 0;
end;
}
// No Limit ------------------------------------------------------------------------------
pvp_n_room.gat,86,85,4 script Fight Square Helper#N8 105,
{
set @map$, "n_8";
set @lvl1, 0;
set @lvl2, 255;
callfunc "F_PvPRoom";
OnInit:
waitingroom "No Limit", 0;
end;
}
//***********************************************************************************************************************************************************//
// Function: PvP Fight Square Helper //
//***********************************************************************************************************************************************************//
function script F_PvPRoom {
mes "[Fight Square Helper]";
if(BaseLevel < @lvl1) goto L_LowLvl;
if(BaseLevel > @lvl2) goto L_HiLvl;
mes "Please choose an arena to fight in...";
M_Menu:
next;
menu @room1$ + " [" + getmapusers("pvp_"+@map$ + "-1.gat") + "/" +@players1+ "]",M_Rm1,
@room2$ + " [" + getmapusers("pvp_"+@map$ + "-2.gat") + "/" +@players2+ "]",M_Rm2,
@room3$ + " [" + getmapusers("pvp_"+@map$ + "-3.gat") + "/" +@players2+ "]",M_Rm3,
@room4$ + " [" + getmapusers("pvp_"+@map$ + "-4.gat") + "/" +@players2+ "]",M_Rm4,
@room5$ + " [" + getmapusers("pvp_"+@map$ + "-5.gat") + "/" +@players2+ "]",M_Rm5, "Cancel",M_End;
M_Rm1:
if (getmapusers("pvp_"+@map$+"-1.gat") == @players1) goto L_Full;
warp "pvp_"+@map$+"-1.gat",0,0;
end;
M_Rm2:
if (getmapusers("pvp_"+@map$+"-2.gat") == @players2) goto L_Full;
warp "pvp_"+@map$+"-2.gat",0,0;
end;
M_Rm3:
if (getmapusers("pvp_"+@map$+"-3.gat") == @players2) goto L_Full;
warp "pvp_"+@map$+"-3.gat",0,0;
end;
M_Rm4:
if (getmapusers("pvp_"+@map$+"-4.gat") == @players2) goto L_Full;
warp "pvp_"+@map$+"-4.gat",0,0;
end;
M_Rm5:
if (getmapusers("pvp_"+@map$+"-5.gat") == @players2) goto L_Full;
warp "pvp_"+@map$+"-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;
}