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

Выдача итема на определенном уровне. Скрипт.

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

Приветствую! Очень нужна ваша помощь или подсказка, почему не работает, а именно не выдает итем на определенном (по достижению) уровне. 
Позаимствовал скрипт с одних исходников, все переписал под свою сборку.
хмл пришлось делать новую т.к. не нашел, думаю в ней проблема.

 

Спойлер

package l2p.gameserver.data.xml.holder;

import gnu.trove.map.hash.TIntObjectHashMap;

import l2p.commons.data.xml.AbstractHolder;
import l2p.commons.util.TroveUtils;
import l2p.gameserver.model.PremiumItem;

import java.util.Collections;
import java.util.List;

public class ItemsOnLevelHolder extends AbstractHolder {

    @SuppressWarnings("synthetic-access")
    private static class SingletonHolder {

        protected static final ItemsOnLevelHolder _instance = new ItemsOnLevelHolder();
    }

    public static ItemsOnLevelHolder getInstance() {
        return SingletonHolder._instance;
    }

    private TIntObjectHashMap<List<PremiumItem>> _itemsByLevel = new TIntObjectHashMap<>();

    public void addItems(int level, List<PremiumItem> itemList) {
        _itemsByLevel.put(level, itemList);
    }

    public List<PremiumItem> getPremiumList(int level) {
        if (_itemsByLevel.contains(level)) {
            return _itemsByLevel.get(level);
        }
        return Collections.emptyList();
    }

    @Override
    public int size() {
        return TroveUtils.size(_itemsByLevel);
    }

    @Override
    public void clear() {
        _itemsByLevel.clear();
    }
}
 

 

Спойлер

package l2p.gameserver.data.xml.parser;

import l2p.commons.data.xml.AbstractFileParser;
import l2p.gameserver.Config;
import l2p.gameserver.data.xml.holder.ItemsOnLevelHolder;
import l2p.gameserver.model.PremiumItem;

import org.dom4j.Element;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class ItemsOnLevelParser extends AbstractFileParser<ItemsOnLevelHolder> {

    @SuppressWarnings("synthetic-access")
    private static class SingletonHolder {

        protected static final ItemsOnLevelParser _instance = new ItemsOnLevelParser();
    }

    public static ItemsOnLevelParser getInstance() {
        return SingletonHolder._instance;
    }

    public ItemsOnLevelParser() {
        super(ItemsOnLevelHolder.getInstance());
    }

    @Override
    public File getXMLFile() {
        return new File(Config.DATAPACK_ROOT, "data/xml/other/ItemsOnLevel.xml");
    }

    @Override
    public String getDTDFileName() {
        return "ItemsOnLevel.dtd";
    }

    @Override
    protected void readData(Element rootElement) throws Exception {
        for (Element surveyElement : rootElement.elements("items")) {
            List<PremiumItem> itemList = new ArrayList<>();
            int level = Integer.parseInt(surveyElement.attributeValue("level"));

            for (Element itemElement : surveyElement.elements("item")) {
                int itemId = Integer.parseInt(itemElement.attributeValue("id"));
                int itemCount = Integer.parseInt(itemElement.attributeValue("count"));
                boolean isPremium = Boolean.parseBoolean(itemElement.attributeValue("premium", "false"));

                itemList.add(new PremiumItem(itemId, itemCount, "Система", isPremium));
            }

            getHolder().addItems(level, itemList);
        }
    }
}
 

 

Спойлер

