Перейти к содержанию
Авторизация  
Saick

Бафер

Рекомендуемые сообщения

Сделал я бафера я профилями все ок но сохраняет только бафов 12-13

CharSchemesTable.java

Скрытый текст

/*

* This program is free software: you can redistribute it and/or modify it under

* the terms of the GNU General Public License as published by the Free Software

* Foundation, either version 3 of the License, or (at your option) any later

* version.

*

* This program is distributed in the hope that it will be useful, but WITHOUT

* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS

* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more

* details.

*

* You should have received a copy of the GNU General Public License along with

* this program. If not, see <http://www.gnu.org/licenses/>.

*/

package com.l2jfrozen.gameserver.datatables;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.logging.Logger;

 

import javolution.util.FastList;

import javolution.util.FastMap;

 

import com.l2jfrozen.Config;

import com.l2jfrozen.gameserver.model.L2Skill;

import com.l2jfrozen.gameserver.powerpak.PowerPakConfig;

import com.l2jfrozen.util.CloseUtil;

import com.l2jfrozen.util.database.L2DatabaseFactory;

 

/**

* This class stores players' buff schemes into FastMap. On player login, his scheme is loaded and on server shutdown all modified schemes are saved to DataBase. This avoids too many unnecessary DataBase connections and queries. If server crashes, nothing important is lost :)

*

* @author

*/

public class CharSchemesTable

{

private static FastMap<Integer, FastMap<String, FastList<L2Skill>>> _schemesTable;

private static CharSchemesTable _instance = null;

private static Logger _log = Logger.getLogger(CharSchemesTable.class.getName());

private static final String SQL_LOAD_SCHEME = "SELECT * FROM mods_buffer_schemes WHERE ownerId=?";

private static final String SQL_DELETE_SCHEME = "DELETE FROM mods_buffer_schemes WHERE ownerId=?";

private static final String SQL_INSERT_SCHEME = "INSERT INTO mods_buffer_schemes (ownerId, id, level, scheme) VALUES (?,?,?,?)";

 

public CharSchemesTable()

{

_schemesTable = new FastMap<Integer, FastMap<String, FastList<L2Skill>>>();

}

 

/**

* This method loads player scheme and put into _schemesTable map.

*

* @param objectId

* : player's objectId

*/

public void loadScheme(int objectId)

{

Connection con = null;

try

{

con = L2DatabaseFactory.getInstance().getConnection(false);

PreparedStatement statement = con.prepareStatement(SQL_LOAD_SCHEME);

statement.setInt(1, objectId);

ResultSet rs = statement.executeQuery();

FastMap<String, FastList<L2Skill>> map = new FastMap<String, FastList<L2Skill>>();

while (rs.next())

{

int skillId = rs.getInt("id");

int skillLevel = rs.getInt("level");

String scheme = rs.getString("scheme");

if (!map.containsKey(scheme) && map.size() <= PowerPakConfig.NPCBUFFER_MAX_SCHEMES)

map.put(scheme, new FastList<L2Skill>());

if (map.get(scheme) != null && map.get(scheme).size() < PowerPakConfig.NPCBUFFER_MAX_SKILLS)

map.get(scheme).add(SkillTable.getInstance().getInfo(skillId, skillLevel));

}

if (!map.isEmpty())

_schemesTable.put(objectId, map);

statement.close();

rs.close();

}

catch (Exception e)

{

if(Config.ENABLE_ALL_EXCEPTIONS)

e.printStackTrace();

 

_log.warning("Error trying to load buff scheme from object id: " + objectId);

}

finally

{

CloseUtil.close(con);

 

}

}

 

public void onPlayerLogin(int playerId)

{

if (_schemesTable.get(playerId) == null)

loadScheme(playerId);

}

 

/**

* Do necessary task when server is shutting down or restarting:<br>

* <li>Clears DataBase</li> <li>Saves new info</li>

*/

public void onServerShutdown()

{

if (PowerPakConfig.NPCBUFFER_STORE_SCHEMES)

{

clearDB();

saveDataToDB();

}

}

 

public void clearDB()

{

if (_schemesTable.isEmpty())

return;

Connection con = null;

try

{

con = L2DatabaseFactory.getInstance().getConnection(false);

for (FastMap.Entry<Integer, FastMap<String, FastList<L2Skill>>> e = _schemesTable.head(), end = _schemesTable.tail(); (e = e.getNext()) != end;)

{

PreparedStatement statement = con.prepareStatement(SQL_DELETE_SCHEME);

statement.setInt(1, e.getKey());

statement.execute();

}

}

catch (Exception e)

{

if(Config.ENABLE_ALL_EXCEPTIONS)

e.printStackTrace();

 

_log.warning("CharSchemesTable: Error while trying to delete schemes");

}

finally

{

CloseUtil.close(con);

 

}

}

 

public void saveDataToDB()

{

if (_schemesTable.isEmpty())

return;

Connection con = null;

int count = 0;

try

{

con = L2DatabaseFactory.getInstance().getConnection(false);

// _schemesTable

for (FastMap.Entry<Integer, FastMap<String, FastList<L2Skill>>> e = _schemesTable.head(), end = _schemesTable.tail(); (e = e.getNext()) != end;)

{

// each profile

if (e.getValue() == null || e.getValue().isEmpty())

continue;

for (FastMap.Entry<String, FastList<L2Skill>> a = e.getValue().head(), enda = e.getValue().tail(); (a = a.getNext()) != enda;)

{

if (a.getValue() == null || a.getValue().isEmpty())

continue;

// each skill

for (L2Skill sk : a.getValue())

{

PreparedStatement statement = con.prepareStatement(SQL_INSERT_SCHEME);

statement.setInt(1, e.getKey());

statement.setInt(2, sk.getId());

statement.setInt(3, sk.getLevel());

statement.setString(4, a.getKey());

statement.execute();

}

}

count++;

}

}

catch (Exception e)

{

if(Config.ENABLE_ALL_EXCEPTIONS)

e.printStackTrace();

 

_log.warning("CharSchemesTable: Error while trying to delete schemes");

}

finally

{

CloseUtil.close(con);

 

System.out.println("CharSchemeTable: Saved " + String.valueOf(count + " scheme(s)"));

}

}

 

public FastList<L2Skill> getScheme(int playerid, String scheme_key)

{

if (_schemesTable.get(playerid) == null)

return null;

return _schemesTable.get(playerid).get(scheme_key);

}

 

public boolean getSchemeContainsSkill(int playerId, String scheme_key, int skillId)

{

for (L2Skill sk : getScheme(playerId, scheme_key))

if (sk.getId() == skillId)

return true;

return false;

}

 

public void setScheme(int playerId, String schemeKey, FastList<L2Skill> list)

{

_schemesTable.get(playerId).put(schemeKey, list);

}

 

public FastMap<String, FastList<L2Skill>> getAllSchemes(int playerId)

{

return _schemesTable.get(playerId);

}

 

public FastMap<Integer, FastMap<String, FastList<L2Skill>>> getSchemesTable()

{

return _schemesTable;

}

 

public static CharSchemesTable getInstance()

{

if (_instance == null)

_instance = new CharSchemesTable();

return _instance;

}

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И он по моему сохраняет профили при перезагрузке или выключении)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

