Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

PC Cafe Points (Adaptación)

Iniciado por Swarlog, Jul 27, 2025, 12:44 AM

Tema anterior - Siguiente tema

Swarlog

CORE:

### Eclipse Workspace Patch 1.0
#P L2J_Server
diff --git dist/game/config/Custom.properties dist/game/config/Custom.properties
new file mode 100644
index 0000000..16ef5f3
--- /dev/null
+++ dist/game/config/Custom.properties
@@ -0,0 +1,39 @@
+# ---------------------------------------------------------------------------
+# Player Commendation System (PC Bang)
+# ---------------------------------------------------------------------------
+# PC BANG POINTS ID = -100
+
+# PC Bang Enabled.
+Enabled = True
+
+# Max points that player may have.
+# Limited by int limit.
+MaxPcBangPoints = 200000
+
+# PC Bang point rate.
+# Acquisition formula equals (exp * 0.0001 * AcquisitionPointsRate)
+# e.g. with 1.0 it's 10000 exp = 1 PC Bang point
+# 2.0 - 10000 exp = 2 PC Bang points
+# 0.5 - 5000  exp = 1 PC Bang point
+AcquisitionPointsRate = 1.0
+
+# Use random points rewarding.
+# If enabled points will be random from points/2 to points.
+AcquisitionPointsRandom = False
+
+# Creates a chance to aquire double points.
+DoublingAcquisitionPoints = True
+
+# Double points chance.
+# Used when DoublingAcquisitionPoints is enabled.
+# Default 1 (%)
+DoublingAcquisitionPointsChance = 1
+
+# Reward low exp kills
+# Acquire points if player gains exp and aquire formula equals 0.
+RewardLowExpKills = True
+
+# Chance for low exp kills
+# Used when RewardLowExpKills is enabled.
+# Default 5 (%)
+RewardLowExpKillsChance = 5
\ No newline at end of file
diff --git java/com/l2jserver/Config.java java/com/l2jserver/Config.java
index 796d027..26a225c 100644
--- java/com/l2jserver/Config.java
+++ java/com/l2jserver/Config.java
@@ -106,6 +106,7 @@
 	public static final String CHAT_FILTER_FILE = "./config/chatfilter.txt";
 	public static final String EMAIL_CONFIG_FILE = "./config/Email.properties";
 	public static final String CH_SIEGE_FILE = "./config/ConquerableHallSiege.properties";
+	public static final String CUSTOM_FILE = "./config/Custom.properties";
 	public static final String GEODATA_FILE = "./config/GeoData.properties";
 	// --------------------------------------------------
 	// L2J Variable Definitions
@@ -416,6 +417,18 @@
 	public static int CLAN_LEVEL_11_REQUIREMENT;
 	public static boolean ALLOW_WYVERN_ALWAYS;
 	public static boolean ALLOW_WYVERN_DURING_SIEGE;
+	
+	// --------------------------------------------------
+	// Custom points
+	// --------------------------------------------------
+	public static boolean PC_BANG_ENABLED;
+	public static int PC_BANG_MAX_POINTS;
+	public static boolean PC_BANG_ENABLE_DOUBLE_POINTS;
+	public static int PC_BANG_DOUBLE_POINTS_CHANCE;
+	public static double PC_BANG_POINT_RATE;
+	public static boolean PC_BANG_RANDOM_POINT;
+	public static boolean PC_BANG_REWARD_LOW_EXP_KILLS;
+	public static int PC_BANG_LOW_EXP_KILLS_CHANCE;
 	
 	// --------------------------------------------------
 	// General Settings
@@ -2146,6 +2159,37 @@
 				}
 			}
 			
