Как реализовать команду "//setaio" в продажу или предмет

  • Автор темы Автор темы jasker
  • Дата начала Дата начала

jasker

Единомышленник
Участник
Сообщения
66
Розыгрыши
0
Решения
1
Репутация
0
Реакции
20
Баллы
113
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
l2jmobius c6
Всем Привет!

Есть админ команда //setaio

Возможно ли ее как то реализовать в HTM или Multisell
Пример: походит человек к НПС дает определенную сумму и получает в замен команду //setaio " тоесть он ее купил"
Либо из команды сделать предмет к примеру item . А сам итем уже продавать через multisell
Знаний Java нету. по этому и спрашиваю.
Можно ли как то реализовать команду в продажу.?
За ранее спасибо.
 
Может сделаешь команду через . Вместо //, и при покупке делаешь запись как конфиги делают, проверяешь есть ли запись и даёшь добро на обработку команды которую благополучно скопируешь из админки
 
Java:
package handlers.voicedcommandhandlers;

import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.handler.IVoicedCommandHandler;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;

public class SetAIO implements IVoicedCommandHandler
{
    private static final String[] VOICED_COMMANDS =
            {
                    "setAIO"
            };

    @Override
    public boolean useVoicedCommand(String command, Player activeChar, String target)
    {
        if (command.startsWith(VOICED_COMMANDS[0]))
        {
            activeChar.sendPacket(new CreatureSay(null, ChatType.WORLD, "SetAIO", "You have been activate AIO."));
        }
        return false;
    }

    @Override
    public String[] getVoicedCommandList()
    {
        return VOICED_COMMANDS;
    }
}
Запихиваем это в data/script/handlers/voicedcommands/
называем файлик "SetAIO.java" и вставляем содержимое.
Потом заходим в "data/script/handlers/", ищем MasterHandler и вставляем ссылку на класс
1689782308252.webp

Заходим в игру, и пишем ".setAIO" и получаем красивую надпись
 
Может сделаешь команду через . Вместо //, и при покупке делаешь запись как конфиги делают, проверяешь есть ли запись и даёшь добро на обработку команды которую благополучно скопируешь из админки
Как я понял команду через точку. пример .setaio ?
Но тут стает другой вопрос без java реализовать как я понимаю вряд ли у меня получится. да и тем более потом вывести в конфиг.
моих познаний не хватит для реализации. тем более там команда //setaio Имя время.
пример //setaio petya 3
 
Java:
package handlers.voicedcommandhandlers;

import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.handler.IVoicedCommandHandler;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;

public class SetAIO implements IVoicedCommandHandler
{
    private static final String[] VOICED_COMMANDS =
            {
                    "setAIO"
            };

    @Override
    public boolean useVoicedCommand(String command, Player activeChar, String target)
    {
        if (command.startsWith(VOICED_COMMANDS[0]))
        {
            activeChar.sendPacket(new CreatureSay(null, ChatType.WORLD, "SetAIO", "You have been activate AIO."));
        }
        return false;
    }

    @Override
    public String[] getVoicedCommandList()
    {
        return VOICED_COMMANDS;
    }
}
Запихиваем это в data/script/handlers/voicedcommands/
называем файлик "SetAIO.java" и вставляем содержимое.
Потом заходим в "data/script/handlers/", ищем MasterHandler и вставляем ссылку на класс
Посмотреть вложение 53866

Заходим в игру, и пишем ".setAIO" и получаем красивую надпись

Нету таких папок . Или создать их самому?


Снимок экрана (1).webp
 
Java:
package handlers.voicedcommandhandlers;

import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.handler.IVoicedCommandHandler;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;

public class SetAIO implements IVoicedCommandHandler
{
    private static final String[] VOICED_COMMANDS =
            {
                    "setAIO"
            };

    @Override
    public boolean useVoicedCommand(String command, Player activeChar, String target)
    {
        if (command.startsWith(VOICED_COMMANDS[0]))
        {
            activeChar.sendPacket(new CreatureSay(null, ChatType.WORLD, "SetAIO", "You have been activate AIO."));
        }
        return false;
    }

