Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate
package custom.Enchant;
import java.util.logging.Logger;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.model.olympiad.OlympiadManager;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.network.serverpackets.CharInfo;
import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
import com.l2jserver.gameserver.network.serverpackets.UserInfo;
public class Enchant extends Quest
{
public static final Logger _log = Logger.getLogger(Enchant.class.getName());
private final static int npcId = 9994;
// Item required to enchant armor +1
private final static int itemRequiredArmor = 6393;
private final static int itemRequiredArmorCount = 50;
// Item required to enchant jewels +1
private final static int itemRequiredJewels = 6393;
private final static int itemRequiredJewelsCount = 50;
// Item required to enchant weapon +1
private final static int itemRequiredWeapon = 6393;
private final static int itemRequiredWeaponCount = 150;
// Item required to enchant belt/shirt +1
private final static int itemRequiredBeltShirt = 6393;
private final static int itemRequiredBeltShirtCount = 100;
public Enchant(int questId, String name, String descr)
{
super(questId, name, descr);
addStartNpc(npcId);
addFirstTalkId(npcId);
addTalkId(npcId);
}
public static void main(String[] args)
{
new Enchant(-1, Enchant.class.getSimpleName(), "custom");
}
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
String enchantType = "Enchant.htm";
if (player.getQuestState(getName()) == null)
{
newQuestState(player);
}
else if (player.isInCombat())
{
return drawHtml("You are in combat", "Don't fight if you want to talk with me!", enchantType);
}
else if (player.getPvpFlag() == 1)
{
return drawHtml("You are flagged", "Don't fight if you want to talk with me!", enchantType);
}
else if (player.getKarma() != 0)
{
return drawHtml("You are in chaotic state", "Don't fight if you want to talk with me!", enchantType);
}
else if (OlympiadManager.getInstance().isRegistered(player))
{
return drawHtml("You are registered for Olympiad", "You can't use my services<br1>while playing the Olympiad.", enchantType);
}
return "Enchant.htm";
}
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
String htmlText = event;
String enchantType = "Enchant.htm";
int armorType = -1;
// Armor parts
if (event.equals("enchantHelmet"))
{
armorType = Inventory.PAPERDOLL_HEAD;
enchantType = "EnchantArmor.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount);
}
else if (event.equals("enchantChest"))
{
armorType = Inventory.PAPERDOLL_CHEST;
enchantType = "EnchantArmor.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount);
}
else if (event.equals("enchantLeggings"))
{
armorType = Inventory.PAPERDOLL_LEGS;
enchantType = "EnchantArmor.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount);
}
else if (event.equals("enchantGloves"))
{
armorType = Inventory.PAPERDOLL_GLOVES;
enchantType = "EnchantArmor.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount);
}
else if (event.equals("enchantBoots"))
{
armorType = Inventory.PAPERDOLL_FEET;
enchantType = "EnchantArmor.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount);
}
else if (event.equals("enchantShieldOrSigil"))
{
armorType = Inventory.PAPERDOLL_LHAND;
enchantType = "EnchantArmor.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount);
}
// Jewels
else if (event.equals("enchantUpperEarring"))
{
armorType = Inventory.PAPERDOLL_LEAR;
enchantType = "EnchantJewels.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredJewels, itemRequiredJewelsCount);
}
else if (event.equals("enchantLowerEarring"))
{
armorType = Inventory.PAPERDOLL_REAR;
enchantType = "EnchantJewels.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredJewels, itemRequiredJewelsCount);
}
else if (event.equals("enchantNecklace"))
{
armorType = Inventory.PAPERDOLL_NECK;
enchantType = "EnchantJewels.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredJewels, itemRequiredJewelsCount);
}
else if (event.equals("enchantUpperRing"))
{
armorType = Inventory.PAPERDOLL_LFINGER;
enchantType = "EnchantJewels.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredJewels, itemRequiredJewelsCount);
}
else if (event.equals("enchantLowerRing"))
{
armorType = Inventory.PAPERDOLL_RFINGER;
enchantType = "EnchantJewels.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredJewels, itemRequiredJewelsCount);
}
// Belt/Shirt
else if (event.equals("enchantBelt"))
{
armorType = Inventory.PAPERDOLL_BELT;
enchantType = "EnchantBeltShirt.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredBeltShirt, itemRequiredBeltShirtCount);
}
else if (event.equals("enchantShirt"))
{
armorType = Inventory.PAPERDOLL_UNDER;
enchantType = "EnchantBeltShirt.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredBeltShirt, itemRequiredBeltShirtCount);
}
// Weapon
else if (event.equals("enchantWeapon"))
{
armorType = Inventory.PAPERDOLL_RHAND;
enchantType = "EnchantWeapon.htm";
htmlText = enchant(enchantType, player, armorType, itemRequiredWeapon, itemRequiredWeaponCount);
}
return htmlText;
}
private String enchant(String enchantType, L2PcInstance player, int armorType, int itemRequired, int itemRequiredCount)
{
QuestState st = player.getQuestState(getName());
int currentEnchant = 0;
int newEnchantLevel = 0;
if (st.getQuestItemsCount(itemRequired) >= itemRequiredCount)
{
try
{
L2ItemInstance item = getItemToEnchant(player, armorType);
if (item != null)
{
if ( item.isItem() && item.isEquipable() && !item.isConsumable() && !item.isCommonItem() && !item.isOlyRestrictedItem() && !item.isShadowItem() && !item.isQuestItem() )
{
currentEnchant = item.getEnchantLevel();
if ( currentEnchant < 18 )
{
newEnchantLevel = setEnchant(player, item, currentEnchant+1, armorType);
if ( newEnchantLevel > 0 )
{
st.takeItems(itemRequired, itemRequiredCount);
player.sendMessage("You successfully enchanted your " + item.getItem().getName() +" from +" + currentEnchant + " to +" + newEnchantLevel + "!");
String htmlContent = "<center>You successfully enchanted your:<br>"+
"<font color=\"FF7200\">" + item.getItem().getName() + "</font><br>"+
"From: <font color=\"AEFF00\">+" + currentEnchant + "</font> to <font color=\"AEFF00\">+" + newEnchantLevel + "</font>"+
"</center>";
return drawHtml("Congratulations!", htmlContent, enchantType);
}
}
else
{
player.sendMessage("Your " + item.getItem().getName() + " is already +20!");
return drawHtml("It's already +20", "<center>Your <font color=\"FF7200\">" + item.getItem().getName() +"</font> is already +20!</center>", enchantType);
}
}
else
{
player.sendMessage("Your " + item.getItem().getName() + " is not enchantable!");
return drawHtml("Not enchantable item!", "<center>Your <font color=\"FF7200\">" + item.getItem().getName() +"</font> is not enchantable!</center>", enchantType);
}
}
}
catch (StringIndexOutOfBoundsException e)
{
player.sendMessage("Something went wrong. Are equiped with the item?");
return drawHtml("Error Enchant", "<center>Something went wrong.<br>Are equiped with the item?</center>", enchantType);
}
catch (NumberFormatException e)
{
player.sendMessage("Something went wrong. Are equiped with the item?");
return drawHtml("Error Enchant", "<center>Something went wrong.<br>Are equiped with the item?</center>", enchantType);
}
player.sendMessage("Something went wrong. Are equiped with the item?");
return drawHtml("Error Enchant", "<center>Something went wrong.<br>Are equiped with the item?</center>", enchantType);
}
else
{
String content = "<center>"+
"Not enough <font color=\"FF7200\">Event - Glitering Medals</font>!<br>";
if ( st.getQuestItemsCount(itemRequired) > 0 )
{
content += "You have " + st.getQuestItemsCount(itemRequired) + " Glittering Medals,<br1>"+
"Need " + (itemRequiredCount - st.getQuestItemsCount(itemRequired)) + " more.";
}
else
{
content += "You need <font color=\"FF7200\">" + itemRequiredCount + " Event - Glitering Medals</font>!";
}
content += "</center>";
return drawHtml("Not Enough Items", content, enchantType);
}
}
private L2ItemInstance getItemToEnchant(L2PcInstance player, int armorType)
{
L2ItemInstance itemInstance = null;
L2ItemInstance parmorInstance = player.getInventory().getPaperdollItem(armorType);
if ((parmorInstance != null) && (parmorInstance.getLocationSlot() == armorType))
{
itemInstance = parmorInstance;
if (itemInstance != null)
{
return itemInstance;
}
}
return null;
}
private int setEnchant(L2PcInstance player, L2ItemInstance item, int newEnchantLevel, int armorType)
{
if (item != null)
{
// set enchant value
player.getInventory().unEquipItemInSlot(armorType);
item.setEnchantLevel(newEnchantLevel);
player.getInventory().equipItem(item);
// send packets
InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
player.sendPacket(iu);
player.broadcastPacket(new CharInfo(player));
player.sendPacket(new UserInfo(player));
player.broadcastPacket(new ExBrExtraUserInfo(player));
return newEnchantLevel;
}
return -1;
}
public String drawHtml(String title, String content, String enchantType)
{
String html = "<html>"+
"<title>NPC Enchanter</title>"+
"<body>"+
"<center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"+
"<font color=\"FF9900\">" + title + "</font></center><br>"+
content +
"<br><br>"+
"<center><a action=\"bypass -h Quest Enchant " + enchantType + "\">Go Back</a></center>"+
"</body>"+
"</html>";
return html;
}
}
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package events.NinjaAdventures;
import org.l2jdevs.gameserver.ai.CtrlIntention;
import org.l2jdevs.gameserver.model.L2Clan;
import org.l2jdevs.gameserver.model.actor.L2Attackable;
import org.l2jdevs.gameserver.model.actor.L2Character;
import org.l2jdevs.gameserver.model.actor.L2Npc;
import org.l2jdevs.gameserver.model.actor.instance.L2PcInstance;
import org.l2jdevs.gameserver.model.quest.Quest;
import org.l2jdevs.gameserver.model.quest.QuestState;
import org.l2jdevs.gameserver.model.quest.State;
import org.l2jdevs.util.Rnd;
import events.EventsConfig;
public class NinjaAdventures extends Quest
{
private static final String qn = "NinjaAdventures";
/*
* List of npcs
* Need update list of mobs to kill
*/
private static final int Ninja_Master = 7102;
/*
* Konoha - Isle of Prayer Mobs
*/
private static final int[] Konoha_Mobs = {
22257,22258,22259,22260,22261,22262,22263,22264,22265,
22266,22267
};
/*
* Kusa - Forge of The Gods First Level Mobs
*/
private static final int[] Kusa_Mobs = {
21394,21376,21377,21378,21652,21379,21653,21381,21380,
21384,21654,21383,21382,21655,21385,21386
};
/*
* Kiri - Valley of Saints
*/
private static final int[] Kiri_Mobs = {
21523,21526,21520,21524,21521,21524,21529,21530
};
/*
* Suna - Forest of Dead
*/
private static final int[] Suna_Mobs = {
21570,21572,21574,21578,21561,21559,21598,21597,
21557,21567,21565,21553,21547,21563,21596
};
/*
* Yuki - Forge of The Gods First Level Mobs
*/
private static final int[] Yuki_Mobs = {
21394,21376,21377,21378,21652,21379,21653,21381,21380,
21384,21654,21383,21382,21655,21385,21386
};
/*
* Taki - Wall of Argos
*/
private static final int[] Taki_Mobs = {
21298,21299,21304,21305,21303,21307,21308,21309,21310,
21311
};
/*
* Oto - Imperial Tomb
*/
private static final int[] Oto_Mobs = {
21396,21397,21398,21399,21400,21401,21402,21403,21404,21405,
21406,21407,21408,21409,21410,21411,21412,21413,21414,21415,
21416,21417,21418,21419,21420,21421,21422,21423,21424,21425,
21426,21427,21428,21429,21430,21431
};
/*
* Ninja Mobs - need update and add new mobs
*/
private static final int Konoha_Ninja = 70001;
private static final int Kusa_Ninja = 70002;
private static final int Kiri_Ninja = 70003;
private static final int Suna_Ninja = 70004;
private static final int Yuki_Ninja = 70005;
private static final int Taki_Ninja = 70006;
private static final int Oto_Ninja = 70007;
/*
* Total Points of "Gakure" - Villages
* Konoha - Li��, Kusa - Trawa, Kiri - Mg�a, Suna - Piasek,
* Yuki - �nieg, Taki - Wodospad, Oto - D�wi�k
* @author: L2m Project
*/
public int Konoha_Points;
public int Kusa_Points;
public int Kiri_Points;
public int Suna_Points;
public int Yuki_Points;
public int Taki_Points;
public int Oto_Points;
/*
* contains for special checorg.l2jdevs mobs id's
* @author: L2m Project
*/
public static boolean contains(int[] array, int obj)
{
for (int i = 0; i < array.length; i++)
{
if (array[i] == obj)
return true;
}
return false;
}
@Override
public final String onFirstTalk(L2Npc npc, L2PcInstance player)
{
QuestState st = player.getQuestState(qn);
if (st == null)
{
st = newQuestState(player);
}
String htmltext = "";
if (st.getState() == State.STARTED)
{
if (EventsConfig.NA_STARTED)
htmltext = "welcome.htm";
else
{
htmltext = EventsConfig.EVENT_DISABLED;
}
return htmltext;
}
if (EventsConfig.NA_STARTED)
htmltext = "select.htm";
else
{
htmltext = EventsConfig.EVENT_DISABLED;
}
return htmltext;
}
/*
* Selecting Prizes and checorg.l2jdevs current points
* @author: L2m Project
*/
@Override
public final String onAdvEvent (String event, L2Npc npc, L2PcInstance player)
{
QuestState st = player.getQuestState(qn);
if (st == null)
{
st = newQuestState(player);
}
/*
* Integer Values
* Villages:
* Konoha - Li��, Kusa - Trawa, Kiri - Mg�a, Suna - Piasek,
* Yuki - �nieg, Taki - Wodospad, Oto - D�wi�k
*/
int village = st.getInt("village");
int points = st.getInt("points");
int recomend_vallue = st.getInt("recomendvalue");
int adena_vallue = st.getInt("adenavalue");
int aadena_vallue = st.getInt("aadenavalue");
int clanpoints_vallue = st.getInt("clanpoints_vallue");
int Konoha_Value = (Konoha_Points - Suna_Points - Oto_Points);
int Kusa_Value = (Kusa_Points - Taki_Points - Oto_Points);
int Kiri_Value = (Kiri_Points - Kusa_Points - Yuki_Points);
int Suna_Value = (Suna_Points - Konoha_Points - Taki_Points);
int Taki_Value = (Taki_Points - Suna_Points - Yuki_Points);
int Yuki_Value = (Yuki_Points - Konoha_Points - Kusa_Points);
int Oto_Value = (Oto_Points - Konoha_Points - Kusa_Points);
//
int gakure_select = st.getInt("gakure");
/*
* String builder for text
*/
String htmltext = "";
String vilage = "";
/*
* Script for checorg.l2jdevs Points
*/
if (event.equalsIgnoreCase("checkpoints"))
{
switch(village)
{
case 1:
vilage = "Konoha";
break;
case 2:
vilage = "Kusa";
break;
case 3:
vilage = "Kiri";
break;
case 4:
vilage = "Suna";
break;
case 5:
vilage = "Yuki";
break;
case 6:
vilage = "Taki";
break;
case 7:
vilage = "Oto";
break;
}
return "<html><font color=LEVEL>Ninja Master</font><br><br>Hello you fight good for <font color=LEVEL>" + vilage + " Village</font> and your kill points now: <br><br><font color=AC13DD> " + points + " </html>";
}
/*
* Script for select Village
*/
if (event.equalsIgnoreCase("gakure"))
{
gakure_select = Rnd.get(1,7);
switch(gakure_select)
{
case 1:
st.set("village","1");
break;
case 2:
st.set("village","2");
break;
case 3:
st.set("village","3");
break;
case 4:
st.set("village","4");
break;
case 5:
st.set("village","5");
break;
case 6:
st.set("village","6");
break;
case 7:
st.set("village","7");
break;
}
st.setState(State.STARTED);
htmltext = "welcome.htm";
st.giveItems(EventsConfig.NA_HAIRBAND, 1);
}
/*
* Script for global village select list of prizes
*/
if (event.equalsIgnoreCase("prizes"))
{
if (village == 1)
{
htmltext = "prizes.htm";
}
if (village == 2)
{
htmltext = "prizes.htm";
}
if (village == 3)
{
htmltext = "prizes.htm";
}
if (village == 4)
{
htmltext = "prizes.htm";
}
if (village == 5)
{
htmltext = "prizes.htm";
}
if (village == 6)
{
htmltext = "prizes.htm";
}
if (village == 7)
{
htmltext = "prizes.htm";
}
}
/*
* Script for add selected prizes
* recommend, adena, ancient adena, clan points
* multiple selection for check global points of villages
*/
if (event.equalsIgnoreCase("get_recommend"))
{
if (village == 1)
{
recomend_vallue = (Konoha_Value - 100 + points);
if (recomend_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
if (recomend_vallue > 100)
{
recomend_vallue = 100;
}
player.setRecomHave(recomend_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 2)
{
recomend_vallue = (Kusa_Value - 100 + points);
if (recomend_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
if (recomend_vallue > 100)
{
recomend_vallue = 100;
}
player.setRecomHave(recomend_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 3)
{
recomend_vallue = (Kiri_Value - 100 + points);
if (recomend_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
if (recomend_vallue > 100)
{
recomend_vallue = 100;
}
player.setRecomHave(recomend_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 4)
{
recomend_vallue = (Suna_Value - 100 + points);
if (recomend_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
if (recomend_vallue > 100)
{
recomend_vallue = 100;
}
player.setRecomHave(recomend_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 5)
{
recomend_vallue = (Yuki_Value - 100 + points);
if (recomend_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
if (recomend_vallue > 100)
{
recomend_vallue = 100;
}
player.setRecomHave(recomend_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 6)
{
recomend_vallue = (Taki_Value - 100 + points);
if (recomend_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
if (recomend_vallue > 100)
{
recomend_vallue = 100;
}
player.setRecomHave(recomend_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 7)
{
recomend_vallue = (Oto_Value - 100 + points);
if (recomend_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
if (recomend_vallue > 100)
{
recomend_vallue = 100;
}
player.setRecomHave(recomend_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
}
/*
* Adena Prizes
*/
if (event.equalsIgnoreCase("give_adena"))
{
if (village == 1)
{
adena_vallue = (Konoha_Value - 500 + points*2);
if (adena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ADENA, adena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 2)
{
adena_vallue = (Kusa_Value - 500 + points*2);
if (adena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ADENA, adena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 3)
{
adena_vallue = (Kiri_Value - 500 + points*2);
if (adena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ADENA, adena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 4)
{
adena_vallue = (Suna_Value - 500 + points*2);
if (adena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ADENA, adena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 5)
{
adena_vallue = (Yuki_Value - 500 + points*2);
if (adena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ADENA, adena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 6)
{
adena_vallue = (Taki_Value - 500 + points*2);
if (adena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ADENA, adena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 7)
{
adena_vallue = (Oto_Value - 500 + points*2);
if (adena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ADENA, adena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
}
/*
* Ancient Adena Prizes
*/
if (event.equalsIgnoreCase("give_aadena"))
{
if (village == 1)
{
aadena_vallue = (Konoha_Value - 2500 + points*2);
if (aadena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ANCIENT_ADENA, aadena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 2)
{
aadena_vallue = (Kusa_Value - 2500 + points*2);
if (aadena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ANCIENT_ADENA, aadena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 3)
{
aadena_vallue = (Kiri_Value - 2500 + points*2);
if (aadena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ANCIENT_ADENA, aadena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 4)
{
aadena_vallue = (Suna_Value - 2500 + points*2);
if (aadena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ANCIENT_ADENA, aadena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 5)
{
aadena_vallue = (Yuki_Value - 2500 + points*2);
if (aadena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ANCIENT_ADENA, aadena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 6)
{
aadena_vallue = (Taki_Value - 2500 + points*2);
if (aadena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ANCIENT_ADENA, aadena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 7)
{
aadena_vallue = (Oto_Value - 2500 + points*2);
if (aadena_vallue < 1 || points < 1)
{
player.sendMessage("You have enough killing points.");
htmltext = "prizes.htm";
}
else
{
st.giveItems(EventsConfig.NA_ANCIENT_ADENA, aadena_vallue);
htmltext = "prizes.htm";
st.set("points","0");
}
}
}
/*
* Clan Points
*/
if (event.equalsIgnoreCase("give_clanpoints"))
{
if (player.getClan() == null)
{
player.sendMessage("You are not in clan.");
htmltext = "prizes.htm";
}
else
{
if (village == 1)
{
clanpoints_vallue = (Konoha_Value - 3500 + points*2);
L2Clan clan = player.getClan();
if (clan.getLevel() < 5 || clanpoints_vallue < 1)
{
player.sendMessage("You are not in clan with level 5, or you have enough killing points.");
htmltext = "prizes.htm";
}
else
{
clan.addReputationScore(clanpoints_vallue, true);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 2)
{
clanpoints_vallue = (Kusa_Value - 3500 + points*2);
L2Clan clan = player.getClan();
if (clan.getLevel() < 5 || clanpoints_vallue < 1)
{
player.sendMessage("You are not in clan with level 5, or you have enough killing points.");
htmltext = "prizes.htm";
}
else
{
clan.addReputationScore(clanpoints_vallue, true);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 3)
{
clanpoints_vallue = (Kiri_Value - 3500 + points*2);
L2Clan clan = player.getClan();
if (clan.getLevel() < 5 || clanpoints_vallue < 1)
{
player.sendMessage("You are not in clan with level 5, or you have enough killing points.");
htmltext = "prizes.htm";
}
else
{
clan.addReputationScore(clanpoints_vallue, true);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 4)
{
clanpoints_vallue = (Suna_Value - 3500 + points*2);
L2Clan clan = player.getClan();
if (clan.getLevel() < 5 || clanpoints_vallue < 1)
{
player.sendMessage("You are not in clan with level 5, or you have enough killing points.");
htmltext = "prizes.htm";
}
else
{
clan.addReputationScore(clanpoints_vallue, true);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 5)
{
clanpoints_vallue = (Yuki_Value - 3500 + points*2);
L2Clan clan = player.getClan();
if (clan.getLevel() < 5 || clanpoints_vallue < 1)
{
player.sendMessage("You are not in clan with level 5, or you have enough killing points.");
htmltext = "prizes.htm";
}
else
{
clan.addReputationScore(clanpoints_vallue, true);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 6)
{
clanpoints_vallue = (Taki_Value - 3500 + points*2);
L2Clan clan = player.getClan();
if (clan.getLevel() < 5 || clanpoints_vallue < 1)
{
player.sendMessage("You are not in clan with level 5, or you have enough killing points.");
htmltext = "prizes.htm";
}
else
{
clan.addReputationScore(clanpoints_vallue, true);
htmltext = "prizes.htm";
st.set("points","0");
}
}
if (village == 7)
{
clanpoints_vallue = (Oto_Value - 3500 + points*2);
L2Clan clan = player.getClan();
if (clan.getLevel() < 5 || clanpoints_vallue < 1)
{
player.sendMessage("You are not in clan with level 5, or you have enough killing points.");
htmltext = "prizes.htm";
}
else
{
clan.addReputationScore(clanpoints_vallue, true);
htmltext = "prizes.htm";
st.set("points","0");
}
}
}
}
/*
* Informations about - targets and prizes
*/
if (event.equalsIgnoreCase("info"))
{
if (village == 1)
{
htmltext = "info.htm";
}
if (village == 2)
{
htmltext = "info.htm";
}
if (village == 3)
{
htmltext = "info.htm";
}
if (village == 4)
{
htmltext = "info.htm";
}
if (village == 5)
{
htmltext = "info.htm";
}
if (village == 6)
{
htmltext = "info.htm";
}
if (village == 7)
{
htmltext = "info.htm";
}
}
if (event.equalsIgnoreCase("back"))
{
htmltext = "welcome.htm";
}
return htmltext;
}
@Override
public final String onKill(L2Npc npc,L2PcInstance player, boolean isPet)
{
QuestState st = player.getQuestState(qn);
if (st == null)
{
st = newQuestState(player);
}
else
{
if (st.getState() != State.STARTED)
{
return null;
}
}
if (!EventsConfig.NA_STARTED)
{
// Event State False so Event is disabled
}
else
{
int village = st.getInt("village");
int npcId = npc.getNpcId();
int points = st.getInt("points");
if (village == 1)
{
if ( npcId == Konoha_Ninja && EventsConfig.NA_STARTED)
{
points = points +2;
st.set("points", "" + points);
Konoha_Points = Konoha_Points + 2;
Suna_Points = Suna_Points -1;
Oto_Points = Oto_Points -1;
}
if (contains(Konoha_Mobs, npcId) && EventsConfig.NA_STARTED)
{
L2Attackable newNpc = (L2Attackable) st.addSpawn(Konoha_Ninja, 60000);
L2Character originalAttacker = isPet? player.getSummon(): player;
newNpc.setRunning();
newNpc.addDamageHate(originalAttacker,0,600);
newNpc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, originalAttacker);
}
}
if (village == 2)
{
if (npcId == Kusa_Ninja && EventsConfig.NA_STARTED)
{
points = points +2;
st.set("points", "" + points);
Kusa_Points = Kusa_Points + 2;
Taki_Points = Taki_Points -1;
Oto_Points = Oto_Points -1;
}
if (contains(Kusa_Mobs, npcId) && EventsConfig.NA_STARTED)
{
L2Attackable newNpc = (L2Attackable) st.addSpawn(Kusa_Ninja, 60000);
L2Character originalAttacker = isPet? player.getSummon(): player;
newNpc.setRunning();
newNpc.addDamageHate(originalAttacker,0,600);
newNpc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, originalAttacker);
}
}
if (village == 3)
{
if (npcId == Kiri_Ninja && EventsConfig.NA_STARTED)
{
points = points +2;
st.set("points", "" + points);
Kiri_Points = Kiri_Points + 2;
Kusa_Points = Kusa_Points - 1;
Yuki_Points = Yuki_Points - 1;
}
if (contains(Kiri_Mobs, npcId) && EventsConfig.NA_STARTED)
{
L2Attackable newNpc = (L2Attackable) st.addSpawn(Kiri_Ninja, 60000);
L2Character originalAttacker = isPet? player.getSummon(): player;
newNpc.setRunning();
newNpc.addDamageHate(originalAttacker,0,600);
newNpc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, originalAttacker);
}
}
if (village == 4)
{
if (npcId == Suna_Ninja && EventsConfig.NA_STARTED)
{
points = points +2;
st.set("points", "" + points);
Suna_Points = Suna_Points + 2;
Konoha_Points = Konoha_Points -1;
Taki_Points = Taki_Points -1;
}
if (contains(Suna_Mobs, npcId) && EventsConfig.NA_STARTED)
{
L2Attackable newNpc = (L2Attackable) st.addSpawn(Suna_Ninja, 60000);
L2Character originalAttacker = isPet? player.getSummon(): player;
newNpc.setRunning();
newNpc.addDamageHate(originalAttacker,0,600);
newNpc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, originalAttacker);
}
}
if (village == 5)
{
if (npcId == Yuki_Ninja && EventsConfig.NA_STARTED)
{
points = points +2;
st.set("points", "" + points);
Yuki_Points = Yuki_Points + 2;
Konoha_Points = Konoha_Points -1;
Kusa_Points = Kusa_Points -1;
}
if (contains(Yuki_Mobs, npcId) && EventsConfig.NA_STARTED)
{
L2Attackable newNpc = (L2Attackable) st.addSpawn(Yuki_Ninja, 60000);
L2Character originalAttacker = isPet? player.getSummon(): player;
newNpc.setRunning();
newNpc.addDamageHate(originalAttacker,0,600);
newNpc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, originalAttacker);
}
}
if (village == 6)
{
if (npcId == Taki_Ninja && EventsConfig.NA_STARTED)
{
points = points +2;
st.set("points", "" + points);
Taki_Points = Taki_Points + 2;
Suna_Points = Suna_Points -1;
Yuki_Points = Yuki_Points -1;
}
if (contains(Taki_Mobs, npcId) && EventsConfig.NA_STARTED)
{
L2Attackable newNpc = (L2Attackable) st.addSpawn(Taki_Ninja, 60000);
L2Character originalAttacker = isPet? player.getSummon(): player;
newNpc.setRunning();
newNpc.addDamageHate(originalAttacker,0,600);
newNpc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, originalAttacker);
}
}
if (village == 7)
{
if (npcId == Oto_Ninja && EventsConfig.NA_STARTED)
{
points = points +2;
st.set("points", "" + points);
Oto_Points = Oto_Points + 2;
Konoha_Points = Konoha_Points -1;
Kusa_Points = Kusa_Points - 1;
}
if (contains(Oto_Mobs, npcId) && EventsConfig.NA_STARTED)
{
L2Attackable newNpc = (L2Attackable) st.addSpawn(Oto_Ninja, 60000);
L2Character originalAttacker = isPet? player.getSummon(): player;
newNpc.setRunning();
newNpc.addDamageHate(originalAttacker,0,600);
newNpc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, originalAttacker);
}
}
}
return super.onKill(npc, player, isPet);
}
public NinjaAdventures(int questId, String name, String descr)
{
super(questId, name, descr);
addStartNpc(Ninja_Master);
addFirstTalkId(Ninja_Master);
addTalkId(Ninja_Master);
/*
* Addings mobs to kill
*/
for (int id : Konoha_Mobs)
{
addKillId(id);
}
for (int id : Kusa_Mobs)
{
addKillId(id);
}
for (int id : Kiri_Mobs)
{
addKillId(id);
}
for (int id : Suna_Mobs)
{
addKillId(id);
}
for (int id : Yuki_Mobs)
{
addKillId(id);
}
for (int id : Taki_Mobs)
{
addKillId(id);
}
for (int id : Oto_Mobs)
{
addKillId(id);
}
/*
* Mob to points spawned when kill normal monsters
*/
addKillId(Konoha_Ninja);
addKillId(Kusa_Ninja);
addKillId(Kiri_Ninja);
addKillId(Suna_Ninja);
addKillId(Yuki_Ninja);
addKillId(Taki_Ninja);
addKillId(Oto_Ninja);
}
public static void main(String[] args)
{
new NinjaAdventures(-1,qn,"events");
if (EventsConfig.NA_STARTED)
_log.info("Event System: Ninja Adventures Event loaded ...");
}
}
### Eclipse Workspace Patch 1.0
#P Clean_Core
Index: java/net/sf/l2j/gameserver/templates/skills/L2SkillType.java
===================================================================
--- java/net/sf/l2j/gameserver/templates/skills/L2SkillType.java (revision 3067)
+++ java/net/sf/l2j/gameserver/templates/skills/L2SkillType.java (working copy)
@@ -177,7 +177,9 @@
COREDONE,
// unimplemented
- NOTDONE, BALLISTA;
+ NOTDONE,
+ BALLISTA,
+ PETFUSION;
private final Class<? extends L2Skill> _class;
Index: java/net/sf/l2j/gameserver/model/actor/L2Character.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/L2Character.java (revision 3067)
+++ java/net/sf/l2j/gameserver/model/actor/L2Character.java (working copy)
@@ -1819,6 +1819,15 @@
sendPacket(ActionFailed.STATIC_PACKET);
return false;
}
+
+ // Pet validation for petfusion skill
+ if(skill.getSkillType() == L2SkillType.PETFUSION && getPet() == null)
+ {
+ SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
+ sm.addSkillName(skill);
+ sendPacket(sm);
+ return false;
+ }
// Check if the caster has enough HP
if (getCurrentHp() <= skill.getHpConsume())
Index: java/net/sf/l2j/gameserver/model/L2Skill.java
===================================================================
--- java/net/sf/l2j/gameserver/model/L2Skill.java (revision 3067)
+++ java/net/sf/l2j/gameserver/model/L2Skill.java (working copy)
@@ -294,6 +294,7 @@
private final boolean _isSuicideAttack;
private final boolean _canBeReflected;
+ private boolean _isFusionSkill;
protected L2Skill(StatsSet set)
{
@@ -473,10 +474,17 @@
_flyRadius = set.getInteger("flyRadius", 200);
_flyCourse = set.getFloat("flyCourse", 0);
_canBeReflected = set.getBool("canBeReflected", true);
+
+ _isFusionSkill = set.getBool("isPetFusionSkill", false);
}
public abstract void useSkill(L2Character caster, L2Object[] targets);
+ public final boolean isPetFusion()
+ {
+ return _isFusionSkill;
+ }
+
public final boolean isPotion()
{
return _ispotion;
### Eclipse Workspace Patch 1.0
#P Clean_DP
Index: data/stats/skills/0900-0999.xml
===================================================================
--- data/stats/skills/0900-0999.xml (revision 6130)
+++ data/stats/skills/0900-0999.xml (working copy)
@@ -321,22 +321,49 @@
<set name="operateType" val="OP_PASSIVE"/>
</skill>
<skill id="929" levels="1" name="Spirit of the Cat">
- <set name="target" val="TARGET_NONE"/>
- <set name="skillType" val="NOTDONE"/>
- <set name="operateType" val="OP_PASSIVE"/>
- <set name="reuseDelay" val="360000"/>
+ <!-- Done by Blacko -->
+ <set name="mpConsume" val="73"/>
+ <set name="hitTime" val="2500"/>
+ <set name="reuseDelay" val="1200000"/> <!-- Guessing -->
+ <set name="target" val="TARGET_SELF"/>
+ <set name="skillType" val="PETFUSION"/>
+ <set name="operateType" val="OP_ACTIVE"/>
+ <set name="isMagic" val="true"/>
+ <set name="transformId" val="219"/>
+ <set name="isFusionSkill" val="true"/>
+ <for>
+ <effect name="Transformation" time="300" val="0"/>
+ </for>
</skill>
<skill id="930" levels="1" name="Spirit of the Demon">
- <set name="target" val="TARGET_NONE"/>
- <set name="skillType" val="NOTDONE"/>
- <set name="operateType" val="OP_PASSIVE"/>
- <set name="reuseDelay" val="360000"/>
+ <!-- Done by Blacko -->
+ <set name="mpConsume" val="73"/>
+ <set name="hitTime" val="2500"/>
+ <set name="reuseDelay" val="1200000"/> <!-- Guessing -->
+ <set name="target" val="TARGET_SELF"/>
+ <set name="skillType" val="PETFUSION"/>
+ <set name="operateType" val="OP_ACTIVE"/>
+ <set name="isMagic" val="true"/>
+ <set name="transformId" val="221"/>
+ <set name="isFusionSkill" val="true"/>
+ <for>
+ <effect name="Transformation" time="300" val="0"/>
+ </for>
</skill>
<skill id="931" levels="1" name="Spirit of the Unicorn">
- <set name="target" val="TARGET_NONE"/>
- <set name="skillType" val="NOTDONE"/>
- <set name="operateType" val="OP_PASSIVE"/>
- <set name="reuseDelay" val="360000"/>
+ <!-- Done by Blacko -->
+ <set name="mpConsume" val="73"/>
+ <set name="hitTime" val="2500"/>
+ <set name="reuseDelay" val="1200000"/> <!-- Guessing -->
+ <set name="target" val="TARGET_SELF"/>
+ <set name="skillType" val="PETFUSION"/>
+ <set name="operateType" val="OP_ACTIVE"/>
+ <set name="isMagic" val="true"/>
+ <set name="transformId" val="220"/>
+ <set name="isFusionSkill" val="true"/>
+ <for>
+ <effect name="Transformation" time="300" val="0"/>
+ </for>
</skill>
<skill id="932" levels="9" name="Star Stone Gathering">
<set name="target" val="TARGET_NONE"/>
Index: data/scripts/transformations/SummonerUnicorn.java
===================================================================
--- data/scripts/transformations/SummonerUnicorn.java (revision 0)
+++ data/scripts/transformations/SummonerUnicorn.java (revision 0)
@@ -0,0 +1,66 @@
+package transformations;
+
+import net.sf.l2j.gameserver.datatables.SkillTable;
+import net.sf.l2j.gameserver.instancemanager.TransformationManager;
+import net.sf.l2j.gameserver.model.L2Transformation;
+
+/**
+ * Description: <br>
+ * This will handle the transformation, giving the skills, and removing them, when the player logs out and is transformed these skills
+ * do not save.
+ * When the player logs back in, there will be a call from the enterworld packet that will add all their skills.
+ * The enterworld packet will transform a player.
+ *
+ * @author Ahmed
+ *
+ */
+public class SummonerUnicorn extends L2Transformation
+{
+ public SummonerUnicorn()
+ {
+ // id, duration (secs), colRadius, colHeight
+ super(221, 300, 12.0, 30.0);
+ }
+
+ public void onTransform()
+ {
+ if (getPlayer().getTransformationId() != 221 || getPlayer().isCursedWeaponEquipped())
+ return;
+
+ // give transformation skills
+ transformedSkills();
+ }
+
+ public void transformedSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{619,5491});
+ }
+
+ public void onUntransform()
+ {
+ // remove transformation skills
+ removeSkills();
+ }
+
+ public void removeSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{});
+ }
+
+ public static void main(String[] args)
+ {
+ TransformationManager.getInstance().registerTransformation(new SummonerUnicorn());
+ }
+}
Index: data/scripts/transformations/SummonerSpectral.java
===================================================================
--- data/scripts/transformations/SummonerSpectral.java (revision 0)
+++ data/scripts/transformations/SummonerSpectral.java (revision 0)
@@ -0,0 +1,66 @@
+package transformations;
+
+import net.sf.l2j.gameserver.datatables.SkillTable;
+import net.sf.l2j.gameserver.instancemanager.TransformationManager;
+import net.sf.l2j.gameserver.model.L2Transformation;
+
+/**
+ * Description: <br>
+ * This will handle the transformation, giving the skills, and removing them, when the player logs out and is transformed these skills
+ * do not save.
+ * When the player logs back in, there will be a call from the enterworld packet that will add all their skills.
+ * The enterworld packet will transform a player.
+ *
+ * @author Ahmed
+ *
+ */
+public class SummonerSpectral extends L2Transformation
+{
+ public SummonerSpectral()
+ {
+ // id, duration (secs), colRadius, colHeight
+ super(220, 300, 12.0, 30.0);
+ }
+
+ public void onTransform()
+ {
+ if (getPlayer().getTransformationId() != 220 || getPlayer().isCursedWeaponEquipped())
+ return;
+
+ // give transformation skills
+ transformedSkills();
+ }
+
+ public void transformedSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{619,5491});
+ }
+
+ public void onUntransform()
+ {
+ // remove transformation skills
+ removeSkills();
+ }
+
+ public void removeSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{});
+ }
+
+ public static void main(String[] args)
+ {
+ TransformationManager.getInstance().registerTransformation(new SummonerSpectral());
+ }
+}
Index: data/scripts/handlers/MasterHandler.java
===================================================================
--- data/scripts/handlers/MasterHandler.java (revision 6130)
+++ data/scripts/handlers/MasterHandler.java (working copy)
@@ -205,6 +205,7 @@
SkillHandler.getInstance().registerSkillHandler(new InstantJump());
SkillHandler.getInstance().registerSkillHandler(new Dummy());
SkillHandler.getInstance().registerSkillHandler(new Extractable());
+ SkillHandler.getInstance().registerSkillHandler(new PetFusion());
_log.config("Loaded " + SkillHandler.getInstance().size() + " SkillHandlers");
}
Index: data/scripts.cfg
===================================================================
--- data/scripts.cfg (revision 6130)
+++ data/scripts.cfg (working copy)
@@ -87,6 +87,9 @@
transformations/Rabbit.java
transformations/Ranku.java
transformations/SaberToothTiger.java
+transformations/SummonerCat.java
+transformations/SummonerSpectral.java
+transformations/SummonerUnicorn.java
transformations/Teleporter.java
transformations/Teleporter2.java
transformations/Timitran.java
Index: data/scripts/handlers/skillhandlers/PetFusion.java
===================================================================
--- data/scripts/handlers/skillhandlers/PetFusion.java (revision 0)
+++ data/scripts/handlers/skillhandlers/PetFusion.java (revision 0)
@@ -0,0 +1,76 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package handlers.skillhandlers;
+
+import net.sf.l2j.gameserver.handler.ISkillHandler;
+import net.sf.l2j.gameserver.instancemanager.TransformationManager;
+import net.sf.l2j.gameserver.model.L2Object;
+import net.sf.l2j.gameserver.model.L2Skill;
+import net.sf.l2j.gameserver.model.actor.L2Character;
+import net.sf.l2j.gameserver.model.actor.L2Summon;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import net.sf.l2j.gameserver.templates.skills.L2SkillType;
+
+/**
+ * @author Blacko
+ */
+
+public class PetFusion implements ISkillHandler
+{
+ private static final L2SkillType[] SKILL_IDS =
+ {
+ L2SkillType.PETFUSION
+ };
+
+ /**
+ *
+ * @see net.sf.l2j.gameserver.handler.ISkillHandler#useSkill(net.sf.l2j.gameserver.model.actor.L2Character, net.sf.l2j.gameserver.model.L2Skill, net.sf.l2j.gameserver.model.L2Object[])
+ */
+ public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
+ {
+ for (L2Object obj : targets)
+ {
+ L2Character target = (L2Character) obj;
+ if (target != null)
+ {
+ if (activeChar.isAlikeDead())
+ return;
+
+ if (!(activeChar instanceof L2PcInstance))
+ return;
+
+ if(activeChar.isTransformed())
+ return;
+ // here just make the transform, pet validation must be BEFORE the skill casts...
+ int transformId = skill.getTransformId();
+ L2PcInstance player = (L2PcInstance)activeChar;
+ L2Summon pet = player.getPet();
+ pet.unSummon(player);
+ TransformationManager.getInstance().transformPlayer(transformId, player, Long.MAX_VALUE);
+ skill.getEffectsSelf(activeChar);
+ }
+ }
+ }
+
+ /**
+ *
+ * @see net.sf.l2j.gameserver.handler.ISkillHandler#getSkillIds()
+ */
+ public L2SkillType[] getSkillIds()
+ {
+ return SKILL_IDS;
+ }
+}
\ No newline at end of file
Index: data/scripts/transformations/SummonerCat.java
===================================================================
--- data/scripts/transformations/SummonerCat.java (revision 0)
+++ data/scripts/transformations/SummonerCat.java (revision 0)
@@ -0,0 +1,66 @@
+package transformations;
+
+import net.sf.l2j.gameserver.datatables.SkillTable;
+import net.sf.l2j.gameserver.instancemanager.TransformationManager;
+import net.sf.l2j.gameserver.model.L2Transformation;
+
+/**
+ * Description: <br>
+ * This will handle the transformation, giving the skills, and removing them, when the player logs out and is transformed these skills
+ * do not save.
+ * When the player logs back in, there will be a call from the enterworld packet that will add all their skills.
+ * The enterworld packet will transform a player.
+ *
+ * @author Ahmed
+ *
+ */
+public class SummonerCat extends L2Transformation
+{
+ public SummonerCat()
+ {
+ // id, duration (secs), colRadius, colHeight
+ super(219, 300, 12.0, 23.0);
+ }
+
+ public void onTransform()
+ {
+ if (getPlayer().getTransformationId() != 219 || getPlayer().isCursedWeaponEquipped())
+ return;
+
+ // give transformation skills
+ transformedSkills();
+ }
+
+ public void transformedSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().addSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{619,5491});
+ }
+
+ public void onUntransform()
+ {
+ // remove transformation skills
+ removeSkills();
+ }
+
+ public void removeSkills()
+ {
+ // Transfrom Dispel
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(619, 1), false);
+ // Decrease Bow/Crossbow Attack Speed
+ getPlayer().removeSkill(SkillTable.getInstance().getInfo(5491, 1), false);
+ // Send a Server->Client packet StatusUpdate to the L2PcInstance.
+ //getPlayer().sendSkillList();
+ getPlayer().setTransformAllowedSkills(new int[]{});
+ }
+
+ public static void main(String[] args)
+ {
+ TransformationManager.getInstance().registerTransformation(new SummonerCat());
+ }
+}
# by minlexx
import sys
from net.l2emuproject.gameserver.model.quest import State
from net.l2emuproject.gameserver.model.quest import QuestState
from net.l2emuproject.gameserver.model.quest.jython import QuestJython as JQuest
qn = "2009004_Change_of_Heart"
WILBERT = 104
QuestId = 2009004
QuestName = "Change_of_Heart"
QuestDesc = "custom"
# Quest Item
SPIRIT_BEAD = 8766
# Drop chance, win chance need check for correct values
WIN_ROUND_CHANCE = 66
# Reward items
EWS = 959 # Scroll: Enchant Weapon S
EAS = 960 # Scroll: Enchant Armor S
EWA = 729 # Scroll: Enchant Weapon A
EAA = 730 # Scroll: Enchant Armor A
EWB = 947 # Scroll: Enchant Weapon B
EAB = 948 # Scroll: Enchant Armor B
EWC = 951 # Scroll: Enchant Weapon C
BRes = 3936 # Blessed Scroll of Resurrection
BSoE = 1538 # Blessed Scroll of Escape
GHP = 1539 # Greater Healing Potion
class Quest (JQuest) :
def __init__(self,id,name,descr):
JQuest.__init__(self,id,name,descr)
self.questItemIds = []
def onEvent (self,event,st) :
htmltext = event
if event == "Wilbert_IWantToPlay.htm": # quest accepted
st.setState(State.STARTED)
st.playSound("ItemSound.quest_accept")
st.set("cond","1")
st.set("round","0")
elif event == "Wilbert_ExitQuest.htm": # quest finished
st.playSound("ItemSound.quest_finish")
st.exitQuest(1)
elif event == "Wilbert_LetsPlay.htm": # "Let's play" pressed
beads=st.getQuestItemsCount(SPIRIT_BEAD)
if beads<50:
htmltext = "Wilbert_Practice_NotEnoughBeads.htm"
else:
htmltext = "Wilbert_PlayRound1.htm"
st.set("round","0")
elif event == "Wilbert_PullCard.htm": # "Pull first or next card" pressed
round=st.getInt("round")
beads=st.getQuestItemsCount(SPIRIT_BEAD)
if beads<50 and round == 0: # check for 50 beads when game just starts only (round=0)
htmltext = "Wilbert_Practice_NotEnoughBeads.htm"
else:
if round == 0: # take 50 beads when game just starts only (round=0)
st.takeItems(SPIRIT_BEAD,50)
random=st.getRandom(100)
if random>WIN_ROUND_CHANCE: # random value is in range [WIN_ROUND_CHANCE..100]
htmltext = "Wilbert_PlayLose.htm"
st.set("round","0") # restart game
else: # next round won
round = round + 1
htmltext = st.showHtmlFile("Wilbert_PlayWin.htm").replace("NROUND", str(round))
if round == 1:
htmltext = htmltext.replace("MYPRIZE","10 consumable Potions")
if round == 2:
htmltext = htmltext.replace("MYPRIZE","1 Blessed Scroll of Escape")
if round == 3:
htmltext = htmltext.replace("MYPRIZE","1 Blessed Scroll of Resurrection")
if round == 4:
htmltext = htmltext.replace("MYPRIZE","2 Scroll: Enchant Weapon (Grade C)")
if round == 5:
htmltext = htmltext.replace("MYPRIZE","4 Scroll: Enchant Armor (Grade B)")
if round == 6:
htmltext = htmltext.replace("MYPRIZE","1 Scroll: Enchant Weapon (Grade B)")
if round == 7:
htmltext = htmltext.replace("MYPRIZE","3 Scroll: Enchant Armor (Grade A)")
if round == 8:
htmltext = htmltext.replace("MYPRIZE","1 Scroll: Enchant Weapon (Grade A)")
if round == 9:
htmltext = htmltext.replace("MYPRIZE","2 Scroll: Enchant Armor (Grade S)")
if round == 10: # reached round 10; give prizes and restart game
round = 0
st.giveItems(EWS,1) # 1 Scroll: Enchant Weapon (Grade S)
htmltext = "Wilbert_PlayWonRound10.htm"
st.set("round",str(round))
elif event == "Wilbert_TakePrize.htm": # player won round and wants to stop game and take prize
round=st.getInt("round")
if round == 0: # player did not win any round but wants to take prize? O_o
htmltext = "<html><body>You did not win any round! No prizes.</body></html>"
return htmltext
if round > 10: # some bug or hack?
st.set("round","0")
htmltext = "<html><body>Round cannot be > 10 !!!</body></html>"
return htmltext
st.set("round","0") # first set round to 0 - game ended.
htmltext = "Wilbert_PrizeTaken.htm"
# give prize depending on current round won
if round == 1:
st.giveItems(GHP,10) # 10 consumable Potions
elif round == 2:
st.giveItems(BSoE,1) # 1 Blessed Scroll of Escape
elif round == 3:
st.giveItems(BRes,1) # 1 Blessed Scroll of Resurrection
elif round == 4:
st.giveItems(EWC,2) # 2 Scroll: Enchant Weapon (Grade C)
elif round == 5:
st.giveItems(EAB,4) # 4 Scroll: Enchant Armor (Grade B)
elif round == 6:
st.giveItems(EWB,1) # 1 Scroll: Enchant Weapon (Grade B)
# B-weap. key number is random
elif round == 7:
st.giveItems(EAA,3) # 4 Scroll: Enchant Armor (Grade A)
elif round == 8:
st.giveItems(EWA,1) # 1 Scroll: Enchant Weapon (Grade A)
# B-weap. key number is random
elif round == 9:
st.giveItems(EAS,2) # 4 Scroll: Enchant Armor (Grade S)
# for round 10 prize is automatically when player wins 10 round
return htmltext
def onTalk (self,npc,player):
st = player.getQuestState(qn)
htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"
if not st : return htmltext
npcId = npc.getNpcId()
id = st.getState()
# first talk to Wilbert
if npcId == WILBERT and id == State.CREATED:
if player.getLevel() >= 50 : # check player level
htmltext = "Wilbert_start.htm"
else:
htmltext = "Wilbert_Level.htm"
st.exitQuest(1)
# talk to Wilbert when quest already in progress
elif npcId == WILBERT and id == State.STARTED :
htmltext = "Wilbert_QuestInProgress.htm"
return htmltext
QUEST = Quest(QuestId,str(QuestId) + "_" + QuestName,QuestDesc)
QUEST.addStartNpc(WILBERT)
QUEST.addTalkId(WILBERT)
print " INFO Loaded: 2009004_Change_of_Heart"
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.l2jdevs.scripts.events;
import java.io.FileNotFoundException;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
import javolution.util.FastList;
import javolution.util.FastMap;
import org.l2jdevs.gameserver.ThreadPoolManager;
import org.l2jdevs.gameserver.datatables.ClanTable;
import org.l2jdevs.gameserver.datatables.NpcTable;
import org.l2jdevs.gameserver.datatables.SkillTable;
import org.l2jdevs.gameserver.datatables.MapRegionTable.TeleportWhereType;
import org.l2jdevs.gameserver.instancemanager.InstanceManager;
import org.l2jdevs.gameserver.model.L2Clan;
import org.l2jdevs.gameserver.model.L2ClanMember;
import org.l2jdevs.gameserver.model.L2Effect;
import org.l2jdevs.gameserver.model.L2Skill;
import org.l2jdevs.gameserver.model.L2World;
import org.l2jdevs.gameserver.model.actor.L2Attackable;
import org.l2jdevs.gameserver.model.actor.L2Playable;
import org.l2jdevs.gameserver.model.actor.L2Character;
import org.l2jdevs.gameserver.model.actor.L2Npc;
import org.l2jdevs.gameserver.model.actor.instance.L2DoorInstance;
import org.l2jdevs.gameserver.model.actor.instance.L2MonsterInstance;
import org.l2jdevs.gameserver.model.actor.instance.L2PcInstance;
import org.l2jdevs.gameserver.model.entity.Instance;
import org.l2jdevs.gameserver.model.quest.Quest;
import org.l2jdevs.gameserver.model.quest.QuestState;
import org.l2jdevs.gameserver.network.SystemMessageId;
import org.l2jdevs.gameserver.network.serverpackets.ExShowScreenMessage;
import org.l2jdevs.gameserver.network.serverpackets.SystemMessage;
import org.l2jdevs.gameserver.network.serverpackets.UserInfo;
import org.l2jdevs.gameserver.templates.chars.L2NpcTemplate;
import org.l2jdevs.util.Rnd;
public class clandominate extends Quest
{
protected Calendar _eventStart;
protected int _period;
protected int _cycle;
private int[] _redPoints = new int[]{0,0};
private int[] _bluePoints = new int[]{0,0};
private int _maxRed = 4;
private int _maxBlue = 4;
private int _blueReviveDelay = 30000;
private int _redReviveDelay = 30000;
private boolean _eventOn = true;
private Map<L2Clan, Integer> _red = new FastMap<L2Clan, Integer>();
private Map<L2Clan, Integer> _blue = new FastMap<L2Clan, Integer>();
private L2Npc _blueDefender;
private L2Npc _redDefender;
private Map<L2PcInstance,Integer[]> _afkList = new FastMap<L2PcInstance,Integer[]>();
private Map<L2Clan, Integer> _clanQuest = new FastMap<L2Clan, Integer>();
private Instance _eventInstance = null;
// private static final int REWARDVICTORYID = 4676;
private static final int REWARDFAME = 17;
private static final SystemMessage FAME_MESSAGE = new SystemMessage(SystemMessageId.ACQUIRED_S1_REPUTATION_SCORE).addNumber(REWARDFAME);
private static final int REWARDHONORID = 4674;
private static final int EVENTNPC = 90004;
private static final int DEFENDERNPC = 90006;
private static final int MINMOBS = 10000;
private static final int POINTNPC = 90005;
private static final int EVENTLENGTH = 3600000;
// private static final int[] QUESTIDS = {734,735,736,737};
private static final int[] REDUCE_TIME = {0, 30000, 48000, 60000, 66000};
private static final int[] BLUESTARTLOC = {167300,20320,-3338};
private static final int[] REDSTARTLOC = {183800,20320,-3182};
private static final int[][] POINTNPCSLOC = {{175500,20250,-3258},{175500,15240,-3258},
{175500,25440,-3258},{170400,20340,-3258},{180600,20340,-3258}};
protected List<L2Npc> _pointNPCs = new FastList<L2Npc>();
protected ScheduledFuture<?> _eventStartTask = null;
protected ScheduledFuture<?> _eventTask = null;
private void loadData()
{
if (loadGlobalQuestVar("cycle").equalsIgnoreCase(""))
{
_cycle = 1;
_period = 1;
_eventStart = Calendar.getInstance();
_eventStart.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
_eventStart.set(Calendar.HOUR_OF_DAY, 18);
_eventStart.set(Calendar.MINUTE, 0);
_eventStart.set(Calendar.SECOND, 0);
if (_eventStart.getTimeInMillis() < System.currentTimeMillis())
_eventStart.add(Calendar.DAY_OF_MONTH, 7);
saveData();
}
else
{
_cycle = Integer.valueOf(loadGlobalQuestVar("cycle"));
_period = Integer.valueOf(loadGlobalQuestVar("period"));
_redPoints[0] = Integer.valueOf(loadGlobalQuestVar("redPoints"));
_bluePoints[0] = Integer.valueOf(loadGlobalQuestVar("bluePoints"));
_eventStart = Calendar.getInstance();
_eventStart.setTimeInMillis(Long.valueOf(loadGlobalQuestVar("nextStart")));
_eventOn = Boolean.valueOf(loadGlobalQuestVar("eventOn"));
if (_period == 1)
{
for(L2Clan clan : ClanTable.getInstance().getClans())
{
if (!loadGlobalQuestVar(clan.getName()).equalsIgnoreCase(""))
{
String state = loadGlobalQuestVar(clan.getName());
if (Integer.valueOf(state.split(";")[0]) == _cycle && Integer.valueOf(state.split(";")[1]) == 1)
{
_clanQuest.put(clan, Integer.valueOf(state.split(";")[2]));
}
}
}
}
else if (_period >= 2)
{
for(L2Clan clan : ClanTable.getInstance().getClans())
{
if (!loadGlobalQuestVar(clan.getName()).equalsIgnoreCase(""))
{
String state = loadGlobalQuestVar(clan.getName());
if (Integer.valueOf(state.split(";")[0]) == _cycle && Integer.valueOf(state.split(";")[1]) == 2)
{
_blue.put(clan, Integer.valueOf(state.split(";")[2]));
}
else if (Integer.valueOf(state.split(";")[0]) == _cycle && Integer.valueOf(state.split(";")[1]) == 3)
{
_red.put(clan, Integer.valueOf(state.split(";")[2]));
}
}
}
}
}
_log.info("ClanDominate loaded. Next Start: " + _eventStart.getTime());
}
protected void saveData()
{
saveGlobalQuestVar("cycle", String.valueOf(_cycle));
saveGlobalQuestVar("period", String.valueOf(_period));
saveGlobalQuestVar("nextStart", String.valueOf(_eventStart.getTimeInMillis()));
saveGlobalQuestVar("redPoints", String.valueOf(_redPoints[0]));
saveGlobalQuestVar("bluePoints", String.valueOf(_bluePoints[0]));
saveGlobalQuestVar("eventOn", String.valueOf(_eventOn));
if (_period == 1)
for(L2Clan clan : _clanQuest.keySet())
saveGlobalQuestVar(clan.getName(), String.valueOf(_cycle) + ";1;" + String.valueOf(_clanQuest.get(clan)));
else
{
for(L2Clan clan : _blue.keySet())
saveGlobalQuestVar(clan.getName(), String.valueOf(_cycle) + ";2;" + String.valueOf(_blue.get(clan)));
for(L2Clan clan : _red.keySet())
saveGlobalQuestVar(clan.getName(), String.valueOf(_cycle) + ";3;" + String.valueOf(_red.get(clan)));
}
}
private void setPeriod(int val)
{
if (val == _period)
return;
else if (val < _period)
{
_bluePoints[0] = 0;
_redPoints[0] = 0;
_bluePoints[1] = 0;
_redPoints[1] = 0;
_clanQuest.clear();
_blue.clear();
_red.clear();
_cycle++;
}
else if (val == 2)
createTeams();
_period = val;
saveData();
}
public clandominate(int questId, String name, String descr)
{
super(questId, name, descr);
loadData();
if (_eventStart.getTimeInMillis() < System.currentTimeMillis())
{
// server was offline
if ((_eventStart.getTimeInMillis() + EVENTLENGTH) < System.currentTimeMillis())
{
_eventStart.add(Calendar.DAY_OF_MONTH, 7);
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), 16);
}
else
{
// the event period is not over yet
_eventTask = ThreadPoolManager.getInstance().scheduleGeneral(new event(0), 16);
}
}
else
{
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), 16);
}
addEventId(EVENTNPC, Quest.QuestEventType.ON_TALK);
addEventId(EVENTNPC, Quest.QuestEventType.ON_FIRST_TALK);
addEventId(POINTNPC, Quest.QuestEventType.ON_FIRST_TALK);
addEventId(POINTNPC, Quest.QuestEventType.ON_TALK);
if (_eventOn)
addSpawn(EVENTNPC, 81920, 148300, -3470, 49152, false, 0);
registerDrops();
this.startQuestTimer("save", 3600000, null, null, true);
}
protected void announce(String text, int type)
{
if (type == 0)
{
for(L2Clan c : _clanQuest.keySet())
{
if (_clanQuest.get(c) >= MINMOBS)
for(L2ClanMember m : c.getMembers())
if (m.getLevel() >= 76 && m.isOnline() && m.getPlayerInstance() != null)
m.getPlayerInstance().sendPacket(new ExShowScreenMessage(text,10000));
}
}
else if (type == 1)
{
for(L2Clan c : _blue.keySet())
for(L2ClanMember m : c.getMembers())
if (m.getLevel() >= 76 && m.isOnline() && m.getPlayerInstance() != null)
m.getPlayerInstance().sendPacket(new ExShowScreenMessage(text,10000));
}
else if (type == 2)
{
for(L2Clan c : _red.keySet())
for(L2ClanMember m : c.getMembers())
if (m.getLevel() >= 76 && m.isOnline() && m.getPlayerInstance() != null)
m.getPlayerInstance().sendPacket(new ExShowScreenMessage(text,10000));
}
}
protected void registerDrops()
{
for (int level =1; level<100; level++)
{
L2NpcTemplate[] templates = NpcTable.getInstance().getAllOfLevel(level);
if ((templates != null) && (templates.length > 0))
{
for (L2NpcTemplate t: templates)
{
try
{
if ( L2Attackable.class.isAssignableFrom(Class.forName("org.l2jdevs.gameserver.model.actor.instance."+t.type+"Instance")))
{
addEventId(t.npcId, Quest.QuestEventType.ON_KILL);
}
}
catch(ClassNotFoundException ex)
{
System.out.println("Class not found "+t.type+"Instance");
}
}
}
}
}
@Override
public String onKill (L2Npc npc, L2PcInstance killer, boolean isPet)
{
if (_eventOn && _period == 1 && npc instanceof L2MonsterInstance && killer != null && npc.getLevel() >= (killer.getLevel() - 8)
&& killer.getClan() != null && _clanQuest.containsKey(killer.getClan()) && _clanQuest.get(killer.getClan()) < MINMOBS)
{
int killed = _clanQuest.get(killer.getClan()) + 1;
_clanQuest.put(killer.getClan(), killed);
if (killed == MINMOBS)
{
saveGlobalQuestVar(killer.getClan().getName(), String.valueOf(_cycle) + ";1;" + String.valueOf(MINMOBS));
killer.getClan().broadcastToOnlineMembers(new ExShowScreenMessage("Your clan pass Magnus the Unicorn's first test!",10000));
}
}
return super.onKill(npc,killer,isPet);
}
@Override
public String onEnterWorld (L2PcInstance player)
{
if (_eventOn && player.getClan() != null && (_blue.containsKey(player.getClan()) || _red.containsKey(player.getClan())) && isAvailable(player, false))
{
if (player.isDead())
{
if ((_eventStart.getTimeInMillis() + EVENTLENGTH) > (System.currentTimeMillis() + 30000))
{
player.setIsPendingRevive(true);
player.sendMessage("You will be re-spawned in 30 seconds.");
this.startQuestTimer("Revive", 30000, null, player);
}
}
else
{
player.sendMessage("You will be ported to the Event in 10 seconds.");
this.startQuestTimer("onEnter", 10000, null, player);
}
}
return null;
}
private void debuff(L2Character character)
{
int lvl = 1;
final L2Effect e = character.getFirstEffect(5660);
if (e != null)
lvl = Math.min(lvl + e.getLevel(), 5);
final L2Skill skill = SkillTable.getInstance().getInfo(5660, lvl);
if (skill != null)
skill.getEffects(character, character);
}
public void teleportPlayer(L2PcInstance player)
{
if (!_eventOn)
return;
QuestState st = player.getQuestState("clandominate");
if (st == null)
st = newQuestState(player);
player.addNotifyQuestOfDeath(st);
if (_blue.containsKey(player.getClan()))
{
player.setTeam(1);
player.setInstanceId(500);
player.teleToLocation(BLUESTARTLOC[0], BLUESTARTLOC[1], BLUESTARTLOC[2], true);
}
else
{
player.setTeam(2);
player.setInstanceId(500);
player.teleToLocation(REDSTARTLOC[0], REDSTARTLOC[1], REDSTARTLOC[2], true);
}
SkillTable.getInstance().getInfo(1323, 1).getEffects(player, player);
}
@Override
public String onDeath(L2Character killer, L2Character victim, QuestState qs)
{
if (_eventOn && victim instanceof L2PcInstance)
{
if (getOnEnterWorld() && victim.getInstanceId() == 500 && ((L2PcInstance)victim).getTeam() > 0)
{
if (((L2PcInstance)victim).getTeam() == 1)
{
if ((_eventStart.getTimeInMillis() + EVENTLENGTH) > (System.currentTimeMillis() + _blueReviveDelay))
{
((L2PcInstance)victim).setIsReviveRequested(1);
victim.setIsPendingRevive(true);
victim.sendMessage("You will be re-spawned in " + _blueReviveDelay/1000 + " seconds.");
this.startQuestTimer("revive", _blueReviveDelay, null, (L2PcInstance) victim);
}
}
else if (((L2PcInstance)victim).getTeam() == 2)
{
if ((_eventStart.getTimeInMillis() + EVENTLENGTH) > (System.currentTimeMillis() + _redReviveDelay))
{
((L2PcInstance)victim).setIsReviveRequested(1);
victim.setIsPendingRevive(true);
victim.sendMessage("You will be re-spawned in " + _redReviveDelay/1000 + " seconds.");
this.startQuestTimer("revive", _redReviveDelay, null, (L2PcInstance) victim);
}
}
((L2PcInstance)victim).setIsParalyzed(false);
}
else
((L2PcInstance)victim).removeNotifyQuestOfDeath(qs);
}
if (_eventOn && victim instanceof L2Playable && killer instanceof L2Playable)
{
L2PcInstance actingVictim = ((L2Playable)victim).getActingPlayer();
L2PcInstance actingKiller = ((L2Playable)killer).getActingPlayer();
if (actingVictim.getTeam() != actingKiller.getTeam())
{
int killCount = 0;
if (_blue.containsKey(actingKiller.getClan()))
{
killCount = _blue.get(actingKiller.getClan()) + 1;
_blue.put(actingKiller.getClan(), killCount);
}
else if (_red.containsKey(actingKiller.getClan()))
{
killCount = _red.get(actingKiller.getClan()) + 1;
_red.put(actingKiller.getClan(), killCount);
}
if (killCount > 0 && killCount < 301 && killCount % 30 == 0)
for(L2PcInstance pl : actingKiller.getClan().getOnlineMembers(0))
if (pl.getInstanceId() == 500 || (pl.isTeleporting() && pl.getLevel() >= 76))
pl.addItem("Quest", REWARDHONORID, 1, pl, true);
}
}
return "";
}
@Override
public String onAdvEvent (String event, L2Npc npc, L2PcInstance player)
{
if (event.equalsIgnoreCase("take"))
{
if (!_clanQuest.containsKey(player.getClan()))
{
_clanQuest.put(player.getClan(), 0);
saveGlobalQuestVar(player.getClan().getName(), String.valueOf(_cycle) + ";1;0");
}
return null;
}
else if (event.equalsIgnoreCase("teamScores"))
{
if (_period != 2)
return null;
String htmltext = "<html><body>Magnus The Unicorn:<br>";
if (player.isGM())
htmltext += _eventStart.getTime() + "<br>";
htmltext += "Blue Team:<br>";
boolean isEventOver = true;
long diff = (System.currentTimeMillis() - _eventStart.getTimeInMillis());
if (diff < EVENTLENGTH && diff > -7200000)
isEventOver = false;
String team = "";
for(L2Clan clan : _blue.keySet())
{
if (isEventOver)
team += clan.getName() + " : " + _blue.get(clan) + "<br>";
else if (team.isEmpty())
team += clan.getName();
else
team += ", " + clan.getName();
}
htmltext += (team + "<br>Red Team:<br>");
team = "";
for(L2Clan clan : _red.keySet())
{
if (isEventOver)
team += clan.getName() + " : " + _red.get(clan) + "<br>";
else if (team.isEmpty())
team += clan.getName();
else
team += ", " + clan.getName();
}
htmltext += team;
htmltext += "</body></html>";
return htmltext;
}
else if (event.equalsIgnoreCase("capture"))
{
if ((player.getTeam() == 1 && !npc.getTitle().equalsIgnoreCase("Blue Team"))
|| (player.getTeam() == 2 && !npc.getTitle().equalsIgnoreCase("Red Team")))
{
for(L2PcInstance p : npc.getKnownList().getKnownPlayersInRadius(900))
if (!p.isDead() && p.getTeam() != player.getTeam())
return "<html><body>Merrow The Unicorn:<br>You can't capture me now!</body></html>";
if (player.getTeam() == 1)
npc.setTitle("Blue Team");
else
npc.setTitle("Red Team");
npc.broadcastStatusUpdate();
return "<html><body>Merrow The Unicorn:<br>I'm surrender!</body></html>";
}
}
else if (event.equalsIgnoreCase("save"))
{
saveData();
return null;
}
else if (event.equalsIgnoreCase("onEnter"))
{
if (player != null && player.isOnline())
teleportPlayer(player);
return null;
}
else if (event.equalsIgnoreCase("turnOn") && player.isGM())
{
_eventOn = true;
saveData();
return null;
}
else if (event.equalsIgnoreCase("turnOff") && player.isGM())
{
_eventOn = false;
saveData();
return null;
}
else if (event.equalsIgnoreCase("defendSpawn"))
{
if (_blueDefender != null)
{
for(L2PcInstance p : _blueDefender.getKnownList().getKnownPlayersInRadius(1200))
if (p.getTeam() == 2 && !p.isDead())
p.setIsParalyzed(true);
if (_blueDefender.getSpawn().getLocx() != _blueDefender.getX()
|| _blueDefender.getSpawn().getLocy() != _blueDefender.getY())
_blueDefender.teleToLocation(_blueDefender.getSpawn().getLocx(), _blueDefender.getSpawn().getLocy(), _blueDefender.getSpawn().getLocz());
}
if (_redDefender != null)
{
for(L2PcInstance p : _redDefender.getKnownList().getKnownPlayersInRadius(1200))
if (p.getTeam() == 1 && !p.isDead())
p.setIsParalyzed(true);
if (_redDefender.getSpawn().getLocx() != _redDefender.getX()
|| _redDefender.getSpawn().getLocy() != _redDefender.getY())
_redDefender.teleToLocation(_redDefender.getSpawn().getLocx(), _redDefender.getSpawn().getLocy(), _redDefender.getSpawn().getLocz());
}
if (_blueDefender != null && _redDefender != null)
startQuestTimer("defendSpawn", 30000, null, null);
}
else if (event.equalsIgnoreCase("revive"))
{
if (player != null && player.isOnline() && player.isDead())
{
player.doRevive();
teleportPlayer(player);
player.setCurrentCp(player.getMaxCp());
player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
/*int maxPlayer = (player.getTeam() == 1 ? _maxBlue : _maxRed) + 1;
player.sendMessage("Do not let more than " + maxPlayer + " enemy players near the point NPCs!");*/
}
return null;
}
else if (event.equalsIgnoreCase("givePoints"))
{
int team = 0;
if (npc == null)
{
// error
_log.warning("Clandominate: Cant give points!!! Null npc.");
return null;
}
else if (npc.getTitle().equalsIgnoreCase("Blue Team"))
team = 1;
else if (npc.getTitle().equalsIgnoreCase("Red Team"))
team = 2;
else
{
// error
_log.warning("Clandominate: Cant give points!!! Wrong title.");
return null;
}
int controlledPointNPCs = 0;
for(L2Npc pointNPC : _pointNPCs)
if (pointNPC.getTitle().equalsIgnoreCase(npc.getTitle()))
controlledPointNPCs++;
int sec = 180000;
if (controlledPointNPCs > 0)
{
givePoint2Team(team, controlledPointNPCs);
sec -= REDUCE_TIME[controlledPointNPCs - 1];
}
if ((_eventStart.getTimeInMillis() + EVENTLENGTH) > (System.currentTimeMillis() + sec))
startQuestTimer("givePoints", sec, npc, null);
return null;
}
else if (event.equalsIgnoreCase("calcReviveDelay"))
{
int blue = 0;
int red = 0;
for(L2Clan clan: _blue.keySet())
for(L2ClanMember member :clan.getMembers())
if (member.isOnline() && member.getPlayerInstance().getInstanceId() == 500)
{
member.getPlayerInstance().setFame(member.getPlayerInstance().getFame() + REWARDFAME);
member.getPlayerInstance().sendPacket(FAME_MESSAGE);
member.getPlayerInstance().sendPacket(new UserInfo(member.getPlayerInstance()));
if (!member.getPlayerInstance().isDead() && _afkList.containsKey(member.getPlayerInstance())
&& _afkList.get(member.getPlayerInstance())[0] == member.getPlayerInstance().getX())
{
_afkList.get(member.getPlayerInstance())[1]++;
if (_afkList.get(member.getPlayerInstance())[1] == 3)
{
member.getPlayerInstance().sendPacket(new ExShowScreenMessage("You have 1 min to move!",10000));
}
else if (_afkList.get(member.getPlayerInstance())[1] >= 4)
{
member.getPlayerInstance().setTeam(0);
member.getPlayerInstance().setInstanceId(0);
member.getPlayerInstance().teleToLocation(TeleportWhereType.Town);
}
}
else
{
blue++;
if (!_afkList.containsKey(member.getPlayerInstance()))
_afkList.put(member.getPlayerInstance(), new Integer[2]);
_afkList.get(member.getPlayerInstance())[0] = member.getPlayerInstance().getX();
_afkList.get(member.getPlayerInstance())[1] = 0;
}
}
for(L2Clan clan: _red.keySet())
for(L2ClanMember member :clan.getMembers())
if (member.isOnline() && member.getPlayerInstance().getInstanceId() == 500)
{
member.getPlayerInstance().setFame(member.getPlayerInstance().getFame() + REWARDFAME);
member.getPlayerInstance().sendPacket(FAME_MESSAGE);
member.getPlayerInstance().sendPacket(new UserInfo(member.getPlayerInstance()));
if (!member.getPlayerInstance().isDead() && _afkList.containsKey(member.getPlayerInstance())
&& _afkList.get(member.getPlayerInstance())[0] == member.getPlayerInstance().getX())
{
_afkList.get(member.getPlayerInstance())[1]++;
if (_afkList.get(member.getPlayerInstance())[1] == 3)
{
member.getPlayerInstance().sendPacket(new ExShowScreenMessage("You have 1 min to move!",10000));
}
else if (_afkList.get(member.getPlayerInstance())[1] >= 4)
{
member.getPlayerInstance().setTeam(0);
member.getPlayerInstance().setInstanceId(0);
member.getPlayerInstance().teleToLocation(TeleportWhereType.Town);
}
}
else
{
red++;
if (!_afkList.containsKey(member.getPlayerInstance()))
_afkList.put(member.getPlayerInstance(), new Integer[2]);
_afkList.get(member.getPlayerInstance())[0] = member.getPlayerInstance().getX();
_afkList.get(member.getPlayerInstance())[1] = 0;
}
}
int diffModifier = (blue > 45 || red > 45 ? 200:2000);
if (blue == red)
{
_blueReviveDelay = 30000 - (_redPoints[0] - _bluePoints[0]) * 1500;
_redReviveDelay = 30000 + (_redPoints[0] - _bluePoints[0]) * 1500;
}
else
{
_redReviveDelay = 40000 + (red - blue) * diffModifier + (_redPoints[0] - _bluePoints[0]) * 1500;
_blueReviveDelay = 40000 - (red - blue) * diffModifier - (_redPoints[0] - _bluePoints[0]) * 1500;
if (_blueReviveDelay < 5000)
_blueReviveDelay = 5000;
if (_redReviveDelay > 70000)
_redReviveDelay = 70000;
}
_maxBlue = 8 - _blueReviveDelay / 10000;
_maxRed = 8 - _redReviveDelay / 10000;
if (_maxBlue < 1)
_maxBlue = 1;
else if (_maxRed < 1)
_maxRed = 1;
cancelQuestTimers("calcReviveDelay");
if ((_eventStart.getTimeInMillis() + EVENTLENGTH) > (System.currentTimeMillis() + 60000))
startQuestTimer("calcReviveDelay", 60000, null, null);
return null;
}
return event;
}
private int[] getTeamVariable(int team)
{
if (team == 1)
return _bluePoints;
return _redPoints;
}
private void givePoint2Team(int team, int points)
{
getTeamVariable(team)[0] += points;
switch(getTeamVariable(team)[1])
{
case 0:
if (getTeamVariable(team)[0] >= 10)
{
getTeamVariable(team)[1]++;
for(L2PcInstance player : L2World.getInstance().getAllPlayers().values())
if (player.getInstanceId() == 500 && player.getTeam() == team)
{
player.addItem("Quest", REWARDHONORID, 5, player, true);
if (points == _pointNPCs.size() && Rnd.get(100) < 75)
debuff(player);
}
}
break;
case 1:
if (getTeamVariable(team)[0] >= 20)
{
getTeamVariable(team)[1]++;
for(L2PcInstance player : L2World.getInstance().getAllPlayers().values())
if (player.getInstanceId() == 500 && player.getTeam() == team)
{
player.addItem("Quest", REWARDHONORID, 5, player, true);
if (points == _pointNPCs.size() && Rnd.get(100) < 75)
debuff(player);
}
}
break;
case 2:
if (getTeamVariable(team)[0] >= 45)
{
getTeamVariable(team)[1]++;
for(L2PcInstance player : L2World.getInstance().getAllPlayers().values())
if (player.getInstanceId() == 500 && player.getTeam() == team)
{
player.addItem("Quest", REWARDHONORID, 5, player, true);
if (points == _pointNPCs.size() && Rnd.get(100) < 75)
debuff(player);
}
}
else if (points == _pointNPCs.size())
for(L2PcInstance player : L2World.getInstance().getAllPlayers().values())
if (player.getInstanceId() == 500 && player.getTeam() == team)
if (Rnd.get(100) < 75)
debuff(player);
break;
default:
if (points == _pointNPCs.size())
for(L2PcInstance player : L2World.getInstance().getAllPlayers().values())
if (player.getInstanceId() == 500 && player.getTeam() == team)
if (Rnd.get(100) < 75)
debuff(player);
}
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
switch (npc.getNpcId())
{
case EVENTNPC:
QuestState st = player.getQuestState("clandominate");
if (st == null)
st = newQuestState(player);
player.setLastQuestNpcObject(npc.getObjectId());
switch(_period)
{
case 1:
if (player.isGM())
return "90004-10.htm";
else if (player.getClan() == null)
return "90004-00.htm";
else if (_clanQuest.containsKey(player.getClan()) && _clanQuest.get(player.getClan()) >= MINMOBS)
return "90004-03.htm";
else if (_clanQuest.containsKey(player.getClan()))
{
String htmltext = "<html><body>Magnus The Unicorn:<br>Your clan is not ready. Your clan need to kill " + (MINMOBS - _clanQuest.get(player.getClan())) + " more mobs.<br></body></html>";
return htmltext;
}
else if (player.isClanLeader())
return "90004-01.htm";
return "90004-00.htm";
case 2:
long diff = (System.currentTimeMillis() - _eventStart.getTimeInMillis());
if (diff < EVENTLENGTH && diff > -7200000)
{
if (player.isGM())
return "90004-10.htm";
else if (player.getClan() == null)
return "90004-00.htm";
else if (_blue.containsKey(player.getClan()))
return "90004-05b.htm";
else if (_red.containsKey(player.getClan()))
return "90004-05r.htm";
else
return "90004-05f.htm";
}
else
{
if (player.isGM())
return "90004-10.htm";
else if (player.getClan() == null)
return "90004-00.htm";
else if ((_blue.containsKey(player.getClan()) && _bluePoints[0] > _redPoints[0])
|| (_red.containsKey(player.getClan()) && _bluePoints[0] < _redPoints[0]))
return "90004-06w.htm";
else if ((_blue.containsKey(player.getClan()) && _bluePoints[0] < _redPoints[0])
|| (_red.containsKey(player.getClan()) && _bluePoints[0] > _redPoints[0]))
return "90004-06l.htm";
else if ((_blue.containsKey(player.getClan()) || _red.containsKey(player.getClan())) && _bluePoints == _redPoints)
return "90004-06d.htm";
else
return "90004-05f.htm";
}
}
break;
case POINTNPC:
player.setLastQuestNpcObject(npc.getObjectId());
String htmltext = "<html><body>Merrow The Unicorn:<br>The current points of the teams:<br>Blue: " + _bluePoints[0] + "<br>Red: " + _redPoints[0];
if ((player.getTeam() == 1 && !npc.getTitle().equalsIgnoreCase("Blue Team"))
|| (player.getTeam() == 2 && !npc.getTitle().equalsIgnoreCase("Red Team")))
htmltext += "<br><a action=\"bypass -h Quest clandominate capture\">Capture Merrow The Unicorn</a>";
htmltext += "</body></html>";
return htmltext;
}
return null;
}
public static void main(String[] args)
{
new clandominate(-1,"clandominate","custom");
}
protected void cleanEventTasks()
{
if (_eventStartTask != null)
{
_eventStartTask.cancel(false);
_eventStartTask = null;
}
if (_eventTask != null)
{
_eventTask.cancel(false);
_eventTask = null;
}
}
public void createTeams()
{
float redPlayers = 0;
float bluePlayers = 0;
_blue.clear();
_red.clear();
List<L2Clan> clanList = new FastList<L2Clan>();
for(L2Clan c: _clanQuest.keySet())
clanList.add(c);
while (clanList.size() > 0)
{
L2Clan clan = clanList.remove(Rnd.get(clanList.size()));;
if (_clanQuest.get(clan) >= MINMOBS)
{
float membersRating = 0;
for(L2ClanMember cm : clan.getMembers()) {
int mr = cm.getLevel()-75;
if (mr >= 1 && cm.isOnline())
membersRating += mr;
else if (mr >= 1 && !cm.isOnline())
membersRating += (mr / 2);
}
_clanQuest.put(clan, (int) membersRating);
if (Math.abs(redPlayers - bluePlayers) >= 50)
{
if (redPlayers > bluePlayers)
{
_blue.put(clan, 0);
bluePlayers += membersRating;
}
else
{
_red.put(clan, 0);
redPlayers += membersRating;
}
}
else
{
if (Rnd.get(100) < 50)
{
_blue.put(clan, 0);
bluePlayers += membersRating;
}
else
{
_red.put(clan, 0);
redPlayers += membersRating;
}
}
}
}
float ratingDiff = Math.abs(redPlayers-bluePlayers);
if (ratingDiff > 50)
{
if (redPlayers > bluePlayers)
{
Map<L2Clan, Integer> b = GetBalance(_red, (int)ratingDiff);
Remove(_red,b);
_blue.putAll(b);
}
else
{
Map<L2Clan, Integer> b = GetBalance(_blue, (int)ratingDiff);
Remove(_blue,b);
_red.putAll(b);
}
}
_clanQuest.clear();
}
private Map<L2Clan, Integer> GetBalance(Map<L2Clan, Integer> clans, int diff)
{
FastMap<L2Clan, Integer> balanceTeam = new FastMap<L2Clan, Integer>();
int balanceTeamPoint = 0;
int ideal = (diff + 50)/2;
int tempPoint;
int clanPoint;
L2Clan cClan = null;
int cClanPoint = 0;
for(L2Clan c: clans.keySet())
{
clanPoint = _clanQuest.get(c);
if (clanPoint <= ideal && clanPoint > cClanPoint)
{
cClan = c;
cClanPoint = clanPoint;
}
}
if (cClan != null)
{
balanceTeam.put(cClan,cClanPoint);
balanceTeamPoint += cClanPoint;
}
for(L2Clan c: clans.keySet())
{
clanPoint = _clanQuest.get(c);
tempPoint = balanceTeamPoint + clanPoint;
if (tempPoint <= ideal)
{
balanceTeam.put(c,clanPoint);
balanceTeamPoint += clanPoint;
}
}
return balanceTeam;
}
private void Remove(Map<L2Clan, Integer> team, Map<L2Clan, Integer> clans)
{
if (clans == null) return;
if (team == null) return;
for(L2Clan c: clans.keySet())
{
if (team.containsKey(c))
team.remove(c);
}
}
class eventStart implements Runnable
{
public void run()
{
setOnEnterWorld(false);
long remainingTime = _eventStart.getTimeInMillis() - System.currentTimeMillis();
// set period
if (remainingTime > 432000000 || remainingTime <= 300000)
setPeriod(2);
else
setPeriod(1);
if (remainingTime > 432000000)
{
// event is over
cleanEventTasks();
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), remainingTime - 432000000);
}
else if (remainingTime > 7200000)
{
cleanEventTasks();
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), remainingTime - 7200000);
}
else if (remainingTime > 3600000)
{
// announce time
int min = (int) (remainingTime / 60000);
announce("The second test will start in " + min + " minutes.",0);
cleanEventTasks();
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), remainingTime - 3600000);
}
else if (remainingTime > 1800000)
{
// announce time
int min = (int) (remainingTime / 60000);
announce("The second test will start in " + min + " minutes.",0);
cleanEventTasks();
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), remainingTime - 1800000);
}
else if (remainingTime > 900000)
{
// announce time
int min = (int) (remainingTime / 60000);
announce("The second test will start in " + min + " minutes.",0);
cleanEventTasks();
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), remainingTime - 900000);
}
else if (remainingTime > 600000)
{
// announce time
int min = (int) (remainingTime / 60000);
announce("The second test will start in " + min + " minutes.",0);
cleanEventTasks();
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), remainingTime - 600000);
}
else if (remainingTime > 300000)
{
// announce time
int min = (int) (remainingTime / 60000);
announce("The second test will start in " + min + " minutes.",0);
cleanEventTasks();
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), remainingTime - 300000);
}
else if (remainingTime > 60000)
{
// announce time
int min = (int) (remainingTime / 60000);
announce("The second test will start in " + min + " minutes.",1);
announce("The second test will start in " + min + " minutes.",2);
cleanEventTasks();
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), remainingTime - 60000);
}
else
{
// announce time
announce("The second test will start in " + (remainingTime / 1000) + " seconds.",1);
announce("The second test will start in " + (remainingTime / 1000) + " seconds.",2);
cleanEventTasks();
// StartEvent!
_eventTask = ThreadPoolManager.getInstance().scheduleGeneral(new event(0), remainingTime);
cancelQuestTimers("save");
startQuestTimer("save", 600000, null, null, true);
}
}
}
private boolean isAvailable(L2PcInstance player, boolean isReward)
{
if (player.getLevel() < 76 || player.getKarma() != 0 || player.isFlyingMounted())
return false;
if (player.isFestivalParticipant() || player.isInAirShip() || player.isInBoat())
return false;
if (player.isInCraftMode() || player.isInCrystallize() || player.isInDuel())
return false;
if (player.isInJail() || player.isInOlympiadMode() || player.isInStoreMode())
return false;
if (player.isOverloaded() || player.isTeleporting() || player.inObserverMode())
return isReward; // for reward check these are not a problem
return true;
}
class event implements Runnable
{
private int _type;
event(int type)
{
_type = type;
}
public void run()
{
setOnEnterWorld(true);
setPeriod(2);
int remainingTime = (int) (_eventStart.getTimeInMillis() + EVENTLENGTH - System.currentTimeMillis());
if (_type == 0)
{
if (_blue.isEmpty() || _red.isEmpty())
{
// not enough participants :S
_eventStart.add(Calendar.DAY_OF_MONTH, 7);
// clean event
cleanEventTasks();
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), 16);
return;
}
// start instance and spawn npcs
try {
InstanceManager.getInstance().createInstanceFromTemplate(500, "ColiseumPvP.xml");
_eventInstance = InstanceManager.getInstance().getInstance(500);
_eventInstance.setDuration(remainingTime);
for (L2DoorInstance door : _eventInstance.getDoors())
door.openMe();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int[] loc : POINTNPCSLOC)
{
L2Npc pointNpc = addSpawn(POINTNPC, loc[0], loc[1], loc[2], 0, false, 0, false, 500);
pointNpc.setTitle("Neutral");
_pointNPCs.add(pointNpc);
}
_blueDefender = addSpawn(DEFENDERNPC, BLUESTARTLOC[0], BLUESTARTLOC[1], BLUESTARTLOC[2], 0, false, 0, false, 500);
_redDefender = addSpawn(DEFENDERNPC, REDSTARTLOC[0], REDSTARTLOC[1], REDSTARTLOC[2], 0, false, 0, false, 500);
_blueDefender.setTitle("Blue Team");
_redDefender.setTitle("Red Team");
for (L2Clan c : _blue.keySet())
{
for (L2ClanMember member : c.getMembers())
{
if (member.isOnline() && isAvailable(member.getPlayerInstance(), false))
teleportPlayer(member.getPlayerInstance());
}
}
for (L2Clan c : _red.keySet())
{
for (L2ClanMember member : c.getMembers())
{
if (member.isOnline() && isAvailable(member.getPlayerInstance(), false))
teleportPlayer(member.getPlayerInstance());
}
}
_afkList.clear();
_blueDefender.disableCoreAI(true);
_redDefender.disableCoreAI(true);
_blueDefender.setIsInvul(true);
_redDefender.setIsInvul(true);
startQuestTimer("defendSpawn", 30000, null, null);
startQuestTimer("givePoints", 150000, _blueDefender, null);
startQuestTimer("givePoints", 150000, _redDefender, null);
startQuestTimer("calcReviveDelay", 1000, null, null);
_type++;
}
if (remainingTime > 0)
{
cleanEventTasks();
_eventTask = ThreadPoolManager.getInstance().scheduleGeneral(new event(_type), remainingTime);
}
else
{
cancelQuestTimers("givePoints");
cancelQuestTimers("defendSpawn");
_blueDefender = null;
_redDefender = null;
_eventStart.add(Calendar.DAY_OF_MONTH, 7);
_eventInstance = null;
for (L2Clan c : _blue.keySet())
{
for (L2ClanMember member : c.getMembers())
{
if (member.isOnline() && !member.getPlayerInstance().isInDuel())
member.getPlayerInstance().setTeam(0);
}
}
for (L2Clan c : _red.keySet())
{
for (L2ClanMember member : c.getMembers())
{
if (member.isOnline() && !member.getPlayerInstance().isInDuel())
member.getPlayerInstance().setTeam(0);
}
}
// clean event
cleanEventTasks();
_eventStartTask = ThreadPoolManager.getInstance().scheduleGeneral(new eventStart(), 16);
cancelQuestTimers("save");
startQuestTimer("save", 3600000, null, null, true);
}
}
}
}