<!ELEMENT list (items)*>
    <!ELEMENT items (item)*>
    <!ATTLIST items
        level CDATA #REQUIRED>
    <!ELEMENT item (#PCDATA)>
    <!ATTLIST item
        count CDATA #REQUIRED
        id CDATA #REQUIRED
        premium CDATA #IMPLIED>

 

Спойлер

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE list SYSTEM "ItemsOnLevel.dtd">
<list>

    <items level="76">
        <item id="57" count="10000000" />
    </items>
    
</list>

 

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


Ссылка на сообщение
Поделиться на другие сайты
49 минут назад, Oliveshka сказал:

Приветствую! Очень нужна ваша помощь или подсказка, почему не работает, а именно не выдает итем на определенном (по достижению) уровне. 
Позаимствовал скрипт с одних исходников, все переписал под свою сборку.
хмл пришлось делать новую т.к. не нашел, думаю в ней проблема.

 

  ItemsOnLevelHolder.java (Показать контент)

package l2p.gameserver.data.xml.holder;

import gnu.trove.map.hash.TIntObjectHashMap;

import l2p.commons.data.xml.AbstractHolder;
import l2p.commons.util.TroveUtils;
import l2p.gameserver.model.PremiumItem;

import java.util.Collections;
import java.util.List;

public class ItemsOnLevelHolder extends AbstractHolder {

    @SuppressWarnings("synthetic-access")
    private static class SingletonHolder {

        protected static final ItemsOnLevelHolder _instance = new ItemsOnLevelHolder();
    }

    public static ItemsOnLevelHolder getInstance() {
        return SingletonHolder._instance;
    }

    private TIntObjectHashMap<List<PremiumItem>> _itemsByLevel = new TIntObjectHashMap<>();

    public void addItems(int level, List<PremiumItem> itemList) {
        _itemsByLevel.put(level, itemList);
    }

    public List<PremiumItem> getPremiumList(int level) {
        if (_itemsByLevel.contains(level)) {
            return _itemsByLevel.get(level);
        }
        return Collections.emptyList();
    }

    @Override
    public int size() {
        return TroveUtils.size(_itemsByLevel);
    }

    @Override
    public void clear() {
        _itemsByLevel.clear();
    }
}
 

 

  ItemsOnLevelParser.java (Скрыть контент)

package l2p.gameserver.data.xml.parser;

import l2p.commons.data.xml.AbstractFileParser;
import l2p.gameserver.Config;
import l2p.gameserver.data.xml.holder.ItemsOnLevelHolder;
import l2p.gameserver.model.PremiumItem;

import org.dom4j.Element;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class ItemsOnLevelParser extends AbstractFileParser<ItemsOnLevelHolder> {

    @SuppressWarnings("synthetic-access")
    private static class SingletonHolder {

        protected static final ItemsOnLevelParser _instance = new ItemsOnLevelParser();
    }

    public static ItemsOnLevelParser getInstance() {
        return SingletonHolder._instance;
    }

    public ItemsOnLevelParser() {
        super(ItemsOnLevelHolder.getInstance());
    }

    @Override
    public File getXMLFile() {
        return new File(Config.DATAPACK_ROOT, "data/xml/other/ItemsOnLevel.xml");
    }

    @Override
    public String getDTDFileName() {
        return "ItemsOnLevel.dtd";
    }

    @Override
    protected void readData(Element rootElement) throws Exception {
        for (Element surveyElement : rootElement.elements("items")) {
            List<PremiumItem> itemList = new ArrayList<>();
            int level = Integer.parseInt(surveyElement.attributeValue("level"));

            for (Element itemElement : surveyElement.elements("item")) {
                int itemId = Integer.parseInt(itemElement.attributeValue("id"));
                int itemCount = Integer.parseInt(itemElement.attributeValue("count"));
                boolean isPremium = Boolean.parseBoolean(itemElement.attributeValue("premium", "false"));

                itemList.add(new PremiumItem(itemId, itemCount, "Система", isPremium));
            }

            getHolder().addItems(level, itemList);
        }
    }
}
 

 

  ItemsOnLevel.dtd (Скрыть контент)

<!ELEMENT list (items)*>
    <!ELEMENT items (item)*>
    <!ATTLIST items
        level CDATA #REQUIRED>
    <!ELEMENT item (#PCDATA)>
    <!ATTLIST item
        count CDATA #REQUIRED
        id CDATA #REQUIRED
        premium CDATA #IMPLIED>

 

  ItemsOnLevel.xml (Скрыть контент)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE list SYSTEM "ItemsOnLevel.dtd">
<list>

    <items level="76">
        <item id="57" count="10000000" />
    </items>
    
</list>

 

Собственно а сам скрипт выдачи па где?)

Парсер парсит хмл, холдер выступает в роли хранилища.

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


Ссылка на сообщение
Поделиться на другие сайты
11 минут назад, Solution сказал:

Собственно а сам скрипт выдачи па где?)