+			// Load Custom Properties file (if exists)
+			final PropertiesParser CustomSettings = new PropertiesParser(CUSTOM_FILE);
+			PC_BANG_ENABLED = CustomSettings.getBoolean("Enabled", false);
+			PC_BANG_MAX_POINTS = CustomSettings.getInt("MaxPcBangPoints", 200000);
+			if (PC_BANG_MAX_POINTS < 0)
+			{
+				PC_BANG_MAX_POINTS = 0;
+			}
+			PC_BANG_ENABLE_DOUBLE_POINTS = CustomSettings.getBoolean("DoublingAcquisitionPoints", false);
+			PC_BANG_DOUBLE_POINTS_CHANCE = CustomSettings.getInt("DoublingAcquisitionPointsChance", 1);
+			if ((PC_BANG_DOUBLE_POINTS_CHANCE < 0) || (PC_BANG_DOUBLE_POINTS_CHANCE > 100))
+			{
+				PC_BANG_DOUBLE_POINTS_CHANCE = 1;
+			}
+			PC_BANG_POINT_RATE = CustomSettings.getDouble("AcquisitionPointsRate", 1.0);
+			PC_BANG_RANDOM_POINT = CustomSettings.getBoolean("AcquisitionPointsRandom", false);
+			if (PC_BANG_POINT_RATE < 0)
+			{
+				PC_BANG_POINT_RATE = 1;
+			}
+			PC_BANG_REWARD_LOW_EXP_KILLS = CustomSettings.getBoolean("RewardLowExpKills", true);
+			PC_BANG_LOW_EXP_KILLS_CHANCE = CustomSettings.getInt("RewardLowExpKillsChance", 5);
+			if (PC_BANG_LOW_EXP_KILLS_CHANCE < 0)
+			{
+				PC_BANG_LOW_EXP_KILLS_CHANCE = 0;
+			}
+			if (PC_BANG_LOW_EXP_KILLS_CHANCE > 100)
+			{
+				PC_BANG_LOW_EXP_KILLS_CHANCE = 100;
+			}
+			
 			// Load L2JMod L2Properties file (if exists)
 			final PropertiesParser L2JModSettings = new PropertiesParser(L2JMOD_CONFIG_FILE);
 			
diff --git java/com/l2jserver/gameserver/GameServer.java java/com/l2jserver/gameserver/GameServer.java
index 25de90c..d64bce4 100644
--- java/com/l2jserver/gameserver/GameServer.java
+++ java/com/l2jserver/gameserver/GameServer.java
@@ -111,6 +111,7 @@
 import com.l2jserver.gameserver.instancemanager.MailManager;
 import com.l2jserver.gameserver.instancemanager.MapRegionManager;
 import com.l2jserver.gameserver.instancemanager.MercTicketManager;
+import com.l2jserver.gameserver.instancemanager.PcCafePointsManager;
 import com.l2jserver.gameserver.instancemanager.PetitionManager;
 import com.l2jserver.gameserver.instancemanager.PunishmentManager;
 import com.l2jserver.gameserver.instancemanager.QuestManager;
@@ -329,6 +330,7 @@
 		TerritoryWarManager.getInstance();
 		CastleManorManager.getInstance();
 		MercTicketManager.getInstance();
+		PcCafePointsManager.getInstance();
 		
 		QuestManager.getInstance().report();
 		
