RoyalGost 277 Опубликовано 13 апреля, 2013 (изменено) Всем привет! Думаю многие пользовалители нашего портала, собственно как и я сам ищут исходники для ПА. Собственно, ребята, поделитесь кодом или дифкой если кто имеет таковой, желательно для сборки L2jFrozen , буду очень признателен. Изменено 13 апреля, 2013 пользователем RoyalGost Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
RoyalGost 277 Опубликовано 13 апреля, 2013 (изменено) На форуме полазил, увидел 1 тему с якобы премиум аккаунтом, скачал его, а там весь код кривой. Поделитесь с рабочим кому не жалко!=)) Думаю многим это понадобится..=)) Изменено 13 апреля, 2013 пользователем RoyalGost Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 13 апреля, 2013 (изменено) Что тебе именно нужно для премиум сервиса? П.С. У меня есть полноценная ПА система с менеджером покупки, оповещением при входе и проверками (не теми кривыми). Но ее не отдам, но простенькое написать могу Изменено 13 апреля, 2013 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Ferrari 49 Опубликовано 13 апреля, 2013 во фрозенах встоенное ПА есть Donator system Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
RoyalGost 277 Опубликовано 14 апреля, 2013 во фрозенах встоенное ПА есть Donator system Там есть, но он навсегда и лагает. Т.к. когда даёшь его, до релога он работает, а дальше просто ник цветной а вот бонусов нету. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
RoyalGost 277 Опубликовано 14 апреля, 2013 Что тебе именно нужно для премиум сервиса? П.С. У меня есть полноценная ПА система с менеджером покупки, оповещением при входе и проверками (не теми кривыми). Но ее не отдам, но простенькое написать могу Отписал в лс. Мне нужен простенький ПА. Чтобы добавлял к статам на дроп\споил\адену\сп\опыт\квест + цветной ник ПА по возможности. Но увы мои познания ещё не столь велики дабы сложить такое) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Samsy 37 Опубликовано 14 апреля, 2013 так там можно настроить все это, у меня норм было с па на фрозенах Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
RoyalGost 277 Опубликовано 14 апреля, 2013 Там ПА только навсегда выдаётся. На определённое кол-во дней нету. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Samsy 37 Опубликовано 14 апреля, 2013 так настроить можно, возьму шарувую сборку la2hate.ru Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
RoyalGost 277 Опубликовано 14 апреля, 2013 (изменено) так настроить можно, возьму шарувую сборку la2hate.ru Ничего там настраивать нельзя, не нужно тут рекламить кривые проекты, на которые даже зайти нельзя. И не нужна мне какая нибудь другая сборка, мне нужен именно исходник. Изменено 14 апреля, 2013 пользователем RoyalGost Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
alf69 10 Опубликовано 14 апреля, 2013 $500 и реализую для тебя Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 14 апреля, 2013 Начал делать, но роботы там по больше чем думал. Сделал ему менеджера и новую систему. Но конекты чуть другие, и еще попарить нужно было мозги я забил. Там доделать не так много, кто захочет напишите и доделайте, а то времени нет( Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
k0ss11 302 Опубликовано 14 апреля, 2013 вот в pcinstance розьирайся с дропом итд сам. +создай колонку в базею //Премиум акаунт private static final String INSERT_PREMIUMSERVICE = "INSERT INTO account_premium (account_name,premium_service,enddate) values(?,?,?)"; private static final String RESTORE_PREMIUMSERVICE = "SELECT premium_service,enddate FROM account_premium WHERE account_name=?"; private static final String UPDATE_PREMIUMSERVICE = "UPDATE account_premium SET premium_service=?,enddate=? WHERE account_name=?"; private void createPSdb() { java.sql.Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement(INSERT_PREMIUMSERVICE); statement.setString(1, _accountName); statement.setInt(2, 0); statement.setLong(3, 0); statement.executeUpdate(); statement.close(); } catch (Exception e) { _log.warning("Could not insert char data: " + e); e.printStackTrace(); } finally { try { con.close(); } catch (Exception e) {} } } public static void restorePremServiceData(L2PcInstance player, String account) { boolean sucess = false; java.sql.Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement(RESTORE_PREMIUMSERVICE); statement.setString(1, account); ResultSet rset = statement.executeQuery(); while (rset.next()) { sucess = true; if (Config.USE_PREMIUMSERVICE) { if (rset.getLong("enddate") <= System.currentTimeMillis()) { PStimeOver(account); player.setPremiumService(0); } else player.setPremiumService(rset.getInt("premium_service")); } else player.setPremiumService(0); } statement.close(); } catch (Exception e) { _log.warning("PremiumService: Could not restore PremiumService data for:" + account + "." + e); e.printStackTrace(); } finally { try { con.close(); } catch (Exception e) {} } if (sucess == false) { player.createPSdb(); player.setPremiumService(0); } } private static void PStimeOver(String account) { java.sql.Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement(UPDATE_PREMIUMSERVICE); statement.setInt(1, 0); statement.setLong(2, 0); statement.setString(3, account); statement.execute(); statement.close(); } catch (Exception e) { _log.warning("PremiumService: Could not increase data"); } finally { try { con.close(); } catch (Exception e) {} } } //PA end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 14 апреля, 2013 Да я ему это все уже написал, даже дроп изменил и добавил ф-и проверки на па не карявые. Но на больше времени нет Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 14 апреля, 2013 Index: /Server/java/config/rates.properties =================================================================== --- /Server/java/config/rates.properties (revision 23) +++ /Server/java/config/rates.properties (revision 24) @@ -28,4 +28,27 @@ RateSiegeGuardsPrice = 2 +# --------------------------------------------------------------------------- +# Ñèñòåìà Ïðåìèóì-Àêêàóíò (ÏÀ) +# --------------------------------------------------------------------------- +# Âêëþ÷èòü ôóíêöèþ Ïðåìèóì-Àêêàóíò (ÏÀ)? +# Ïî óìîë÷àíèþ: False +UsePremiumServices = False + +# Êàêèå ðåéòû áóäóò ïðèíèìàòüñÿ äëÿ îáëàäàòåëåé ÏÀ? +PremiumRateXp = 2 +PremiumRateSp = 2 +PremiumRateDropItemsById = 57,2 +PremiumRateDropItems = 2 +PremiumRateDropSpoil = 2 +PremiumRateDropQuest = 2 + +# Âêëþ÷èòü íàäáàâêó ê øàíñó çàòî÷êè äëÿ îáëàäàòåëåé ïðåìèóìà? +# Ïî óìîë÷àíèþ: False +PremiumEnchBonus = false + +# Íàäáàâêà ê øàíñó çàòî÷êè, ðàáîòàåò òîëüêî ïðè PremiumEnchBonus = true +# ïðèìåð: åñëè øàíñ çàòî÷êè 75%, à PremiumEnchantChanceBonus = 5 òî èòîãîâûé øàíñ 80% +PremiumEnchantChanceBonus = 0 + # Quest Multipliers # Warning: Many quests need to be rewritten Index: /Server/java/ru/l2m/util/DatabaseCommands.java =================================================================== --- /Server/java/ru/l2m/util/DatabaseCommands.java (revision 23) +++ /Server/java/ru/l2m/util/DatabaseCommands.java (revision 24) @@ -73,4 +73,8 @@ public static final String SELECT_CHAR_TRANSFORM = "SELECT transform_id FROM characters WHERE charId=?"; public static final String UPDATE_CHAR_TRANSFORM = "UPDATE characters SET transform_id=? WHERE charId=?"; + // Character PremiumService String Definitions: + private static final String INSERT_PREMIUMSERVICE = "INSERT INTO account_premium (account_name,premium_service,enddate) values(?,?,?)"; + private static final String RESTORE_PREMIUMSERVICE = "SELECT premium_service,enddate FROM account_premium WHERE account_name=?"; + private static final String UPDATE_PREMIUMSERVICE = "UPDATE account_premium SET premium_service=?,enddate=? WHERE account_name=?"; /** @@ -1702,3 +1706,118 @@ return result; } + + public void createPSdb() + { + Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement(INSERT_PREMIUMSERVICE); + statement.setString(1, _accountName); + statement.setInt(2, 0); + statement.setLong(3, 0); + statement.executeUpdate(); + statement.close(); + } + catch (Exception e) + { + _log.log(Level.SEVERE, "Could not insert char data: ", e); + e.printStackTrace(); + return; + } + finally + { + try + { + if (con != null) + con.close(); + } + catch (SQLException e) + { + e.printStackTrace(); + } + } + } + + public static void PStimeOver(String account) + { + Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement(UPDATE_PREMIUMSERVICE); + statement.setInt(1, 0); + statement.setLong(2, 0); + statement.setString(3, account); + statement.execute(); + statement.close(); + } + catch (SQLException e) + { + _log.log(Level.SEVERE, "PremiumService: Could not increase data"); + } + finally + { + try + { + if (con != null) + con.close(); + } + catch (SQLException e) + { + e.printStackTrace(); + } + } + } + + public static void restorePremServiceData(L2PcInstance player, String account) + { + boolean sucess=false; + Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement(RESTORE_PREMIUMSERVICE); + statement.setString(1, account); + ResultSet rset = statement.executeQuery(); + while (rset.next()) + { + sucess=true; + if (Config.USE_PREMIUMSERVICE){ + if (rset.getLong("enddate") <= System.currentTimeMillis()){ + PStimeOver(account); + player.setPremiumService(0); + } + else + player.setPremiumService(rset.getInt("premium_service")); + } + else + player.setPremiumService(0); + } + statement.close(); + } + catch (Exception e) + { + _log.log(Level.SEVERE, "PremiumService: Could not restore PremiumService data for:" + account + ".", e); + e.printStackTrace(); + } + finally + { + try + { + if (con != null) + con.close(); + } + catch (SQLException e) + { + e.printStackTrace(); + } + } + if (sucess==false) + { + player.createPSdb(); + player.setPremiumService(0); + } + } + } Index: /Server/java/ru/l2simple/gameserver/Prem.java =================================================================== --- /Server/java/ru/l2simple/gameserver/Prem.java (revision 24) +++ /Server/java/ru/l2simple/gameserver/Prem.java (revision 24) @@ -0,0 +1,52 @@ +package ru.l2simple.gameserver; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +import ru.l2simple.Config; +import ru.l2simple.L2DatabaseFactory; + +public class Prem +{ + private long _end_pr_date; + public static final Prem getInstance() + { + return SingletonHolder._instance; + } + public long getPremServiceData(String playerAcc) + { + + Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement("SELECT premium_service,enddate FROM account_premium WHERE account_name=?"); + statement.setString(1, playerAcc); + ResultSet rset = statement.executeQuery(); + while (rset.next()) + { + if (Config.USE_PREMIUMSERVICE) + { + _end_pr_date = rset.getLong("enddate"); + } + } + statement.close(); + } + catch (Exception e) + { + } + finally + { + L2DatabaseFactory.close(con); + } + return _end_pr_date; + } + + @SuppressWarnings("synthetic-access") + + private static class SingletonHolder + { + protected static final Prem _instance = new Prem(); + } +} Index: /Server/java/ru/l2simple/gameserver/network/clientpackets/RequestEnchantItem.java =================================================================== --- /Server/java/ru/l2simple/gameserver/network/clientpackets/RequestEnchantItem.java (revision 23) +++ /Server/java/ru/l2simple/gameserver/network/clientpackets/RequestEnchantItem.java (revision 24) @@ -167,4 +167,9 @@ return; } + + if (Config.PREMIUM_ENCH_BONUS && activeChar.getPremiumService()==1) + { + chance += Config.PREMIUM_ENCH_CHANCE_BONUS; + } if (Rnd.get(100) < chance) Index: /Server/java/ru/l2simple/gameserver/network/clientpackets/EnterWorld.java =================================================================== --- /Server/java/ru/l2simple/gameserver/network/clientpackets/EnterWorld.java (revision 23) +++ /Server/java/ru/l2simple/gameserver/network/clientpackets/EnterWorld.java (revision 24) @@ -4,4 +4,7 @@ package ru.l2simple.gameserver.network.clientpackets; +import java.util.Calendar; +import java.text.SimpleDateFormat; + import java.io.UnsupportedEncodingException; import java.sql.Connection; @@ -17,6 +20,7 @@ import ru.l2simple.Base64; -import ru.l2simple.Config; +import ru.l2simple.Config; import ru.l2simple.L2DatabaseFactory; +import ru.l2simple.gameserver.Prem; import ru.l2simple.gameserver.Announcements; import ru.l2simple.gameserver.GmListTable; @@ -69,4 +73,5 @@ import ru.l2simple.gameserver.network.serverpackets.ExBirthdayPopup; import ru.l2simple.gameserver.network.serverpackets.ExBrExtraUserInfo; +import ru.l2simple.gameserver.network.serverpackets.ExBrPremiumState; import ru.l2simple.gameserver.network.serverpackets.ExGetBookMarkInfoPacket; import ru.l2simple.gameserver.network.serverpackets.ExNoticePostArrived; @@ -323,4 +328,7 @@ sendPacket(new ShortCutInit(activeChar)); + // Send PA Status + sendPacket(new ExBrPremiumState(activeChar.getObjectId(), activeChar.getPremiumService())); + // Send Action list activeChar.sendPacket(new ExBasicActionList(activeChar)); @@ -389,8 +397,17 @@ sendPacket(new SystemMessage(SystemMessageId.WELCOME_TO_LINEAGE)); + activeChar.sendMessage("This server uses L2Simple files, a project developed by Naik"); activeChar.sendMessage("Copyright 2012 www.L2Simple.ru"); + SevenSigns.getInstance().sendCurrentPeriodMsg(activeChar); Announcements.getInstance().showAnnouncements(activeChar); + + SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm"); + long _end_prem_date; + _end_prem_date = Prem.getInstance().getPremServiceData(activeChar.getAccountName()); + + activeChar.sendMessage("Premium Service End - " + String.valueOf(format.format(_end_prem_date))); + activeChar.sendMessage("Now Date - " + String.valueOf(format.format(System.currentTimeMillis()))); if (Config.PETITIONING_ALLOWED) Index: /Server/java/ru/l2simple/gameserver/model/L2Party.java =================================================================== --- /Server/java/ru/l2simple/gameserver/model/L2Party.java (revision 23) +++ /Server/java/ru/l2simple/gameserver/model/L2Party.java (revision 24) @@ -622,9 +622,11 @@ * */ - public void distributeXpAndSp(long xpReward, int spReward, List<L2Playable> rewardedMembers, int topLvl, int partyDmg, L2Attackable target) + public void distributeXpAndSp(long xpReward_pr, int spReward_pr, long xpReward, int spReward, List<L2Playable> rewardedMembers, int topLvl, int partyDmg, L2Attackable target) { L2SummonInstance summon = null; List<L2Playable> validMembers = getValidMembers(rewardedMembers, topLvl); + long CalcXPReward; + int CalcSPReward; float penalty; double sqLevel; @@ -633,4 +635,6 @@ xpReward *= getExpBonus(validMembers.size()); spReward *= getSpBonus(validMembers.size()); + xpReward_pr *= getExpBonus(validMembers.size()); + spReward_pr *= getSpBonus(validMembers.size()); double sqLevelSum = 0; @@ -650,4 +654,15 @@ continue; } + + if (member.getPremiumService()==1) + { + CalcXPReward=xpReward_pr; + CalcSPReward=spReward_pr; + } + else + { + CalcXPReward=xpReward; + CalcSPReward=spReward; + } penalty = 0; @@ -678,6 +693,6 @@ if (!member.isDead()) { - long addexp = Math.round(member.calcStat(Stats.EXPSP_RATE, xpReward * preCalculation, null, null)); - int addsp = (int)member.calcStat(Stats.EXPSP_RATE, spReward * preCalculation, null, null); + long addexp = Math.round(member.calcStat(Stats.EXPSP_RATE, CalcXPReward * preCalculation, null, null)); + int addsp = (int)member.calcStat(Stats.EXPSP_RATE, CalcSPReward * preCalculation, null, null); if (member instanceof L2PcInstance) { Index: /Server/java/ru/l2simple/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- /Server/java/ru/l2simple/gameserver/model/actor/instance/L2PcInstance.java (revision 23) +++ /Server/java/ru/l2simple/gameserver/model/actor/instance/L2PcInstance.java (revision 24) @@ -7133,4 +7133,5 @@ player = new L2PcInstance(objectId, template, rset.getString("account_name"), app); + restorePremServiceData(player,rset.getString("account_name")); player.setName(rset.getString("char_name")); player._lastAccess = rset.getLong("lastAccess"); Index: /Server/java/ru/l2simple/gameserver/model/actor/L2Attackable.java =================================================================== --- /Server/java/ru/l2simple/gameserver/model/actor/L2Attackable.java (revision 23) +++ /Server/java/ru/l2simple/gameserver/model/actor/L2Attackable.java (revision 24) @@ -761,6 +761,6 @@ { L2Party attackerParty; - long exp; - int levelDiff, partyDmg, partyLvl, sp; + long exp, exp_premium; + int levelDiff, partyDmg, partyLvl, sp, sp_premium; float partyMul, penalty; RewardInfo reward2; @@ -814,5 +814,5 @@ levelDiff = attacker.getLevel() - getLevel(); - tmp = calculateExpAndSp(levelDiff, damage); + tmp = calculateExpAndSp(levelDiff, damage, attacker.getPremiumService()); exp = tmp[0]; exp *= 1 - penalty; @@ -968,5 +968,8 @@ // Calculate Exp and SP rewards - tmp = calculateExpAndSp(levelDiff, partyDmg); + tmp = calculateExpAndSp(levelDiff, partyDmg, 1); + exp_premium = tmp[0]; + sp_premium = tmp[1]; + tmp = calculateExpAndSp(levelDiff, partyDmg, 0); exp = tmp[0]; sp = tmp[1]; @@ -986,4 +989,6 @@ exp *= partyMul; sp *= partyMul; + exp_premium *= partyMul; + sp_premium *= partyMul; // Check for an over-hit enabled strike @@ -997,4 +1002,5 @@ player.sendPacket(new SystemMessage(SystemMessageId.OVER_HIT)); exp += calculateOverhitExp(exp); + exp_premium += calculateOverhitExp(exp_premium); } } @@ -1016,5 +1022,5 @@ } } - attackerParty.distributeXpAndSp(exp, sp, rewardedMembers, partyLvl, partyDmg, this); + attackerParty.distributeXpAndSp(exp_premium, sp_premium, exp, sp, rewardedMembers, partyLvl, partyDmg, this); } } @@ -1345,10 +1351,23 @@ // Applies Drop rates - if (Config.RATE_DROP_ITEMS_ID.get(drop.getItemId()) != 0) + if (lastAttacker.getPremiumService()==1) + if (Config.PREMIUM_RATE_DROP_ITEMS_ID.get(drop.getItemId()) != 0) + dropChance *= Config.PREMIUM_RATE_DROP_ITEMS_ID.get(drop.getItemId()); + else if (Config.RATE_DROP_ITEMS_ID.get(drop.getItemId()) != 0) dropChance *= Config.RATE_DROP_ITEMS_ID.get(drop.getItemId()); else if (isSweep) - dropChance *= Config.RATE_DROP_SPOIL; + { + if (lastAttacker.getPremiumService()==1) + dropChance *= Config.PREMIUM_RATE_DROP_SPOIL; + else + dropChance *= Config.RATE_DROP_SPOIL; + } else - dropChance *= isRaid() && !isRaidMinion() ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS; + { + if (lastAttacker.getPremiumService()==1) + dropChance *= isRaid() && !isRaidMinion() ? Config.PREMIUM_RATE_DROP_ITEMS_BY_RAID : Config.PREMIUM_RATE_DROP_ITEMS; + else + dropChance *= isRaid() && !isRaidMinion() ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS; + } if (Config.MOD_CHAMPION_ENABLE && isChampion()) @@ -1489,6 +1508,11 @@ int dropChance = drop.getChance(); - if (Config.RATE_DROP_ITEMS_ID.get(drop.getItemId()) != 0) - dropChance *= Config.RATE_DROP_ITEMS_ID.get(drop.getItemId()); + if (lastAttacker.getPremiumService()==1) + if (Config.PREMIUM_RATE_DROP_ITEMS_ID.get(drop.getItemId()) != 0) + dropChance *= Config.PREMIUM_RATE_DROP_ITEMS_ID.get(drop.getItemId()); + else if (Config.RATE_DROP_ITEMS_ID.get(drop.getItemId()) != 0) + dropChance *= Config.RATE_DROP_ITEMS_ID.get(drop.getItemId()); + else if (lastAttacker.getPremiumService()==1) + dropChance *= isRaid() && !isRaidMinion() ? Config.PREMIUM_RATE_DROP_ITEMS_BY_RAID : Config.PREMIUM_RATE_DROP_ITEMS; else dropChance *= isRaid() && !isRaidMinion() ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS; @@ -2610,5 +2634,5 @@ * */ - private int[] calculateExpAndSp(int diff, int damage) + private int[] calculateExpAndSp(int diff, int damage, int IsPremium) { double xp; @@ -2618,9 +2642,9 @@ diff = -5; // makes possible to use ALT_GAME_EXPONENT configuration - xp = (double)getExpReward() * damage / getMaxHp(); + xp = (double) getExpReward(IsPremium) * damage / getMaxHp(); if (Config.ALT_GAME_EXPONENT_XP != 0) xp *= Math.pow(2., -diff / Config.ALT_GAME_EXPONENT_XP); - sp = (double)getSpReward() * damage / getMaxHp(); + sp = (double) getExpReward(IsPremium) * damage / getMaxHp(); if (Config.ALT_GAME_EXPONENT_SP != 0) sp *= Math.pow(2., -diff / Config.ALT_GAME_EXPONENT_SP); Index: /Server/java/ru/l2simple/gameserver/model/actor/L2Character.java =================================================================== --- /Server/java/ru/l2simple/gameserver/model/actor/L2Character.java (revision 23) +++ /Server/java/ru/l2simple/gameserver/model/actor/L2Character.java (revision 24) @@ -6920,4 +6920,16 @@ { return true; - } + } + + private int _PremiumService; + + public void setPremiumService(int PS) + { + _PremiumService=PS; + } + + public int getPremiumService() + { + return _PremiumService; + } } Index: /Server/java/ru/l2simple/gameserver/model/actor/L2Npc.java =================================================================== --- /Server/java/ru/l2simple/gameserver/model/actor/L2Npc.java (revision 23) +++ /Server/java/ru/l2simple/gameserver/model/actor/L2Npc.java (revision 24) @@ -1335,19 +1335,25 @@ * Return the Exp Reward of this L2NpcInstance contained in the L2NpcTemplate (modified by RATE_XP).<BR><BR> */ - public int getExpReward() - { + public int getExpReward(int isPremium) + { double rateXp = getStat().calcStat(Stats.MAX_HP, 1, this, null); - return (int) (getTemplate().rewardExp * rateXp * Config.RATE_XP); - } - + if (isPremium==1) + return (int) (getTemplate().getRewardExp() * Config.PREMIUM_RATE_XP); + else + return (int) (getTemplate().getRewardExp() * Config.RATE_XP); + } + /** * Return the SP Reward of this L2NpcInstance contained in the L2NpcTemplate (modified by RATE_SP).<BR><BR> */ - public int getSpReward() + public int getSpReward(int isPremium) { double rateSp = getStat().calcStat(Stats.MAX_HP, 1, this, null); - return (int) (getTemplate().rewardSp * rateSp * Config.RATE_SP); - } - + if (isPremium==1) + return (int) (getTemplate().getRewardSp() * Config.PREMIUM_RATE_SP); + else + return (int) (getTemplate().getRewardSp() * Config.RATE_SP); + } + /** * Kill the L2NpcInstance (the corpse disappeared after 7 seconds).<BR><BR> Index: /Server/java/ru/l2simple/Config.java =================================================================== --- /Server/java/ru/l2simple/Config.java (revision 23) +++ /Server/java/ru/l2simple/Config.java (revision 24) @@ -848,5 +848,14 @@ public static int KARMA_RATE_DROP_EQUIP_WEAPON; public static double[] PLAYER_XP_PERCENT_LOST; - + public static boolean USE_PREMIUMSERVICE; + public static float PREMIUM_RATE_XP; + public static float PREMIUM_RATE_SP; + public static TIntFloatHashMap PREMIUM_RATE_DROP_ITEMS_ID; + public static float PREMIUM_RATE_DROP_SPOIL; + public static float PREMIUM_RATE_DROP_ITEMS; + public static float PREMIUM_RATE_DROP_QUEST; + public static float PREMIUM_RATE_DROP_ITEMS_BY_RAID; + public static boolean PREMIUM_ENCH_BONUS; + public static int PREMIUM_ENCH_CHANCE_BONUS; //-------------------------------------------------- @@ -2067,4 +2076,17 @@ KARMA_RATE_DROP_EQUIP_WEAPON = Integer.parseInt(ratesSettings.getProperty("KarmaRateDropEquipWeapon", "10")); + USE_PREMIUMSERVICE = Boolean.parseBoolean(ratesSettings.getProperty("UsePremiumServices", "False")); + PREMIUM_RATE_XP = Float.parseFloat(ratesSettings.getProperty("PremiumRateXp", "2")); + PREMIUM_RATE_SP = Float.parseFloat(ratesSettings.getProperty("PremiumRateSp", "2")); + PREMIUM_RATE_DROP_SPOIL = Float.parseFloat(ratesSettings.getProperty("PremiumRateDropSpoil", "2")); + PREMIUM_RATE_DROP_ITEMS = Float.parseFloat(ratesSettings.getProperty("PremiumRateDropItems", "2")); + PREMIUM_RATE_DROP_QUEST = Float.parseFloat(ratesSettings.getProperty("PremiumRateDropQuest", "2")); + PREMIUM_RATE_DROP_ITEMS_BY_RAID = Float.parseFloat(ratesSettings.getProperty("PremiumRateRaidDropItems", "2")); + PREMIUM_ENCH_BONUS = Boolean.parseBoolean(ratesSettings.getProperty("PremiumEnchBonus", "False")); + if (PREMIUM_ENCH_BONUS) + { + PREMIUM_ENCH_CHANCE_BONUS = Integer.parseInt(ratesSettings.getProperty("PremiumEnchantChanceBonus", "0")); + } + // Initializing table PLAYER_XP_PERCENT_LOST = new double[byte.MAX_VALUE+1]; @@ -2128,4 +2150,32 @@ { RATE_DROP_ITEMS_ID.put(57, RATE_DROP_ITEMS); //for Adena rate if not defined + } + + String[] premiumPropertySplit = ratesSettings.getProperty("PremiumRateDropItemsById", "").split(";"); + PREMIUM_RATE_DROP_ITEMS_ID = new TIntFloatHashMap(propertySplit.length); + if (!propertySplit[0].isEmpty()) + { + for (String item : propertySplit) + { + String[] itemSplit = item.split(","); + if (itemSplit.length != 2) + _log.warning(StringUtil.concat("Config.load(): invalid config property -> PremiumRateDropItemsById \"", item, "\"")); + else + { + try + { + PREMIUM_RATE_DROP_ITEMS_ID.put(Integer.parseInt(itemSplit[0]), Float.parseFloat(itemSplit[1])); + } + catch (NumberFormatException nfe) + { + if (!item.isEmpty()) + _log.warning(StringUtil.concat("Config.load(): invalid config property -> PremiumRateDropItemsById \"", item, "\"")); + } + } + } + } + if (PREMIUM_RATE_DROP_ITEMS_ID.get(PcInventory.ADENA_ID) == 0f) + { + PREMIUM_RATE_DROP_ITEMS_ID.put(PcInventory.ADENA_ID, PREMIUM_RATE_DROP_ITEMS); //for Adena rate if not defined } } @@ -3026,5 +3076,12 @@ else if (pName.equalsIgnoreCase("KarmaRateDropEquip")) KARMA_RATE_DROP_EQUIP = Integer.parseInt(pValue); else if (pName.equalsIgnoreCase("KarmaRateDropEquipWeapon")) KARMA_RATE_DROP_EQUIP_WEAPON = Integer.parseInt(pValue); - + else if (pName.equalsIgnoreCase("PremiumRateXp")) PREMIUM_RATE_XP = Float.parseFloat(pValue); + else if (pName.equalsIgnoreCase("PremiumRateSp")) PREMIUM_RATE_SP = Float.parseFloat(pValue); + else if (pName.equalsIgnoreCase("PremiumRateDropItemsById")) PREMIUM_RATE_DROP_ITEMS_ID.put(57, Float.parseFloat(pValue)); + else if (pName.equalsIgnoreCase("PremiumRateDropSpoil")) PREMIUM_RATE_DROP_SPOIL = Float.parseFloat(pValue); + else if (pName.equalsIgnoreCase("PremiumRateDropItems")) PREMIUM_RATE_DROP_ITEMS = Float.parseFloat(pValue); + else if (pName.equalsIgnoreCase("PremiumRateDropQuest")) PREMIUM_RATE_DROP_QUEST = Float.parseFloat(pValue); + else if (pName.equalsIgnoreCase("PremiumRateRaidDropItems")) PREMIUM_RATE_DROP_ITEMS_BY_RAID = Float.parseFloat(pValue); + // general.properties else if (pName.equalsIgnoreCase("AutoDestroyDroppedItemAfter")) AUTODESTROY_ITEM_AFTER = Integer.parseInt(pValue); Index: /Datapack/sql/account_premium.sql =================================================================== --- /Datapack/sql/account_premium.sql (revision 24) +++ /Datapack/sql/account_premium.sql (revision 24) @@ -0,0 +1,9 @@ +-- ---------------------------- +-- Table structure for account_premium +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `account_premium` ( + `account_name` varchar(45) NOT NULL DEFAULT '', + `premium_service` int(1) NOT NULL DEFAULT '0', + `enddate` decimal(20,0) NOT NULL DEFAULT '0', + PRIMARY KEY (`account_name`) +); Полная система премиум аккаунта, есть несколько косяков, которые легко исправить. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты