AI Хиро РБ

LifeANDeath

Heir
Customer
Собственно, разберетесь))
Java:
package ai;

import java.util.HashMap;
import java.util.Map;

import l2.gameserver.Announcements;
import l2.gameserver.Config;
import l2.gameserver.ai.Fighter;
import l2.gameserver.model.Creature;
import l2.gameserver.model.Player;
import l2.gameserver.model.instances.NpcInstance;

public class setHero extends Fighter {
    private static final Map<Integer, Integer> bV = new HashMap<>();

    public setHero(NpcInstance paramNpcInstance) {
        super(paramNpcInstance);
    }

    @Override
    protected void onEvtDead(Creature killer) {
        if (killer instanceof Player) {
            Player player = (Player) killer;
            if (!player.isHero()) {
                makeCustomHero(player, 86400000);
            }
        }
        super.onEvtDead(killer);
    }

    private static boolean makeCustomHero(Player player, long duration) {
        if (player.isHero()) {
            return false;
        }

        player.setCustomHero(true, duration, Config.ALT_ALLOW_CUSTOM_HERO_SKILLS);
        player.broadcastUserInfo(true);
        return true;
    }
}
 
На па. дает на сутки. и рандомно, может присвоить цвет ника.

Java:
package ai;

import java.util.HashMap;
import java.util.Map;

import l2.commons.util.Rnd;
import l2.gameserver.Announcements;
import l2.gameserver.ai.Fighter;
import l2.gameserver.database.mysql;
import l2.gameserver.model.Creature;
import l2.gameserver.model.Player;
import l2.gameserver.model.instances.NpcInstance;

public class setpa extends Fighter {
    private static final Map<Integer, Integer> bV = new HashMap<>();

    public setpa(NpcInstance paramNpcInstance) {
        super(paramNpcInstance);
    }

    @Override
    protected void onEvtDead(Creature killer) {
        if (killer instanceof Player) {
            Player player = (Player) killer;
            String id = player.getAccountName();
            long currentTimeMillis = System.currentTimeMillis()  / 1000L;
            long oneDayInMillis = 86400000 / 1000L;
            long futureTimeMillis = currentTimeMillis + oneDayInMillis;
            int time = (int) futureTimeMillis;
            double x = 1.2;
            int yss = 1;
            mysql.set("INSERT INTO `accounts_bonuses` (`account`, `expireTime`, `rateXp`, `rateSp`, `rateRaidXp`, `rateRaidSp`, `questRewardRate`, `questRewardAdenaRate`, `questDropRate`, `dropAdena`, `dropItems`, `dropSealStones`, `dropRaidItems`, `dropSpoil`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[]{id, time, x, x, x, x, x, x, x, x, x, x, x, yss});
            player.sendMessage("Вы получили Премиум аккаунт на 1 сутки. Перезайдите");
            Announcements.getInstance().announceToAll("Поздравляем с получением Премиума игрока - " + player.getName ());
            int dbColor = 2551652; // здесь значение цвета из базы данных
            int rgbColor = (dbColor & 0xFF) << 16 | (dbColor & 0xFF00) | (dbColor >> 16 & 0xFF); // конвертируем BBGGRR в RRGGBB
            int k = Rnd.get(5);
            if (k == 3) {
                player.setNameColor(rgbColor); // устанавливаем цвет имени игрока
        }
        super.onEvtDead(killer);
    }
    }
}
 
Не могу найти пример еквипа брони и оружия. Может кто напомнит на примере чего можно посмотреть?
 
Сделал сейчас еще аи пати дропа. Дает итемы всем членам группы , убивших босса или моба
 
Сделал сейчас еще аи пати дропа. Дает итемы всем членам группы , убивших босса или моба
Вот ты бы тему создал отдельную и запилил туда Все АИ, в Руководствах, будеть очень удобно
 
Сделал при входе в зону. Одевает шмот. После релога удаляется. Ну или если после кванта одеть свою, тоже исчезает .
Не знаю, буду ли я выкладывать это в шару. Много времени потратил…
35C59244-A02E-4A62-B959-0A30E98D28B9.webp
 
Сделал при входе в зону. Одевает шмот. После релога удаляется. Ну или если после кванта одеть свою, тоже исчезает .
Не знаю, буду ли я выкладывать это в шару. Много времени потратил…
View attachment 2337
Это ты с нуля немного изучив Яву разобрался с скриптами?
 
Это ты с нуля немного изучив Яву разобрался с скриптами?
Да. Незнаю вообще не одного языка программирования. Ну понимаете есть, как работают операторы иф, елсе, цикл фор. И переменные. Вот потихоньку читаю и смотрю примеры как сделаны другие скрипты в сборке.
 
Да. Незнаю вообще не одного языка программирования. Ну понимаете есть, как работают операторы иф, елсе, цикл фор. И переменные. Вот потихоньку читаю и смотрю примеры как сделаны другие скрипты в сборке.
Напиши тг свой в личку
 
Сделал для всех классов. на ТвТ зоне еще не тестил. только на осадах. Сделаю наверно еще 1 классическую осаду.

 
Сделал для всех классов. на ТвТ зоне еще не тестил. только на осадах. Сделаю наверно еще 1 классическую осаду.

У тебя клиент колбасит как непонятно что.
На лайв такую штуку я бы не ставил.
 
Критов пока что не было. На днях проверим на онлайне .
Других вариантов нет .
 
Сейчас еще за каждый набор шмота, отвечает отдельный класс. Возможно если сделать один класс на все, то нагрузка станет меньше. И подобный скрипт был на сборке пв, на лайф сервере с онлайнов 60-80 человек. Проблем не наблюдалось. По этому собственно и задумал сделать это здесь .
 
На па. дает на сутки. и рандомно, может присвоить цвет ника.

Java:
package ai;

import java.util.HashMap;
import java.util.Map;

import l2.commons.util.Rnd;
import l2.gameserver.Announcements;
import l2.gameserver.ai.Fighter;
import l2.gameserver.database.mysql;
import l2.gameserver.model.Creature;
import l2.gameserver.model.Player;
import l2.gameserver.model.instances.NpcInstance;

public class setpa extends Fighter {
    private static final Map<Integer, Integer> bV = new HashMap<>();