Парсер парсит хмл, холдер выступает в роли хранилища.

Вы о нём? 

Спойлер

package l2p.gameserver.model;

/**
 * @author Gnacik
 * @corrected by n0nam3
 *
 */
public class PremiumItem {

    private int _itemId;
    private long _count;
    private String _sender;
    private String _senderName;
    private boolean _isPremium;

    public PremiumItem(int itemid, long count, String sender) {
        _itemId = itemid;
        _count = count;
        _sender = sender;
    }

    public PremiumItem(int itemid, long count, String senderName, boolean isPremium) {
        _itemId = itemid;
        _count = count;
        _senderName = senderName;
        _isPremium = isPremium;
    }

    public void updateCount(long newcount) {
        _count = newcount;
    }

    public int getItemId() {
        return _itemId;
    }

    public long getCount() {
        return _count;
    }

    public String getSender() {
        return _sender;
    }

    public boolean isPremium() {
        return _isPremium;
    }
}
 

 

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


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

Нет. Это обычная pojo.
Вам нужна логика, скорее всего дополнительный listener, который вешается на плеера.
В общем посмотрите в коде где у вас происходит выдача нового уровня, уже от туда можно копать, ибо в любом случае там начало всего.

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


Ссылка на сообщение
Поделиться на другие сайты
9 часов назад, Oliveshka сказал:

Приветствую! Очень нужна ваша помощь или подсказка, почему не работает, а именно не выдает итем на определенном (по достижению) уровне. 
Позаимствовал скрипт с одних исходников, все переписал под свою сборку.
хмл пришлось делать новую т.к. не нашел, думаю в ней проблема.

 

  ItemsOnLevelHolder.java (Показать контент)

package l2p.gameserver.data.xml.holder;

import gnu.trove.map.hash.TIntObjectHashMap;

import l2p.commons.data.xml.AbstractHolder;
import l2p.commons.util.TroveUtils;
import l2p.gameserver.model.PremiumItem;

import java.util.Collections;
import java.util.List;

public class ItemsOnLevelHolder extends AbstractHolder {

    @SuppressWarnings("synthetic-access")
    private static class SingletonHolder {

        protected static final ItemsOnLevelHolder _instance = new ItemsOnLevelHolder();
    }

    public static ItemsOnLevelHolder getInstance() {
        return SingletonHolder._instance;
    }

    private TIntObjectHashMap<List<PremiumItem>> _itemsByLevel = new TIntObjectHashMap<>();

    public void addItems(int level, List<PremiumItem> itemList) {
        _itemsByLevel.put(level, itemList);
    }

    public List<PremiumItem> getPremiumList(int level) {
        if (_itemsByLevel.contains(level)) {
            return _itemsByLevel.get(level);
        }
        return Collections.emptyList();
    }

    @Override
    public int size() {
        return TroveUtils.size(_itemsByLevel);
    }

    @Override
    public void clear() {
        _itemsByLevel.clear();
    }
}
 

 

  ItemsOnLevelParser.java (Показать контент)

package l2p.gameserver.data.xml.parser;

import l2p.commons.data.xml.AbstractFileParser;
import l2p.gameserver.Config;
import l2p.gameserver.data.xml.holder.ItemsOnLevelHolder;
import l2p.gameserver.model.PremiumItem;