L2BuffInstance.java

Скрытый текст
package com.l2jfrozen.gameserver.model.actor.instance;

 

import com.l2jfrozen.gameserver.datatables.CharSchemesTable;

import com.l2jfrozen.gameserver.datatables.SkillTable;

import com.l2jfrozen.gameserver.model.L2Effect;

import com.l2jfrozen.gameserver.model.L2Skill;

import com.l2jfrozen.gameserver.model.L2Summon;

import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;

import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;

import com.l2jfrozen.gameserver.templates.L2NpcTemplate;

import javolution.util.FastList;

import javolution.util.FastMap;

 

import java.util.StringTokenizer;

 

public class L2BuffInstance extends L2FolkInstance

{

public int[] TableId;

public int[] TableDialog;

 

 

public L2BuffInstance(int objectId, L2NpcTemplate template)

{

super(objectId, template);

TableId=new int[]{

1068,1388,1086,1077,1242,1240,1085,1059,1303,1062,1043,

1040,1389,1036,1035,1243,1304,1078,1087,

1045,1048,1204,1073,1397,1044,1268,1257,

1182,1189,1191,1033,1259,1392,1393,1353,1352,1354,

271,272,273,274,275,276,277,307,309,310,311,

264,265,266,267,268,269,270,304,305,306,308,

1355,1356,1357,1363,4699,4554,365,363,364,349,4702

};

TableDialog=new int[]{

1,1,1,1,1,1,1,1,1,1,1,

2,2,2,2,2,2,2,2,

3,3,3,3,3,3,3,3,

4,4,4,4,4,4,4,4,4,4,

5,5,5,5,5,5,5,5,5,5,5,

6,6,6,6,6,6,6,6,6,6,6,

7,7,7,7,7,7,7,7,7,7,7

};

}

 

@Override

public String getHtmlPath(int npcId, int val)

{

String pom;

 

if (val == 0)

pom = "" + npcId;

else

pom = npcId + "-" + val;

 

return "data/html/buff/" + pom + ".htm";

}

 

@Override

public void onBypassFeedback(L2PcInstance player, String command)

{

StringTokenizer st = new StringTokenizer(command, " ");

String actualCommand = st.nextToken(); // Get actual command

 

if (actualCommand.startsWith("Chat"))

{

String filename = "data/html/buff/40001.htm";

int cmdChoice = Integer.parseInt(command.substring(5,7).trim());

if(cmdChoice>0)

{

filename = "data/html/buff/40001-"+cmdChoice+".htm";

}

NpcHtmlMessage html = new NpcHtmlMessage(1);

html.setFile(filename);

sendHtmlMessage(player,html);

player.sendPacket(new ActionFailed());

}

else if(actualCommand.startsWith("Cancel"))

{

player.stopAllEffects();

NpcHtmlMessage html = new NpcHtmlMessage(1);

html.setFile("data/html/buff/40001.htm");

sendHtmlMessage(player,html);

player.sendPacket(new ActionFailed());

}

else if(actualCommand.startsWith("PetCancel"))

{

L2Summon pet=player.getPet();

if(pet!=null)

pet.stopAllEffects();

NpcHtmlMessage html = new NpcHtmlMessage(1);

html.setFile("data/html/buff/40001-08.htm");

sendHtmlMessage(player,html);

player.sendPacket(new ActionFailed());

}

else if(actualCommand.startsWith("Regenerate"))

{

player.setCurrentHpMp(player.getMaxHp(),(player.getMaxMp()));

player.setCurrentCp(player.getMaxCp());

NpcHtmlMessage html = new NpcHtmlMessage(1);

html.setFile("data/html/buff/40001.htm");

sendHtmlMessage(player,html);

player.sendPacket(new ActionFailed());

}

else if(actualCommand.startsWith("PetRegenerate"))

{

L2Summon pet=player.getPet();

pet.setCurrentHpMp(pet.getMaxHp(),(pet.getMaxMp()));

pet.setCurrentCp(pet.getMaxCp());

NpcHtmlMessage html = new NpcHtmlMessage(1);

html.setFile("data/html/buff/40001-08.htm");

sendHtmlMessage(player,html);

player.sendPacket(new ActionFailed());

}

 

else if(actualCommand.startsWith("Buff"))

{

String filename = "data/html/buff/40001",v;

int cmdChoice = Integer.parseInt(command.substring(5, 7).trim());

int id=TableId[cmdChoice];

int dialog=TableDialog[cmdChoice];

int level=SkillTable.getInstance().getMaxLevel(id,0);

if(id==4554)level=4;

if(dialog==0)v="";

else v="-"+Integer.toString(dialog);

player.stopSkillEffects(id);

SkillTable.getInstance().getInfo(id,level).getEffects(player,player);

NpcHtmlMessage html = new NpcHtmlMessage(1);

html.setFile(filename+v+".htm");

sendHtmlMessage(player,html);

player.sendPacket(new ActionFailed());

}

 

else if(actualCommand.startsWith("PetBuff"))

{

String filename = "data/html/buff/40001",v;

int cmdChoice = Integer.parseInt(command.substring(5, 7).trim());

int id=TableId[cmdChoice];

int dialog=TableDialog[cmdChoice];

int level=SkillTable.getInstance().getMaxLevel(id,0);

if(dialog==0)v="";

else v="-"+Integer.toString(dialog);

L2Summon pet=player.getPet();

if(pet!=null)

{

pet.stopSkillEffects(id);

SkillTable.getInstance().getInfo(id,level).getEffects(pet,pet);

}

else player.sendMessage("У вас нет суммона или питомца");

NpcHtmlMessage html = new NpcHtmlMessage(1);

html.setFile(filename+v+".htm");

sendHtmlMessage(player,html);

player.sendPacket(new ActionFailed());

}

 

else if(actualCommand.startsWith("save"))

{

int cmdChoice = Integer.parseInt(command.substring(5, 6).trim());

int flag=0;

NpcHtmlMessage html = new NpcHtmlMessage(1);

if(cmdChoice>3)

{

html.setFile("data/html/buff/40001-11.htm");

flag=1;

}

else

html.setFile("data/html/buff/40001.htm");

CreateScheme(player,Integer.toString(cmdChoice),flag);

sendHtmlMessage(player,html);

player.sendPacket(new ActionFailed());

}

else if(actualCommand.startsWith("give"))

{

int cmdChoice = Integer.parseInt(command.substring(5, 6).trim());

if((cmdChoice<1)&&(cmdChoice>6))return;

String key="data/html/buff/40001",sKey=Integer.toString(cmdChoice);

int flag=0;

NpcHtmlMessage html = new NpcHtmlMessage(1);

 

if(cmdChoice>3)

{

flag=1;

key="data/html/buff/40001-8";

}

 

if (CharSchemesTable.getInstance().getScheme(

player.getObjectId(),sKey)!=null)

{

if(flag==0)

{

for (L2Skill sk : CharSchemesTable.getInstance().getScheme(

player.getObjectId(),sKey))

{

player.stopSkillEffects(sk.getId());

sk.getEffects(this, player);

}

}

else

{

for (L2Skill sk : CharSchemesTable.getInstance().getScheme(

player.getObjectId(),sKey))

{

L2Summon pet = player.getPet();

if(pet!=null)

{

pet.stopSkillEffects(sk.getId());

sk.getEffects(this, pet);

}

}

}

html.setFile(key+".htm");

}

else

{

player.sendMessage("Профиль "+sKey+" не найден");

return;

}

sendHtmlMessage(player,html);

player.sendPacket(new ActionFailed());

}

else

{

super.onBypassFeedback(player, command);

}

 

}

private void sendHtmlMessage(L2PcInstance player, NpcHtmlMessage html)

{

html.replace("%objectId%", String.valueOf(getObjectId()));

html.replace("%npcId%", String.valueOf(getNpcId()));

player.sendPacket(html);

}

 

private void CreateScheme(L2PcInstance player,String name,int flag)

{

if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) != null

&& CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).containsKey(n

ame))

