package custom.ServiceManager;
import java.io.File;
import java.io.FileReader;
import java.io.LineNumberReader;
import java.util.HashMap;
import java.util.Map;
import ru.catssoftware.gameserver.datatables.ItemTable;
import ru.catssoftware.gameserver.handler.IVoicedCommandHandler;
import ru.catssoftware.gameserver.handler.VoicedCommandHandler;
import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance;
import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;
import ru.catssoftware.gameserver.model.quest.Quest;
import ru.catssoftware.gameserver.model.quest.QuestState;
import ru.catssoftware.gameserver.util.PcAction;
public class ServiceManager extends Quest {
private static String qn = "ServiceManager";
private static class Price {
private int []_itemId;
private int []_prices;
public Price(int []items, int[]count) {
_itemId = items;
_prices = count;
}
}
private static Map<Integer, Price> _premiumPrice = new HashMap<Integer, Price>();
private static Map<Integer, Price> _heroPrice = new HashMap<Integer, Price>();
private static Price _colorPrice = new Price(new int[] {4037}, new int [] {15});
private static Price _NoblesPrice = new Price(new int[] {4037}, new int [] {25});
private String colorTable = "";
public ServiceManager() {
super(-1,qn,"custom");
// ================= ЦЕНЫ НА ПРЕМИУМ ========
// дни, new Price(new int[] {через , ИД предметов},new int[] {через , количество});
_premiumPrice.put(1,new Price(new int[] {4037},new int[] {3}));
_premiumPrice.put(7,new Price(new int[] {4037},new int[] {10}));
_premiumPrice.put(30,new Price(new int[] {4037},new int[] {20}));
// ================ ЦЕНЫ НА ГЕРОИЗМ ===============
_heroPrice.put(7, new Price(new int[] { 4037},new int[] {200}));
_heroPrice.put(30, new Price(new int[] { 4037},new int[] {500}));
// Таблица цветов из colors.table
File f = new File(getScriptFile());
try {
LineNumberReader lnr = new LineNumberReader(new FileReader(f.getParent()+"/colors.table"));
String line;
while((line=lnr.readLine())!=null) {
String []colors = line.split("\t");
colorTable +="<tr>";
for(int i=0;i<colors.length;i++)
colorTable+="<td><a action=\"bypass -h Quest "+qn+" color "+colors[i]+"\"><font color=\""+colors[i]+"\">%name%</font></a></td>";
colorTable +="</tr>";
}
} catch(Exception e) {
System.out.println("Error reading "+f.getParent()+"/colors.table");
}
}
private boolean checkMoney(L2PcInstance player, Price price) {
for(int i=0;i<price._itemId.length;i++) // Проверяем средства
if(player.getInventory().getItemByItemId(price._itemId[i])==null ||
player.getInventory().getItemByItemId(price._itemId[i]).getCount() < price._prices[i]) {
return false; // Нет денег? Сории
}
for(int i=0;i<price._itemId.length;i++) // Отнимаем средства у населения
if(!player.destroyItemByItemId(qn, price._itemId[i], price._prices[i], null, true)) {
return false;
}
return true;
}
@Override
public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player) {
String []args = event.split(" "); // Разбираем строку параметров
if(args[0].equals("premiumlist")) { // Формируем список доступных дней премиума
String html = "<html><body><br>Покупка премиума:<br><center>";
for(int days : _premiumPrice.keySet()) {
html+="<a action=\"bypass -h Quest "+qn+" premium "+days+"\">На "+days+" дней</a> -";
Price price = _premiumPrice.get(days);
for(int i=0;i<price._itemId.length;i++) { // Формируем список стоимости
if(i!=0) // Добавляем ,
html+=",";
html+=price._prices[i]+" "+ItemTable.getInstance().getTemplate(price._itemId[i]).getName();
}
}
html+="</center></body></html>";
return html;
}
else if(args[0].equals("herolist")) { // Список достпуного геройства, аналогично премиуму
String html = "<html><body><br>Покупка Геройства:<br><center>";
for(int days : _heroPrice.keySet()) {
html+="<a action=\"bypass -h Quest "+qn+" hero "+days+"\">На "+days+" дней</a> -";
Price price = _heroPrice.get(days);
for(int i=0;i<price._itemId.length;i++) { // Формируем список стоимости
if(i!=0) // Добавляем ,
html+=",";
html+=price._prices[i]+" "+ItemTable.getInstance().getTemplate(price._itemId[i]).getName();
}
}
html+="</center></body></html>";
return html;
}
else if(args[0].equals("premium")) { // Выдаем премиум
if(player.getPremiumService()!=0) // Проверяем а не премимум ли чар?
return "already-premium.htm";
int numDays = Integer.parseInt(args[1]); // В Java массивы нумеруются с 0
Price price = _premiumPrice.get(numDays); // Ищем цену в списке цен
if(price==null) // Не нашли. Что-то тут не то...
return "invalid-param.htm";
if(!checkMoney(player,price)) // Проверяем деньги
return "no-money.htm";
PcAction.addPremiumServices(player, numDays, player.getAccountName()); // Выдаем премиум
// Показываем .premium меню
IVoicedCommandHandler premium = VoicedCommandHandler.getInstance().getVoicedCommandHandler("premium");
if(premium!=null)
premium.useVoicedCommand("premium", player, null);
else
return "success.htm";
}
else if(args[0].equals("noblese")) { // Дворянство
if(player.isNoble()) // Игрок уже нубл
return "already-noble.htm";
if(!checkMoney(player, _NoblesPrice)) // Проверяем Деньги
return "no-money.htm";
player.setNoble(true); // Даем нубла
return "success.htm";
}
else if(args[0].equals("hero")) { // Геройство
if(player.isHero())
return "already-hero.htm";
int numDays = Integer.parseInt(args[1]);
Price price = _heroPrice.get(numDays); // Ищем цену в списке цен
if(price==null) // Не нашли. Что-то тут не то...
return "invalid-param.htm";
if(!checkMoney(player, price)) // Проверяем Деньги
return "no-money.htm";
PcAction.addHeroStatus(player, numDays); // Даем героя России.
return "success.htm";
}
else if(args[0].equals("ls")) {
return "ls.htm";
}
else if(args[0].equals("weapon")) {
return "weapon.htm";
}
else if(args[0].equals("armor")) {
return "armor.htm";
}
else if(args[0].equals("jewel")) {
return "jewel.htm";
}
else if (args[0].equals("service")) {
return "service.htm";
}
else if(args[0].equals("colorlist")) { // Список цветов
String html = "<html><body><br>Выбор цвета<table width=220>";
html+=(colorTable.replace("%name%", player.getName()));
html+="</table></body></html>";
return html;
}
else if(args[0].equals("color")) { //Смена цвета
if(!checkMoney(player, _colorPrice))
return "no-money.htm";
int color = Integer.parseInt(args[1],16); // Получаем цвет и меняем старший и младший байты
color = (color & 0xFF) << 16 | (color & 0xff0000) >> 16 | (color & 0xff00);
// Меняем цвет и посылаем всем пакет что цвет сменен
player.getAppearance().setNameColor(color);
player.broadcastFullInfo();
return "success.htm";
}
return "Shop.htm";
}
@Override
public String onFirstTalk(L2NpcInstance npc, L2PcInstance player) {
return onTalk(npc, player);
}
@Override
public String onTalk(L2NpcInstance npc, L2PcInstance player) {
QuestState qs = player.getQuestState(qn);
if(qs==null)
qs = newQuestState(player);
return "Shop.htm";
}
public static void main(String[] args) {
ServiceManager ps = new ServiceManager();
ps.addFirstTalkId(50016); // Мы не хотим писать диалог для этого НПЦ
ps.addStartNpc(50016); // Автоматический контроль состояния квеста
ps.addTalkId(50016); // NPC с которым можно говорить.
}
}
Всем привет! Ребята прошу кто может обрезать весь сервис, а оставить один premium сервис.? C меня +
Вот сам скрипт!
http://rghost.ru/8Mhpm2yDy