import org.dom4j.Element;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class ItemsOnLevelParser extends AbstractFileParser<ItemsOnLevelHolder> {

    @SuppressWarnings("synthetic-access")
    private static class SingletonHolder {

        protected static final ItemsOnLevelParser _instance = new ItemsOnLevelParser();
    }

    public static ItemsOnLevelParser getInstance() {
        return SingletonHolder._instance;
    }

    public ItemsOnLevelParser() {
        super(ItemsOnLevelHolder.getInstance());
    }

    @Override
    public File getXMLFile() {
        return new File(Config.DATAPACK_ROOT, "data/xml/other/ItemsOnLevel.xml");
    }

    @Override
    public String getDTDFileName() {
        return "ItemsOnLevel.dtd";
    }

    @Override
    protected void readData(Element rootElement) throws Exception {
        for (Element surveyElement : rootElement.elements("items")) {
            List<PremiumItem> itemList = new ArrayList<>();
            int level = Integer.parseInt(surveyElement.attributeValue("level"));

            for (Element itemElement : surveyElement.elements("item")) {
                int itemId = Integer.parseInt(itemElement.attributeValue("id"));
                int itemCount = Integer.parseInt(itemElement.attributeValue("count"));
                boolean isPremium = Boolean.parseBoolean(itemElement.attributeValue("premium", "false"));

                itemList.add(new PremiumItem(itemId, itemCount, "Система", isPremium));
            }

            getHolder().addItems(level, itemList);
        }
    }
}
 

 

  ItemsOnLevel.dtd (Показать контент)

<!ELEMENT list (items)*>
    <!ELEMENT items (item)*>
    <!ATTLIST items
        level CDATA #REQUIRED>
    <!ELEMENT item (#PCDATA)>
    <!ATTLIST item
        count CDATA #REQUIRED
        id CDATA #REQUIRED
        premium CDATA #IMPLIED>

 

  ItemsOnLevel.xml (Показать контент)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE list SYSTEM "ItemsOnLevel.dtd">
<list>

    <items level="76">
        <item id="57" count="10000000" />
    </items>
    
</list>

 

1) это просто парсер ваш серв не понемает кому выдават и когда(короче null)

2)вам надо найти скрипт от него для выдачи все этого смотрите у вас где вы взяли его сам парсер 

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


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

Вам нужно найти метод setLevel(). Поищите, найдите логику, отталкиваясь от setLevel() и после этой строчки добавьте свою выдачу ;)

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


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

Мужики, наверное не решим этот трабл из-за нехватки моих знаний.

Сам конфиг выведен, в конфиге стоит true.

Спойлер

    public static boolean ITEMS_ON_LEVEL_ENABLED;

        // Items on Level
        ITEMS_ON_LEVEL_ENABLED = servicesSettings.getProperty("ItemsOnLevel", false);

 

 

Поискал лвлАп, никаких намёков.
 

Спойлер

package l2p.gameserver.model;

/**
 * This class ...
 *
 * @author NightMarez
 * @version $Revision: 1.2.2.1.2.1 $ $Date: 2005/03/27 15:29:32 $
 */
public class LvlupData {

    private int _classid;
    private int _classLvl;
    private double _classHpAdd;
    private double _classHpBase;
    private double _classHpModifier;
    private double _classCpAdd;
    private double _classCpBase;
    private double _classCpModifier;
    private double _classMpAdd;
    private double _classMpBase;
    private double _classMpModifier;

    /**
     * @return Returns the _classHpAdd.
     */
    public double get_classHpAdd() {
        return _classHpAdd;
    }

    /**
     * @param hpAdd
     * The _classHpAdd to set.
     */
    public void set_classHpAdd(double hpAdd) {
        _classHpAdd = hpAdd;
    }

    /**
     * @return Returns the _classHpBase.
     */
    public double get_classHpBase() {
        return _classHpBase;
    }

    /**
     * @param hpBase
     * The _classHpBase to set.
     */
    public void set_classHpBase(double hpBase) {
        _classHpBase = hpBase;
    }

    /**
     * @return Returns the _classHpModifier.
     */
    public double get_classHpModifier() {
        return _classHpModifier;
    }

    /**
     * @param hpModifier
     * The _classHpModifier to set.
     */
    public void set_classHpModifier(double hpModifier) {
        _classHpModifier = hpModifier;
    }

    /**
     * @return Returns the _classCpAdd.
     */
    public double get_classCpAdd() {
        return _classCpAdd;
    }