    public setpa(NpcInstance paramNpcInstance) {
        super(paramNpcInstance);
    }

    @Override
    protected void onEvtDead(Creature killer) {
        if (killer instanceof Player) {
            Player player = (Player) killer;
            String id = player.getAccountName();
            long currentTimeMillis = System.currentTimeMillis()  / 1000L;
            long oneDayInMillis = 86400000 / 1000L;
            long futureTimeMillis = currentTimeMillis + oneDayInMillis;
            int time = (int) futureTimeMillis;
            double x = 1.2;
            int yss = 1;
            mysql.set("INSERT INTO `accounts_bonuses` (`account`, `expireTime`, `rateXp`, `rateSp`, `rateRaidXp`, `rateRaidSp`, `questRewardRate`, `questRewardAdenaRate`, `questDropRate`, `dropAdena`, `dropItems`, `dropSealStones`, `dropRaidItems`, `dropSpoil`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[]{id, time, x, x, x, x, x, x, x, x, x, x, x, yss});
            player.sendMessage("Вы получили Премиум аккаунт на 1 сутки. Перезайдите");
            Announcements.getInstance().announceToAll("Поздравляем с получением Премиума игрока - " + player.getName ());
            int dbColor = 2551652; // здесь значение цвета из базы данных
            int rgbColor = (dbColor & 0xFF) << 16 | (dbColor & 0xFF00) | (dbColor >> 16 & 0xFF); // конвертируем BBGGRR в RRGGBB
            int k = Rnd.get(5);
            if (k == 3) {
                player.setNameColor(rgbColor); // устанавливаем цвет имени игрока
        }
        super.onEvtDead(killer);
    }
    }
}
судя по этому коду, я бы искрене побоялся использовать даже часть твоего кода.
mysql.set("INSERT INTO `accounts_bonuses` (`account`, `expireTime`, `rateXp`, `rateSp`, `rateRaidXp`, `rateRaidSp`, `questRewardRate`, `questRewardAdenaRate`, `questDropRate`, `dropAdena`, `dropItems`, `dropSealStones`, `dropRaidItems`, `dropSpoil`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[]{id, time, x, x, x, x, x, x, x, x, x, x, x, yss});
Это вообще такая жесть что жесть - жесть
Вот тебе часть кода как это должно работать и это не финальная, выше оборачивается рядом проверок на наличие ПА, и куча других элементов
Java:
            AccountBonusDAO.getInstance().store(target.getAccountName(), rateBonusInfo.makeBonus());
            target.stopBonusTask();
            target.startBonusTask();
            if(target.getParty() != null)
                target.getParty().recalculatePartyData();
            target.broadcastUserInfo(true);
 
Back
Top