    @Override
    public String[] getVoicedCommandList()
    {
        return VOICED_COMMANDS;
    }
}
Запихиваем это в data/script/handlers/voicedcommands/
называем файлик "SetAIO.java" и вставляем содержимое.
Потом заходим в "data/script/handlers/", ищем MasterHandler и вставляем ссылку на класс
Посмотреть вложение 53866

Заходим в игру, и пишем ".setAIO" и получаем красивую надпись
покапался в исходниках мобиуса. данные папки есть в l2j_mobius_clasic
а у меня l2jmobius c6 там немного иначе.
 
Что хоть делает эта команда, спавнит с именем и временем, понять не могу
 
Что хоть делает эта команда, спавнит с именем и временем, понять не могу
по задумке - выдается макс лвл на чара и топ шмот для каста и колличества маны, после чего чару выдаются все умения усиляющего характера. Но, как я понял, чар не может нормально играть после этого и спустя Н-ное колличество времени у него эти предметы пропадают, вместе с умениями.
Типо ходячий бафер :)
 
Что хоть делает эта команда, спавнит с именем и временем, понять не могу
Это превращает персонажа в бафера. тоесть я выдаю на персонажа. //setaio вася 1
вася id перса
1 это количество дней.

у персонажа появляются все бафы. которы е я пропишу в конфиге.
Вот конфиг:
# Система AIO
# ---------------------------------------------------------------------------
# Включить систему AIO
EnableAioSystem = True

# Цвет ника
AllowAioNameColor = True
AioNameColor = 88AA88

# Цвет титула
AllowAioTitleColor = True
AioTitleColor = 88AA88

# Список навыков AIO
# Format : skillid,skilllvl;skillid2,skilllvl2;....skillidn,skilllvln
AioSkills = 1085,3;1304,3;1087,3;1354,1;1062,2;1005,3;1243,6;1045,6;1048,6;\
1311,6;168,3;213,8;1007,3;1309,3;1552,3;1006,3;1229,15;1308,3;1253,3;1284,3;\
1009,3;1310,4;1363,1;1362,1;1397,3;1292,6;1078,6;307,1;276,1;309,1;274,1;275,1;\
272,1;277,1;273,1;311,1;366,1;365,1;310,1;271,1;1242,3;1257,3;1353,3;1391,3;\
1352,1;229,7;228,3;1077,3;1218,33;1059,3;1219,33;1217,33;1388,3;1389,3;1240,3;\
1086,2;1032,3;1073,2;1036,2;1035,4;1068,3;1003,3;1282,2;1356,1;1355,1;1357,33;\
1044,3;1182,3;1191,3;1033,3;1189,3;1259,4;1306,6;234,23;1040,3;364,1;264,1;306,1;\
269,1;270,1;265,1;363,1;349,1;308,1;305,1;304,1;267,1;266,1;268,1;1390,3;1303,2;\
1204,2;1268,4;1413,1;4699,8;4700,8;4703,8

# Aio Buffers может использовать GK?
AllowAioUseGk = False

# Aio Buffers может говорить с класс мастером
AllowAioUseClassMaster = False

# Разрешить AIO в Евентах?
AllowAioInEvents = False

Что хоть делает эта команда, спавнит с именем и временем, понять не могу
примеры с Ютуба





Я бы хотел реализовать как пример 3 или пример 2

у меня же работает как 1 вариант.
 
примеры с Ютуба





Я бы хотел реализовать как пример 3 или пример 2
в данном случае лучше купить у кого-то за 5к руб.

Как 3 вариант вот тут можно поискать думаю - L2JDev 12.1 Премиум
 
в данном случае лучше купить у кого-то за 5к руб.

Как 3 вариант вот тут можно поискать думаю - L2JDev 12.1 Премиум
Я вроде нашел решение но пока не понял как реализовать htm .
код еще не вставлял. если получится я в теме напишу.

Решение но это не точно.
 
Ну там сделано как квест, создаёшь папку с кв там создаёшь htm в ней линки с ид кв и номером страницы куда хочешь прыгнуть ядро делает проверку условия если все ок вываливает кучу скилов и барахла

Импорты кривые походу, и там есть норм баг, у тебя уже на след день будут 80 чары бегать, нет никаких сейвов какой лвл и прочее, просто вывалил 80, пачку скилов,завтра падает статус лвл остаётся скилы тоже, итем можно убрать продать сломать