    /**
     * @param hpAdd
     * The _classCpAdd to set.
     */
    public void set_classCpAdd(double cpAdd) {
        _classCpAdd = cpAdd;
    }

    /**
     * @return Returns the _classCpBase.
     */
    public double get_classCpBase() {
        return _classCpBase;
    }

    /**
     * @param hpBase
     * The _classCpBase to set.
     */
    public void set_classCpBase(double cpBase) {
        _classCpBase = cpBase;
    }

    /**
     * @return Returns the _classCpModifier.
     */
    public double get_classCpModifier() {
        return _classCpModifier;
    }

    /**
     * @param cpModifier
     * The _classCpModifier to set.
     */
    public void set_classCpModifier(double cpModifier) {
        _classCpModifier = cpModifier;
    }

    /**
     * @return Returns the _classid.
     */
    public int get_classid() {
        return _classid;
    }

    /**
     * @param _classid
     * The _classid to set.
     */
    public void set_classid(int _classid) {
        this._classid = _classid;
    }

    /**
     * @return Returns the _classLvl.
     */
    public int get_classLvl() {
        return _classLvl;
    }

    /**
     * @param lvl
     * The _classLvl to set.
     */
    public void set_classLvl(int lvl) {
        _classLvl = lvl;
    }

    /**
     * @return Returns the _classMpAdd.
     */
    public double get_classMpAdd() {
        return _classMpAdd;
    }

    /**
     * @param mpAdd
     * The _classMpAdd to set.
     */
    public void set_classMpAdd(double mpAdd) {
        _classMpAdd = mpAdd;
    }

    /**
     * @return Returns the _classMpBase.
     */
    public double get_classMpBase() {
        return _classMpBase;
    }

    /**
     * @param mpBase
     * The _classMpBase to set.
     */
    public void set_classMpBase(double mpBase) {
        _classMpBase = mpBase;
    }

    /**
     * @return Returns the _classMpModifier.
     */
    public double get_classMpModifier() {
        return _classMpModifier;
    }

    /**
     * @param mpModifier
     * The _classMpModifier to set.
     */
    public void set_classMpModifier(double mpModifier) {
        _classMpModifier = mpModifier;
    }
}

 

Дополнительно посмотрел, такая же ситуация.
 

Спойлер

package l2p.gameserver.model.base;

import l2p.gameserver.Config;

public class Experience {

