Меня интересует такой вариант:
Человек покупает у меня на серве спец валюту пусть даже колы и за них у нпц покупает премиум аккаунт.
Премиум акк в свою очередь дает х2 кач спойл и тп.
Нахадил код но ксожелению прикрутить несмог пути к папкас с файлами не соответствуют. Собственно вот я и запутался что мне делать дальше(
Добавлено (18.04.2013, 19:53)
Человек покупает у меня на серве спец валюту пусть даже колы и за них у нпц покупает премиум аккаунт.
Премиум акк в свою очередь дает х2 кач спойл и тп.
Нахадил код но ксожелению прикрутить несмог пути к папкас с файлами не соответствуют. Собственно вот я и запутался что мне делать дальше(
Добавлено (18.04.2013, 19:53)
svn diff
---------------------------------------------
Index: /trunk/DataPack/sql/character_premium.sql
===================================================================
--- /trunk/DataPack/sql/character_premium.sql (revision 258)
+++ /trunk/DataPack/sql/character_premium.sql (revision 258)
@@ -0,0 +1,18 @@
+-- ----------------------------
+-- Table structure for character_premium
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `character_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`)
+);
+-- ----------------------------
+-- Table structure for character_premium
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `character_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`)
+);
Index: /trunk/DataPack/tools/database_installer.bat
===================================================================
--- /trunk/DataPack/tools/database_installer.bat (revision 252)
+++ /trunk/DataPack/tools/database_installer.bat (revision 258)
@@ -542,4 +542,5 @@
character_quest_global_data.sql
character_quests.sql
+character_premium.sql
character_raid_points.sql
character_recipebook.s ql
Index: /trunk/DataPack/tools/full_install.sql
===================================================================
--- /trunk/DataPack/tools/full_install.sql (revision 251)
+++ /trunk/DataPack/tools/full_install.sql (revision 258)
@@ -67,4 +67,5 @@
DROP TABLE IF EXISTS character_quest_global_data;
DROP TABLE IF EXISTS character_quests;
+DROP TABLE IF EXISTS character_premium;
DROP TABLE IF EXISTS character_raid_points;
DROP TABLE IF EXISTS character_recipebook;
Index: /trunk/DataPack/tools/database_installer.sh
===================================================================
--- /trunk/DataPack/tools/database_installer.sh (revision 251)
+++ /trunk/DataPack/tools/database_installer.sh (revision 258)
@@ -287,4 +287,5 @@
$MYG < ../sql/character_quest_global_data.sql &> /dev/null
$MYG < ../sql/character_quests.sql &> /dev/null
+$MYG < ../sql/character_premium.sql &> /dev/null
$MYG < ../sql/character_raid_points.sql &> /dev/null
$MYG < ../sql/character_recipebook.sql &> /dev/null
Index: /trunk/DataPack/data/html/admin/premium_menu.htm
===================================================================
--- /trunk/DataPack/data/html/admin/premium_menu.htm (revision 258)
+++ /trunk/DataPack/data/html/admin/premium_menu.htm (revision 258)
@@ -0,0 +1,29 @@
+<html><title>Premium Service Menu</title><body>
+<center>
+<table width=270 border=0 bgcolor="666666">
+<tr>
+<td><button value="Main" action="bypass -h admin_admin" width=50 height=15 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td>
+<td><button value="Game" action="bypass -h admin_admin2" width=50 height=15 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td>
+<td><button value="Effects" action="bypass -h admin_admin3" width=50 height=15 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td>
+<td><button value="Server" action="bypass -h admin_admin4" width=50 height=15 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td>
+<td><button value="Mods" action="bypass -h admin_admin5" width=50 height=15 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td>
+</tr>
+</table>
+<br>
+<font color="LEVEL">Premium Service Menu</font><br>
+<table width=250>
+<tr>
+<td>Enter Account Name:</td>
+<td><edit var="acc_name" width=200></td>
+</tr>
+</table>
+<br>
+<table width=260>
+<tr>
+<td><button value="Add 1 month Premium Services" action="bypass -h admin_premium_add1 $acc_name" width=200 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+<td><button value="Add 2 month Premium Services" action="bypass -h admin_premium_add2 $acc_name" width=200 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+<td><button value="Add 3 month Premium Services" action="bypass -h admin_premium_add3 $acc_name" width=200 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr>
+</table>
+</center>
+</body></html>
Index: /trunk/DataPack/data/html/admin/main_menu.htm
===================================================================
--- /trunk/DataPack/data/html/admin/main_menu.htm (revision 221)
+++ /trunk/DataPack/data/html/admin/main_menu.htm (revision 258)
@@ -54,4 +54,5 @@
<td><button value="TradeOff" action="bypass -h admin_tradeoff" width=65 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
<td><button value="Invul" action="bypass -h admin_invul" width=65 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+<td><button value="Pr.Service" action="bypass -h admin_premium_menu" width=65 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
</tr><tr>
<td><button value="Wyvern" action="bypass -h admin_ride_wyvern" width=65 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
Index: /trunk/Game/config/main/rates.ini
===================================================================
--- /trunk/Game/config/main/rates.ini (revision 221)
+++ /trunk/Game/config/main/rates.ini (revision 258)
@@ -49,4 +49,18 @@
# Рейт на дроп квестовых предметов. Внимание: данная опция работает не во всех квестах. Многие квесты нужно редактировать в датапаке для работы этой опции.
RateDropQuest = 1
+
+# ---------------------------------------------------------------------------
+# Система Премиум-Аккаунт (ПА)
+# ---------------------------------------------------------------------------
+# Включить функцию Премиум-Аккаунт (ПА)?
+# По умолчанию: False
+UsePremiumServices = False
+# Какие рейты будут приниматься для обладателей ПА?
+PremiumRateXp = 2
+PremiumRateSp = 2
+PremiumRateDropAdena = 2
+PremiumRateDropItems = 2
+PremiumRateDropSpoil = 2
+PremiumRateDropQuest = 2
# List of RaidBoss items affected by RateDropBossJewel (separated by ",")
Index: /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/instance/L2PcInstance.java (revision 221)
+++ /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/instance/L2PcInstance.java (revision 258)
@@ -299,4 +299,7 @@
// Character Transformation SQL String Definitions:
private static final String UPDATE_CHAR_TRANSFORM = "UPDATE characters SET transform_id=? WHERE charId=?";
+ // Character PremiumService String Definitions:
+ private static final String RESTORE_PREMIUMSERVICE = "SELECT premium_service,enddate FROM character_premium WHERE account_name=?";
+ private static final String UPDATE_PREMIUMSERVICE = "UPDATE character_premium SET premium_service=?,enddate=? WHERE account_name=?";
public static final int REQUEST_TIMEOUT = 15;
public static final int STORE_PRIVATE_NONE = 0;
@@ -13752,3 +13755,119 @@
return new PcKnownList(this);
}
+
+ private void createPSdb()
+ {
+ Connection con = null;
+ try
+ {
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement("INSERT INTO character_premium (account_name,premium_service,enddate) values(?,?,?)");
+ statement.setString(1, _accountName);
+ statement.setInt(2, 0);
+ statement.setLong(3, 0);
+ statement.executeUpdate();
+ statement.close();
+ }
+ catch (Exception e)
+ {
+ _log.warn("Could not insert char data: "+e);
+ e.printStackTrace();
+ return;
+ }
+ finally
+ {
+ try
+ {
+ if (con != null)
+ con.close();
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private 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.warn("PremiumService: Could not increase data");
+ }
+ finally
+ {
+ try
+ {
+ if (con != null)
+ con.close();
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private 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.warn("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: /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/L2Character.java
===================================================================
--- /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/L2Character.java (revision 249)
+++ /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/L2Character.java (revision 258)
@@ -6886,3 +6886,15 @@
}
+ private int _PremiumService;
+
+ public void setPremiumService(int PS)
+ {
+ _PremiumService=PS;
+ }
+
+ public int getPremiumService()
+ {
+ return _PremiumService;
+
+ }
}
Index: /trunk/Game/src/main/java/com/l2open/gameserver/handler/AdminCommandHandler.java
===================================================================
--- /trunk/Game/src/main/java/com/l2open/gameserver/handler/AdminCommandHandler.java (revision 221)
+++ /trunk/Game/src/main/java/com/l2open/gameserver/handler/AdminCommandHandler.java (revision 258)
@@ -67,4 +67,5 @@
import com.l2open.gameserver.handler.admincommandhandlers.AdminPledge;
import com.l2open.gameserver.handler.admincommandhandlers.AdminPolymorph;
+import com.l2open.gameserver.handler.admincommandhandlers.AdminPremium;
import com.l2open.gameserver.handler.admincommandhandlers.AdminQuest;
import com.l2open.gameserver.handler.admincommandhandlers.AdminReload;
Index: /trunk/Game/src/main/java/com/l2open/gameserver/handler/admincommandhandlers/AdminPremium.java
===================================================================
--- /trunk/Game/src/main/java/com/l2open/gameserver/handler/admincommandhandlers/AdminPremium.java (revision 258)
+++ /trunk/Game/src/main/java/com/l2open/gameserver/handler/admincommandhandlers/AdminPremium.java (revision 258)
@@ -0,0 +1,108 @@
+package com.l2open.gameserver.handler.admincommandhandlers;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.PreparedStatement;
+
+import java.util.Calendar;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.l2open.L2DatabaseFactory;
+import com.l2open.gameserver.handler.IAdminCommandHandler;
+import com.l2open.gameserver.model.actor.instance.L2PcInstance;
+
+public class AdminPremium implements IAdminCommandHandler
+{
+ private static final String[] ADMIN_COMMANDS = { "admin_premium_menu", "admin_premium_add1", "admin_premium_add2", "admin_premium_add3" };
+
+private static final String UPDATE_PREMIUMSERVICE = "UPDATE character_premium SET premium_service=?,enddate=? WHERE account_name=?";
+private static final Logger _log = Logger.getLogger(AdminPremium.class.getName());
+
+ public boolean useAdminCommand(String command, L2PcInstance activeChar)
+ {
+ if (command.equals("admin_premium_menu"))
+ {
+ AdminHelpPage.showHelpPage(activeChar, "premium_menu.htm");
+ }
+ else if (command.startsWith("admin_premium_add1"))
+ {
+ try
+ {
+ String val = command.substring(19);
+ addPremiumServices(1, val);
+ }
+ catch(StringIndexOutOfBoundsException e)
+ {
+ activeChar.sendMessage("Err");
+ }
+ }
+ else if(command.startsWith("admin_premium_add2"))
+ {
+ try
+ {
+ String val = command.substring(19);
+ addPremiumServices(2, val);
+ }
+ catch(StringIndexOutOfBoundsException e)
+ {
+ activeChar.sendMessage("Err");
+ }
+ }
+ else if(command.startsWith("admin_premium_add3"))
+ {
+ try
+ {
+ String val = command.substring(19);
+ addPremiumServices(3, val);
+ }
+ catch(StringIndexOutOfBoundsException e)
+ {
+ activeChar.sendMessage("Err");
+ }
+ }
+ return true;
+ }
+
+ public String[] getAdminCommandList()
+ {
+ return ADMIN_COMMANDS;
+ }
+
+ private void addPremiumServices(int Months,String AccName)
+ {
+ Connection con = null;
+ try
+ {
+ Calendar finishtime = Calendar.getInstance();
+ finishtime.setTimeInMillis(System.currentTimeMillis());
+ finishtime.set(Calendar.SECOND, 0);
+ finishtime.add(Calendar.MONTH, Months);
+
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement(UPDATE_PREMIUMSERVICE);
+ statement.setInt(1, 1);
+ statement.setLong(2, finishtime.getTimeInMillis());
+ statement.setString(3, AccName);
+ statement.execute();
+ statement.close();
+ }
+ catch (SQLException e)
+ {
+ _log.info("PremiumService: Could not increase data");
+ }
+ finally
+ {
+ try
+ {
+ if (con != null)
+ con.close();
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ }
+}
Index: /trunk/Game/src/main/java/com/l2open/Config.java
===================================================================
--- /trunk/Game/src/main/java/com/l2open/Config.java (revision 233)
+++ /trunk/Game/src/main/java/com/l2open/Config.java (revision 258)
@@ -298,4 +298,11 @@
public static int RATE_DROP_MANOR;
public static float RATE_DROP_QUEST;
+ public static boolean USE_PREMIUMSERVICE;
+ public static float PREMIUM_RATE_XP;
+ public static float PREMIUM_RATE_SP;
+ public static float PREMIUM_RATE_DROP_ADENA;
+ public static float PREMIUM_RATE_DROP_SPOIL;
+ public static float PREMIUM_RATE_DROP_ITEMS;
+ public static float PREMIUM_RATE_DROP_QUEST;
public static float RATE_KARMA_EXP_LOST;
public static float RATE_SIEGE_GUARDS_PRICE;
@@ -350,4 +357,11 @@
RATE_DROP_MANOR = Integer.parseInt(ratesSettings.getProperty("RateDropManor", "1"));
RATE_DROP_QUEST = Float.parseFloat(ratesSettings.getProperty("RateDropQuest", "1."));
+ 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_ADENA = Float.parseFloat(ratesSettings.getProperty("PremiumRateDropAdena", "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"));
RATE_KARMA_EXP_LOST = Float.parseFloat(ratesSettings.getProperty("RateKarmaExpLost", "1."));
RATE_SIEGE_GUARDS_PRICE = Float.parseFloat(ratesSettings.getProperty("RateSiegeGuardsPrice", "1."));
@@ -2931,4 +2945,16 @@
else if (pName.equalsIgnoreCase("RateDropQuest"))
RATE_DROP_QUEST = Float.parseFloat(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("PremiumRateDropAdena"))
+ PREMIUM_RATE_DROP_ADENA = 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("RateKarmaExpLost"))
RATE_KARMA_EXP_LOST = Float.parseFloat(pValue);[/quote]
Index: /trunk/DataPack/sql/character_premium.sql
===================================================================
--- /trunk/DataPack/sql/character_premium.sql (revision 258)
+++ /trunk/DataPack/sql/character_premium.sql (revision 258)
@@ -0,0 +1,18 @@
+-- ----------------------------
+-- Table structure for character_premium
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `character_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`)
+);
+-- ----------------------------
+-- Table structure for character_premium
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `character_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`)
+);
Index: /trunk/DataPack/tools/database_installer.bat
===================================================================
--- /trunk/DataPack/tools/database_installer.bat (revision 252)
+++ /trunk/DataPack/tools/database_installer.bat (revision 258)
@@ -542,4 +542,5 @@
character_quest_global_data.sql
character_quests.sql
+character_premium.sql
character_raid_points.sql
character_recipebook.s ql
Index: /trunk/DataPack/tools/full_install.sql
===================================================================
--- /trunk/DataPack/tools/full_install.sql (revision 251)
+++ /trunk/DataPack/tools/full_install.sql (revision 258)
@@ -67,4 +67,5 @@
DROP TABLE IF EXISTS character_quest_global_data;
DROP TABLE IF EXISTS character_quests;
+DROP TABLE IF EXISTS character_premium;
DROP TABLE IF EXISTS character_raid_points;
DROP TABLE IF EXISTS character_recipebook;
Index: /trunk/DataPack/tools/database_installer.sh
===================================================================
--- /trunk/DataPack/tools/database_installer.sh (revision 251)
+++ /trunk/DataPack/tools/database_installer.sh (revision 258)
@@ -287,4 +287,5 @@
$MYG < ../sql/character_quest_global_data.sql &> /dev/null
$MYG < ../sql/character_quests.sql &> /dev/null
+$MYG < ../sql/character_premium.sql &> /dev/null
$MYG < ../sql/character_raid_points.sql &> /dev/null
$MYG < ../sql/character_recipebook.sql &> /dev/null
Index: /trunk/DataPack/data/html/admin/premium_menu.htm
===================================================================
--- /trunk/DataPack/data/html/admin/premium_menu.htm (revision 258)
+++ /trunk/DataPack/data/html/admin/premium_menu.htm (revision 258)
@@ -0,0 +1,29 @@
+<html><title>Premium Service Menu</title><body>
+<center>
+<table width=270 border=0 bgcolor="666666">
+<tr>
+<td><button value="Main" action="bypass -h admin_admin" width=50 height=15 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td>
+<td><button value="Game" action="bypass -h admin_admin2" width=50 height=15 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td>
+<td><button value="Effects" action="bypass -h admin_admin3" width=50 height=15 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td>
+<td><button value="Server" action="bypass -h admin_admin4" width=50 height=15 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td>
+<td><button value="Mods" action="bypass -h admin_admin5" width=50 height=15 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td>
+</tr>
+</table>
+<br>
+<font color="LEVEL">Premium Service Menu</font><br>
+<table width=250>
+<tr>
+<td>Enter Account Name:</td>
+<td><edit var="acc_name" width=200></td>
+</tr>
+</table>
+<br>
+<table width=260>
+<tr>
+<td><button value="Add 1 month Premium Services" action="bypass -h admin_premium_add1 $acc_name" width=200 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+<td><button value="Add 2 month Premium Services" action="bypass -h admin_premium_add2 $acc_name" width=200 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+<td><button value="Add 3 month Premium Services" action="bypass -h admin_premium_add3 $acc_name" width=200 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr>
+</table>
+</center>
+</body></html>
Index: /trunk/DataPack/data/html/admin/main_menu.htm
===================================================================
--- /trunk/DataPack/data/html/admin/main_menu.htm (revision 221)
+++ /trunk/DataPack/data/html/admin/main_menu.htm (revision 258)
@@ -54,4 +54,5 @@
<td><button value="TradeOff" action="bypass -h admin_tradeoff" width=65 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
<td><button value="Invul" action="bypass -h admin_invul" width=65 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+<td><button value="Pr.Service" action="bypass -h admin_premium_menu" width=65 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
</tr><tr>
<td><button value="Wyvern" action="bypass -h admin_ride_wyvern" width=65 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
Index: /trunk/Game/config/main/rates.ini
===================================================================
--- /trunk/Game/config/main/rates.ini (revision 221)
+++ /trunk/Game/config/main/rates.ini (revision 258)
@@ -49,4 +49,18 @@
# Рейт на дроп квестовых предметов. Внимание: данная опция работает не во всех квестах. Многие квесты нужно редактировать в датапаке для работы этой опции.
RateDropQuest = 1
+
+# ---------------------------------------------------------------------------
+# Система Премиум-Аккаунт (ПА)
+# ---------------------------------------------------------------------------
+# Включить функцию Премиум-Аккаунт (ПА)?
+# По умолчанию: False
+UsePremiumServices = False
+# Какие рейты будут приниматься для обладателей ПА?
+PremiumRateXp = 2
+PremiumRateSp = 2
+PremiumRateDropAdena = 2
+PremiumRateDropItems = 2
+PremiumRateDropSpoil = 2
+PremiumRateDropQuest = 2
# List of RaidBoss items affected by RateDropBossJewel (separated by ",")
Index: /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/instance/L2PcInstance.java (revision 221)
+++ /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/instance/L2PcInstance.java (revision 258)
@@ -299,4 +299,7 @@
// Character Transformation SQL String Definitions:
private static final String UPDATE_CHAR_TRANSFORM = "UPDATE characters SET transform_id=? WHERE charId=?";
+ // Character PremiumService String Definitions:
+ private static final String RESTORE_PREMIUMSERVICE = "SELECT premium_service,enddate FROM character_premium WHERE account_name=?";
+ private static final String UPDATE_PREMIUMSERVICE = "UPDATE character_premium SET premium_service=?,enddate=? WHERE account_name=?";
public static final int REQUEST_TIMEOUT = 15;
public static final int STORE_PRIVATE_NONE = 0;
@@ -13752,3 +13755,119 @@
return new PcKnownList(this);
}
+
+ private void createPSdb()
+ {
+ Connection con = null;
+ try
+ {
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement("INSERT INTO character_premium (account_name,premium_service,enddate) values(?,?,?)");
+ statement.setString(1, _accountName);
+ statement.setInt(2, 0);
+ statement.setLong(3, 0);
+ statement.executeUpdate();
+ statement.close();
+ }
+ catch (Exception e)
+ {
+ _log.warn("Could not insert char data: "+e);
+ e.printStackTrace();
+ return;
+ }
+ finally
+ {
+ try
+ {
+ if (con != null)
+ con.close();
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private 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.warn("PremiumService: Could not increase data");
+ }
+ finally
+ {
+ try
+ {
+ if (con != null)
+ con.close();
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private 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.warn("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: /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/L2Character.java
===================================================================
--- /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/L2Character.java (revision 249)
+++ /trunk/Game/src/main/java/com/l2open/gameserver/model/actor/L2Character.java (revision 258)
@@ -6886,3 +6886,15 @@
}
+ private int _PremiumService;
+
+ public void setPremiumService(int PS)
+ {
+ _PremiumService=PS;
+ }
+
+ public int getPremiumService()
+ {
+ return _PremiumService;
+
+ }
}
Index: /trunk/Game/src/main/java/com/l2open/gameserver/handler/AdminCommandHandler.java
===================================================================
--- /trunk/Game/src/main/java/com/l2open/gameserver/handler/AdminCommandHandler.java (revision 221)
+++ /trunk/Game/src/main/java/com/l2open/gameserver/handler/AdminCommandHandler.java (revision 258)
@@ -67,4 +67,5 @@
import com.l2open.gameserver.handler.admincommandhandlers.AdminPledge;
import com.l2open.gameserver.handler.admincommandhandlers.AdminPolymorph;
+import com.l2open.gameserver.handler.admincommandhandlers.AdminPremium;
import com.l2open.gameserver.handler.admincommandhandlers.AdminQuest;
import com.l2open.gameserver.handler.admincommandhandlers.AdminReload;
Index: /trunk/Game/src/main/java/com/l2open/gameserver/handler/admincommandhandlers/AdminPremium.java
===================================================================
--- /trunk/Game/src/main/java/com/l2open/gameserver/handler/admincommandhandlers/AdminPremium.java (revision 258)
+++ /trunk/Game/src/main/java/com/l2open/gameserver/handler/admincommandhandlers/AdminPremium.java (revision 258)
@@ -0,0 +1,108 @@
+package com.l2open.gameserver.handler.admincommandhandlers;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.PreparedStatement;
+
+import java.util.Calendar;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.l2open.L2DatabaseFactory;
+import com.l2open.gameserver.handler.IAdminCommandHandler;
+import com.l2open.gameserver.model.actor.instance.L2PcInstance;
+
+public class AdminPremium implements IAdminCommandHandler
+{
+ private static final String[] ADMIN_COMMANDS = { "admin_premium_menu", "admin_premium_add1", "admin_premium_add2", "admin_premium_add3" };
+
+private static final String UPDATE_PREMIUMSERVICE = "UPDATE character_premium SET premium_service=?,enddate=? WHERE account_name=?";
+private static final Logger _log = Logger.getLogger(AdminPremium.class.getName());
+
+ public boolean useAdminCommand(String command, L2PcInstance activeChar)
+ {
+ if (command.equals("admin_premium_menu"))
+ {
+ AdminHelpPage.showHelpPage(activeChar, "premium_menu.htm");
+ }
+ else if (command.startsWith("admin_premium_add1"))
+ {
+ try
+ {
+ String val = command.substring(19);
+ addPremiumServices(1, val);
+ }
+ catch(StringIndexOutOfBoundsException e)
+ {
+ activeChar.sendMessage("Err");
+ }
+ }
+ else if(command.startsWith("admin_premium_add2"))
+ {
+ try
+ {
+ String val = command.substring(19);
+ addPremiumServices(2, val);
+ }
+ catch(StringIndexOutOfBoundsException e)
+ {
+ activeChar.sendMessage("Err");
+ }
+ }
+ else if(command.startsWith("admin_premium_add3"))
+ {
+ try
+ {
+ String val = command.substring(19);
+ addPremiumServices(3, val);
+ }
+ catch(StringIndexOutOfBoundsException e)
+ {
+ activeChar.sendMessage("Err");
+ }
+ }
+ return true;
+ }
+
+ public String[] getAdminCommandList()
+ {
+ return ADMIN_COMMANDS;
+ }
+
+ private void addPremiumServices(int Months,String AccName)
+ {
+ Connection con = null;
+ try
+ {
+ Calendar finishtime = Calendar.getInstance();
+ finishtime.setTimeInMillis(System.currentTimeMillis());
+ finishtime.set(Calendar.SECOND, 0);
+ finishtime.add(Calendar.MONTH, Months);
+
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement(UPDATE_PREMIUMSERVICE);
+ statement.setInt(1, 1);
+ statement.setLong(2, finishtime.getTimeInMillis());
+ statement.setString(3, AccName);
+ statement.execute();
+ statement.close();
+ }
+ catch (SQLException e)
+ {
+ _log.info("PremiumService: Could not increase data");
+ }
+ finally
+ {
+ try
+ {
+ if (con != null)
+ con.close();
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ }
+}
Index: /trunk/Game/src/main/java/com/l2open/Config.java
===================================================================
--- /trunk/Game/src/main/java/com/l2open/Config.java (revision 233)
+++ /trunk/Game/src/main/java/com/l2open/Config.java (revision 258)
@@ -298,4 +298,11 @@
public static int RATE_DROP_MANOR;
public static float RATE_DROP_QUEST;
+ public static boolean USE_PREMIUMSERVICE;
+ public static float PREMIUM_RATE_XP;
+ public static float PREMIUM_RATE_SP;
+ public static float PREMIUM_RATE_DROP_ADENA;
+ public static float PREMIUM_RATE_DROP_SPOIL;
+ public static float PREMIUM_RATE_DROP_ITEMS;
+ public static float PREMIUM_RATE_DROP_QUEST;
public static float RATE_KARMA_EXP_LOST;
public static float RATE_SIEGE_GUARDS_PRICE;
@@ -350,4 +357,11 @@
RATE_DROP_MANOR = Integer.parseInt(ratesSettings.getProperty("RateDropManor", "1"));
RATE_DROP_QUEST = Float.parseFloat(ratesSettings.getProperty("RateDropQuest", "1."));
+ 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_ADENA = Float.parseFloat(ratesSettings.getProperty("PremiumRateDropAdena", "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"));
RATE_KARMA_EXP_LOST = Float.parseFloat(ratesSettings.getProperty("RateKarmaExpLost", "1."));
RATE_SIEGE_GUARDS_PRICE = Float.parseFloat(ratesSettings.getProperty("RateSiegeGuardsPrice", "1."));
@@ -2931,4 +2945,16 @@
else if (pName.equalsIgnoreCase("RateDropQuest"))
RATE_DROP_QUEST = Float.parseFloat(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("PremiumRateDropAdena"))
+ PREMIUM_RATE_DROP_ADENA = 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("RateKarmaExpLost"))
RATE_KARMA_EXP_LOST = Float.parseFloat(pValue);[/quote]