Описание: Автоматически восстанавливает HP/CP/MP чару, через использование банок.
Тип: Серверная модификация
Совместимость: L2jGroot / Lucera / L2jLovely
Поместить в game/data/scripts/handlers/voice/
Author : L2jGroot
Наверное.какой трэш... постоянно гонять бесконечный цикл у каждого игрока, у который включил автоюз и проверять в нем постоянно уровень хп/мп/цп...
"кодиры" походу не в курсе таких вещей как листенеры на урон по хп/мп (изредка еще и на цп, но чаще обходятся чисто на хп)...
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();
}
}
Может ты заделишься своим ацп?)тем более вещь не сильно такая всем нужнаяНаверное.
Код: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());
}
});
}
}
почему?может и получиться...в чем может быть сложность?просто на днях как раз ацп хотел заняться...Ты ее не прикрутишь.
Виноват не ползал сильно по форуму 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 не хватило?
З.Ы. кстати идея с указанием в данных предмета что его можно использовать в такой-то доп. функции хороша - может так же сделать... у нас в конфиге просто перечисляется какие поушны юзаются в ацп.
Сколько стоит ваш сервис АЦП?)У нас чуть другие вириаблесы, да и отдельная база раз - два, и удалил ее. А вириаблесы патом еще чисти.
За 3к рублей отдам без проблем.Сколько стоит ваш сервис АЦП?)
Листенеры + ExAutoSoulShot дают такой же эффектхых, сегодня заняться было нечем ночью (чет спать не хотелось ибо перебрал с энергетиком) решил ради интереса попробовать переписать автоюз зелий с листенеров на скиллы-тогглы.
в итоге реализация получилась даже проще чем на листенерах и при этом более дружественная к игроку - сразу видно, включен ли автоюз или нет
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?