Sorry Matim
So.. when I tested the system on the old server Red Line there could use buffs, and special items starting at points accrued when mobs ditched...
On this code, I found a source in
See:
Index: java/net/sf/l2j/gameserver/network/clientpackets/MultiSellChoose.java
===================================================================
--- java/net/sf/l2j/gameserver/network/clientpackets/MultiSellChoose.java (revision 3695)
+++ java/net/sf/l2j/gameserver/network/clientpackets/MultiSellChoose.java (working copy)
@@ -32,6 +32,7 @@
import net.sf.l2j.gameserver.model.itemcontainer.PcInventory;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.network.serverpackets.ExBrExtraUserInfo;
+import net.sf.l2j.gameserver.network.serverpackets.ExPCCafePointInfo; // add - PCCafePoint
import net.sf.l2j.gameserver.network.serverpackets.ItemList;
import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
@@ -241,6 +242,17 @@
}
break;
}
+ // add start - PCCafePoint
+ case 14559:
+ {
+ if (player.getPCCafePoint() < e.getItemCount() * _amount)
+ {
+ player.sendPacket(new SystemMessage(SystemMessageId.SHORT_OF_ACCUMULATED_POINTS));
+ return;
+ }
+ break;
+ }
+ // add end
default:
{
// if this is not a list that maintains enchantment, check the count of all items that have the given id.
@@ -284,6 +296,18 @@
player.sendPacket(new ExBrExtraUserInfo(player));
break;
}
+ // add start - PCCafePoint
+ case 14559:
+ {
+ int costPoint = (int)(e.getItemCount() * _amount);
+ int leftPoint = player.getPCCafePoint() - costPoint;
+ player.setPCCafePoint(leftPoint);
+ player.sendPacket(new SystemMessage(SystemMessageId.USING_S1_PCPOINT).addItemNumber(costPoint));
+ costPoint *= -1;
+ player.sendPacket(new ExPCCafePointInfo(player.getPCCafePoint(), costPoint, 2, 10000, 4));
+ break;
+ }
+ // add end
default:
{
Index: java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
===================================================================
--- java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java (revision 3695)
+++ java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java (working copy)
@@ -439,6 +439,8 @@
TvTEvent.onLogin(activeChar);
L2ClassMasterInstance.showQuestionMark(activeChar);
+
+ activeChar.startPCCafePointTask(); // add - PCCafePoint
}
/**
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 3695)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -163,6 +163,7 @@
import net.sf.l2j.gameserver.network.serverpackets.ExGetOnAirShip;
import net.sf.l2j.gameserver.network.serverpackets.ExOlympiadMode;
import net.sf.l2j.gameserver.network.serverpackets.ExOlympiadUserInfo;
+import net.sf.l2j.gameserver.network.serverpackets.ExPCCafePointInfo; // add - PCCafePoint
import net.sf.l2j.gameserver.network.serverpackets.ExPrivateStoreSetWholeMsg;
import net.sf.l2j.gameserver.network.serverpackets.ExSetCompassZoneCode;
import net.sf.l2j.gameserver.network.serverpackets.ExSpawnEmitter;
@@ -253,9 +254,9 @@
private static final String DELETE_SKILL_SAVE = "DELETE FROM character_skills_save WHERE charId=? AND class_index=?";
// Character Character SQL String Definitions:
- private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,charId,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,
fame,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,
base_class,newbie,nobless,power_grade,last_recom_date)
values ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
- private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,
exp=?,expBeforeDeath=?,sp=?,karma=?,fame=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,
deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,
punish_level=?,punish_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,
apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,
death_penalty_level=?,bookmarkslot=?,vitality_points=? WHERE charId=?";
- private static final String RESTORE_CHARACTER = "SELECT account_name, charId, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, fame, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,bookmarkslot,vitality_points FROM characters WHERE charId=?";
+ private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,charId,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,
fame,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,
base_class,newbie,nobless,power_grade,last_recom_date,pc_point)
values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; // edit - PCCafePoint
+ private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,
exp=?,expBeforeDeath=?,sp=?,karma=?,fame=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,
deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,
punish_level=?,punish_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,
apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,
death_penalty_level=?,bookmarkslot=?,vitality_points=?,pc_point=? WHERE charId=?"; // edit - PCCafePoint
+ private static final String RESTORE_CHARACTER = "SELECT account_name, charId, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, fame, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,bookmarkslot,vitality_points,pc_point FROM characters WHERE charId=?"; // edit - PCCafePoint
// Character Teleport Bookmark:
private static final String INSERT_TP_BOOKMARK = "INSERT INTO character_tpbookmark (charId,Id,x,y,z,icon,tag,name) values (?,?,?,?,?,?,?,?)";
@@ -6004,6 +6005,7 @@
stopChargeTask();
stopFameTask();
stopVitalityTask();
+ stopPCCafePointTask(); // add - PCCafePoint
}
/**
@@ -7065,6 +7067,7 @@
statement.setInt(34, isNoble() ? 1 :0);
statement.setLong(35, 0);
statement.setLong(36,System.currentTimeMillis());
+ statement.setInt(37, getPCCafePoint()); // add - PCCafePoint
statement.executeUpdate();
statement.close();
@@ -7249,6 +7252,8 @@
// Set Teleport Bookmark Slot
player.setBookMarkSlot(rset.getInt("BookmarkSlot"));
+ player.setPCCafePoint(rset.getInt("pc_point")); // add - PCCafePoint
+
// Retrieve the name and ID of the other characters assigned to this account.
PreparedStatement stmt = con.prepareStatement("SELECT charId, char_name FROM characters WHERE account_name=? AND charId<>?");
stmt.setString(1, player._accountName);
@@ -7581,7 +7586,8 @@
statement.setLong(51, getDeathPenaltyBuffLevel());
statement.setInt(52, getBookMarkSlot());
statement.setInt(53, getVitalityPoints());
- statement.setInt(54, getObjectId());
+ statement.setInt(54, getPCCafePoint()); // add - PCCafePoint
+ statement.setInt(55, getObjectId());
statement.execute();
statement.close();
@@ -13976,4 +13982,57 @@
break;
}
}
+
+ private int _PCCafePoint = 20000;
+ protected Future<?> _PCCafePontTask = null;
+
+ public int getPCCafePoint()
+ {
+ return _PCCafePoint;
+ }
+
+ public void setPCCafePoint(int point)
+ {
+ _PCCafePoint = point;
+ }
+
+ public void startPCCafePointTask()
+ {
+ if (_PCCafePontTask == null)
+ _PCCafePontTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new PCCafePontTask(this), 1800000, 1800000);
+ sendPacket(new ExPCCafePointInfo(getPCCafePoint(), 1, 1, 10000, 0));
+ }
+
+ private void stopPCCafePointTask()
+ {
+ if (_PCCafePontTask != null)
+ {
+ _PCCafePontTask.cancel(false);
+ _PCCafePontTask = null;
+ }
+ }
+
+ class PCCafePontTask implements Runnable
+ {
+ private final L2PcInstance _player;
+ protected PCCafePontTask(L2PcInstance player)
+ {
+ _player = player;
+ }
+ public void run()
+ {
+ if (Rnd.get(100) > 90)
+ {
+ setPCCafePoint(getPCCafePoint() + 200);
+ _player.sendPacket(new SystemMessage(SystemMessageId.ACQUIRED_S1_PCPOINT_DOUBLE).addItemNumber(200));
+ _player.sendPacket(new ExPCCafePointInfo(getPCCafePoint(), 200, 1, 10000, 0));
+ }
+ else
+ {
+ setPCCafePoint(getPCCafePoint() + 100);
+ _player.sendPacket(new SystemMessage(SystemMessageId.ACQUIRED_S1_PCPOINT).addItemNumber(100));
+ _player.sendPacket(new ExPCCafePointInfo(getPCCafePoint(), 100, 1, 10000, 0));
+ }
+ }
+ }
}
2. Add data-side handlers
TARGET : handlers.MasterHandler.java
.
.
private static void loadItemHandlers()
{
+ ItemHandler.getInstance().registerItemHandler(new PCCafePoint()); // add - PCCafePoint
ItemHandler.getInstance().registerItemHandler(new ScrollOfResurrection());
ADD : handlers.itemhandlers.PCCafePoint.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 handlers.itemhandlers;
/**
*
* @author digiri99 < L2Dot Corea Team>
* http://www.l2jtw..../trac/L2AE
*/
import net.sf.l2j.gameserver.handler.IItemHandler;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.actor.L2Playable;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.network.serverpackets.ExPCCafePointInfo;
import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
public class PCCafePoint implements IItemHandler
{
public void useItem(L2Playable player, L2ItemInstance item)
{
if (!(player instanceof L2PcInstance))
return;
L2PcInstance activeChar = (L2PcInstance) player;
if (activeChar.isCastingNow())
return;
activeChar.destroyItem("PC BANG POINT ", item.getObjectId(), 1, null, false);
int leftPoint = activeChar.getPCCafePoint() + 7000;
activeChar.setPCCafePoint(leftPoint);
activeChar.sendPacket(new SystemMessage(SystemMessageId.ACQUIRED_S1_PCPOINT).addItemNumber(7000));
activeChar.sendPacket(new ExPCCafePointInfo(activeChar.getPCCafePoint(), 7000, 1, 10000, 0));
}
}
3. Add a database field, and specify the item handler
3.1 Character in the PCpoint table Add Field Points
3.1.1 In the absence of an existing character information
ALTER TABLE characters ADD `pc_point` int(11) NOT NULL;
3.1.2 If you have an existing character information
ALTER TABLE characters ADD `pc_point` int(11) DEFAULT NULL;
UPDATE characters SET pc_point = '20000';
3.2 Others in this PCpoint item table handler points to the items specified Coupon
UPDATE etcitem SET handler='PCCafePoint' where item_id='14559';
4. multisell exercise
<?xml version='1.0' encoding='utf-8'?>
<!-- vitamin item : PC point buy -->
<list>
<item id="1">
<production id="13239" count="1"/>
<ingredient id="14559" count="1000"/>
</item>
<item id="2">
<production id="13240" count="1"/>
<ingredient id="14559" count="1000"/>
</item>
<item id="3">
<production id="13241" count="1"/>
<ingredient id="14559" count="1000"/>
</item>
<item id="4">
<production id="13242" count="1"/>
<ingredient id="14559" count="1000"/>
</item>
<item id="5">
<production id="13243" count="1"/>
<ingredient id="14559" count="1000"/>
</item>
<item id="6">
<production id="13244" count="1"/>
<ingredient id="14559" count="1000"/>
</item>
<item id="7">
<production id="13245" count="1"/>
<ingredient id="14559" count="1000"/>
</item>
<item id="8">
<production id="13246" count="1"/>
<ingredient id="14559" count="1000"/>
</item>
<item id="9">
<production id="13247" count="1"/>
<ingredient id="14559" count="1000"/>
</item>
<item id="10">
<production id="13022" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="11">
<production id="14053" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="12">
<production id="14054" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="13">
<production id="14091" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="14">
<production id="14092" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="15">
<production id="13254" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="16">
<production id="14093" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="17">
<production id="14094" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="18">
<production id="14095" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="19">
<production id="13019" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="20">
<production id="13020" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="21">
<production id="13017" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="22">
<production id="13018" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="23">
<production id="14064" count="1"/>
<ingredient id="14559" count="10000"/>
</item>
<item id="24">
<production id="14063" count="1"/>
<ingredient id="14559" count="10000"/>
</item>
<item id="25">
<production id="14062" count="1"/>
<ingredient id="14559" count="10000"/>
</item>
<item id="26">
<production id="14061" count="1"/>
<ingredient id="14559" count="10000"/>
</item>
<item id="27">
<production id="13015" count="1"/>
<ingredient id="14559" count="20000"/>
</item>
<item id="28">
<production id="13016" count="1"/>
<ingredient id="14559" count="500"/>
</item>
<item id="29">
<production id="13021" count="1"/>
<ingredient id="14559" count="5000"/>
</item>
<item id="30">
<production id="14055" count="1"/>
<ingredient id="14559" count="10000"/>
</item>
<item id="31">
<production id="10649" count="1"/>
<ingredient id="14559" count="1000"/>
</item>
<item id="32">
<production id="14559" count="1"/>
<ingredient id="3554" count="2"/>
</item>
</list>
I change this to Gracia Epilogue, but still dont know how to make the event work, here is the code
This is the only picture I have about this system.. :-\