Дроп лист в лостах

Psycho

Просветленный
Модератор
Орден Золотого Заката
Победитель в номинации 2023
Победитель в номинации 2022
Победитель в номинации 2021
Участник Новогоднего Фонда 2021
Неукротимое пламя
Старожил II степени
Победитель в номинации 2020
Победитель в номинации 2019
Знаток великого письма
Знаток письма
Веселый флудер
Мастер реакций
Любитель реакций
Знаток Lineage2
Старожил I степени
Победитель в номинации 2017
Победитель в номинации 2016
Медаль за активность на Форуме
За веру и верность форуму
Сообщения
4 456
Розыгрыши
1
Решения
3
Репутация
4 331
Реакции
2 806
Баллы
2 438
Как я понял, дроп лист прописан каждому нпц отдельно.
Вопрос, как быть, если необходимо удались все ресурсы, из дроп листа, у всех нпц? Каждого лопатить что ли? Мб есть выход?
Когда дроп лист в бд, проблема решается запросом, но здесь он в xml у каждого нпц.
Код:
<npc id="22852" name="Dragon Guard" title="">
        <set name="aggroRange" value="400" />
        <set name="ai_type" value="Fighter" />
        <set name="baseAtkRange" value="80" />
        <set name="baseAtkType" value="POLE" />
        <set name="baseCON" value="43" />
        <set name="baseCritRate" value="40" />
        <set name="baseDEX" value="30" />
        <set name="baseHpMax" value="55817.8012671518" />
        <set name="baseHpRate" value="2" />
        <set name="baseHpReg" value="187.410040552143" />
        <set name="baseINT" value="21" />
        <set name="baseMAtk" value="8707.81891430402" />
        <set name="baseMAtkSpd" value="333" />
        <set name="baseMDef" value="635.378064" />
        <set name="baseMEN" value="20" />
        <set name="baseMpMax" value="1846.8" />
        <set name="baseMpReg" value="3" />
        <set name="basePAtk" value="12008.0135566142" />
        <set name="basePAtkSpd" value="253" />
        <set name="basePDef" value="578.861024" />
        <set name="baseRunSpd" value="200" />
        <set name="baseSTR" value="40" />
        <set name="baseShldDef" value="0" />
        <set name="baseShldRate" value="0" />
        <set name="baseWIT" value="20" />
        <set name="baseWalkSpd" value="30" />
        <set name="collision_height" value="55.0" />
        <set name="collision_radius" value="40.0" />
        <set name="corpse_time" value="7" />
        <set name="level" value="85" />
        <set name="race" value="DRAGON" />
        <set name="rewardExp" value="1031278" />
        <set name="rewardRp" value="0" />
        <set name="rewardSp" value="103445" />
        <set name="soulshot_count" value="0" />
        <set name="spiritshot_count" value="0" />
        <set name="type" value="Monster" />
        <ai_params>
            <set name="noRandomWalk" value="true" />
        </ai_params>
        <faction name="loa_antharas_clan" range="400"/>
        <skills>
            <skill id="4408" level="10" />    <!--HP Increase (2x)-->
            <skill id="4409" level="1" />    <!--MP Increase (1x)-->
            <skill id="4410" level="16" />    <!--Very Strong P. Atk.-->
            <skill id="4411" level="15" />    <!--Strong M. Atk.-->
            <skill id="4412" level="16" />    <!--Very Strong P. Def.-->
            <skill id="4413" level="5" />    <!--Very Weak M. Def.-->
            <skill id="4414" level="2" />    <!--Standard Type-->
            <skill id="4415" level="11" />    <!--Spears-->
            <skill id="4416" level="10" />    <!--Dragons-->
            <skill id="5465" level="1" />    <!--Earth Attacks-->
            <skill id="6768" level="1" />    <!--Stun Attack-->
        </skills>
        <rewardlist type="RATED_GROUPED">
            <group chance="66.0">
                <reward item_id="57" min="45317" max="105714" chance="100.0000" />    <!--Adena-->
            </group>
            <group chance="0.0293">
                <reward item_id="13462" min="1" max="1" chance="8.3929" />    <!--Vesper Stormer-->
                <reward item_id="13461" min="1" max="1" chance="8.3929" />    <!--Vesper Fighter-->
                <reward item_id="13893" min="1" max="1" chance="41.9647" />    <!--Sealed Holy Spirit's Cloak-->
                <reward item_id="14108" min="1" max="1" chance="41.2495" />    <!--Sealed Vesper Gaiters-->
            </group>
            <group chance="44.3337">
                <reward item_id="1879" min="3" max="9" chance="33.9823" />    <!--Cokes-->
                <reward item_id="1885" min="2" max="6" chance="25.4868" />    <!--High-Grade Suede-->
                <reward item_id="9628" min="1" max="1" chance="9.5950" />    <!--Leonard-->
                <reward item_id="9630" min="1" max="1" chance="6.4388" />    <!--Orichalcum-->
                <reward item_id="9629" min="1" max="1" chance="5.3190" />    <!--Adamantine-->
                <reward item_id="14166" min="1" max="1" chance="5.9100" />    <!--Life Stone -  Level 84-->
                <reward item_id="14167" min="1" max="1" chance="1.4757" />    <!--Mid-Grade Life Stone -  Level 84-->
                <reward item_id="14168" min="1" max="1" chance="0.1476" />    <!--High-Grade Life Stone -  Level 84-->
                <reward item_id="9554" min="1" max="1" chance="0.2447" />    <!--Earth Crystal-->
                <reward item_id="9548" min="1" max="1" chance="9.7869" />    <!--Earth Stone-->
                <reward item_id="15644" min="1" max="1" chance="0.7297" />    <!--Vesper Thrower Piece-->
                <reward item_id="15642" min="1" max="1" chance="0.7205" />    <!--Vesper Caster Piece-->
                <reward item_id="9626" min="1" max="1" chance="0.1630" />    <!--Giant's Codex - Discipline-->
            </group>
        </rewardlist>
        <rewardlist type="SWEEP">
            <reward item_id="9628" min="1" max="1" chance="84.1937" />    <!--Leonard-->
            <reward item_id="2134" min="1" max="1" chance="21.4694" />    <!--Gemstone S-->
            <reward item_id="15669" min="1" max="1" chance="72.7776" />    <!--Sealed Vesper Verteidiger Piece-->
            <reward item_id="13459" min="1" max="1" chance="0.0150" />    <!--Vesper Buster-->
        </rewardlist>
        <attributes>
            <attack attribute="unholy" value="250" />
            <defence attribute="fire" value="220" />
            <defence attribute="water" value="220" />
            <defence attribute="wind" value="220" />
            <defence attribute="earth" value="220" />
            <defence attribute="holy" value="170" />
            <defence attribute="unholy" value="250" />
        </attributes>
    </npc>
 
