• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.
Иконка ресурса

ACP: Автоматический реген CP/MP/HP 2015-08-04

Нет прав для скачивания

GoGLiKK

Гений мысли
Проверенный
Орден Почета
Мастер реакций
Знаток великого письма
Знаток письма
Старожил I степени
Hardware эксперт
За знание датапака
Куратор Данных
Медаль за активность на Форуме
Победитель в номинации 2016
Победитель в номинации 2015
За веру и верность форуму
За заслуги перед форумом
Сообщения
1 226
Розыгрыши
0
Репутация
1 920
Реакции
1 178
Баллы
1 808
Пользователь GoGLiKK разместил новый ресурс:

ACP: Автоматический реген CP/MP/HP - ACP

Описание: Автоматически восстанавливает HP/CP/MP чару, через использование банок.

Тип: Серверная модификация

Совместимость: L2jGroot / Lucera / L2jLovely

Поместить в game/data/scripts/handlers/voice/

Author : L2jGroot

Узнать больше об этом ресурсе...
 

:Nani1:Кто это вообще писал ? Что за извращенец.
 
какой трэш... постоянно гонять бесконечный цикл у каждого игрока, у который включил автоюз и проверять в нем постоянно уровень хп/мп/цп...
"кодиры" походу не в курсе таких вещей как листенеры на урон по хп/мп (изредка еще и на цп, но чаще обходятся чисто на хп)...
 
какой трэш... постоянно гонять бесконечный цикл у каждого игрока, у который включил автоюз и проверять в нем постоянно уровень хп/мп/цп...
"кодиры" походу не в курсе таких вещей как листенеры на урон по хп/мп (изредка еще и на цп, но чаще обходятся чисто на хп)...
Наверное.
Код:
    private class OnPlayerEnterListenerImpl implements OnPlayerEnterListener
    {
        @Override
        public void onPlayerEnter(final Player player)
        {
            if(player == null)
            {
                return;
            }
            restore();
            getPlayer().addListener(new onDeathListenerImpl());
            getPlayer().addListener(new OnReviveListenerImpl());
            getPlayer().addListener(new onPlayerCurrentCpImpl());
            getPlayer().addListener(new onPlayerCurrentHpImpl());
            getPlayer().addListener(new onPlayerCurrentMpImpl());
            getPlayer().addListener(new onPlayerAddItemImpl());
            getPlayer().addListener(new onPlayerExitImpl());
            startTask();
        }
    }

upload_2016-1-15_22-8-52.png
upload_2016-1-15_22-10-7.png
Ну и енум чтобы не быдлокодить в сервисе.
 
у нас проще - отслеживается чисто урон - слушателей на добавление поушнов в инвентарь не стали уж делать, как и слушателя на воскрешение
 
Наверное.
Код:
    private class OnPlayerEnterListenerImpl implements OnPlayerEnterListener
    {
        @Override
        public void onPlayerEnter(final Player player)
        {
            if(player == null)
            {
                return;
            }
            restore();
            getPlayer().addListener(new onDeathListenerImpl());
            getPlayer().addListener(new OnReviveListenerImpl());
            getPlayer().addListener(new onPlayerCurrentCpImpl());
            getPlayer().addListener(new onPlayerCurrentHpImpl());
            getPlayer().addListener(new onPlayerCurrentMpImpl());
            getPlayer().addListener(new onPlayerAddItemImpl());
            getPlayer().addListener(new onPlayerExitImpl());
            startTask();
        }
    }

Посмотреть вложение 1985
Посмотреть вложение 1986
Ну и енум чтобы не быдлокодить в сервисе.
Может ты заделишься своим ацп?)тем более вещь не сильно такая всем нужная:)
 
Может ты заделишься своим ацп?)тем более вещь не сильно такая всем нужная:)
Ты ее не прикрутишь.

Код:
package org.mmocore.gameserver.database.dao.impl.custom;
import org.mmocore.commons.database.dbutils.ParamReadStatementHandler;
import org.mmocore.commons.jdbchelper.ResultSetHandler;
import org.mmocore.gameserver.database.dao.AbstractGameServerDAO;
import org.mmocore.gameserver.object.Player;
import org.mmocore.gameserver.templates.custom.AcpTemplate;
import org.mmocore.gameserver.utils.JDBCHelper;

