Перейти к содержанию
Авторизация  
maxlevchenko

подскажите пожалуйста, как прикрутить этого нпц к Acis?

Рекомендуемые сообщения

L2Rebirth.java

Spoiler

package l2s.gameserver.scripts.custom.rebirth;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.concurrent.TimeUnit;

import l2s.commons.db.DatabaseFactory;
import l2s.gameserver.Announcements;
import l2s.gameserver.datatables.ItemTable;
import l2s.gameserver.datatables.SkillTable;
import l2s.gameserver.model.L2Skill;
import l2s.gameserver.model.actor.L2Npc;
import l2s.gameserver.model.actor.instance.L2PcInstance;
import l2s.gameserver.model.quest.Quest;
import l2s.gameserver.model.quest.QuestState;
import l2s.gameserver.network.serverpackets.MagicSkillUse;
import l2s.gameserver.network.serverpackets.NpcHtmlMessage;
import l2s.gameserver.templates.item.L2Item;

/**
 * @author SoFace
 */
public class L2Rebirth extends Quest
{
    private final static int MANAGER = 99999; // Manager's ID.
    
    private final static boolean GIVE_ITEMS_BEFORE_REBIRTH = true; // Give Items before Rebirth ?
    private final static int GIVE_ITEM_ID = 4037; // Item's ID.
    private final static int GIVE_ITEM_COUNT = 5; // Count.
    
    private final static boolean TAKE_ITEMS_BEFORE_REBIRTH = false; // Take Items before Rebirth ?
    private final static int TAKE_ITEM_ID = 57; // Item's ID.
    private final static int TAKE_ITEM_COUNT = 50000000; // Count.
    
    private final static int NEED_LVL = 80; // Need LvL for Rebirth.
    private final static int GET_LVL = 1; // LvL after Rebirth.
    
    private final static boolean GIVE_SKILLS = true; // Give Skill ?
    private final static int SKILL_ID = 4391; // Skill's ID.
    private final static int SKILL_LVL = 2; // Skill's LvL.
    
    private final static boolean SET_NOBLE = true; // Give Noblesse  ?
    
    private final static boolean SET_HERO = true; // Give Hero ?
    private final static int REWARD_HERO_DAYS = -1; // How many days to give the status of Hero ?
                                                    // 0 - Until relogin. -1 - Forever.
    
    private final static boolean SET_PVP_KILLS = true; // Set count PvP kills to player ?
    private final static int PVP_KILLS = 5; // Count.
    
    private final static boolean SET_PK_KILLS = true; // Set count PK kills to player ?
    private final static int PK_KILLS = 5; // Count.
    
    private final static boolean CREATE_EFFECT = true; // Create firework on rebirth ?
    
    public L2Rebirth()
    {
        super(-1, "L2Rebirth", "custom");
        
        addStartNpc(MANAGER);
        addTalkId(MANAGER);
    }
    
    @Override
    public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
    {
        QuestState st = player.getQuestState(getName());
        
        L2Skill Skill = SkillTable.getInstance().getInfo(SKILL_ID, SKILL_LVL);
        L2Item Take_Item = ItemTable.getInstance().getTemplate(TAKE_ITEM_ID);
        
        if (event.startsWith("rebirth"))
        {
            Announcements.announceToAll("Player " + player.getName() + " was Reborned!");
            
            if (player.getStat().getLevel() >= NEED_LVL)
                player.sendMessage("Need LvL for Rebirth " + NEED_LVL);
            else
            {
                player.sendMessage("Congratulations ! You was reborned !");
                
                player.getStat().setLevel((byte) (GET_LVL - 1));
                player.getStat().setExp(0);
                
                if (CREATE_EFFECT)
                {
                    MagicSkillUse msu = new MagicSkillUse(player, player, 2025, 1, 1, 0);
                    player.sendPacket(msu);
                    player.broadcastPacket(msu);
                }
                if (SET_PVP_KILLS)
                    player.setPvpKills(player.getPvpKills() + PVP_KILLS);
                if (SET_PK_KILLS)
                    player.setPkKills(player.getPkKills() + PK_KILLS);
                if (GIVE_ITEMS_BEFORE_REBIRTH)
                    st.giveItems(GIVE_ITEM_ID, GIVE_ITEM_COUNT);
                if (TAKE_ITEMS_BEFORE_REBIRTH)
                {
                    if (st.getQuestItemsCount(TAKE_ITEM_ID) >= TAKE_ITEM_COUNT)
                        player.destroyItemByItemId("Take Items", TAKE_ITEM_ID, TAKE_ITEM_COUNT, player, true);
                    else
                        player.sendMessage("You do not have enough " + TAKE_ITEM_COUNT + Take_Item.getName());
                }
                if (GIVE_SKILLS)
                {
                    player.addSkill(Skill, true);
                    player.sendMessage("You got " + Skill.getName() + ".");
                }
                if (SET_NOBLE)
                {
                    if (!player.isNoble())
                        player.setNoble(true, true);
                    else
                        player.sendMessage("You already Noblesse.");
                }
                if (SET_HERO)
                {
                    if (!player.isHero())
                        addHero(player, REWARD_HERO_DAYS);
                    else
                        player.sendMessage("You already Hero.");
                }
                
                player.broadcastUserInfo();
            }
        }
        
        return null;
    }
    