    public final static long LEVEL[] = {-1L, // level 0 (unreachable)
        /*
         * Lvl:1
         */ 0L, /*
         * Lvl:2
         */ 68L, /*
         * Lvl:3
         */ 363L, /*
         * Lvl:4
         */ 1168L,
        /*
         * Lvl:5
         */ 2884L, /*
         * Lvl:6
         */ 6038L, /*
         * Lvl:7
         */ 11287L,
        /*
         * Lvl:8
         */ 19423L, /*
         * Lvl:9
         */ 31378L, /*
         * Lvl:10
         */ 48229L,
        /*
         * Lvl:11
         */ 71202L, /*
         * Lvl:12
         */ 101677L, /*
         * Lvl:13
         */ 141193L,
        /*
         * Lvl:14
         */ 191454L, /*
         * Lvl:15
         */ 254330L, /*
         * Lvl:16
         */ 331867L,
        /*
         * Lvl:17
         */ 426288L, /*
         * Lvl:18
         */ 540000L, /*
         * Lvl:19
         */ 675596L,
        /*
         * Lvl:20
         */ 835862L, /*
         * Lvl:21
         */ 1023784L, /*
         * Lvl:22
         */ 1242546L,
        /*
         * Lvl:23
         */ 1495543L, /*
         * Lvl:24
         */ 1786379L, /*
         * Lvl:25
         */ 2118876L,
        /*
         * Lvl:26
         */ 2497077L, /*
         * Lvl:27
         */ 2925250L, /*
         * Lvl:28
         */ 3407897L,
        /*
         * Lvl:29
         */ 3949754L, /*
         * Lvl:30
         */ 4555796L, /*
         * Lvl:31
         */ 5231246L,
        /*
         * Lvl:32
         */ 5981576L, /*
         * Lvl:33
         */ 6812513L, /*
         * Lvl:34
         */ 7730044L,
        /*
         * Lvl:35
         */ 8740422L, /*
         * Lvl:36
         */ 9850166L, /*
         * Lvl:37
         */ 11066072L,
        /*
         * Lvl:38
         */ 12395215L, /*
         * Lvl:39
         */ 13844951L, /*
         * Lvl:40
         */ 15422929L,
        /*
         * Lvl:41
         */ 17137087L, /*
         * Lvl:42
         */ 18995665L, /*
         * Lvl:43
         */ 21007203L,
        /*
         * Lvl:44
         */ 23180550L, /*
         * Lvl:45
         */ 25524868L, /*
         * Lvl:46
         */ 28049635L,
        /*
         * Lvl:47
         */ 30764654L, /*
         * Lvl:48
         */ 33680052L, /*
         * Lvl:49
         */ 36806289L,
        /*
         * Lvl:50
         */ 40154162L, /*
         * Lvl:51
         */ 45525133L, /*
         * Lvl:52
         */ 51262490L,
        /*
         * Lvl:53
         */ 57383988L, /*
         * Lvl:54
         */ 63907911L, /*
         * Lvl:55
         */ 70853089L,
        /*
         * Lvl:56
         */ 80700831L, /*
         * Lvl:57
         */ 91162654L, /*
         * Lvl:58
         */ 102265881L,
        /*
         * Lvl:59
         */ 114038596L, /*
         * Lvl:60
         */ 126509653L, /*
         * Lvl:61
         */ 146308200L,
        /*
         * Lvl:62
         */ 167244337L, /*
         * Lvl:63
         */ 189364894L, /*
         * Lvl:64
         */ 212717908L,
        /*
         * Lvl:65
         */ 237352644L, /*
         * Lvl:66
         */ 271975263L, /*
         * Lvl:67
         */ 308443198L,
        /*
         * Lvl:68
         */ 346827154L, /*
         * Lvl:69
         */ 387199547L, /*
         * Lvl:70
         */ 429634523L,
        /*
         * Lvl:71
         */ 474207979L, /*
         * Lvl:72
         */ 532694979L, /*
         * Lvl:73
         */ 606322775L,
        /*
         * Lvl:74
         */ 696381369L, /*
         * Lvl:75
         */ 804225364L, /*
         * Lvl:76
         */ 931275828L,
        /*
         * Lvl:77
         */ 1151275834L, /*
         * Lvl:78
         */ 1511275834L, /*
         * Lvl:79
         */ 2099275834L,
        /*
         * Lvl:80
         */ 4200000000L, /*
         * Lvl:81
         */ 6300000000L, /*
         * Lvl:82
         */ 8820000000L,
        /*
         * Lvl:83
         */ 11844000000L, /*
         * Lvl:84
         */ 15472800000L, /*
         * Lvl:85
         */ 19827360000L,
        /*
         * Lvl:86
         */ 25314105600L, /*
         * Lvl:87
         */ 32211728640L, /*
         * Lvl:88
         */ 40488876288L,
        /*
         * Lvl:89
         */ 50421453466L, /*
         * Lvl:90
         */ 63424099953L, /*
         * Lvl:91
         */ 79027275737L,
        /*
         * Lvl:92
         */ 97751086678L, /*
         * Lvl:93
         */ 121155850355L, /*
         * Lvl:94
         */ 149241566767L,
        /*
         * Lvl:95
         */ 182944426462L, /*
         * Lvl:96
         */ 225005595360L, /*
         * Lvl:97
         */ 275478998038L,
        /*
         * Lvl:98
         */ 336047081252L, /*
         * Lvl:99
         */ 408728781109L,
        /*
         * Lvl:100
         */ 495946820937L};

    /**
     * Return PenaltyModifier (can use in all cases)
     *
     * @param count
     * - how many times <percents> will be substructed
     * @param percents
     * - percents to substruct
     *
     * @author Styx
     */