diff --git java/com/l2jserver/gameserver/data/xml/impl/MultisellData.java java/com/l2jserver/gameserver/data/xml/impl/MultisellData.java
index 2101486..9c5848c 100644
--- java/com/l2jserver/gameserver/data/xml/impl/MultisellData.java
+++ java/com/l2jserver/gameserver/data/xml/impl/MultisellData.java
@@ -39,6 +39,7 @@
 import com.l2jserver.gameserver.model.multisell.ListContainer;
 import com.l2jserver.gameserver.model.multisell.PreparedListContainer;
 import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.ExPCCafePointInfo;
 import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
 import com.l2jserver.gameserver.network.serverpackets.MultiSellList;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -284,6 +285,13 @@
 	{
 		switch (id)
 		{
+			case PC_BANG_POINTS:
+				if (player.getPcBangPoints() < amount)
+				{
+					player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SHORT_OF_ACCUMULATED_POINTS));
+					break;
+				}
+				return true;
 			case CLAN_REPUTATION:
 				if (player.getClan() == null)
 				{
@@ -316,6 +324,14 @@
 	{
 		switch (id)
 		{
+			case PC_BANG_POINTS: // PcBang points
+				final int cost = player.getPcBangPoints() - (int) (amount);
+				player.setPcBangPoints(cost);
+				SystemMessage smsgpc = SystemMessage.getSystemMessage(SystemMessageId.USING_S1_PCPOINT);
+				smsgpc.addLong((int) amount);
+				player.sendPacket(smsgpc);
+				player.sendPacket(new ExPCCafePointInfo(player.getPcBangPoints(), (int) amount, 1));
+				return true;
 			case CLAN_REPUTATION:
 				player.getClan().takeReputationScore((int) amount, true);
 				SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.S1_DEDUCTED_FROM_CLAN_REP);
@@ -378,6 +394,7 @@
 	{
 		switch (ing.getItemId())
 		{
+			case PC_BANG_POINTS:
 			case CLAN_REPUTATION:
 			case FAME:
 				return true;
diff --git java/com/l2jserver/gameserver/instancemanager/PcCafePointsManager.java java/com/l2jserver/gameserver/instancemanager/PcCafePointsManager.java
new file mode 100644
index 0000000..cc346b9
--- /dev/null
+++ java/com/l2jserver/gameserver/instancemanager/PcCafePointsManager.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2004-2015 L2J Server
+ * 
+ * This file is part of L2J Server.
+ * 
+ * L2J Server 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.
+ * 
+ * L2J Server is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.instancemanager;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.zone.ZoneId;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.ExPCCafePointInfo;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.util.Rnd;
+
+public final class PcCafePointsManager
+{
+	public PcCafePointsManager()
+	{
+	}
+	
+	public void givePcCafePoint(final L2PcInstance player, final long exp)
+	{
+		if (!Config.PC_BANG_ENABLED)
+		{
+			return;
+		}
+		
+		if (player.isInsideZone(ZoneId.PEACE) || player.isInsideZone(ZoneId.PVP) || player.isInsideZone(ZoneId.SIEGE) || (player.isOnlineInt() == 0) || player.isJailed())
+		{
+			return;
+		}
+		
+		if (player.getPcBangPoints() >= Config.PC_BANG_MAX_POINTS)
+		{
+			final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_EXCEEDED_MAX_OF_PC_CAFE_POINTS);
+			player.sendPacket(sm);
+			return;
+		}
+		
+		int points = (int) (exp * 0.0001 * Config.PC_BANG_POINT_RATE);
+		
+		if (Config.PC_BANG_RANDOM_POINT)
+		{
+			points = Rnd.get(points / 2, points);
+		}
+		
+		if ((points == 0) && (exp > 0) && Config.PC_BANG_REWARD_LOW_EXP_KILLS && (Rnd.get(100) < Config.PC_BANG_LOW_EXP_KILLS_CHANCE))
+		{
+			points = 1; // minimum points
+		}
+		
+		SystemMessage message = null;
+		if (points > 0)
+		{
+			if (Config.PC_BANG_ENABLE_DOUBLE_POINTS && (Rnd.get(100) < Config.PC_BANG_DOUBLE_POINTS_CHANCE))
+			{
+				points *= 2;
+				message = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_PCPOINT_DOUBLE);
+			}
+			else
+			{
+				message = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_PCPOINT_DOUBLE);
+			}
+			if ((player.getPcBangPoints() + points) > Config.PC_BANG_MAX_POINTS)
+			{
+				points = Config.PC_BANG_MAX_POINTS - player.getPcBangPoints();
+			}
+			message.addLong(points);
+			player.sendPacket(message);
+			player.setPcBangPoints(player.getPcBangPoints() + points);
+			player.sendPacket(new ExPCCafePointInfo(player.getPcBangPoints(), points, 1));
+		}
+	}
+	
+	/**
+	 * Gets the single instance of {@code PcCafePointsManager}.
+	 * @return single instance of {@code PcCafePointsManager}
+	 */
+	public static final PcCafePointsManager getInstance()
+	{
+		return SingletonHolder._instance;
+	}
+	
+	private static class SingletonHolder
+	{
+		protected static final PcCafePointsManager _instance = new PcCafePointsManager();
+	}
+}
\ No newline at end of file
diff --git java/com/l2jserver/gameserver/model/L2Party.java java/com/l2jserver/gameserver/model/L2Party.java
index ffa84aa..b15fb56 100644
--- java/com/l2jserver/gameserver/model/L2Party.java
+++ java/com/l2jserver/gameserver/model/L2Party.java
@@ -36,6 +36,7 @@
 import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.enums.PartyDistributionType;
 import com.l2jserver.gameserver.instancemanager.DuelManager;
+import com.l2jserver.gameserver.instancemanager.PcCafePointsManager;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Summon;
@@ -767,6 +768,7 @@
 				if (addexp > 0)
 				{
 					member.updateVitalityPoints(vitalityPoints, true, false);
+					PcCafePointsManager.getInstance().givePcCafePoint((member), addexp);
 				}
 			}
 			else
