Welcome to RUSaCis - эмулятор Interlude

Присоединяйтесь к нам прямо сейчас, чтобы получить доступ ко всем нашим возможностям. После регистрации и входа в систему вы сможете создавать темы, публиковать ответы в существующих темах, давать репутацию пользователям - так же приобрести исходный код. Это также быстро, так чего же вы ждете?

Заточка за деньги

suplex12

Вассал
Регистрация
25 Сен 2024
Сообщения
45
Реакции
4
Баллы
8
RaCoin
5
Есть ли какой-нибудь вариант сделать возможность заточки вещи за определенную сумму?
например в инвентаре пушка +5, хочу через альтб заточить на +6 за определенные койны.
Бум, бам и заточил.

есть у кого какие мысли?
 

Tazarr

Бродяга
Регистрация
20 Сен 2025
Сообщения
11
Реакции
11
Баллы
3
RaCoin
5
Не проще тогда сделать платную точку со 100 шансом?
А если цена не фиксированная, то тут кастомный мод, в принципе не думаю, что сверхсложно сделать
 

ForceUnleashed

Виконт
Команда форума
Leader
INTERLUDE
CLASSIC
Developer
CLASSIC
INTERLUDE
Регистрация
21 Авг 2020
Сообщения
1,030
Решения
6
Реакции
851
Баллы
113
Веб-сайт
rusacis.com
RaCoin
10
А что сложного? Создаете условие где снимаете опр. плату за заточку и делаете setEnchantLevel +1 все.
 

suplex12

Вассал
Регистрация
25 Сен 2024
Сообщения
45
Реакции
4
Баллы
8
RaCoin
5
А что сложного? Создаете условие где снимаете опр. плату за заточку и делаете setEnchantLevel +1 все.
Никогда этого не делал ещё, впервые всегда это тёмный лес.
Второе, это хотелось бы от уровня заточки повышать цену за каждые +1. (без этого проще продавать кристальными точками и не париться)
Есть примеры на основе чего сделать это?
 

Flor

Бродяга
Регистрация
24 Дек 2021
Сообщения
3
Реакции
2
Баллы
3
RaCoin
0
Это пример кода, который тебе нужен для заточки итема за любую валюту (57; // Adena).

Java:
    public static final int[] PRICE_PER_ENCHANT = {
        0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000
    };

    public static final int ENCHANT_ITEM_ID = 57; // Adena
    public static final int MAX_ENCHANT = 100;

    @Override
    public void onBypassFeedback(Player player, String command) {
        if (command.equals("itemsEnchant")) {
            showEnchantableItems(player);
            return;
        }

        if (command.startsWith("enchantItem")) {
            int itemObjectId = parseItemObjectId(command);
            
            if (itemObjectId == -1) {
                player.sendMessage("Invalid command.");
                return;
            }
            
            enchantItem(player, itemObjectId);
        }
    }

    private void showEnchantableItems(Player player) {
        NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
        html.setFile("data/html/enchant/" + getNpcId() + "-100.htm");
        html.replace("%maxenchant%", MAX_ENCHANT);
        html.replace("%maxenchantcost%", PRICE_PER_ENCHANT[10]);
        html.replace("%currentAdenaItems%", getAdenaCount(player));
        html.replace("%items%", buildEnchantableItemsTable(player));
        html.replace("%objectId%", getObjectId());
        player.sendPacket(html);
    }

    private int parseItemObjectId(String command) {
        try {
            return Integer.parseInt(command.substring(12));
        } catch (Exception e) {
            return -1;
        }
    }

    private String buildEnchantableItemsTable(Player player) {
        StringBuilder sb = new StringBuilder();

        for (ItemInstance item : player.getInventory().getItems()) {
            if (!isEnchantCandidate(item)) {
                continue;
            }
            
            int price = calculateEnchantPrice(item);
            sb.append(formatItemRow(item, price));
        }

        return sb.toString();
    }

    private boolean isEnchantCandidate(ItemInstance item) {
        if (!item.isEquipped() || item.isShadowItem()) 
            return false;
        
        if (!item.isWeapon() && !item.isArmor()) 
            return false;

        int maxAllowed = item.isWeapon() ? maxEnchantWeapon : maxEnchantArmor;
        
        if (item.getEnchantLevel() >= maxAllowed)
            return false;

        if (item.getItem().getCrystalType().getId() == 0) 
            return false;

        int nextLevel = item.getEnchantLevel() + 1;
        
        if (nextLevel <= 0 || nextLevel >= MAX_ENCHANT) 
            return false;

        return true;
    }

    private int calculateEnchantPrice(ItemInstance item) {
        int nextLevel = item.getEnchantLevel() + 1;
        int base = PRICE_PER_ENCHANT[Math.min(nextLevel, PRICE_PER_ENCHANT.length - 1)] * nextLevel;
        int crystalId = item.getItem().getCrystalType().getId();
        int categoryMultiplier = item.isWeapon() ? 2 : 1;
        return base * crystalId * categoryMultiplier;
    }

    private String formatItemRow(ItemInstance item, int price) {
        String icon = IconTable.getIcon(item.getItemId());
        StringBuilder row = new StringBuilder();

        row.append("<table><tr>")
           .append("<td><img src=").append(icon).append(" width=32 height=32></td>")
           .append("<td><a action=\"bypass -h npc_%objectId%_enchantItem ").append(item.getObjectId())
           .append("\" msg=\"1983;\">+").append(item.getEnchantLevel()).append(" ")
           .append(item.getName())
           .append("<br1><font color=B09B79>Price:</font> ").append(price).append(" Adena</a></td>")
           .append("</tr></table>");

        return row.toString();
    }

    private String getAdenaCount(Player player) {
        ItemInstance adena = player.getInventory().getItemByItemId(ENCHANT_ITEM_ID);
        return String.valueOf(adena != null ? adena.getCount() : 0);
    }

    private void enchantItem(Player player, int itemObjectId) {
        ItemInstance item = player.getInventory().getItemByObjectId(itemObjectId);
        
        if (item == null) {
            player.sendMessage("Item not found.");
            return;
        }

        if (!isEnchantCandidate(item)) {
            player.sendMessage("This item cannot be enchanted further.");
            return;
        }

        int price = calculateEnchantPrice(item);
        ItemInstance adena = player.getInventory().getItemByItemId(ENCHANT_ITEM_ID);

        if (adena == null || adena.getCount() < price) {
            player.sendMessage("Incorrect item count.");
            return;
        }

        player.destroyItemByItemId("item", ENCHANT_ITEM_ID, price, this, true);
        item.setEnchantLevel(item.getEnchantLevel() + 1);
        item.updateDatabase();
        player.sendPacket(new ItemList(player, false));
        player.broadcastUserInfo();
        player.sendMessage("You have successfully enchanted your " + item.getName() + " to +" + item.getEnchantLevel() + "!");
        showEnchantableItems(player);
    }
 
Сверху Снизу