    @Override
    public String onTalk(L2Npc npc, L2PcInstance talker)
    {
        htmlStrings(talker);
        
        if (talker.getQuestState(getName()) == null)
            newQuestState(talker);
        
        if (talker.isInCombat() || talker.getPvpFlag() == 1 || talker.getKarma() != 0 || talker.isDead() || talker.isFakeDeath() || talker.getOlympiadGameId() >= 0)
            return "L2Rebirth-Block.htm";
        
        return "L2Rebirth.htm";
    }
    
    private void htmlStrings(L2PcInstance player)
    {
        NpcHtmlMessage html = new NpcHtmlMessage(player.getObjectId());
        html.replace("%player%", player.getName());
        player.sendPacket(html);
    }
    
    private void addHero(L2PcInstance player, int days)
    {
        long _heroExpire = 0L;
        
        player.setHero(true);
        player.broadcastUserInfo();
        
        if (days == 0)
        {
            _heroExpire = 3L;
            return;
        }
        _heroExpire = (days == -1 ? 1L : System.currentTimeMillis() + TimeUnit.DAYS.toMillis(days));
        
        try (Connection con = DatabaseFactory.getConnection();
            PreparedStatement stm = con.prepareStatement("UPDATE `characters` SET `hero`=? WHERE `obj_Id`=?"))
        {
            stm.setLong(1, _heroExpire);
            stm.setInt(2, player.getObjectId());
            stm.execute();
        }
        catch (SQLException e)
        {
            _log.warn("[L2Rebirth] addHero(days) error: ", e);
        }
    }
    
    public static void main(String args[])
    {
        new L2Rebirth();
    }
}

 

L2Rebirth.htm

Spoiler

<html><body>
<title>L2Rebirth Manager</title>
<center><br>
Hi <font color=LEVEL>%player%</font><br>
You can be to reborn !<br><br>
<a action="bypass -h Quest L2Rebirth rebirth">Rebirth !</a>
</center>
</body></html>

 

L2Rebirth-Block.htm

Spoiler

<html><body>
<title>L2Rebirth Manager</title>
<center><br>
<font color=LEVEL>%player%</font>, you cant reborn.
</center>
</body></html>

 

Пытаюсь прикрутить его к Acis (382)

Дописал в "gameserver\data\xml\npcs\50000-50999.xml"

Spoiler

        <npc id="99999" idTemplate="30519" name="Bob" title="Rebirth Manager">
        <set name="usingServerSideName" val="true"/>
        <set name="usingServerSideTitle" val="true"/>
        <set name="level" val="70"/>
        <set name="radius" val="7"/>
        <set name="height" val="18"/>
        <set name="rHand" val="0"/>
        <set name="lHand" val="0"/>
        <set name="type" val="L2Rebirth"/>
        <set name="exp" val="0"/>
        <set name="sp" val="0"/>
        <set name="hp" val="2444.46819"/>
        <set name="mp" val="1345.8"/>
        <set name="hpRegen" val="7.5"/>
        <set name="mpRegen" val="2.7"/>
        <set name="pAtk" val="688.86373"/>
        <set name="pDef" val="295.91597"/>
        <set name="mAtk" val="470.40463"/>
        <set name="mDef" val="216.53847"/>
        <set name="crit" val="4"/>
        <set name="atkSpd" val="253"/>
        <set name="str" val="40"/>
        <set name="int" val="21"/>
        <set name="dex" val="30"/>
        <set name="wit" val="20"/>
        <set name="con" val="43"/>
        <set name="men" val="20"/>
        <set name="corpseTime" val="7"/>
        <set name="walkSpd" val="50"/>
        <set name="runSpd" val="120"/>
        <set name="dropHerbGroup" val="0"/>
        <ai type="DEFAULT" ssCount="0" ssRate="0" spsCount="0" spsRate="0" aggro="0" canMove="true" seedable="false"/>
        <skills>
            <skill id="4045" level="1"/>
            <skill id="4416" level="18"/>
        </skills>
    </npc>

 