А зачем делать лесопед, сделай как есенц у всех есть бафы чем делать окно бафера
Ветки скилов поправил кастом скилов сделал типо комбо и все
 
Последнее редактирование модератором:
А зачем делать лесопед, сделай как есенц у всех есть бафы чем делать окно бафера
по этому мне и не нравятся хроники эсенсоподобных. у меня есть классы поддержки в игре PP/SE/EE/ES/Warlock/BD/SWS/
Я хочу что бы был смысл ими играть .Бафер будет, но только реализован с бафами первого уровня. А данный тип AIO будет выпадать редко с рб или квеста.

Ну там сделано как квест, создаёшь папку с кв там создаёшь htm в ней линки с ид кв и номером страницы куда хочешь прыгнуть ядро делает проверку условия если все ок вываливает кучу скилов и барахла
Звучит хорошо. НО так как я совсем еще зеленый в java и подобных языках. я не знаю как реализовать.

У меня получилось
вдруг кому то понадобиться идем в game\data\scripts\quests
создаем папку AioSeller в ней же создаем файл AioSeller.java
туда копируем:

package quests.AioSeller;

import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
import org.l2jmobius.gameserver.network.serverpackets.SocialAction;

/**
* @author TiTaM
*/
public class AioSeller extends Quest
{
// ------------------------------------------------
// Id do Npc
private static final int[] NPC =
{
50009
};
// ------------------------------------------------
// Id da moeda e quantidade para a primeira opçao.
private static final int MOEDA1 = 57;
private static final int COUNT1 = 30000000;
// Dias pra a primeira opçao.
private static final int DIAS1 = 30;
// ------------------------------------------------
// Id da moeda e quantidade para a segunda opçao.
private static final int MOEDA2 = 57;
private static final int COUNT2 = 60000000;
// Dias pra a segunda opçao.
private static final int DIAS2 = 60;
// ------------------------------------------------
// Id da moeda e quantidade para a terceira opçao.
private static final int MOEDA3 = 57;
private static final int COUNT3 = 100000000;
// Dias pra a terceira opçao.
private static final int DIAS3 = 90;
// ------------------------------------------------

public AioSeller(int questid, String name, String descr)
{
super(questid, name);

for (int NPC_ID : NPC)
{
addStartNpc(NPC_ID);
addFirstTalkId(NPC_ID);
addTalkId(NPC_ID);
}
}

@Override
public String onAdvEvent(String event, Npc npc, Player player)
{
QuestState st = player.getQuestState(getName());
String htmltext = "";
int npcId = npc.getNpcId();

if (event.equalsIgnoreCase("1.htm"))
{
return "1.htm";
}
if (event.equalsIgnoreCase("2.htm"))
{
return "2.htm";
}
if (event.equalsIgnoreCase("3.htm"))
{
return "3.htm";
}
if (event.equalsIgnoreCase("4.htm"))
{
return "4.htm";
}
if (event.equalsIgnoreCase("5.htm"))
{
return "5.htm";
}
if (event.equalsIgnoreCase("6.htm"))
{
return "6.htm";
}
if (event.equalsIgnoreCase("7.htm"))
{
return "7.htm";
}
if (event.equalsIgnoreCase("8.htm"))
{
return "8.htm";
}
if (event.equalsIgnoreCase("9.htm"))
{
return "9.htm";
}
if (event.equalsIgnoreCase("10.htm"))
{
return "10.htm";
}

if (event.equalsIgnoreCase("aio_option_1"))
{
if (npcId == NPC[0])
{
if (player.getLevel() > 1)

{
htmltext = "aiolevel.htm";

if (player.isAio())
{
htmltext = "already_isaio.htm";
}

}
else
{
if (st.getQuestItemsCount(MOEDA1) >= COUNT1)
{
st.takeItems(MOEDA1, COUNT1);
player.setAio(true);
player.getAppearance().setNameColor(Config.AIO_NCOLOR);
player.getAppearance().setTitleColor(Config.AIO_TCOLOR);
int daysleft = player.getAioEndTime() <= 0 ? 0 : (int) ((player.getAioEndTime() - System.currentTimeMillis()) / 86400000);
player.setEndTime("aio", daysleft + DIAS1);
player.getInventory().addItem("", 9388, 1, player, null);
player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
player.sendPacket(new CreatureSay(0, ChatType.WHISPER, "Aio System", "Теперь у вас есть статус AIO со специальными способностями, поздравляем!."));
player.getStat().addExp(player.getStat().getExpForLevel(81));
player.rewardAioSkills();
player.sendSkillList();
player.broadcastUserInfo();
htmltext = "win_aio.htm";
}
else
{
htmltext = "no_item.htm";
}
}
}
}
if (event.equalsIgnoreCase("aio_option_2"))
{
if (npcId == NPC[0])
{
if (player.getLevel() > 1)
{
htmltext = "aiolevel.htm";

if (player.isAio())
{
htmltext = "already_isaio.htm";
}

}

else
{
if (st.getQuestItemsCount(MOEDA2) >= COUNT2)
{
st.takeItems(MOEDA2, COUNT2);
player.setAio(true);
player.getAppearance().setNameColor(Config.AIO_NCOLOR);
player.getAppearance().setTitleColor(Config.AIO_TCOLOR);
int daysleft = player.getAioEndTime() <= 0 ? 0 : (int) ((player.getAioEndTime() - System.currentTimeMillis()) / 86400000);
player.setEndTime("aio", daysleft + DIAS2);
player.getInventory().addItem("", 9388, 1, player, null);
player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
player.sendPacket(new CreatureSay(0, ChatType.WHISPER, "Aio System", "Dear player, you have AIO status now with special abilities , congratulations."));
player.getStat().addExp(player.getStat().getExpForLevel(81));
player.rewardAioSkills();
player.sendSkillList();
player.broadcastUserInfo();
htmltext = "win_aio.htm";
}
else
{
htmltext = "no_item.htm";
}
}
}
}
if (event.equalsIgnoreCase("aio_option_3"))
{
if (npcId == NPC[0])
{
if (player.getLevel() > 1)
{
htmltext = "aiolevel.htm";

if (player.isAio())
{
htmltext = "already_isaio.htm";
}

}
else
{
if (st.getQuestItemsCount(MOEDA3) >= COUNT3)
{
st.takeItems(MOEDA3, COUNT3);
player.setAio(true);
player.getAppearance().setNameColor(Config.AIO_NCOLOR);
player.getAppearance().setTitleColor(Config.AIO_TCOLOR);
int daysleft = player.getAioEndTime() <= 0 ? 0 : (int) ((player.getAioEndTime() - System.currentTimeMillis()) / 86400000);
player.setEndTime("aio", daysleft + DIAS3);
player.getInventory().addItem("", 9388, 1, player, null);
player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
player.sendPacket(new CreatureSay(0, ChatType.WHISPER, "Aio System", "Dear player, you have AIO status now with special abilities , congratulations."));
player.getStat().addExp(player.getStat().getExpForLevel(81));
player.rewardAioSkills();
player.sendSkillList();
player.broadcastUserInfo();
htmltext = "win_aio.htm";
}
else
{
htmltext = "no_item.htm";
}
}
}
}
if (event.equalsIgnoreCase("remove_aio"))
{
if (npcId == NPC[0])
{
if (player.isAio())
{
player.setAio(false);
player.setAioEndTime(0);
player.lostAioSkills();
player.getInventory().destroyItemByItemId("", 9388, 1, player, null);
player.getAppearance().setNameColor(0xFFFFFF);
player.getAppearance().setTitleColor(0xFFFF77);
player.broadcastUserInfo();
player.sendSkillList();
player.broadcastUserInfo();

htmltext = "remove_aio.htm";
}
else
{
htmltext = "none.htm";
}
}
return htmltext;
}
st.exitQuest(true);
return htmltext;
}

@Override
public String onFirstTalk(Npc npc, Player player)
{
QuestState st = player.getQuestState(getName());
if (st == null)
{
st = newQuestState(player);
}
String htmltext = "";
int npcId = npc.getNpcId();
if (npcId == NPC[0])
{
htmltext = "1.htm";
}
return htmltext;
}

public static void main(String[] args)
{
new AioSeller(-1, "AioSeller", "custom");
}
}
 
Назад
Сверху Снизу