import java.sql.*;

/**
* Create by Mangol on 30.12.2015.
*/
public class AcpDAO extends AbstractGameServerDAO
{
    private static final AcpDAO INSTANCE = new AcpDAO();
    private static final String SQL_SELECT_ACP = "SELECT * FROM custom_acp WHERE player_obj_id=?";
    private static final String SQL_SELECT_ACP_COUNT = "SELECT COUNT(*) FROM custom_acp WHERE player_obj_id=?";
    private static final String SQL_INSERT_ACP = "INSERT INTO custom_acp (player_obj_id, auto_cp, cp_percent, cp_item_id, reuse_cp, auto_hp, hp_percent, hp_item_id, reuse_hp, auto_mp, mp_percent, mp_item_id, reuse_mp) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)";
    private static final String SQL_UPDATE_ACP = "UPDATE custom_acp SET auto_cp=?, cp_percent=?, cp_item_id=?, reuse_cp=?, auto_hp=?, hp_percent=?, hp_item_id=?, reuse_hp=?, auto_mp=?, mp_percent=?, mp_item_id=?, reuse_mp=? WHERE player_obj_id=?";

    public static AcpDAO getInstance()
    {
        return INSTANCE;
    }

    public AcpTemplate selectAcp(final Player player)
    {
        final AcpTemplate[] template = new AcpTemplate[1];
        jdbcHelper.query(SQL_SELECT_ACP, new ResultSetHandler()
        {
            @Override
            public void processRow(final ResultSet rs) throws SQLException
            {
                final boolean autoCp = rs.getBoolean("auto_cp");
                final double cpPercent = rs.getDouble("cp_percent");
                final int cpItemId = rs.getInt("cp_item_id");
                final int reuseCp = rs.getInt("reuse_cp");
                final boolean autoHp = rs.getBoolean("auto_hp");
                final double hpPercent = rs.getDouble("hp_percent");
                final int hpItemId = rs.getInt("hp_item_id");
                final int reuseHp = rs.getInt("reuse_hp");
                final boolean autoMp = rs.getBoolean("auto_mp");
                final double mpPercent = rs.getDouble("mp_percent");
                final int mpItemId = rs.getInt("mp_item_id");
                final int reuseMp = rs.getInt("reuse_mp");
                template[0] = new AcpTemplate(autoCp, autoHp, autoMp, cpPercent, hpPercent, mpPercent, cpItemId, hpItemId, mpItemId, reuseCp, reuseHp, reuseMp);
            }
        }, rs -> rs.setInt(1, player.getObjectId()));
        return template[0];
    }

    public void insertUpdateAcp(final Player player, final AcpTemplate template)
    {
        final int[] count = new int[1];
        JDBCHelper.select(SQL_SELECT_ACP_COUNT, new ParamReadStatementHandler()
        {
            @Override
            public void setParams(final PreparedStatement statement) throws SQLException
            {
                statement.setInt(1, player.getObjectId());
            }

            @Override
            public void handleRead(final ResultSet resultSet) throws SQLException
            {
                count[0] = resultSet.getInt(1);
            }
        });
        JDBCHelper.insertUpdate(count[0] == 0 ? SQL_INSERT_ACP : SQL_UPDATE_ACP, statement -> {
            if(count[0] == 0)
            {
                statement.setInt(1, player.getObjectId());
                statement.setBoolean(2, template.isAutoCp());
                statement.setDouble(3, template.getCpPercent());
                statement.setInt(4, template.getCpItemId());
                statement.setInt(5, template.getReuseCp());
                statement.setBoolean(6, template.isAutoHp());
                statement.setDouble(7, template.getHpPercent());
                statement.setInt(8, template.getHpItemId());
                statement.setInt(9, template.getReuseHp());
                statement.setBoolean(10, template.isAutoMp());
                statement.setDouble(11, template.getMpPercent());
                statement.setInt(12, template.getMpItemId());
                statement.setInt(13, template.getReuseMp());
            }
            if(count[0] > 0)
            {
                statement.setBoolean(1, template.isAutoCp());
                statement.setDouble(2, template.getCpPercent());
                statement.setInt(3, template.getCpItemId());
                statement.setInt(4, template.getReuseCp());
                statement.setBoolean(5, template.isAutoHp());
                statement.setDouble(6, template.getHpPercent());
                statement.setInt(7, template.getHpItemId());
                statement.setInt(8, template.getReuseHp());
                statement.setBoolean(9, template.isAutoMp());
                statement.setDouble(10, template.getMpPercent());
                statement.setInt(11, template.getMpItemId());
                statement.setInt(12, template.getReuseMp());
                statement.setInt(13, player.getObjectId());
            }
        });
    }
}
 