(дублировал описание стандартного бафера из этого же .xml поменял npc id на тот что был в java указан -"99999", name="Bob" title="Rebirth Manager"> и  <set name="type" val="L2Rebirth"/>)

В "gameserver\data\html\mods" создал папку "L2Rebirth" и поместил туда L2Rebirth.htm и L2Rebirth-Block.htm

А сам L2Rebirth.java нужно прикомпилить? у меня при попытке поместить его в папку с исходниками - в эклипсе показывает крестик

я уже все пути перепробовал - не помогает... тот путь что указан в .java изначально у меня отсутсвует в иерархии в исходниках, но есть такой

aCis_gameserver\java\net\sf\l2j\gameserver\scripting\scripts

Я попробовал поменять в .java начало кода на такой

Spoiler

package net.sf.l2j.gameserver.scripting.scripts.custom;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.concurrent.TimeUnit;

import net.sf.l2j.commons.db.DatabaseFactory;
import net.sf.l2j.gameserver.Announcements;
import net.sf.l2j.gameserver.datatables.ItemTable;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.model.actor.L2Npc;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.quest.Quest;
import net.sf.l2j.gameserver.model.quest.QuestState;
import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.templates.item.L2Item;

 

но эклипс все равно множество крестиков показывает в L2Rebirth.java

Capture.thumb.JPG.5ac053a13684703275f6c9

Изменено пользователем maxlevchenko

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спойлер

package net.sf.l2j.gameserver.scripting.scripts.custom;

import net.sf.l2j.L2DatabaseFactory;
import net.sf.l2j.gameserver.data.ItemTable;
import net.sf.l2j.gameserver.data.SkillTable;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.model.World;
import net.sf.l2j.gameserver.model.actor.Npc;
import net.sf.l2j.gameserver.model.actor.Player;
import net.sf.l2j.gameserver.model.item.kind.Item;
import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.scripting.Quest;
import net.sf.l2j.gameserver.scripting.QuestState;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.concurrent.TimeUnit;

public class Rebirth extends Quest {

    public Rebirth() {
        super(-1, "custom");

        addStartNpc(MANAGER);
        addTalkId(MANAGER);
    }

    private final static int MANAGER = 99999; // Manager's ID.

    private final static boolean GIVE_ITEMS_BEFORE_REBIRTH = true; // Give Items before Rebirth ?
    private final static int GIVE_ITEM_ID = 4037; // Item's ID.
    private final static int GIVE_ITEM_COUNT = 5; // Count.

    private final static boolean TAKE_ITEMS_BEFORE_REBIRTH = false; // Take Items before Rebirth ?
    private final static int TAKE_ITEM_ID = 57; // Item's ID.
    private final static int TAKE_ITEM_COUNT = 50000000; // Count.

    private final static int NEED_LVL = 80; // Need LvL for Rebirth.
    private final static int GET_LVL = 1; // LvL after Rebirth.

    private final static boolean GIVE_SKILLS = true; // Give Skill ?
    private final static int SKILL_ID = 4391; // Skill's ID.
    private final static int SKILL_LVL = 2; // Skill's LvL.

    private final static boolean SET_NOBLE = true; // Give Noblesse  ?

    private final static boolean SET_HERO = true; // Give Hero ?
    private final static int REWARD_HERO_DAYS = -1; // How many days to give the status of Hero ?
    // 0 - Until relogin. -1 - Forever.

    private final static boolean SET_PVP_KILLS = true; // Set count PvP kills to player ?
    private final static int PVP_KILLS = 5; // Count.

    private final static boolean SET_PK_KILLS = true; // Set count PK kills to player ?
    private final static int PK_KILLS = 5; // Count.

    private final static boolean CREATE_EFFECT = true; // Create firework on rebirth ?

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

        L2Skill Skill = SkillTable.getInstance().getInfo(SKILL_ID, SKILL_LVL);
        Item Take_Item = ItemTable.getInstance().getTemplate(TAKE_ITEM_ID);

