
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. EVERYTHING ELSE GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5094 54d463be-8e91-2dee-dedb-b68131a5f0ec
415 lines
14 KiB
Plaintext
415 lines
14 KiB
Plaintext
//===== 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;
|
|
}
|