{

CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).remove(name);

}

if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) == null)

{

CharSchemesTable.getInstance().getSchemesTable().put(player.getObjectId(),

new FastMap<String, FastList<L2Skill>>(6));

}

CharSchemesTable.getInstance().setScheme(player.getObjectId(),name.trim(),

new FastList<L2Skill>(69));

L2Effect[] s;

if (flag==0)

{

s= player.getAllEffects();

 

}

else

{

L2Summon pet=player.getPet();

s=pet.getAllEffects();

}

int Id;

Boolean Ok=false;

int i = 0;

while (i < s.length) {

L2Effect value = s;

Id = value.getSkill().getId();

int k = 0;

while (k < TableId.length) {

if (Id == TableId[k]) {

Ok = true;

break;

}

k++;

}

if (Ok)

CharSchemesTable.getInstance().getScheme(

player.getObjectId(), name).add(

SkillTable.getInstance().getInfo(Id, value.getSkill().getLevel()));

 

Ok = false;

i++;

}

player.sendMessage("Профиль "+name+" СѓСЃРїРµС?РЅРѕ сохранён");

}

}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну на первый взгляд все впорядке (позже подробнее гляну, сейчас на работе)

а бафы не сохраняет которые ?

они есть в

TableId=new int[] ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

бафер сам на питоне а профили в ядре вон он сохраняет где то бафов 13 последних ,а что в начале были не бафает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ну на первый взгляд все впорядке (позже подробнее гляну, сейчас на работе)

а бафы не сохраняет которые ?

они есть в

TableId=new int[] ?

есть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот поэтому возможно и глючит! т.к код бафера который вы мне указали работает правильно....

и опять же вам вопрос, а для чего вы Конструируите велосипед ? чем вас не устраивает на Java ? темболее его можно сделать таким каким бы вы его хотели видеть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Могу поделится бафером с профилями, который написан на питоне. Все профили он сохраняет в БД.

Только импорты сами будете переделывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Короче, кому нужно, можете качать бафера, только не забудьте подредактировать импорты конфиги и sql запросы под себя.

Там в архиве два варианта скриптов: английский и русифицированный.

 

Жмите это сцылко!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Короче, кому нужно, можете качать бафера, только не забудьте подредактировать импорты конфиги и sql запросы под себя.

Там в архиве два варианта скриптов: английский и русифицированный.

 

Жмите это сцылко!

ты не забыл случайно html?

и указать под какие он хроники (он так то под gracia final как минимум)

Изменено пользователем xenapopalus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ты не забыл случайно html?

и указать под какие он хроники (он так то под gracia final как минимум)

Ты смотри на дату последнего поста :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...