Не видел у него подобного. У него только добавление дропа для НПЦ.
Хотя вот нашел. Оно?
Код:
# Айди вещей которые будут удалены в моба
# (пример 57,4356,4355.....)
ItemId = 0
оно, только это по айди, но в твоем случаи нужно по типу
 

Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
А можно сделать еще проще, заблокировать весь дроп. Кроме = КОНФИГ
 
Ну я так и написал выше:)
 
Ну мб. Только толку мне от сборки, если у меня будет не совсем хф.)
//Здесь был неправильный код.

проверяй, ибо я сплю уже. Есть вероятность того что я проебался.
 
Последнее редактирование:
Код:
public void removeResourseDrop()
    {
        for (NpcTemplate npc : _allTemplates)
            if (npc != null && !npc.getRewards().isEmpty())
                npc.getRewards().remove(EtcItemType.MATERIAL, EtcItemType.RECIPE);
    }
Код:
public void addData(RewardData item)
    {
        if(item.getItem().isAdena())
            _isAdena = true;
        NpcHolder.getInstance().removeResourseDrop();
        _chanceSum += item.getChance();
        item.setChanceInGroup(_chanceSum);
        _items.add(item);
      
    }

проверяй, ибо я сплю уже. Есть вероятность того что я проебался.
Спасиб, но смогу проверить после устранения ерроров. :D
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Код:
public void removeResourseDrop()
    {
        for (NpcTemplate npc : _allTemplates)
            if (npc != null && !npc.getRewards().isEmpty())
                npc.getRewards().remove(EtcItemType.MATERIAL, EtcItemType.RECIPE);
    }