diff --git java/com/l2jserver/gameserver/model/actor/L2Attackable.java java/com/l2jserver/gameserver/model/actor/L2Attackable.java
index 8d8b6f0..8719915 100644
--- java/com/l2jserver/gameserver/model/actor/L2Attackable.java
+++ java/com/l2jserver/gameserver/model/actor/L2Attackable.java
@@ -40,6 +40,7 @@
 import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.enums.InstanceType;
 import com.l2jserver.gameserver.instancemanager.CursedWeaponsManager;
+import com.l2jserver.gameserver.instancemanager.PcCafePointsManager;
 import com.l2jserver.gameserver.instancemanager.WalkingManager;
 import com.l2jserver.gameserver.model.AbsorberInfo;
 import com.l2jserver.gameserver.model.AggroInfo;
@@ -496,6 +497,7 @@
 								if (addexp > 0)
 								{
 									attacker.updateVitalityPoints(getVitalityPoints(damage), true, false);
+									PcCafePointsManager.getInstance().givePcCafePoint((attacker), addexp);
 								}
 							}
 						}
diff --git java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
index 8762730..8b33c8b 100644
--- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
+++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
@@ -351,7 +351,7 @@
 	
 	// 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,title_color,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,base_class,newbie,nobless,power_grade,createDate) 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=?,clanid=?,race=?,classid=?,deletetime=?,title=?,title_color=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,newbie=?,nobless=?,power_grade=?,subpledge=?,lvl_joined_academy=?,apprentice=?,sponsor=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,bookmarkslot=?,vitality_points=?,language=? WHERE charId=?";
+	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=?,clanid=?,race=?,classid=?,deletetime=?,title=?,title_color=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,newbie=?,nobless=?,power_grade=?,subpledge=?,lvl_joined_academy=?,apprentice=?,sponsor=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,bookmarkslot=?,vitality_points=?,pccafe_points=?,language=? WHERE charId=?";
 	private static final String RESTORE_CHARACTER = "SELECT * FROM characters WHERE charId=?";
 	
 	// Character Teleport Bookmark:
@@ -387,6 +387,8 @@
 	public static final int ID_NONE = -1;
 	
 	public static final int REQUEST_TIMEOUT = 15;
+	
+	private int _pcBangPoints = 0;
 	
 	private final List<IEventListener> _eventListeners = new CopyOnWriteArrayList<>();
 	
@@ -7360,8 +7362,9 @@
 			statement.setLong(46, getDeathPenaltyBuffLevel());
 			statement.setInt(47, getBookMarkSlot());
 			statement.setInt(48, getVitalityPoints());
-			statement.setString(49, getLang());
-			statement.setInt(50, getObjectId());
+			statement.setInt(49, getPcBangPoints());
+			statement.setString(50, getLang());
+			statement.setInt(51, getObjectId());
 			
 			statement.execute();
 		}
@@ -13611,6 +13614,23 @@
 		_offlineShopStart = time;
 	}
 	
+	public int getPcBangPoints()
+	{
+		return _pcBangPoints;
+	}
+	
+	public void setPcBangPoints(final int i)
+	{
+		if (i < 200000)
+		{
+			_pcBangPoints = i;
+		}
+		else
+		{
+			_pcBangPoints = 200000;
+		}
+	}
+	
 	/**
 	 * Remove player from BossZones (used on char logout/exit)
 	 */
