/*
* Copyright (C) 2004-2015 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack 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.
*
* L2J DataPack 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 .
*/
package ai.npc.VarkaSilenosSupport;
import java.util.HashMap;
import java.util.Map;
import ai.npc.AbstractNpcAI;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.skills.Skill;
import com.l2jserver.gameserver.util.Util;
/**
* Varka Silenos Support AI.
* Original Jython script by Emperorc and Kerberos_20.
* @author Nyaran
*/
public final class VarkaSilenosSupport extends AbstractNpcAI
{
private static class BuffsData
{
private final int _skill;
private final int _cost;
public BuffsData(int skill, int cost)
{
_skill = skill;
_cost = cost;
}
public Skill getSkill()
{
return SkillData.getInstance().getSkill(_skill, 1);
}
public int getCost()
{
return _cost;
}
}
// NPCs
private static final int ASHAS = 31377; // Hierarch
private static final int NARAN = 31378; // Messenger
private static final int UDAN = 31379; // Buffer
private static final int DIYABU = 31380; // Grocer
private static final int HAGOS = 31381; // Warehouse Keeper
private static final int SHIKON = 31382; // Trader
private static final int TERANU = 31383; // Teleporter
// Items
private static final int SEED = 7187;
private static final int[] VARKA_MARKS =
{
7221, // Mark of Varka's Alliance - Level 1
7222, // Mark of Varka's Alliance - Level 2
7223, // Mark of Varka's Alliance - Level 3
7224, // Mark of Varka's Alliance - Level 4
7225, // Mark of Varka's Alliance - Level 5
};
// Misc
private static final Map BUFF = new HashMap<>();
static
{
BUFF.put(1, new BuffsData(4359, 2)); // Focus: Requires 2 Nepenthese Seeds
BUFF.put(2, new BuffsData(4360, 2)); // Death Whisper: Requires 2 Nepenthese Seeds
BUFF.put(3, new BuffsData(4345, 3)); // Might: Requires 3 Nepenthese Seeds
BUFF.put(4, new BuffsData(4355, 3)); // Acumen: Requires 3 Nepenthese Seeds
BUFF.put(5, new BuffsData(4352, 3)); // Berserker: Requires 3 Nepenthese Seeds
BUFF.put(6, new BuffsData(4354, 3)); // Vampiric Rage: Requires 3 Nepenthese Seeds
BUFF.put(7, new BuffsData(4356, 6)); // Empower: Requires 6 Nepenthese Seeds
BUFF.put(8, new BuffsData(4357, 6)); // Haste: Requires 6 Nepenthese Seeds
}
private VarkaSilenosSupport()
{
super(VarkaSilenosSupport.class.getSimpleName(), "ai/npc");
addFirstTalkId(ASHAS, NARAN, UDAN, DIYABU, HAGOS, SHIKON, TERANU);
addTalkId(UDAN, HAGOS, TERANU);
addStartNpc(HAGOS, TERANU);
}
private int getAllianceLevel(L2PcInstance player)
{
for (int i = 0; i < VARKA_MARKS.length; i++)
{
if (hasQuestItems(player, VARKA_MARKS[i]))
{
return -(i + 1);
}
}
return 0;
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
String htmltext = null;
if (Util.isDigit(event) && BUFF.containsKey(Integer.parseInt(event)))
{
final BuffsData buff = BUFF.get(Integer.parseInt(event));
if (getQuestItemsCount(player, SEED) >= buff.getCost())
{
takeItems(player, SEED, buff.getCost());
npc.setTarget(player);
npc.doCast(buff.getSkill());
npc.setCurrentHpMp(npc.getMaxHp(), npc.getMaxMp());
}
else
{
htmltext = "31379-02.html";
}
}
else if (event.equals("Teleport"))
{
final int AllianceLevel = getAllianceLevel(player);
if (AllianceLevel == -4)
{
htmltext = "31383-04.html";
}
else if (AllianceLevel == -5)
{
htmltext = "31383-05.html";
}
}
return htmltext;
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
String htmltext = getNoQuestMsg(player);
final int AllianceLevel = getAllianceLevel(player);
switch (npc.getId())
{
case ASHAS:
htmltext = (AllianceLevel < 0) ? "31377-friend.html" : "31377-no.html";
break;
case NARAN:
htmltext = (AllianceLevel < 0) ? "31378-friend.html" : "31378-no.html";
break;
case UDAN:
htmltext = (AllianceLevel < 0) ? (AllianceLevel > -3) ? "31379-01.html" : "31379-04.html" : "31379-03.html";
break;
case DIYABU:
htmltext = (AllianceLevel < 0) ? "31380-friend.html" : "31380-no.html";
break;
case HAGOS:
htmltext = (AllianceLevel < 0) ? (AllianceLevel == -1) ? "31381-01.html" : "31381-02.html" : "31381-no.html";
break;
case SHIKON:
switch (AllianceLevel)
{
case -1:
case -2:
htmltext = "31382-01.html";
break;
case -3:
case -4:
htmltext = "31382-02.html";
break;
case -5:
htmltext = "31382-03.html";
break;
default:
htmltext = "31382-no.html";
break;
}
break;
case TERANU:
switch (AllianceLevel)
{
case -1:
case -2:
case -3:
htmltext = "31383-01.html";
break;
case -4:
htmltext = "31383-02.html";
break;
case -5:
htmltext = "31383-03.html";
break;
default:
htmltext = "31383-no.html";
break;
}
break;
}
return htmltext;
}
public static void main(String args[])
{
new VarkaSilenosSupport();
}
}