        if (event.startsWith("rebirth")) {
            World.announceToOnlinePlayers("Player " + player.getName() + " was Reborned!");

            if (player.getStat().getLevel() >= NEED_LVL)
                player.sendMessage("Need LvL for Rebirth " + NEED_LVL);
            else {
                player.sendMessage("Congratulations ! You was reborned !");

                player.getStat().setLevel((byte) (GET_LVL - 1));
                player.getStat().setExp(0);

                if (CREATE_EFFECT) {
                    MagicSkillUse msu = new MagicSkillUse(player, player, 2025, 1, 1, 0);
                    player.sendPacket(msu);
                    player.broadcastPacket(msu);
                }
                if (SET_PVP_KILLS)
                    player.setPvpKills(player.getPvpKills() + PVP_KILLS);
                if (SET_PK_KILLS)
                    player.setPkKills(player.getPkKills() + PK_KILLS);
                if (GIVE_ITEMS_BEFORE_REBIRTH)
                    st.giveItems(GIVE_ITEM_ID, GIVE_ITEM_COUNT);
                if (TAKE_ITEMS_BEFORE_REBIRTH) {
                    if (st.getQuestItemsCount(TAKE_ITEM_ID) >= TAKE_ITEM_COUNT)
                        player.destroyItemByItemId("Take Items", TAKE_ITEM_ID, TAKE_ITEM_COUNT, player, true);
                    else
                        player.sendMessage("You do not have enough " + TAKE_ITEM_COUNT + Take_Item.getName());
                }
                if (GIVE_SKILLS) {
                    player.addSkill(Skill, true);
                    player.sendMessage("You got " + Skill.getName() + ".");
                }
                if (SET_NOBLE) {
                    if (!player.isNoble())
                        player.setNoble(true, true);
                    else
                        player.sendMessage("You already Noblesse.");
                }
                if (SET_HERO) {
                    if (!player.isHero())
                        addHero(player, REWARD_HERO_DAYS);
                    else
                        player.sendMessage("You already Hero.");
                }

                player.broadcastUserInfo();
            }
        }

        return null;
    }

    @Override
    public String onTalk(Npc npc, Player talker) {
        htmlStrings(talker);

        if (talker.getQuestState(getName()) == null)
            newQuestState(talker);

        if (talker.isInCombat() || talker.getPvpFlag() == 1 || talker.getKarma() != 0 || talker.isDead() || talker.isFakeDeath() || talker.getOlympiadGameId() >= 0)
            return "L2Rebirth-Block.htm";

        return "L2Rebirth.htm";
    }

    private void htmlStrings(Player player) {
        NpcHtmlMessage html = new NpcHtmlMessage(player.getObjectId());
        html.replace("%player%", player.getName());
        player.sendPacket(html);
    }

    private void addHero(Player player, int days) {
        long _heroExpire;

        player.setHero(true);
        player.broadcastUserInfo();

        if (days == 0) {
            return;
        }
        _heroExpire = (days == -1 ? 1L : System.currentTimeMillis() + TimeUnit.DAYS.toMillis(days));

        try (Connection con = L2DatabaseFactory.getInstance().getConnection();
             PreparedStatement stm = con.prepareStatement("UPDATE `characters` SET `hero`=? WHERE `obj_Id`=?")) {
            stm.setLong(1, _heroExpire);
            stm.setInt(2, player.getObjectId());
            stm.execute();
        } catch (SQLException e) {
            LOGGER.warn("[L2Rebirth] addHero(days) error: ", e);
        }
    }
}
 

Наш скрипт живет в acis по пути: net.sf.l2j.gameserver.scripting.scripts.custom и его новое название Rebirth

image.png.e36348d45ba74501dafba651f19a478b.png

Спойлер

<html><body>
<title>L2Rebirth Manager</title>
<center><br>
    Hi <font color=LEVEL>%player%</font><br>
    You can be to reborn !<br><br>
    <a action="bypass -h Quest Rebirth rebirth">Rebirth !</a>
</center>
</body></html>
Спойлер

<html><body>
<title>L2Rebirth Manager</title>
<center><br>
    <font color=LEVEL>%player%</font>, you cant reborn.
</center>
</body></html>

Все свои файлы html помещаем в data/scripts/custom/Rebirth

Должно получиться что-то похожее

image.png.50dafa3717aa5d1859917772b08750ba.png

У нашего нпс ("gameserver\data\xml\npcs\50000-50999.xml") мы делаем тип Folk

<set name="type" val="Folk"/>

И создаем обычный html в data/html/default/

С содержанием примерно таким:

Спойлер

<html>
<body>
<font color="">Менеджер перерождений</font><br>
У меня ты можешь переродиться<br>
<a action="bypass -h npc_%objectId%_Quest">Давай, перероди меня полностью</a>
</body></html>

Собственно мы получим адаптированный скрипт под acis 382

Изменено пользователем Evolution

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...