Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
//===== rAthena Script =======================================
//= Instanced Hunting Grounds
//===== By ===================================================
//= llchrisll
//===== Version ==============================================
//= 1.0 - Initial Version
// - Fixed an issue with turning in quests from the previous level range
// (Thanks Polly for the report)
// - Fixed a typo with exp rewards (Thanks Polly for pointing it out)
// - Fixed a bug about the Quest Delay
// - Optimized the Dimension Gate Texts a bit
// - Optimized the Reward Display of the actual Quest
// - Optimized Spawn Behaviour of the Mobs
// - Fixed an typo with the MvP Spawn
// - Optimized the start of the instance by adding an extra NPC
// - Changed the getgroupid check to 99
// - Added custom atcommand @hgstatus to check the progress
// - Decreased the mob amount of 175+ quests to 350
//===== Tested With ==========================================
//= rAthena 11/01/2020 Revision
//= GIT Hash: d158603424959805ba26f22ad6ba0237915c9acc
//===== Description ==========================================
//= Based on the idea of Gramps.
//= Instance based with 6 different element rotations
// Each Instance (6 total) can be a different element
//= Min. Player, Max. Player and required Player are configureable
//= Harder Mobs + Better Rewards
//= 13 Quests per Instance
// Rewards for each Quest seperatly configureable
//===== Comments =============================================
//= For the db entries you need the HuntingGrounds_install.txt file
//============================================================
prontera,163,172,4 script Exiled Warrior 4_F_VALKYRIE2,{
mes .n$;
mes "Hello "+strcharinfo(0)+"!";
if(!getcharid(1)) {
mes "But first make a party before talking to me again.";
close;
}
next;
mes .n$;
mes "First select the Level for the Hunting Ground:";
next;
set .@h,select(.HG_Menu$) - 1;
set .@i,.@h + 1;
mes .n$;
mes "Level: "+.HG_MinLvL[.@h]+ ( (.HG_MaxLvL[.@h] != .HG_MinLvL[.@h])?" - "+.HG_MaxLvL[.@h]:"+");
mes "Element: "+.Hunt_Ele_TxT$[getd(".HuntGround_I"+.@i)-1];
mes "Minimum Players: "+.HG_Players[.@h];
next;
switch(select("Enter Hunting Grounds:Hunting Quests:Leave")) {
case 1:
mes .n$;
mes "Please choose what you want to do:";
if(is_party_leader() == true)
set .@i_menu$,( (instance_id(IM_PARTY) == 0)?"Generate Dimension Gate":"Close Dimension Gate");
else if(is_party_leader() == false)
if(instance_id(IM_PARTY) == 0)
mes "^FF0000Only the Party Leader can generate the Dimension Gate.^000000";
if(instance_id(IM_PARTY) == 0)
mes "^FF0000You can't enter the Dimension Gate yet, since it wasn't generated yet!^000000";
next;
switch(select(.@i_menu$+":"+( (instance_id(IM_PARTY) != 0)?"Enter Dimension":"")+":Leave")) {
case 1:
mes .n$;
switch(checkquest(.Hunt_QDelay[.@h],PLAYTIME)) {
case -1: break;
case 0:
case 1:
mes "The "+.HG_Name$[.@h]+" hasn't stabilized yet.";
mes "Please come back later.";
close;
case 2:
completequest .Hunt_QDelay[.@h];
erasequest .Hunt_QDelay[.@h];
break;
}
if(getgroupid() < 99) // testing purposes
if(instance_check_party(getcharid(1),.HG_Players[.@h],.HG_MinLvL[.@h],.HG_MaxLvL[.@h]) == 0) {
mes "You're party doesn't meet the conditions:";
mes "Level "+.HG_MinLvL[.@h]+" - "+.HG_MaxLvL[.@h]+", at least "+.HG_Players[.@h]+" players";
close;
}
set .@hg_ins,instance_create(.HG_Name$[.@h]);
if(.@hg_ins == -3) {
mes "Do you want to close the Dimension Gate?";
if(select("- Yes:- No") - 1) close;
next;
mes .n$;
mes "The Dimension Gate has been closed.";
instance_destroy instance_id(IM_PARTY);
set @HG_ID,0;
close;
} else if(.@hg_ins < 0) {
mes "Instance creation failed.";
close;
}
mes "The time gap will be generated soon. Please talk to me again to enter.";
// Reading Normal Mob Quest IDs
for ( set .@q,0; .@q < getarraysize(getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))); set .@q,.@q + 1)
for ( set .@m,0; .@m < getarraysize(getd(".Hunt_QID_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)))); set .@m,.@m + 2) {
setarray $@mob_id[getarraysize($@mob_id)],getd(".Hunt_QID_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))+"["+.@m+"]");
set $@Max_Mobs,$@Max_Mobs + getd(".Hunt_QID_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))+"["+(.@m+1)+"]");
}
// Reading MvP Quest IDs
for ( set .@q,0; .@q < getarraysize(getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))); set .@q,.@q + 1)
for ( set .@m,0; .@m < getarraysize(getd(".Hunt_QID_"+getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)))); set .@m,.@m + 2) {
setarray $@mvp_id[getarraysize($@mvp_id)],getd(".Hunt_QID_"+getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))+"["+.@m+"]");
setarray $@mvp_am[getarraysize($@mvp_am)],getd(".Hunt_QID_"+getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))+"["+(.@m+1)+"]");
}
close;
case 2:
mes .n$;
switch(checkquest(.Hunt_QDelay[.@h],PLAYTIME)) {
case -1: break;
case 0:
case 1:
mes "The "+.HG_Name$[.@h]+" hasn't stabilized yet.";
mes "Please come back later.";
close;
}
switch(instance_enter(.HG_Name$[.@h])) {
case IE_NOINSTANCE:
mes "You didn't generate the time gap yet!";
close;
case IE_NOMEMBER:
case IE_OTHER:
mes "Unknown Error has occurded in entering "+.HG_Name$[.@h]+".";
close;
case IE_OK:
mes "You'll now enter the "+.HG_Name$[.@h]+".";
mes "I'll be waiting inside, just talk to me when you are ready.";
close2;
if(!@HG_ID || @HG_ID != .@h)
set @HG_ID,.@h;
announce "["+strcharinfo(0)+"] from the party ["+getpartyname(getcharid(1))+"] is entering the "+.HG_Name$[.@h]+".", bc_all,0x00FF99;
end;
}
close;
case 3:
break;
}
break;
case 2:
mes .n$;
mes "Do you want to accept quests or remove Quests for this Hunting Ground?";
next;
switch(select("Accept Quests:Remove current Quests:Remove previous Quests")) {
case 1: break;
case 2:
mes .n$;
mes "Every current Quest for this Hunting Ground has been removed.";
for ( set .@q,0; .@q < getarraysize(getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))); set .@q,.@q + 1)
if(checkquest(getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")) != -1)
erasequest getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]");
for ( set .@q,0; .@q < getarraysize(getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))); set .@q,.@q + 1)
if(checkquest(getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")) != -1)
erasequest getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]");
end;
case 3:
mes .n$;
mes "Please select the Element you want to remove the previous Quests:";
next;
set .@e,select(.Ele_Menu$);
mes .n$;
mes "Every previous Quest for this Hunting Ground of the Element, ["+.Hunt_Ele_TxT$[.@e-1]+"], has been removed.";
for ( set .@q,0; .@q < getarraysize(getd(".Hunt_MobQ_I"+.@i+"_E"+.@e)); set .@q,.@q + 1)
if(checkquest(getd(".Hunt_MobQ_I"+.@i+"_E"+.@e+"["+.@q+"]")) != -1)
erasequest getd(".Hunt_MobQ_I"+.@i+"_E"+.@e+"["+.@q+"]");
for ( set .@q,0; .@q < getarraysize(getd(".Hunt_MvPQ_I"+.@i+"_E"+.@e)); set .@q,.@q + 1)
if(checkquest(getd(".Hunt_MvPQ_I"+.@i+"_E"+.@e+"["+.@q+"]")) != -1)
erasequest getd(".Hunt_MvPQ_I"+.@i+"_E"+.@e+"["+.@q+"]");
end;
}
mes .n$;
mes "For this week we have the following quest available:";
mes " ";
// Reading Normal Mob Quest IDs
for ( set .@q,0; .@q < getarraysize(getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))); set .@q,.@q + 1) {
mes "Monster Quest #"+(.@q+1)+":";
for ( set .@m,0; .@m < getarraysize(getd(".Hunt_QID_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)))); set .@m,.@m + 2)
mes "> "+getd(".Hunt_QID_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+(.@m+1)+"]")+"x "+getmonsterinfo(getd(".Hunt_QID_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+.@m+"]"),MOB_NAME);
setarray .@m_quest[getarraysize(.@m_quest)],getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]");
set .@q_m$,.@q_m$ + "Monster Quest #"+(.@q+1)+ ( (getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+(.@q+1)+"]") != 0)?":":"");
mes " ";
}
set .@q_m$,.@q_m$ + ":";
// Reading MvP Quest IDs
for ( set .@q,0; .@q < getarraysize(getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))); set .@q,.@q + 1) {
mes "MvP Quest #"+(.@q+1)+":";
for ( set .@m,0; .@m < getarraysize(getd(".Hunt_QID_"+getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)))); set .@m,.@m + 2)
mes "> "+getd(".Hunt_QID_"+getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+(.@m+1)+"]")+"x "+getmonsterinfo(getd(".Hunt_QID_"+getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+.@m+"]"),MOB_NAME);
setarray .@m_quest[getarraysize(.@m_quest)],getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]");
set .@q_m$,.@q_m$ + "MvP Quest #"+(.@q+1)+ ( (getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+(.@q+1)+"]") != 0)?":":"");
mes " ";
}
mes "Total Reward:";
for ( set .@q,0; .@q < getarraysize(getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))); set .@q,.@q + 1)
for ( set .@r,0; .@r < getarraysize(getd(".Hunt_RewardQ_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]"))); set .@r,.@r + 2) {
for ( set .@a,0; .@a < getarraysize(.@reward); set .@a,.@a + 2) {
set .@f,0;
if(.@reward[.@a] == getd(".Hunt_RewardQ_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+.@r+"]") ) {
setarray .@reward[.@a+1],(.@reward[.@a+1] + getd(".Hunt_RewardQ_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+(.@r+1)+"]"));
set .@f,1;
break;
}
}
if(!.@f)
setarray .@reward[getarraysize(.@reward)],getd(".Hunt_RewardQ_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+.@r+"]"),getd(".Hunt_RewardQ_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+(.@r+1)+"]");
}
for ( set .@q,0; .@q < getarraysize(getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i))); set .@q,.@q + 1)
for ( set .@r,0; .@r < getarraysize(getd(".Hunt_RewardQ_"+getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]"))); set .@r,.@r + 2) {
for ( set .@a,0; .@a < getarraysize(.@reward); set .@a,.@a + 2) {
set .@f,0;
if(.@reward[.@a] == getd(".Hunt_RewardQ_"+getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+.@r+"]") ) {
setarray .@reward[.@a+1],(.@reward[.@a+1] + getd(".Hunt_RewardQ_"+getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+(.@r+1)+"]"));
set .@f,1;
break;
}
}
if(!.@f)
setarray .@reward[getarraysize(.@reward)],getd(".Hunt_RewardQ_"+getd(".Hunt_MvPQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+.@r+"]"),getd(".Hunt_RewardQ_"+getd(".Hunt_MobQ_I"+.@i+"_E"+getd(".HuntGround_I"+.@i)+"["+.@q+"]")+"["+(.@r+1)+"]");
}
for ( set .@t,0; .@t < getarraysize(.@reward); set .@t,.@t + 2)
if(.@reward[.@t] == 1) // Zeny
mes .@reward[.@t+1]+"x Zeny";
else if(.@reward[.@t] >= 501) // Items
mes .@reward[.@t+1]+"x "+getitemname(.@reward[.@t]);
else
mes .@reward[.@t+1]+"x "+getd(""+.Hunt_VarD$[.@reward[.@t]]);
mes " ";
mes "EXP Reward:";
mes "You will gain the same EXP for each Mob you had to kill for the Quest again!";
while(1) {
next;
mes .n$;
mes "Please choose which Quest you want to accept/turn in:";
next;
set .@q_id,prompt(.@q_m$) - 1;
if(.@q_id == 254) break;
mes .n$;
set .@q_status,checkquest(.@m_quest[.@q_id],HUNTING);
if(.@q_status < 0) {
if(getgroupid() < 99) // testing purposes
if(BaseLevel < .HG_MinLvL[.@h] || BaseLevel > .HG_MaxLvL[.@h]) {
mes "I'm sorry, but you can't accept this quest of this level range.";
mes "Please choose the respective option for your level.";
close;
}
setquest .@m_quest[.@q_id];
mes "Quest accepted.";
} else if(.@q_status == 1) {
mes "You are not finished with the Hunting yet. Please come back as soon as you have done that.";
mes "Or do you want to abort the Hunting?";
if(select("Continue:Abort") == 1) close;
next;
mes .n$;
mes "Quest aborted.";
erasequest .@m_quest[.@q_id];
} else if(.@q_status == 2) {
for ( set .@q,0; .@q < getarraysize(getd(".Hunt_QID_"+.@m_quest[.@q_id])); set .@q,.@q + 2) {
set .@mob_bexp,.@mob_bexp + (strmobinfo(6,getd(".Hunt_QID_"+.@m_quest[.@q_id]+"["+.@q+"]"))*getd(".Hunt_QID_"+.@m_quest[.@q_id]+"["+(.@q+1)+"]"));
set .@mob_jexp,.@mob_jexp + (strmobinfo(7,getd(".Hunt_QID_"+.@m_quest[.@q_id]+"["+.@q+"]"))*getd(".Hunt_QID_"+.@m_quest[.@q_id]+"["+(.@q+1)+"]"));
}
mes "You have finished the quest, here is your reward:";
getexp .@mob_bexp,.@mob_jexp;
for ( set .@r,0; .@r < getarraysize(getd(".Hunt_RewardQ_"+.@m_quest[.@q_id])); set .@r,.@r + 2)
if(getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+.@r+"]") == 1) { // Zeny
mes "> "+getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+(.@r+1)+"]")+"x Zeny";
set Zeny,Zeny + getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+(.@r+1)+"]");
} else if(getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+.@r+"]") >= 501) { // Items
mes "> "+getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+(.@r+1)+"]")+"x "+getitemname(getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+.@r+"]"));
getitem getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+.@r+"]"),getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+(.@r+1)+"]");
} else {
mes "> "+getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+(.@r+1)+"]")+"x "+getd(""+.Hunt_VarD$[getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+.@r+"]")]);
setd(""+.Hunt_VarN$[getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+.@r+"]")]),getd(""+.Hunt_VarN$[getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+.@r+"]")]) + getd(".Hunt_RewardQ_"+.@m_quest[.@q_id]+"["+(.@r+1)+"]");
}
completequest .@m_quest[.@q_id];
erasequest .@m_quest[.@q_id];
}
}
end;
case 3:
break;
}
end;
OnInit:
set .n$,"["+strnpcinfo(0)+"]";
// Instance Level and Player Settings
// = Order is important!
// = .HG_Name$ > Need to be the same as in instance_db.txt
setarray .HG_Name$[0],"Hunting Ground 99","Hunting Ground 115","Hunting Ground 130","Hunting Ground 145","Hunting Ground 160","Hunting Ground 175";
setarray .HG_MinLvL[0],99,115,130,145,160,175; // Minimum Level
setarray .HG_MaxLvL[0],114,129,144,159,174,175; // Maximum Level
setarray .HG_Players[0],2,2,4,4,6,8; // Required Players to enter
for ( set .@h,0; .@h < getarraysize(.HG_Name$); set .@h,.@h + 1)
set .HG_Menu$,.HG_Menu$ + "["+.HG_MinLvL[.@h] + ( (.HG_MaxLvL[.@h] != .HG_MinLvL[.@h])?" - "+.HG_MaxLvL[.@h]:"+")+"]" + ( (.HG_Name$[.@h+1] != "")?":":"");
// Delay Quest ID's
setarray .Hunt_QDelay[0],160200,160201,160202,160203,160204,160205;
// Element Display Text
setarray .Hunt_Ele_TxT$[0],"Fire","Water","Wind","Earth","Shadow","Holy";
for ( set .@e,0; .@e < getarraysize(.Hunt_Ele_TxT$); set .@e,.@e + 1)
set .Ele_Menu$,.Ele_Menu$ + "["+.Hunt_Ele_TxT$[.@e]+"]" + ( (.Hunt_Ele_TxT$[.@e+1] != "")?":":"");
// ======= Monster Quest Settings =======
// .Hunt_MobQ_I<Instance ID>_E<Element> = Mob Quest IDs
// .Hunt_MvPQ_I<Instance ID>_E<Element> = MvP Quest IDs
// .Hunt_QID_<Quest ID> = "MobID,Quantity" in the respective Quest ID
// Note: You are free to add more Quests with more Mobs, but remember if they are custom quests to add them into the quest_db and questid2display.txt.
// Note2: If you change Mob ID's/Amounts, remember to change them in the quest_db for the respective quest id too
// ---- Level 99 - 114 ------
// = Fire
setarray .Hunt_MobQ_I1_E1[0],160000;
setarray .Hunt_MvPQ_I1_E1[0],160001;
setarray .Hunt_QID_160000[0],2071,100,1213,100,2154,100;
setarray .Hunt_QID_160001[0],1086,1;
// = Water
setarray .Hunt_MobQ_I1_E2[0],160002;
setarray .Hunt_MvPQ_I1_E2[0],160003;
setarray .Hunt_QID_160002[0],1883,100,1515,100,2417,100;
setarray .Hunt_QID_160003[0],1252,1;
// = Wind
setarray .Hunt_MobQ_I1_E3[0],160004;
setarray .Hunt_MvPQ_I1_E3[0],160005;
setarray .Hunt_QID_160004[0],1376,100,1692,100,2418,100;
setarray .Hunt_QID_160005[0],1059,1;
// = Earth
setarray .Hunt_MobQ_I1_E4[0],160006;
setarray .Hunt_MvPQ_I1_E4[0],160007;
setarray .Hunt_QID_160006[0],1881,100,1322,100,1784,100;
setarray .Hunt_QID_160007[0],1190,1;
// = Shadow
setarray .Hunt_MobQ_I1_E5[0],160008;
setarray .Hunt_MvPQ_I1_E5[0],160009;
setarray .Hunt_QID_160008[0],1256,100,1109,100,1416,100;
setarray .Hunt_QID_160009[0],1039,1;
// = Holy
setarray .Hunt_MobQ_I1_E6[0],160010;
setarray .Hunt_MvPQ_I1_E6[0],160011;
setarray .Hunt_QID_160010[0],2420,100,2427,100;
setarray .Hunt_QID_160011[0],1096,1;
// ---- Level 115 - 129 ------
// = Fire
setarray .Hunt_MobQ_I2_E1[0],160030;
setarray .Hunt_MvPQ_I2_E1[0],160031;
setarray .Hunt_QID_160030[0],2415,100,1310,100,2182,100;
setarray .Hunt_QID_160031[0],1115,1;
// = Water
setarray .Hunt_MobQ_I2_E2[0],160032;
setarray .Hunt_MvPQ_I2_E2[0],160033;
setarray .Hunt_QID_160032[0],1775,100,1206,100,2204,100;
setarray .Hunt_QID_160033[0],1779,1;
// = Wind
setarray .Hunt_MobQ_I2_E3[0],160034;
setarray .Hunt_MvPQ_I2_E3[0],160035;
setarray .Hunt_QID_160034[0],1259,100,1994,100,1677,100;
setarray .Hunt_QID_160035[0],1688,1;
// = Earth
setarray .Hunt_MobQ_I2_E4[0],160036;
setarray .Hunt_MvPQ_I2_E4[0],160037;
setarray .Hunt_QID_160036[0],1995,100,1194,100,1678,100;
setarray .Hunt_QID_160037[0],1511,1;
// = Shadow
setarray .Hunt_MobQ_I2_E5[0],160038;
setarray .Hunt_MvPQ_I2_E5[0],160039;
setarray .Hunt_QID_160038[0],2314,100,1379,100,1505,100;
setarray .Hunt_QID_160039[0],1157,1;
// = Holy
setarray .Hunt_MobQ_I2_E6[0],160040;
setarray .Hunt_MvPQ_I2_E6[0],160041;
setarray .Hunt_QID_160040[0],1371,100,1992,100;
setarray .Hunt_QID_160041[0],1388,1;
// ---- Level 130 - 144 ------
// = Fire
setarray .Hunt_MobQ_I3_E1[0],160060;
setarray .Hunt_MvPQ_I3_E1[0],160061;
setarray .Hunt_QID_160060[0],2353,200,1714,200,1837,200;
setarray .Hunt_QID_160061[0],2068,2;
// = Water
setarray .Hunt_MobQ_I3_E2[0],160062;
setarray .Hunt_MvPQ_I3_E2[0],160063;
setarray .Hunt_QID_160062[0],1697,200,2016,200,1671,200;
setarray .Hunt_QID_160063[0],2202,2;
// = Wind
setarray .Hunt_MobQ_I3_E3[0],160064;
setarray .Hunt_MvPQ_I3_E3[0],160065;
setarray .Hunt_QID_160064[0],2313,200,1208,200,1774,200;
setarray .Hunt_QID_160065[0],1251,2;
// = Earth
setarray .Hunt_MobQ_I3_E4[0],160066;
setarray .Hunt_MvPQ_I3_E4[0],160067;
setarray .Hunt_QID_160066[0],2013,200,1993,200,1717,200;
setarray .Hunt_QID_160067[0],1885,2;
// = Shadow
setarray .Hunt_MobQ_I3_E5[0],160068;
setarray .Hunt_MvPQ_I3_E5[0],160069;
setarray .Hunt_QID_160068[0],1866,200,1219,200,1752,200;
setarray .Hunt_QID_160069[0],1373,2;
// = Holy
setarray .Hunt_MobQ_I3_E6[0],160070;
setarray .Hunt_MvPQ_I3_E6[0],160071;
setarray .Hunt_QID_160070[0],1713,200,1655,200;
setarray .Hunt_QID_160071[0],1685,2;
// ---- Level 145 - 159 ------
// = Fire
setarray .Hunt_MobQ_I4_E1[0],160090;
setarray .Hunt_MvPQ_I4_E1[0],160091;
setarray .Hunt_QID_160090[0],1833,200,1652,200,1634,200;
setarray .Hunt_QID_160091[0],2249,2;
// = Water
setarray .Hunt_MobQ_I4_E2[0],160092;
setarray .Hunt_MvPQ_I4_E2[0],160093;
setarray .Hunt_QID_160092[0],2092,200,1681,200,1636,200;
setarray .Hunt_QID_160093[0],2319,2;
// = Wind
setarray .Hunt_MobQ_I4_E3[0],160094;
setarray .Hunt_MvPQ_I4_E3[0],160095;
setarray .Hunt_QID_160094[0],1716,200,1656,200,2364,200;
setarray .Hunt_QID_160095[0],1630,2;
// = Earth
setarray .Hunt_MobQ_I4_E4[0],160096;
setarray .Hunt_MvPQ_I4_E4[0],160097;
setarray .Hunt_QID_160096[0],1654,200,2084,200,2133,200;
setarray .Hunt_QID_160097[0],1312,2;
// = Shadow
setarray .Hunt_MobQ_I4_E5[0],160098;
setarray .Hunt_MvPQ_I4_E5[0],160099;
setarray .Hunt_QID_160098[0],1867,200,2468,200,2469,200;
setarray .Hunt_QID_160099[0],1719,2;
// = Holy
setarray .Hunt_MobQ_I4_E6[0],160100;
setarray .Hunt_MvPQ_I4_E6[0],160101;
setarray .Hunt_QID_160100[0],1637,200,2221,200;
setarray .Hunt_QID_160101[0],1765,2;
// ---- Level 160 - 174 ------
// = Fire
setarray .Hunt_MobQ_I5_E1[0],160120;
setarray .Hunt_MvPQ_I5_E1[0],160121;
setarray .Hunt_QID_160120[0],2369,300,3022,300,3023,300;
setarray .Hunt_QID_160121[0],1646,2,2249,2;
// = Water
setarray .Hunt_MobQ_I5_E2[0],160122;
setarray .Hunt_MvPQ_I5_E2[0],160123;
setarray .Hunt_QID_160122[0],2367,300,2020,300,2021,300;
setarray .Hunt_QID_160123[0],2319,2,2534,2;
// = Wind
setarray .Hunt_MobQ_I5_E3[0],160124;
setarray .Hunt_MvPQ_I5_E3[0],160125;
setarray .Hunt_QID_160124[0],2758,300,2284,300,2365,300;
setarray .Hunt_QID_160125[0],2251,2,2535,2;
// = Earth
setarray .Hunt_MobQ_I5_E4[0],160126;
setarray .Hunt_MvPQ_I5_E4[0],160127;
setarray .Hunt_QID_160126[0],2132,300,2019,300,2370,300;
setarray .Hunt_QID_160127[0],2165,2,2253,2;
// = Shadow
setarray .Hunt_MobQ_I5_E5[0],160128;
setarray .Hunt_MvPQ_I5_E5[0],160129;
setarray .Hunt_QID_160128[0],2282,300,2281,300,2991,300;
setarray .Hunt_QID_160129[0],1871,2,2131,2;
// = Holy
setarray .Hunt_MobQ_I5_E6[0],160130;
setarray .Hunt_MvPQ_I5_E6[0],160131;
setarray .Hunt_QID_160130[0],1637,300,2221,300;
setarray .Hunt_QID_160131[0],1751,2,2228,2;
// ---- Level 175 ------
// = Fire
setarray .Hunt_MobQ_I6_E1[0],160150;
setarray .Hunt_MvPQ_I6_E1[0],160151;
setarray .Hunt_QID_160150[0],1634,350,2222,350;
setarray .Hunt_QID_160151[0],2532,3,1646,3;
// = Water
setarray .Hunt_MobQ_I6_E2[0],160152;
setarray .Hunt_MvPQ_I6_E2[0],160153;
setarray .Hunt_QID_160152[0],2184,350,2224,350;
setarray .Hunt_QID_160153[0],2534,3,2238,3;
// = Wind
setarray .Hunt_MobQ_I6_E3[0],160154;
setarray .Hunt_MvPQ_I6_E3[0],160155;
setarray .Hunt_QID_160154[0],2477,350,2919,350;
setarray .Hunt_QID_160155[0],2535,3,1650,3;
// = Earth
setarray .Hunt_MobQ_I6_E4[0],160156;
setarray .Hunt_MvPQ_I6_E4[0],160157;
setarray .Hunt_QID_160156[0],2901,350,2916,350;
setarray .Hunt_QID_160157[0],2533,3,1648,3;
// = Shadow
setarray .Hunt_MobQ_I6_E5[0],160158;
setarray .Hunt_MvPQ_I6_E5[0],160159;
setarray .Hunt_QID_160158[0],2989,350,3252,350;
setarray .Hunt_QID_160159[0],1871,3,2255,3;
// = Holy
setarray .Hunt_MobQ_I6_E6[0],160160;
setarray .Hunt_MvPQ_I6_E6[0],160161;
setarray .Hunt_QID_160160[0],1637,350,2221,350;
setarray .Hunt_QID_160161[0],1649,3,2235,3;
// ======= Reward Settings =======
// - Identifiers:
// 1 = Zeny
// 2 = Cash Points
// 3 = Kafra Points
// 4 = Event Points
// For Items = Item ID
// Display Name of Variables for Players
setarray .Hunt_VarD$[1],"Cash Points","Kafra Points","Event Points";
// Variable Names
setarray .Hunt_VarN$[1],"#CASHPOINTS","#KAFRAPOINTS","EventPoints";
// Note: You can add more Variables if you want and rename the current ones of course
// But remember to note it like above for better overview which Identfier it has
// The Idenfier is the "Index" of the Array + 1, see above
// Example: Variable for Quest Points, add it after the last Value of each Array
// .Hunt_VarD$ = "Quest Points" > Display Name for Players
// .Hunt_VarN$ = "QuestPoints" > Variable Name for the Script
// The Idenfier for it would be 5, so the Index would be 4
// Rewards per Quest
// ---- Level 99 - 114 ---
setarray .Hunt_RewardQ_160000[0],1,10000,7517,50,13607,1;
setarray .Hunt_RewardQ_160001[0],1,10000,7517,50,13607,1;
setarray .Hunt_RewardQ_160002[0],1,10000,7517,50,13607,1;
setarray .Hunt_RewardQ_160003[0],1,10000,7517,50,13607,1;
setarray .Hunt_RewardQ_160004[0],1,10000,7517,50,13607,1;
setarray .Hunt_RewardQ_160005[0],1,10000,7517,50,13607,1;
setarray .Hunt_RewardQ_160006[0],1,10000,7517,50,13607,1;
setarray .Hunt_RewardQ_160007[0],1,10000,7517,50,13607,1;
setarray .Hunt_RewardQ_160008[0],1,10000,7517,50,13607,1;
setarray .Hunt_RewardQ_160009[0],1,10000,7517,50,13607,1;
setarray .Hunt_RewardQ_160010[0],1,10000,7517,50,13607,1;
setarray .Hunt_RewardQ_160011[0],1,10000,7517,50,13607,1;
// ---- Level 115 - 129 ---
setarray .Hunt_RewardQ_160030[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160031[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160032[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160033[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160034[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160035[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160036[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160037[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160038[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160039[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160040[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160041[0],1,100000,7517,50,13607,1;
// ---- Level 130 - 144 ---
setarray .Hunt_RewardQ_160060[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160061[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160062[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160063[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160064[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160065[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160066[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160067[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160068[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160069[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160070[0],1,100000,7517,50,13607,1;
setarray .Hunt_RewardQ_160071[0],1,100000,7517,50,13607,1;
// ---- Level 145 - 159 ---
setarray .Hunt_RewardQ_160090[0],1,500000,7517,50,13607,1;
setarray .Hunt_RewardQ_160091[0],1,500000,7517,50,13607,1;
setarray .Hunt_RewardQ_160092[0],1,500000,7517,50,13607,1;
setarray .Hunt_RewardQ_160093[0],1,500000,7517,50,13607,1;
setarray .Hunt_RewardQ_160094[0],1,500000,7517,50,13607,1;
setarray .Hunt_RewardQ_160095[0],1,500000,7517,50,13607,1;
setarray .Hunt_RewardQ_160096[0],1,500000,7517,50,13607,1;
setarray .Hunt_RewardQ_160097[0],1,500000,7517,50,13607,1;
setarray .Hunt_RewardQ_160098[0],1,500000,7517,50,13607,1;
setarray .Hunt_RewardQ_160099[0],1,500000,7517,50,13607,1;
setarray .Hunt_RewardQ_160100[0],1,500000,7517,50,13607,1;
setarray .Hunt_RewardQ_160101[0],1,500000,7517,50,13607,1;
// ---- Level 160 - 174 ---
setarray .Hunt_RewardQ_160120[0],1,1000000,7517,50,13607,1;
setarray .Hunt_RewardQ_160121[0],1,1000000,7517,50,13607,1;
setarray .Hunt_RewardQ_160122[0],1,1000000,7517,50,13607,1;
setarray .Hunt_RewardQ_160123[0],1,1000000,7517,50,13607,1;
setarray .Hunt_RewardQ_160124[0],1,1000000,7517,50,13607,1;
setarray .Hunt_RewardQ_160125[0],1,1000000,7517,50,13607,1;
setarray .Hunt_RewardQ_160126[0],1,1000000,7517,50,13607,1;
setarray .Hunt_RewardQ_160127[0],1,1000000,7517,50,13607,1;
setarray .Hunt_RewardQ_160128[0],1,1000000,7517,50,13607,1;
setarray .Hunt_RewardQ_160129[0],1,1000000,7517,50,13607,1;
setarray .Hunt_RewardQ_160130[0],1,1000000,7517,50,13607,1;
setarray .Hunt_RewardQ_160131[0],1,1000000,7517,50,13607,1;
// ---- Level 175 ---
setarray .Hunt_RewardQ_160150[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
setarray .Hunt_RewardQ_160151[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
setarray .Hunt_RewardQ_160152[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
setarray .Hunt_RewardQ_160153[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
setarray .Hunt_RewardQ_160154[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
setarray .Hunt_RewardQ_160155[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
setarray .Hunt_RewardQ_160156[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
setarray .Hunt_RewardQ_160157[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
setarray .Hunt_RewardQ_160158[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
setarray .Hunt_RewardQ_160159[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
setarray .Hunt_RewardQ_160160[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
setarray .Hunt_RewardQ_160161[0],1,3000000,7517,500,13607,5,6438,20,6439,20;
OnMon0000:
// Random every Week, but you can also define it manually:
// 1 = Fire, 2 = Water, 3 = Wind, 4 = Earth, 5 = Shadow, 6 = Holy
set .HuntGround_I1,rand(1,6); // Instance Element for Level 99-114
set .HuntGround_I2,rand(1,6); // Instance Element for Level 115-129
set .HuntGround_I3,rand(1,6); // Instance Element for Level 130-144
set .HuntGround_I4,rand(1,6); // Instance Element for Level 145-159
set .HuntGround_I5,rand(1,6); // Instance Element for Level 160-174
set .HuntGround_I6,rand(1,6); // Instance Element for Level 175+
end;
}
gef_fild14,1,1,0 script #HuntGround_Instance -1,{
OnInit:
disablenpc strnpcinfo(0);
end;
OnInstanceDestroy:
disablenpc 'npc$;
end;
OnInstanceInit:
bindatcmd "hgstatus",instance_npcname(strnpcinfo(0))+"::OnHGStatus";
set 'npc$,instance_npcname("#HuntGround_Instance");
set 'map$,instance_mapname(strnpcinfo(4));
set 'label$,instance_npcname(strnpcinfo(0))+"::OnHuntMobDeath";
set 'mvp_label$,instance_npcname(strnpcinfo(0))+"::OnHuntMvPDeath";
enablenpc 'npc$;
enablenpc instance_npcname("#HG_Exit");
setmapflag 'map$,mf_nowarpto;
setmapflag 'map$,mf_nowarp;
setmapflag 'map$,mf_nogo;
setmapflag 'map$,mf_noteleport;
setmapflag 'map$,mf_nosave;
setmapflag 'map$,mf_noreturn;
setmapflag 'map$,mf_nomemo;
setmapflag 'map$,mf_nochat;
setmapflag 'map$,mf_novending;
setmapflag 'map$,mf_nobranch;
setmapflag 'map$,mf_partylock;
setmapflag 'map$,mf_noloot;
enablenpc instance_npcname("Exiled Warrior#HG");
sleep 2000;
if(getarraysize('mob_id) < 1) {
copyarray 'mob_id[0],$@mob_id[0],getarraysize($@mob_id);
set 'Max_Mobs,$@Max_Mobs;
copyarray 'mvp_id[0],$@mvp_id[0],getarraysize($@mvp_id);
copyarray 'mvp_am[0],$@mvp_am[0],getarraysize($@mvp_am);
set 'Max_MvP,getarraysize('mvp_id);
}
deletearray $@mob_id[0],getarraysize($@mob_id);
deletearray $@mvp_id[0],getarraysize($@mvp_id);
deletearray $@mvp_am[0],getarraysize($@mvp_am);
end;
OnHuntMobSpawn:
set 'spawn,('Max_Mobs/2)/10;
for ( set .@s,0; .@s < getarraysize('mob_id); set .@s,.@s + 1) {
set .@r,0;
while(.@r < 'spawn) {
monster 'map$,0,0,getmonsterinfo('mob_id[.@s],MOB_NAME),'mob_id[.@s],5,'label$;
set .@r,.@r + 1;
sleep 100;
}
}
end;
OnHGStatus:
dispbottom "[Hunting Ground - Status:]";
dispbottom "> Mobs Killed: "+('C_Mobs+'Mobs_CT)+"/"+'Max_Mobs;
dispbottom "> MvP Spawn after each "+('Max_Mobs/'Max_MvP)+" killed Mobs";
dispbottom "> MvPs Killed: "+'MvP_Cur+"/"+'Max_MvP;
end;
OnHuntMvPDeath:
set 'MvP_CT,'MvP_CT + 1;
if('mvp_am['MvP_Cur] > 'MvP_CT) {
instance_announce instance_id(),"[Exiled Warrior]: Congratulation, now prepare for the next ["+getmonsterinfo('mvp_id['MvP_Cur],MOB_NAME)+"]! You have 10 seconds to do so!",bc_all;
getmapxy(.@map$,.@x,.@y,BL_PC);
sleep 10000;
areamonster 'map$,(.@x-10),(.@y-10),(.@x+10),(.@y+10),getmonsterinfo('mvp_id['MvP_Cur],MOB_NAME),'mvp_id['MvP_Cur],1,'mvp_label$;
instance_announce instance_id(),"[Exiled Warrior]: The MvP ["+getmonsterinfo('mvp_id['MvP_Cur],MOB_NAME)+"] has been re-spawned near you!",bc_all;
end;
}
if('MvP_Cur < 'Max_MvP)
set 'MvP_Cur,'MvP_Cur + 1;
donpcevent 'npc$+"::OnHuntMobSpawn";
set 'MvP_CT,0;
end;
OnHuntMobDeath:
if('Mobs_CT < 'Max_Mobs)
set 'C_Mobs,'C_Mobs + 1;
if('C_Mobs == (('Max_Mobs/'Max_MvP) - 50))
instance_announce instance_id(),"[Exiled Warrior]: The MvP ["+getmonsterinfo('mvp_id['MvP_Cur],MOB_NAME)+"] will appear after the next 50 monsters!",bc_all;
if('C_Mobs == ('Max_Mobs/'Max_MvP) && mobcount('map$,'mvp_label$) < 1) {
getmapxy(.@map$,.@x,.@y,BL_PC);
instance_announce instance_id(),"[Exiled Warrior]: The MvP ["+getmonsterinfo('mvp_id['MvP_Cur],MOB_NAME)+"] will appear in 10 seconds near you!",bc_all;
sleep 10000;
areamonster 'map$,(.@x-10),(.@y-10),(.@x+10),(.@y+10),getmonsterinfo('mvp_id['MvP_Cur],MOB_NAME),'mvp_id['MvP_Cur],1,'mvp_label$;
killmonster 'map$,'label$;
set 'Mobs_CT,'Mobs_CT + 'C_Mobs;
set 'C_Mobs,0;
end;
}
if(!killedrid && getgroupid() > 0) {
instance_announce instance_id(),"Dear GM, don't use @killmonster in a instance! Gratulation you broke the instance!",bc_self;
end;
} else if(!killedrid && getgroupid() < 1) {
instance_announce instance_id(),"An error has occured, monster has died without any player causing it's death (not sure why), please report this immediatly!",bc_map;
end;
}
monster 'map$,0,0,getmonsterinfo(killedrid,MOB_NAME),killedrid,1,'label$;
end;
}
gef_fild14,356,220,6 script Exiled Warrior#HG 4_F_VALKYRIE2,{
mes .n$;
mes "Welcome to the Hunting Grounds!";
if(is_party_leader() == false) {
mes "But I'm sorry, only the party leader can talk to me.";
close;
}
mes "Are you ready to hunt some mobs?";
next;
if(select("- Yes:- No") - 1) {
mes .n$;
mes "Okay, talk to me again whenever you are ready!";
close;
}
mes .n$;
mes "Let the Hunting begin!!!";
close2;
instance_announce instance_id(),"[Exiled Warrior]: You have 10 seconds to prepare!",bc_all;
sleep2 10000;
instance_announce instance_id(),"[Exiled Warrior]: Info: You can type \"@hgstatus\" to recieve the current status of your hunt!",bc_all;
donpcevent 'npc$+"::OnHuntMobSpawn";
disablenpc instance_npcname(strnpcinfo(0));
end;
OnInit:
set .n$,"["+strnpcinfo(1)+"]";
disablenpc strnpcinfo(0);
end;
OnInstanceDestroy:
disablenpc instance_npcname(strnpcinfo(0));
end;
}
gef_fild14,371,219,0 script #HG_Exit 45,3,3,{
mes "[HG Exit]";
mes "Do you really want to leave the Hunting Ground?";
mes "Be warned, that you can't re-enter until the time gap has stabilized itself again!";
if(select("> Yes:> Nevermind") - 1) close;
setquest getvariableofnpc(.Hunt_QDelay[@HG_ID],"Exiled Warrior");
warp "SavePoint",0,0;
set @HG_ID,0;
end;
OnInit:
disablenpc strnpcinfo(0);
end;
OnInstanceDestroy:
unbindatcmd "hgstatus";
disablenpc instance_npcname(strnpcinfo(0));
end;
}