vagos123 Posted December 29, 2010 Share Posted December 29, 2010 Hellooo! Bauwbas Here has shared a pc bang event but not full , as he misses FService.java and has client modding.... I want to share a pc bang event i found on a russian site of l2j development , in which there is no client modding , as it uses system messages , and generally it is full.. Haven't tested it yet as i am working on an Interlude Project and as you know it has a lot -beep-ing work! Anywayz here comes the code : Index: /Gs folder/java/l2justice/com/gameserver/services/FService.java =================================================================== --- /Gs folder/java/l2justice/com/gameserver/services/FService.java (revision 2928) +++ /Gs folder/java/l2justice/com/gameserver/services/FService.java (revision 2031) @@ -72,5 +72,5 @@ + public static final String EVENT_PC_BANG_POINT_FILE = "./config/custom/pcBang.properties"; Index: /Gs folder/java/l2justice/com/gameserver/PcPoint.java =================================================================== --- /Gs folder/java/l2justice/com/gameserver/PcPoint.java (revision 2031) +++ /Gs folder/java/l2justice/com/gameserver/PcPoint.java (revision `2031) @@ -0,0 +1,78 @@ +package l2justice.com.gameserver; + +import java.util.logging.Logger; + +import net.sf.l2j.Config; +import net.sf.l2j.gameserver.model.L2World; +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; +import net.sf.l2j.gameserver.network.SystemMessageId; +import net.sf.l2j.gameserver.network.serverpackets.SystemMessage; +import net.sf.l2j.util.Rnd; + + +/** + * @author Anumis + */ + +public class PcPoint implements Runnable +{ + Logger _log = Logger.getLogger(PcPoint.class.getName()); + private static PcPoint _instance; + + public static PcPoint getInstance() + { + if(_instance == null) + { + _instance = new PcPoint(); + } + + return _instance; + } + + private PcPoint() + { + _log.info("PcBang point event started."); + } + + @Override + public void run() + { + + int score = 0; + for(L2PcInstance activeChar: L2World.getInstance().getAllPlayers()) + { + + if(activeChar.getLevel() > Config.PCB_MIN_LEVEL ) + { + score = Rnd.get(Config.PCB_POINT_MIN, Config.PCB_POINT_MAX); + + if(Rnd.get(100) <= Config.PCB_CHANCE_DUAL_POINT) + { + score *= 2; + + activeChar.addPcBangScore(score); + + SystemMessage sm = new SystemMessage(SystemMessageId.DOUBLE_POINTS_YOU_GOT_$51_GLASSES_PC); + sm.addNumber(score); + activeChar.sendPacket(sm); + sm = null; + + activeChar.updatePcBangWnd(score, true, true); + } + else + { + activeChar.addPcBangScore(score); + + SystemMessage sm = new SystemMessage(SystemMessageId.YOU_RECEVIED_$51_GLASSES_PC); + sm.addNumber(score); + activeChar.sendPacket(sm); + sm = null; + + activeChar.updatePcBangWnd(score, true, false); + } + } + + activeChar = null; + } + } +} Index: /Gs folder/java/net/sf/l2j/Config.java =================================================================== --- /Gs folder/java/net/sf/l2j/Config.java (revision 2028) +++ /Gs folder/java/net/sf/l2j/Config.java (revision 2031) @@ -1687,55 +1687,48 @@ public static int HPH_INTERVALOFDOOROFALTER; public static int HPH_TIMEOFLOCKUPDOOROFALTAR; + //============================================================ + public static boolean PCB_ENABLE; + public static int PCB_MIN_LEVEL; + public static int PCB_POINT_MIN; + public static int PCB_POINT_MAX; + public static int PCB_CHANCE_DUAL_POINT; + public static int PCB_INTERVAL; //============================================================ + public static void loadPCBPointConfig() { + final String PCB_POINT = FService.EVENT_PC_BANG_POINT_FILE; + _log.info("Loading: " + PCB_POINT + "."); + try + { + Properties pcbpSettings = new Properties(); + InputStream is = new FileInputStream(new File(PCB_POINT)); + pcbpSettings.load(is); + is.close(); + PCB_ENABLE = Boolean.parseBoolean(pcbpSettings.getProperty("PcBangPointEnable", "true")); + PCB_MIN_LEVEL = Integer.parseInt(pcbpSettings.getProperty("PcBangPointMinLevel", "20")); + PCB_POINT_MIN = Integer.parseInt(pcbpSettings.getProperty("PcBangPointMinCount", "20")); + PCB_POINT_MAX = Integer.parseInt(pcbpSettings.getProperty("PcBangPointMaxCount", "1000000")); + if(PCB_POINT_MAX < 1) + { + PCB_POINT_MAX = Integer.MAX_VALUE; + } + PCB_CHANCE_DUAL_POINT = Integer.parseInt(pcbpSettings.getProperty("PcBangPointDualChance", "20")); + PCB_INTERVAL = Integer.parseInt(pcbpSettings.getProperty("PcBangPointTimeStamp", "900")); + } + catch(Exception e) + { + e.printStackTrace(); + throw new Error("Failed to Load " + PCB_POINT + " File."); + } + } + //============================================================ + Index: /Gs folder/java/net/sf/l2j/gameserver/clientpackets/MultiSellChoose.java =================================================================== --- /Gs folder/java/net/sf/l2j/gameserver/clientpackets/MultiSellChoose.java (revision 107) +++ /Gs folder/java/net/sf/l2j/gameserver/clientpackets/MultiSellChoose.java (revision 2031) @@ -200,4 +200,9 @@ { player.sendPacket(new SystemMessage(SystemMessageId.THE_CLAN_REPUTATION_SCORE_IS_TOO_LOW)); + return; + } + if(e.getItemId() == 65436 && e.getItemCount() * _amount > player.getPcBangScore()) + { + player.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS)); return; } Index: /Gs folder/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java =================================================================== --- /Gs folder/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java (revision 1726) +++ /Gs folder/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java (revision 2031) @@ -144,4 +144,5 @@ // activeChar.closeNetConnection(); } + if (activeChar.isGM()) { @@ -373,4 +374,5 @@ activeChar.checkAllowedSkills(); } + // send user info again .. just like the real client sendPacket(ui); if ((activeChar.getClanId() != 0) && (activeChar.getClan() != null)) @@ -396,4 +398,8 @@ notifyCastleOwner(activeChar); activeChar.onPlayerEnter(); + if(Config.PCB_ENABLE) + { + activeChar.showPcBangWindow(); + } TvTEvent.onLogin(activeChar); PcColorTable.getInstance().process(activeChar); Index: /Gs folder/java/net/sf/l2j/gameserver/network/serverpackets/ExPCCafePointInfo.java =================================================================== --- /Gs folder/java/net/sf/l2j/gameserver/network/serverpackets/ExPCCafePointInfo.java (revision 7) +++ /Gs folder/java/net/sf/l2j/gameserver/network/serverpackets/ExPCCafePointInfo.java (revision 2031) @@ -15,4 +15,6 @@ package net.sf.l2j.gameserver.network.serverpackets; +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; + @@ -25,13 +27,36 @@ { private static final String _S__FE_31_EXPCCAFEPOINTINFO = "[s] FE:31 ExPCCafePointInfo"; - private int _unk1, _unk2, _unk3, _unk4, _unk5 = 0; - public ExPCCafePointInfo(int val1, int val2, int val3, int val4, int val5) + private L2PcInstance _character; + private int m_AddPoint; + private int m_PeriodType; + private int RemainTime; + private int PointType; + + public ExPCCafePointInfo(L2PcInstance user, int modify, boolean add, int hour, boolean _double) { - _unk1 = val1; - _unk2 = val2; - _unk3 = val3; - _unk4 = val4; - _unk5 = val5; + _character = user; + m_AddPoint = modify; + + if(add) + { + m_PeriodType = 1; + PointType = 1; + } + else + { + if(add && _double) + { + m_PeriodType = 1; + PointType = 0; + } + else + { + m_PeriodType = 2; + PointType = 2; + } + } + + RemainTime = hour; } @@ -41,9 +66,9 @@ writeC(0xFE); writeH(0x31); - writeD(_unk1); - writeD(_unk2); - writeC(_unk3); - writeD(_unk4); - writeC(_unk5); + writeD(_character.getPcBangScore()); + writeD(m_AddPoint); + writeC(m_PeriodType); + writeD(RemainTime); + writeC(PointType); } @@ -56,3 +81,4 @@ return _S__FE_31_EXPCCAFEPOINTINFO; } + } Index: /Gs folder/java/net/sf/l2j/gameserver/network/SystemMessageId.java =================================================================== --- /Gs folder/java/net/sf/l2j/gameserver/network/SystemMessageId.java (revision 1926) +++ /Gs folder/java/net/sf/l2j/gameserver/network/SystemMessageId.java (revision 2031) @@ -3873,5 +3873,7 @@ DEATH_PENALTY_LIFTED(1917), DUNGEON_EXPIRES_IN_S1_MINUTES(1918), - S1(3000); + S1(3000), + DOUBLE_POINTS_YOU_GOT_$51_GLASSES_PC(3001), + YOU_RECEVIED_$51_GLASSES_PC(3002); private int _id; Index: /Gs folder/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- /Gs folder/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 2029) +++ /Gs folder/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 2031) @@ -93,5 +93,4 @@ import net.sf.l2j.gameserver.model.L2Clan; import net.sf.l2j.gameserver.model.L2ClanMember; import net.sf.l2j.gameserver.model.L2Effect; import net.sf.l2j.gameserver.model.L2Fishing; @@ -152,4 +151,5 @@ import net.sf.l2j.gameserver.network.L2GameClient; import net.sf.l2j.gameserver.network.SystemMessageId; +import net.sf.l2j.gameserver.network.serverpackets.ExPCCafePointInfo; import net.sf.l2j.gameserver.network.serverpackets.L2GameServerPacket; import net.sf.l2j.gameserver.network.serverpackets.ActionFailed; @@ -234,6 +234,6 @@ private static final String RESTORE_SKILL_SAVE = "SELECT skill_id,skill_level,effect_count,effect_cur_time, reuse_delay FROM character_skills_save WHERE char_obj_id=? AND class_index=? AND restore_type=? ORDER BY buff_index ASC"; private static final String DELETE_SKILL_SAVE = "DELETE FROM character_skills_save WHERE char_obj_id=? AND class_index=?"; - private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?, men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=? ,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=? ,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=? ,wantspeace=?,base_class=?,onlinetime=?,in_jail=?,jail_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=?, event_points=?,coupon=?,donator=?,death_penalty_level=?,koof=?,noob=?,idiot=? WHERE obj_id=?"; - private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, in_jail, jail_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,event_points,coupon, donator,death_penalty_level,koof,noob,idiot FROM characters WHERE obj_id=?"; + private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?, men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=? ,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=? ,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=? ,wantspeace=?,base_class=?,onlinetime=?,in_jail=?,jail_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=?, event_points=?,coupon=?,donator=?,death_penalty_level=?,koof=?,noob=?,idiot=?,pc_point=? WHERE obj_id=?"; + private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, in_jail, jail_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,event_points,coupon, donator,death_penalty_level,koof,noob,idiot,pc_point FROM characters WHERE obj_id=?"; private static final String RESTORE_CHAR_SUBCLASSES = "SELECT class_id,exp,sp,level,class_index FROM character_subclasses WHERE char_obj_id=? ORDER BY class_index ASC"; private static final String ADD_CHAR_SUBCLASS = "INSERT INTO character_subclasses (char_obj_id,class_id,exp,sp,level,class_index) VALUES (?,?,?,?,?,?)"; @@ -382,4 +382,6 @@ /** The Experience of the L2PcInstance before the last Death Penalty */ private long _expBeforeDeath; + /** PC BANG POINT */ + private int pcBangPoint = 0; /** * The Karma of the L2PcInstance (if higher than 0, the name of the L2PcInstance appears in red) @@ -6722,4 +6724,5 @@ player.setCoupon(rset.getInt("coupon")); player.setDeathPenaltyBuffLevel(rset.getInt("death_penalty_level")); + player.pcBangPoint = rset.getInt("pc_point"); // Add the L2PcInstance object in _allObjects // L2World.getInstance().storeObject(player); @@ -7105,5 +7108,6 @@ statement.setInt(61, isNoob() ? 1 : 0); statement.setInt(62, isIdiot() ? 1 : 0); - statement.setInt(63, getObjectId()); + statement.setInt(63, getPcBangScore()); + statement.setInt(64, getObjectId()); @@ -13002,9 +13006,32 @@ return (DM._started && _inEventDM) || (CTF._started && _inEventCTF) || (VIP._started && _inEventVIP) (Zombie._started && _ZombieZ) || && !isGM(); }*/ + public int getPcBangScore() + { + return pcBangPoint; + } + + public void reducePcBangScore(int to) + { + pcBangPoint -= to; + updatePcBangWnd(to, false, false); + } + + public void addPcBangScore(int to) + { + pcBangPoint += to; + } + + public void updatePcBangWnd(int score, boolean add, boolean duble) + { + ExPCCafePointInfo wnd = new ExPCCafePointInfo(this, score, add, 24, duble); + sendPacket(wnd); + } + + public void showPcBangWindow() + { + ExPCCafePointInfo wnd = new ExPCCafePointInfo(this, 0, false, 24, false); + sendPacket(wnd); + } } Index: /Gs folder/java/net/sf/l2j/gameserver/GameServer.java =================================================================== --- /Gs folder/java/net/sf/l2j/gameserver/GameServer.java (revision 1999) +++ /Gs folder/java/net/sf/l2j/gameserver/GameServer.java (revision 2031) @@ -24,7 +24,9 @@ import java.util.logging.Logger; +import l2justice.com.gameserver.PcPoint; import l2justice.com.gameserver.ai.special.manager.AILoader; import l2justice.com.gameserver.powerpak.PowerPak; import l2justice.com.gameserver.util.sql.SQLQueue; + import org.mmocore.network.*; @@ -575,4 +572,9 @@ { OnlinePlayers.getInstance(); + } + if(Config.PCB_ENABLE) + { + System.out.println("############PCB_ENABLE################"); + ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(PcPoint.getInstance(), Config.PCB_INTERVAL * 1000, Config.PCB_INTERVAL * 1000); } Util.printSection("L2JJustice EventManager"); @@ -612,4 +614,5 @@ // Initialize config Config.load(); + Config.loadPCBPointConfig(); ExternalConfig.loadconfig(); gameServer = new GameServer(); Index: /Gs folder/java/config/Custom/pcBang.properties =================================================================== --- /Gs folder/java/config/Custom/pcBang.properties (revision 2031) +++ /Gs folder/java/config/Custom/pcBang.properties (revision 2031) @@ -0,0 +1,17 @@ +#============================================================# +# PC Bang Point -# +#-------------------------------------------------------------# +PcBangPointEnable = True + +PcBangPointMinLevel = 20 + +PcBangPointMinCount = 20 +PcBangPointMaxCount = 1000000 + +PcBangPointDualChance = 20 + +PcBangPointTimeStamp = 900 NOTE : This is an event which can be used in all chronicles without HUGE adaptation.. So i don't want to see spamming like " What chronicle are u using ? " etc Enjoy it and cyaz till next time which will propably be with my project CyaZ and Have a nice New Year's Eve ! Quote Link to comment Share on other sites More sharing options...
icshiba Posted December 29, 2010 Share Posted December 29, 2010 usuless but thanks for share Quote Link to comment Share on other sites More sharing options...
vagos123 Posted December 29, 2010 Author Share Posted December 29, 2010 usuless but thanks for share why useless? :S Quote Link to comment Share on other sites More sharing options...
FighterBoss Posted December 29, 2010 Share Posted December 29, 2010 usuless but thanks for share maybe you don't find it intersting but is not so useless xD Thnx for sharing it Quote Link to comment Share on other sites More sharing options...
bauwbas Posted December 29, 2010 Share Posted December 29, 2010 useless, why? FService.java is same as Config.java, in Fservice.java (usualy russian packs) is links to config files, for e.g. fortress_config = config/mods/fortress.properties :)) Quote Link to comment Share on other sites More sharing options...
icshiba Posted December 29, 2010 Share Posted December 29, 2010 why useless? :S well this is my opinion maybe for you is usefull xD Quote Link to comment Share on other sites More sharing options...
heopas Posted December 30, 2010 Share Posted December 30, 2010 Ok i make it work l2j freya with a lot of modifications. The problem now is, how i will make it work with multisell :/ Quote Link to comment Share on other sites More sharing options...
kas23 Posted December 30, 2010 Share Posted December 30, 2010 very good share man thnx :D Quote Link to comment Share on other sites More sharing options...
DominiQue Posted December 30, 2010 Share Posted December 30, 2010 credits? Quote Link to comment Share on other sites More sharing options...
heopas Posted December 30, 2010 Share Posted December 30, 2010 Ok i make it work l2j freya with a lot of modifications. The problem now is, how i will make it work with multisell :/ Quote Link to comment Share on other sites More sharing options...
`Rοmeο Posted December 30, 2010 Share Posted December 30, 2010 credits? credits to serk Quote Link to comment Share on other sites More sharing options...
heopas Posted December 30, 2010 Share Posted December 30, 2010 EDIT: Read Down... Quote Link to comment Share on other sites More sharing options...
IzNoO Posted December 30, 2010 Share Posted December 30, 2010 TnX! Looking Interesting... Quote Link to comment Share on other sites More sharing options...
heopas Posted December 30, 2010 Share Posted December 30, 2010 Making a trading npc. Taking Bang Points and giving a item. The only problem i have is that st.getPlayer().reducePcBangScore(POINTS) <- THis getting error. Any idea? import sys from com.l2jserver.gameserver.model.actor.instance import L2PcInstance from java.util import Iterator from com.l2jserver.gameserver.datatables import SkillTable from com.l2jserver import L2DatabaseFactory from com.l2jserver.gameserver.model.quest import State from com.l2jserver.gameserver.model.actor.appearance import PcAppearance from com.l2jserver.gameserver.model.quest import QuestState from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest from com.l2jserver.gameserver.model.quest import State from com.l2jserver.gameserver.model.quest import QuestState from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest from com.l2jserver.gameserver.network.serverpackets import PledgeShowInfoUpdate from com.l2jserver.gameserver.network.serverpackets import SystemMessage qn = "90099_BangPoints" NPC=[32070] COINS= 4356 COUNT = 10 POINTS = 100 QuestId = 8205 QuestName = "BangPoints" QuestDesc = "custom" InitialHtml = "1.htm" print "INFO Loaded: Points Bying Manager" class Quest (JQuest) : def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) def onEvent(self,event,st): htmltext = event if ((st.getPlayer().getPcBangScore()) < COUNT) : htmltext = "Error1.htm" else: st.getPlayer().setTarget(st.getPlayer()) if event == "2": st.giveItems(COINS,COUNT) st.getPlayer().reducePcBangScore(POINTS) st.playSound("ItemSound.quest_finish") st.setState(State.COMPLETED) st.exitQuest(1) return "End.htm" if htmltext != event: st.setState(State.COMPLETED) st.exitQuest(1) return htmltext def onTalk (self,npc,player): st = player.getQuestState(qn) htmltext = "<html><head><body>I have nothing to say to you</body></html>" st.setState(State.STARTED) return InitialHtml QUEST = Quest(QuestId,str(QuestId) + "_" + QuestName,QuestDesc) for npcId in NPC: QUEST.addStartNpc(npcId) QUEST.addTalkId(npcId) Quote Link to comment Share on other sites More sharing options...
xero0xx Posted December 30, 2010 Share Posted December 30, 2010 Thanks :) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.