diff --git java/com/l2jserver/gameserver/model/quest/QuestState.java java/com/l2jserver/gameserver/model/quest/QuestState.java
index e6b16b1..408184e 100644
--- java/com/l2jserver/gameserver/model/quest/QuestState.java
+++ java/com/l2jserver/gameserver/model/quest/QuestState.java
@@ -27,10 +27,12 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
 import com.l2jserver.L2DatabaseFactory;
 import com.l2jserver.gameserver.cache.HtmCache;
 import com.l2jserver.gameserver.enums.QuestSound;
 import com.l2jserver.gameserver.enums.QuestType;
+import com.l2jserver.gameserver.instancemanager.PcCafePointsManager;
 import com.l2jserver.gameserver.instancemanager.QuestManager;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -830,6 +832,7 @@
 	public void addExpAndSp(int exp, int sp)
 	{
 		AbstractScript.addExpAndSp(_player, exp, sp);
+		PcCafePointsManager.getInstance().givePcCafePoint(getPlayer(), (long) (exp * Config.RATE_QUEST_REWARD_XP));
 	}
 	
 	/**
diff --git java/com/l2jserver/gameserver/network/SystemMessageId.java java/com/l2jserver/gameserver/network/SystemMessageId.java
index e014a1e..1cf50ca 100644
--- java/com/l2jserver/gameserver/network/SystemMessageId.java
+++ java/com/l2jserver/gameserver/network/SystemMessageId.java
@@ -15220,6 +15220,12 @@
 	public static final SystemMessageId THOMAS_D_TURKEY_DISAPPEARED;
 	
 	/**
+	 * ID: 6506<br>
+	 * Message: You exceeded max of pc cafe points.
+	 */
+	public static final SystemMessageId YOU_EXCEEDED_MAX_OF_PC_CAFE_POINTS;
+	
+	/**
 	 * Map containing all SystemMessageIds<br>
 	 */
 	private static Map<Integer, SystemMessageId> VALUES = new HashMap<>();
@@ -17745,6 +17751,7 @@
 		THOMAS_D_TURKEY_APPEARED = new SystemMessageId(6503);
 		THOMAS_D_TURKEY_DEFETED = new SystemMessageId(6504);
 		THOMAS_D_TURKEY_DISAPPEARED = new SystemMessageId(6505);
+		YOU_EXCEEDED_MAX_OF_PC_CAFE_POINTS = new SystemMessageId(6506);
 		
 		buildFastLookupTable();
 	}
diff --git java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
index 3d3da22..a350639 100644
--- java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
+++ java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
@@ -69,6 +69,7 @@
 import com.l2jserver.gameserver.network.serverpackets.ExNevitAdventTimeChange;
 import com.l2jserver.gameserver.network.serverpackets.ExNoticePostArrived;
 import com.l2jserver.gameserver.network.serverpackets.ExNotifyPremiumItem;
+import com.l2jserver.gameserver.network.serverpackets.ExPCCafePointInfo;
 import com.l2jserver.gameserver.network.serverpackets.ExShowContactList;
 import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
 import com.l2jserver.gameserver.network.serverpackets.ExStorageMaxCount;
@@ -411,6 +412,18 @@
 		
 		activeChar.updateEffectIcons();
 		
+		if (Config.PC_BANG_ENABLED)
+		{
+			if (activeChar.getPcBangPoints() > 0)
+			{
+				activeChar.sendPacket(new ExPCCafePointInfo(activeChar.getPcBangPoints(), 0, 1));
+			}
+			else
+			{
+				activeChar.sendPacket(new ExPCCafePointInfo());
+			}
+		}
+		
 		activeChar.sendPacket(new EtcStatusUpdate(activeChar));
 		
 		// Expand Skill

DATA:

### Eclipse Workspace Patch 1.0
#P L2J_DataPack
diff --git dist/sql/game/characters.sql dist/sql/game/characters.sql
index 86ab28d..1519f75 100644
--- dist/sql/game/characters.sql
+++ dist/sql/game/characters.sql
@@ -53,6 +53,7 @@
   `death_penalty_level` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
   `bookmarkslot` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
   `vitality_points` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
+  `pccafe_points` INT (6) NOT NULL DEFAULT 0,
   `createDate` date NOT NULL DEFAULT '0000-00-00',
   `language` VARCHAR(2) DEFAULT NULL,
   PRIMARY KEY (`charId`),

Adaptación: No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate. y No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.