Иконка ресурса

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

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

GoGLiKK

Местный житель
Проверенный
Сообщения
1 201
Розыгрыши
0
Репутация
1 911
Реакции
1 113
Баллы
1 260
Пользователь GoGLiKK разместил новый ресурс:

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

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

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

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

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

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

    kick

    Баллы: 30
    Спасибо за в клад в развитие форума

Mangol

Рекрут
Участник
Сообщения
801
Розыгрыши
0
Репутация
965
Реакции
12
Баллы
0
:Nani1:Кто это вообще писал ? Что за извращенец.
 

kick

Магистр Йода
Administrator
:)
Сообщения
5 906
Розыгрыши
8
Репутация
4 533
Реакции
4 427
Баллы
7 095

Gaikotsu

яжпрограммист
Легенда
Сообщения
848
Розыгрыши
0
Репутация
4 834
Реакции
1 510
Баллы
1 298
какой трэш... постоянно гонять бесконечный цикл у каждого игрока, у который включил автоюз и проверять в нем постоянно уровень хп/мп/цп...
"кодиры" походу не в курсе таких вещей как листенеры на урон по хп/мп (изредка еще и на цп, но чаще обходятся чисто на хп)...
 

Mangol

Рекрут
Участник
Сообщения
801
Розыгрыши
0
Репутация
965
Реакции
12
Баллы
0
какой трэш... постоянно гонять бесконечный цикл у каждого игрока, у который включил автоюз и проверять в нем постоянно уровень хп/мп/цп...
"кодиры" походу не в курсе таких вещей как листенеры на урон по хп/мп (изредка еще и на цп, но чаще обходятся чисто на хп)...
Наверное.
Код:
    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
Ну и енум чтобы не быдлокодить в сервисе.
 

Gaikotsu

яжпрограммист
Легенда
Сообщения
848
Розыгрыши
0
Репутация
4 834
Реакции
1 510
Баллы
1 298
у нас проще - отслеживается чисто урон - слушателей на добавление поушнов в инвентарь не стали уж делать, как и слушателя на воскрешение
 

ArtToKill

Знаменитый
Партнер
Strix-Guard
Сообщения
1 785
Розыгрыши
3
Репутация
2 008
Реакции
1 712
Баллы
1 300
Наверное.
Код:
    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
Ну и енум чтобы не быдлокодить в сервисе.
Может ты заделишься своим ацп?)тем более вещь не сильно такая всем нужная:)
 

Mangol

Рекрут
Участник
Сообщения
801
Розыгрыши
0
Репутация
965
Реакции
12
Баллы
0
Может ты заделишься своим ацп?)тем более вещь не сильно такая всем нужная:)
Ты ее не прикрутишь.

Код:
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());
            }
        });
    }
}
 

ArtToKill

Знаменитый
Партнер
Strix-Guard
Сообщения
1 785
Розыгрыши
3
Репутация
2 008
Реакции
1 712
Баллы
1 300

kick

Магистр Йода
Administrator
:)
Сообщения
5 906
Розыгрыши
8
Репутация
4 533
Реакции
4 427
Баллы
7 095
Последнее редактирование:

Mangol

Рекрут
Участник
Сообщения
801
Розыгрыши
0
Репутация
965
Реакции
12
Баллы
0
upload_2016-1-15_23-51-30.pngдаже такое извращенство есть.
Очень сложная завязанная система.
 
  • Мне нравится
Реакции: kick

Gaikotsu

яжпрограммист
Легенда
Сообщения
848
Розыгрыши
0
Репутация
4 834
Реакции
1 510
Баллы
1 298
ну ты маньяк - аж даже отдельную таблицу в бд для данных этих завел
а хранения данных в character_variables не хватило? :)

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

ArtToKill

Знаменитый
Партнер
Strix-Guard
Сообщения
1 785
Розыгрыши
3
Репутация
2 008
Реакции
1 712
Баллы
1 300
Потому что там не так просто прикрутить
Виноват не ползал сильно по форуму 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());
            }
        });
    }
}
Спасибо попробуем.
 
Последнее редактирование модератором:

Mangol

Рекрут
Участник
Сообщения
801
Розыгрыши
0
Репутация
965
Реакции
12
Баллы
0
ну ты маньяк - аж даже отдельную таблицу в бд для данных этих завел
а хранения данных в character_variables не хватило? :)

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

zcxv

Интересующийся
Проверенный
Сообщения
561
Розыгрыши
0
Репутация
812
Реакции
1 348
Баллы
330
ну ты маньяк - аж даже отдельную таблицу в бд для данных этих завел
а хранения данных в character_variables не хватило? :)

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

Gaikotsu

яжпрограммист
Легенда
Сообщения
848
Розыгрыши
0
Репутация
4 834
Реакции
1 510
Баллы
1 298
хых, сегодня заняться было нечем ночью (чет спать не хотелось ибо перебрал с энергетиком) решил ради интереса попробовать переписать автоюз зелий с листенеров на скиллы-тогглы.
в итоге реализация получилась даже проще чем на листенерах и при этом более дружественная к игроку - сразу видно, включен ли автоюз или нет :)
 

Вложения

zcxv

Интересующийся
Проверенный
Сообщения
561
Розыгрыши
0
Репутация
812
Реакции
1 348
Баллы
330
хых, сегодня заняться было нечем ночью (чет спать не хотелось ибо перебрал с энергетиком) решил ради интереса попробовать переписать автоюз зелий с листенеров на скиллы-тогглы.
в итоге реализация получилась даже проще чем на листенерах и при этом более дружественная к игроку - сразу видно, включен ли автоюз или нет :)
Листенеры + ExAutoSoulShot дают такой же эффект:)
 
Сверху Снизу