    /*
     * This is for fine view only ;)
     *
     * public final static double penaltyModifier(int count, int percents) { int
     * allPercents = 100; int allSubstructedPercents = count * percents; int
     * penaltyInPercents = allPercents - allSubstructedPercents; double penalty
     * = penaltyInPercents / 100.0; return penalty; }
     */
    public static double penaltyModifier(long count, double percents) {
        return Math.max(1. - count * percents / 100, 0);
    }

    /**
     * Максимальный достижимый уровень
     */
    public static int getMaxLevel() {
        return Config.ALT_MAX_LEVEL;
    }

    /**
     * Максимальный уровень для саба
     */
    public static int getMaxSubLevel() {
        return Config.ALT_MAX_SUB_LEVEL;
    }

    public static int getLevel(long thisExp) {
        int level = 0;
        for (int i = 0; i < LEVEL.length; i++) {
            long exp = LEVEL[i];
            if (thisExp >= exp) {
                level = i;
            }
        }
        return level;
    }

    public static long getExpForLevel(int lvl) {
        if (lvl >= Experience.LEVEL.length) {
            return 0;
        }
        return Experience.LEVEL[lvl];
    }

    public static double getExpPercent(int level, long exp) {
        return (exp - getExpForLevel(level)) / ((getExpForLevel(level + 1) - getExpForLevel(level)) / 100.0D) * 0.01D;
    }
}

 

Прослушку на лвл нашел тут

Спойлер

package l2p.gameserver.listener.actor.player;

import l2p.gameserver.listener.PlayerListener;
import l2p.gameserver.model.Player;

public abstract interface OnChangeLevelListener extends PlayerListener {

    public abstract void onChangeLevel(Player paramPlayer, int oldLvl, int newLvl);
}

 

Я бы не сказал что это сильная потеря, но хотелось бы научиться реализовывать такие штуки. 

 

 

 

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


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

ты лушее отписал бы откуда выдернута этот  все а там уже посмотреть можно под казать что где 

  • Like 1

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


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

Тыкнули мне где файл скрипта лежит, всё добавил, скомпилировал - запустилось без ошибок. 
Но итемы всё равно не выдаёт.  Пробовал и на ПА и без.
 

Спойлер

package custom;

import l2p.gameserver.Config;
import l2p.gameserver.data.xml.holder.ItemsOnLevelHolder;
import l2p.gameserver.listener.actor.player.OnChangeLevelListener;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.PremiumItem;
import l2p.gameserver.model.actor.listener.CharListenerList;
import l2p.gameserver.model.actor.listener.PlayerListenerList;
import l2p.gameserver.serverpackets.ExNotifyPremiumItem;
import l2p.gameserver.scripts.ScriptFile;

import java.util.List;

public class ItemsOnLevel implements ScriptFile, OnChangeLevelListener {

    @Override
    public void onLoad() {
        PlayerListenerList.addGlobal(this);
    }

    @Override
    public void onReload() {
    }

    @Override
    public void onShutdown() {
    }

    @Override
    public void onChangeLevel(Player player, int oldLvl, int newLvl) {
        if (!Config.ITEMS_ON_LEVEL_ENABLED) {
            return;
        }

        boolean notify = false;

        for (int level = 1; level <= newLvl; level++) {
            if (player.getVarB("ItemsOnLevel_" + level, false)) {
                continue;
            }

            List<PremiumItem> itemList = ItemsOnLevelHolder.getInstance().getPremiumList(level);

            if (itemList.isEmpty()) {
                continue;
            }

            for (PremiumItem item : itemList) {
                if (!item.isPremium() || player.hasBonus()) {
                    notify = true;
                    player.addPremiumItem(item);
                }
            }

            player.setVar("ItemsOnLevel_" + level, "true", -1);
        }

        if (notify) {
            player.sendPacket(ExNotifyPremiumItem.STATIC);
        }
    }
}

 

 

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


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

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

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

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

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

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

Войти

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

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

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

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

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