Код:
public void addData(RewardData item)
    {
        if(item.getItem().isAdena())
            _isAdena = true;
        NpcHolder.getInstance().removeResourseDrop();
        _chanceSum += item.getChance();
        item.setChanceInGroup(_chanceSum);
        _items.add(item);
      
    }

проверяй, ибо я сплю уже. Есть вероятность того что я проебался.
Господи, зачем так? при каждом добавлении итема в группу будем гонять все темплейты нпцов? Не проще просто не добавлять итем этот? по типу?

p.s. а каким образом из коллекции (которую вернёт npc.getRewards()) удалите итемы по их типу?)
 
Спасиб, но смогу проверить после устранения ерроров. :D
пиши в скуп хул
Господи, зачем так? при каждом добавлении итема в группу будем гонять все темплейты нпцов? Не проще просто не добавлять итем этот? по типу?

p.s. а каким образом из коллекции (которую вернёт npc.getRewards()) удалите итемы по их типу?)
спал проснулся сделал шляпу, уснул дальше. потом перепилю.
 
Походу твоего скайпа у меня нет.
На сайте жопакода))0

Мангол попросил всем передать привет и вот этот код
Код:
package org.mmocore.gameserver;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.mmocore.gameserver.data.xml.holder.ItemHolder;
import org.mmocore.gameserver.data.xml.parser.ItemParser;
import org.mmocore.gameserver.data.xml.parser.OptionDataParser;
import org.mmocore.gameserver.tables.SkillTable;
import org.mmocore.gameserver.templates.item.ItemTemplate;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Collection;

/**
 * @author Mangol
 */
public final class RemoveNpcDrop {
    public static void main(String[] args) throws IOException, DocumentException {
        SkillTable.getInstance().load();
        OptionDataParser.getInstance().load();
        ItemParser.getInstance().load();
        final Collection<File> files = FileUtils.listFiles(new File("./data/npc/"), FileFilterUtils.suffixFileFilter(".xml"), FileFilterUtils.directoryFileFilter());
        for(File f : files) {
            if(!f.isHidden()) {
                final SAXReader reader = new SAXReader();
                reader.setValidation(false);
                Document document = reader.read(f);
                for(final Element element : document.getRootElement().elements()) {
                    final int npcId = Integer.parseInt(element.attributeValue("id"));
                    element.elements().stream().filter(block -> block.getName().equalsIgnoreCase("rewardlist")).forEach(block -> {
                        for(Element e : block.elements()) {
                            if(e.getName().equalsIgnoreCase("group")) {
                                for(Element r : e.elements()) {
                                    int itemId = Integer.parseInt(r.attributeValue("item_id"));
                                    ItemTemplate template = ItemHolder.getInstance().getTemplate(itemId);
                                    if(template == null)
                                        continue;
                                    if(template.isHerb() || template.isCommonItem() || template.isRecipe() || template.getItemClass() == ItemTemplate.ItemClass.MATHERIALS || template.getItemClass() == ItemTemplate.ItemClass.SPELLBOOKS)
                                        r.detach();
                                    if(e.elements().isEmpty())
                                        e.detach();
                                }
                            }
                            else if(e.getName().equalsIgnoreCase("reward")) {
                                int itemId = Integer.parseInt(e.attributeValue("item_id"));
                                ItemTemplate template = ItemHolder.getInstance().getTemplate(itemId);
                                if(template == null)
                                    continue;
                                if(template.isHerb() || template.isCommonItem() || template.isRecipe() || template.getItemClass() == ItemTemplate.ItemClass.MATHERIALS || template.getItemClass() == ItemTemplate.ItemClass.SPELLBOOKS)
                                    e.detach();
                            }
                        }
                        if(block.elements().isEmpty())
                            block.detach();
                    });
                }
                OutputFormat of = new OutputFormat("\t", true);
                of.setOmitEncoding(false);
                of.setEncoding("UTF-8");
                XMLWriter writer = null;
                try {

                    String name = "/".split(document.getName())["/".split(document.getName()).length - 1];
                    writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("./data/new_npc/" + name), "UTF8"), of);
                    writer.write(document);
                }
                finally {
                    if(writer != null) {
                        writer.flush();
                        writer.close();
                    }
                }
            }
        }
    }
}
 
Последнее редактирование модератором:
Назад
Сверху Снизу