Последнее редактирование:
upload_2016-1-15_23-51-30.png даже такое извращенство есть.
Очень сложная завязанная система.
 
  • Мне нравится
Реакции: kick
ну ты маньяк - аж даже отдельную таблицу в бд для данных этих завел
а хранения данных в character_variables не хватило? :)

З.Ы. кстати идея с указанием в данных предмета что его можно использовать в такой-то доп. функции хороша - может так же сделать... у нас в конфиге просто перечисляется какие поушны юзаются в ацп.
 
Потому что там не так просто прикрутить
Виноват не ползал сильно по форуму jts, видел только в обновлении...что нить придумаю другое...
Ты ее не прикрутишь.

Код:
package org.mmocore.gameserver.database.dao.impl.custom;
import org.mmocore.commons.database.dbutils.ParamReadStatementHandler;
import org.mmocore.commons.jdbchelper.ResultSetHandler;
import org.mmocore.gameserver.database.dao.AbstractGameServerDAO;
import org.mmocore.gameserver.object.Player;
import org.mmocore.gameserver.templates.custom.AcpTemplate;
import org.mmocore.gameserver.utils.JDBCHelper;

import java.sql.*;

/**
* Create by Mangol on 30.12.2015.
*/
public class AcpDAO extends AbstractGameServerDAO
{
    private static final AcpDAO INSTANCE = new AcpDAO();
    private static final String SQL_SELECT_ACP = "SELECT * FROM custom_acp WHERE player_obj_id=?";
    private static final String SQL_SELECT_ACP_COUNT = "SELECT COUNT(*) FROM custom_acp WHERE player_obj_id=?";
    private static final String SQL_INSERT_ACP = "INSERT INTO custom_acp (player_obj_id, auto_cp, cp_percent, cp_item_id, reuse_cp, auto_hp, hp_percent, hp_item_id, reuse_hp, auto_mp, mp_percent, mp_item_id, reuse_mp) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)";
    private static final String SQL_UPDATE_ACP = "UPDATE custom_acp SET auto_cp=?, cp_percent=?, cp_item_id=?, reuse_cp=?, auto_hp=?, hp_percent=?, hp_item_id=?, reuse_hp=?, auto_mp=?, mp_percent=?, mp_item_id=?, reuse_mp=? WHERE player_obj_id=?";

    public static AcpDAO getInstance()
    {
        return INSTANCE;
    }

    public AcpTemplate selectAcp(final Player player)
    {
        final AcpTemplate[] template = new AcpTemplate[1];
        jdbcHelper.query(SQL_SELECT_ACP, new ResultSetHandler()
        {
            @Override
            public void processRow(final ResultSet rs) throws SQLException
            {
                final boolean autoCp = rs.getBoolean("auto_cp");
                final double cpPercent = rs.getDouble("cp_percent");
                final int cpItemId = rs.getInt("cp_item_id");
                final int reuseCp = rs.getInt("reuse_cp");
                final boolean autoHp = rs.getBoolean("auto_hp");
                final double hpPercent = rs.getDouble("hp_percent");
                final int hpItemId = rs.getInt("hp_item_id");
                final int reuseHp = rs.getInt("reuse_hp");
                final boolean autoMp = rs.getBoolean("auto_mp");
                final double mpPercent = rs.getDouble("mp_percent");
                final int mpItemId = rs.getInt("mp_item_id");
                final int reuseMp = rs.getInt("reuse_mp");
                template[0] = new AcpTemplate(autoCp, autoHp, autoMp, cpPercent, hpPercent, mpPercent, cpItemId, hpItemId, mpItemId, reuseCp, reuseHp, reuseMp);
            }
        }, rs -> rs.setInt(1, player.getObjectId()));
        return template[0];
    }

    public void insertUpdateAcp(final Player player, final AcpTemplate template)
    {
        final int[] count = new int[1];
        JDBCHelper.select(SQL_SELECT_ACP_COUNT, new ParamReadStatementHandler()
        {
            @Override
            public void setParams(final PreparedStatement statement) throws SQLException
            {
                statement.setInt(1, player.getObjectId());
            }

            @Override
            public void handleRead(final ResultSet resultSet) throws SQLException
            {
                count[0] = resultSet.getInt(1);
            }
        });
        JDBCHelper.insertUpdate(count[0] == 0 ? SQL_INSERT_ACP : SQL_UPDATE_ACP, statement -> {
            if(count[0] == 0)
            {
                statement.setInt(1, player.getObjectId());
                statement.setBoolean(2, template.isAutoCp());
                statement.setDouble(3, template.getCpPercent());
                statement.setInt(4, template.getCpItemId());
                statement.setInt(5, template.getReuseCp());
                statement.setBoolean(6, template.isAutoHp());
                statement.setDouble(7, template.getHpPercent());
                statement.setInt(8, template.getHpItemId());
                statement.setInt(9, template.getReuseHp());
                statement.setBoolean(10, template.isAutoMp());
                statement.setDouble(11, template.getMpPercent());
                statement.setInt(12, template.getMpItemId());
                statement.setInt(13, template.getReuseMp());
            }
            if(count[0] > 0)
            {
                statement.setBoolean(1, template.isAutoCp());
                statement.setDouble(2, template.getCpPercent());
                statement.setInt(3, template.getCpItemId());
                statement.setInt(4, template.getReuseCp());
                statement.setBoolean(5, template.isAutoHp());
                statement.setDouble(6, template.getHpPercent());
                statement.setInt(7, template.getHpItemId());
                statement.setInt(8, template.getReuseHp());
                statement.setBoolean(9, template.isAutoMp());
                statement.setDouble(10, template.getMpPercent());
                statement.setInt(11, template.getMpItemId());
                statement.setInt(12, template.getReuseMp());
                statement.setInt(13, player.getObjectId());
            }
        });
    }
}
Спасибо попробуем.
 
Последнее редактирование модератором:
ну ты маньяк - аж даже отдельную таблицу в бд для данных этих завел
а хранения данных в character_variables не хватило? :)

З.Ы. кстати идея с указанием в данных предмета что его можно использовать в такой-то доп. функции хороша - может так же сделать... у нас в конфиге просто перечисляется какие поушны юзаются в ацп.
У нас чуть другие вириаблесы, да и отдельная база раз - два, и удалил ее. А вириаблесы патом еще чисти.
 
ну ты маньяк - аж даже отдельную таблицу в бд для данных этих завел
а хранения данных в character_variables не хватило? :)

З.Ы. кстати идея с указанием в данных предмета что его можно использовать в такой-то доп. функции хороша - может так же сделать... у нас в конфиге просто перечисляется какие поушны юзаются в ацп.
Аналогично, в конфиге. Никто пока не умер и не жаловался:)
ЗЫ: я вообще не восстанавливаю состояние АЦП вкл/выкл на новой сессии, нафига оно надо?
 
хых, сегодня заняться было нечем ночью (чет спать не хотелось ибо перебрал с энергетиком) решил ради интереса попробовать переписать автоюз зелий с листенеров на скиллы-тогглы.
в итоге реализация получилась даже проще чем на листенерах и при этом более дружественная к игроку - сразу видно, включен ли автоюз или нет :)
 

Вложения

  • Shot00170.jpg
    Shot00170.jpg
    183,9 КБ · Просмотры: 479
хых, сегодня заняться было нечем ночью (чет спать не хотелось ибо перебрал с энергетиком) решил ради интереса попробовать переписать автоюз зелий с листенеров на скиллы-тогглы.
в итоге реализация получилась даже проще чем на листенерах и при этом более дружественная к игроку - сразу видно, включен ли автоюз или нет :)
Листенеры + ExAutoSoulShot дают такой же эффект:)
 
Назад
Сверху Снизу