Browse Source

Merge remote-tracking branch 'origin/master' into feature/ConnectionFactory

Zoey76 9 years ago
parent
commit
21bdef2a02

+ 34 - 25
L2J_DataPack/dist/game/data/scripts/ai/individual/Baium/Baium.java

@@ -100,7 +100,6 @@ public final class Baium extends AbstractNpcAI
 	// Misc
 	// Misc
 	private L2GrandBossInstance _baium = null;
 	private L2GrandBossInstance _baium = null;
 	private static long _lastAttack = 0;
 	private static long _lastAttack = 0;
-	private static L2PcInstance _standbyPlayer = null;
 	
 	
 	private Baium()
 	private Baium()
 	{
 	{
@@ -213,6 +212,7 @@ public final class Baium extends AbstractNpcAI
 					_lastAttack = System.currentTimeMillis();
 					_lastAttack = System.currentTimeMillis();
 					startQuestTimer("WAKEUP_ACTION", 50, _baium, null);
 					startQuestTimer("WAKEUP_ACTION", 50, _baium, null);
 					startQuestTimer("MANAGE_EARTHQUAKE", 2000, _baium, null);
 					startQuestTimer("MANAGE_EARTHQUAKE", 2000, _baium, null);
+					startQuestTimer("SOCIAL_ACTION", 10000, _baium, player);
 					startQuestTimer("CHECK_ATTACK", 60000, _baium, null);
 					startQuestTimer("CHECK_ATTACK", 60000, _baium, null);
 				}
 				}
 				break;
 				break;
@@ -231,7 +231,6 @@ public final class Baium extends AbstractNpcAI
 				{
 				{
 					zone.broadcastPacket(new Earthquake(npc.getX(), npc.getY(), npc.getZ(), 40, 10));
 					zone.broadcastPacket(new Earthquake(npc.getX(), npc.getY(), npc.getZ(), 40, 10));
 					zone.broadcastPacket(new PlaySound("BS02_A"));
 					zone.broadcastPacket(new PlaySound("BS02_A"));
-					startQuestTimer("SOCIAL_ACTION", 8000, npc, player);
 				}
 				}
 				break;
 				break;
 			}
 			}
@@ -253,10 +252,18 @@ public final class Baium extends AbstractNpcAI
 						player.teleToLocation(BAIUM_GIFT_LOC);
 						player.teleToLocation(BAIUM_GIFT_LOC);
 						startQuestTimer("PLAYER_KILL", 3000, npc, player);
 						startQuestTimer("PLAYER_KILL", 3000, npc, player);
 					}
 					}
-					else if ((_standbyPlayer != null) && _standbyPlayer.isInsideRadius(npc, 16000, true, false))
+					else
 					{
 					{
-						_standbyPlayer.teleToLocation(BAIUM_GIFT_LOC);
-						startQuestTimer("PLAYER_KILL", 3000, npc, _standbyPlayer);
+						L2PcInstance randomPlayer = getRandomPlayer(npc);
+						if (randomPlayer != null)
+						{
+							randomPlayer.teleToLocation(BAIUM_GIFT_LOC);
+							startQuestTimer("PLAYER_KILL", 3000, npc, randomPlayer);
+						}
+						else
+						{
+							startQuestTimer("PLAYER_KILL", 3000, npc, null);
+						}
 					}
 					}
 				}
 				}
 				break;
 				break;
@@ -266,20 +273,20 @@ public final class Baium extends AbstractNpcAI
 				if ((player != null) && player.isInsideRadius(npc, 16000, true, false))
 				if ((player != null) && player.isInsideRadius(npc, 16000, true, false))
 				{
 				{
 					zone.broadcastPacket(new SocialAction(npc.getObjectId(), 1));
 					zone.broadcastPacket(new SocialAction(npc.getObjectId(), 1));
-					broadcastNpcSay(npc, Say2.NPC_ALL, player.getName() + ", How dare you wake me! Now you shall die!"); // TODO: replace with NpcStringId when are done core support
+					broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.HOW_DARE_YOU_WAKE_ME_NOW_YOU_SHALL_DIE, player.getName());
 					npc.setTarget(player);
 					npc.setTarget(player);
 					npc.doCast(BAIUM_PRESENT.getSkill());
 					npc.doCast(BAIUM_PRESENT.getSkill());
 				}
 				}
 				
 				
-				for (L2PcInstance players : zone.getPlayersInside())
+				for (L2PcInstance insidePlayer : zone.getPlayersInside())
 				{
 				{
-					if (players.isHero())
+					if (insidePlayer.isHero())
 					{
 					{
-						zone.broadcastPacket(new ExShowScreenMessage(NpcStringId.NOT_EVEN_THE_GODS_THEMSELVES_COULD_TOUCH_ME_BUT_YOU_S1_YOU_DARE_CHALLENGE_ME_IGNORANT_MORTAL, 2, 4000, players.getName()));
+						zone.broadcastPacket(new ExShowScreenMessage(NpcStringId.NOT_EVEN_THE_GODS_THEMSELVES_COULD_TOUCH_ME_BUT_YOU_S1_YOU_DARE_CHALLENGE_ME_IGNORANT_MORTAL, 2, 4000, insidePlayer.getName()));
 						break;
 						break;
 					}
 					}
 				}
 				}
-				startQuestTimer("SPAWN_ARCHANGEL", 8000, npc, null);
+				startQuestTimer("SPAWN_ARCHANGEL", 8000, npc, player);
 				break;
 				break;
 			}
 			}
 			case "SPAWN_ARCHANGEL":
 			case "SPAWN_ARCHANGEL":
@@ -296,19 +303,12 @@ public final class Baium extends AbstractNpcAI
 				{
 				{
 					addAttackPlayerDesire(npc, player);
 					addAttackPlayerDesire(npc, player);
 				}
 				}
-				else if ((_standbyPlayer != null) && !_standbyPlayer.isDead())
-				{
-					addAttackPlayerDesire(npc, _standbyPlayer);
-				}
 				else
 				else
 				{
 				{
-					for (L2Character creature : npc.getKnownList().getKnownCharactersInRadius(2000))
+					L2PcInstance randomPlayer = getRandomPlayer(npc);
+					if (randomPlayer != null)
 					{
 					{
-						if ((creature != null) && creature.isPlayer() && zone.isInsideZone(creature) && !creature.isDead())
-						{
-							addAttackPlayerDesire(npc, (L2Playable) creature);
-							break;
-						}
+						addAttackPlayerDesire(npc, randomPlayer);
 					}
 					}
 				}
 				}
 				break;
 				break;
@@ -377,6 +377,7 @@ public final class Baium extends AbstractNpcAI
 			{
 			{
 				if ((npc != null) && ((_lastAttack + 1800000) < System.currentTimeMillis()))
 				if ((npc != null) && ((_lastAttack + 1800000) < System.currentTimeMillis()))
 				{
 				{
+					cancelQuestTimers("SELECT_TARGET");
 					notifyEvent("CLEAR_ZONE", null, null);
 					notifyEvent("CLEAR_ZONE", null, null);
 					addSpawn(BAIUM_STONE, BAIUM_LOC, false, 0);
 					addSpawn(BAIUM_STONE, BAIUM_LOC, false, 0);
 					setStatus(ALIVE);
 					setStatus(ALIVE);
@@ -560,6 +561,7 @@ public final class Baium extends AbstractNpcAI
 			startQuestTimer("CLEAR_STATUS", respawnTime, null, null);
 			startQuestTimer("CLEAR_STATUS", respawnTime, null, null);
 			startQuestTimer("CLEAR_ZONE", 900000, null, null);
 			startQuestTimer("CLEAR_ZONE", 900000, null, null);
 			cancelQuestTimer("CHECK_ATTACK", npc, null);
 			cancelQuestTimer("CHECK_ATTACK", npc, null);
+			cancelQuestTimers("SELECT_TARGET");
 		}
 		}
 		return super.onKill(npc, killer, isSummon);
 		return super.onKill(npc, killer, isSummon);
 	}
 	}
@@ -572,11 +574,6 @@ public final class Baium extends AbstractNpcAI
 			return super.onSeeCreature(npc, creature, isSummon);
 			return super.onSeeCreature(npc, creature, isSummon);
 		}
 		}
 		
 		
-		if (creature.isPlayer() && !creature.isDead() && (_standbyPlayer == null))
-		{
-			_standbyPlayer = (L2PcInstance) creature;
-		}
-		
 		if (creature.isInCategory(CategoryType.CLERIC_GROUP))
 		if (creature.isInCategory(CategoryType.CLERIC_GROUP))
 		{
 		{
 			if (npc.getCurrentHp() < (npc.getMaxHp() * 0.25))
 			if (npc.getCurrentHp() < (npc.getMaxHp() * 0.25))
@@ -785,6 +782,18 @@ public final class Baium extends AbstractNpcAI
 		}
 		}
 	}
 	}
 	
 	
+	private L2PcInstance getRandomPlayer(L2Npc npc)
+	{
+		for (L2Character creature : npc.getKnownList().getKnownCharactersInRadius(2000))
+		{
+			if ((creature != null) && creature.isPlayer() && zone.isInsideZone(creature) && !creature.isDead())
+			{
+				return (L2PcInstance) creature;
+			}
+		}
+		return null;
+	}
+	
 	public static void main(String[] args)
 	public static void main(String[] args)
 	{
 	{
 		new Baium();
 		new Baium();

+ 10 - 14
L2J_DataPack/dist/game/data/scripts/custom/events/Elpies/Elpies.java

@@ -18,12 +18,12 @@
  */
  */
 package custom.events.Elpies;
 package custom.events.Elpies;
 
 
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ScheduledFuture;
 
 
 import com.l2jserver.Config;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ThreadPoolManager;
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2EventMonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2EventMonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -64,8 +64,8 @@ public final class Elpies extends Event
 	// @formatter:on
 	// @formatter:on
 	// Non-final variables
 	// Non-final variables
 	private static boolean EVENT_ACTIVE = false;
 	private static boolean EVENT_ACTIVE = false;
-	private static int CURRENT_ELPY_COUNT = 0;
 	private ScheduledFuture<?> _eventTask = null;
 	private ScheduledFuture<?> _eventTask = null;
+	private final Set<L2Npc> _elpies = ConcurrentHashMap.newKeySet(ELPY_AMOUNT);
 	
 	
 	private Elpies()
 	private Elpies()
 	{
 	{
@@ -101,13 +101,11 @@ public final class Elpies extends Event
 		EventLocation[] locations = EventLocation.values();
 		EventLocation[] locations = EventLocation.values();
 		EventLocation randomLoc = locations[getRandom(locations.length)];
 		EventLocation randomLoc = locations[getRandom(locations.length)];
 		
 		
-		CURRENT_ELPY_COUNT = 0;
 		long despawnDelay = EVENT_DURATION_MINUTES * 60000;
 		long despawnDelay = EVENT_DURATION_MINUTES * 60000;
 		
 		
 		for (int i = 0; i < ELPY_AMOUNT; i++)
 		for (int i = 0; i < ELPY_AMOUNT; i++)
 		{
 		{
-			addSpawn(ELPY, randomLoc.getRandomX(), randomLoc.getRandomY(), randomLoc.getZ(), 0, true, despawnDelay);
-			CURRENT_ELPY_COUNT++;
+			_elpies.add(addSpawn(ELPY, randomLoc.getRandomX(), randomLoc.getRandomY(), randomLoc.getZ(), 0, true, despawnDelay));
 		}
 		}
 		
 		
 		Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
 		Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
@@ -139,14 +137,11 @@ public final class Elpies extends Event
 			_eventTask = null;
 			_eventTask = null;
 		}
 		}
 		
 		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(ELPY))
+		for (L2Npc npc : _elpies)
 		{
 		{
-			L2Npc npc = spawn.getLastSpawn();
-			if (npc != null)
-			{
-				npc.deleteMe();
-			}
+			npc.deleteMe();
 		}
 		}
+		_elpies.clear();
 		
 		
 		Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
 		Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
 		Broadcast.toAllOnlinePlayers("Elpy Event finished!");
 		Broadcast.toAllOnlinePlayers("Elpy Event finished!");
@@ -158,11 +153,12 @@ public final class Elpies extends Event
 	{
 	{
 		if (EVENT_ACTIVE)
 		if (EVENT_ACTIVE)
 		{
 		{
+			_elpies.remove(npc);
+			
 			dropItem(npc, killer, DROPLIST_CONSUMABLES);
 			dropItem(npc, killer, DROPLIST_CONSUMABLES);
 			dropItem(npc, killer, DROPLIST_CRYSTALS);
 			dropItem(npc, killer, DROPLIST_CRYSTALS);
-			CURRENT_ELPY_COUNT--;
 			
 			
-			if (CURRENT_ELPY_COUNT <= 0)
+			if (_elpies.isEmpty())
 			{
 			{
 				Broadcast.toAllOnlinePlayers("All elpies have been killed!");
 				Broadcast.toAllOnlinePlayers("All elpies have been killed!");
 				eventStop();
 				eventStop();

+ 7 - 9
L2J_DataPack/dist/game/data/scripts/custom/events/Rabbits/Rabbits.java

@@ -20,7 +20,8 @@ package custom.events.Rabbits;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 
 import com.l2jserver.Config;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Object;
@@ -51,7 +52,7 @@ public final class Rabbits extends Event
 	private static final int EVENT_TIME = 10;
 	private static final int EVENT_TIME = 10;
 	private static final int TOTAL_CHEST_COUNT = 75;
 	private static final int TOTAL_CHEST_COUNT = 75;
 	private static final int TRANSFORMATION_ID = 105;
 	private static final int TRANSFORMATION_ID = 105;
-	private final List<L2Npc> _npcs = new CopyOnWriteArrayList<>();
+	private final Set<L2Npc> _npcs = ConcurrentHashMap.newKeySet(TOTAL_CHEST_COUNT + 1);
 	private final List<L2PcInstance> _players = new ArrayList<>();
 	private final List<L2PcInstance> _players = new ArrayList<>();
 	private boolean _isActive = false;
 	private boolean _isActive = false;
 	
 	
@@ -142,16 +143,13 @@ public final class Rabbits extends Event
 		// Despawn NPCs
 		// Despawn NPCs
 		for (L2Npc npc : _npcs)
 		for (L2Npc npc : _npcs)
 		{
 		{
-			if (npc != null)
-			{
-				npc.deleteMe();
-			}
+			npc.deleteMe();
 		}
 		}
 		_npcs.clear();
 		_npcs.clear();
 		
 		
 		for (L2PcInstance player : _players)
 		for (L2PcInstance player : _players)
 		{
 		{
-			if ((player != null) && (player.getTransformationId() == TRANSFORMATION_ID))
+			if (player.getTransformationId() == TRANSFORMATION_ID)
 			{
 			{
 				player.untransform();
 				player.untransform();
 			}
 			}
@@ -213,7 +211,7 @@ public final class Rabbits extends Event
 				npc.deleteMe();
 				npc.deleteMe();
 				_npcs.remove(npc);
 				_npcs.remove(npc);
 				
 				
-				if (_npcs.size() <= 1)
+				if (_npcs.isEmpty())
 				{
 				{
 					Broadcast.toAllOnlinePlayers("Rabbits Event: No more chests...");
 					Broadcast.toAllOnlinePlayers("Rabbits Event: No more chests...");
 					eventStop();
 					eventStop();
@@ -253,7 +251,7 @@ public final class Rabbits extends Event
 		}
 		}
 	}
 	}
 	
 	
-	private static void recordSpawn(List<L2Npc> npcs, int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
+	private static void recordSpawn(Set<L2Npc> npcs, int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
 	{
 	{
 		final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
 		final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
 		if (npc.getId() == CHEST)
 		if (npc.getId() == CHEST)

+ 13 - 21
L2J_DataPack/dist/game/data/scripts/custom/events/Race/Race.java

@@ -18,9 +18,8 @@
  */
  */
 package custom.events.Race;
 package custom.events.Race;
 
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ScheduledFuture;
 
 
 import com.l2jserver.Config;
 import com.l2jserver.Config;
@@ -42,11 +41,11 @@ import com.l2jserver.gameserver.util.Broadcast;
 public final class Race extends Event
 public final class Race extends Event
 {
 {
 	// Event NPC's list
 	// Event NPC's list
-	private List<L2Npc> _npclist;
+	private final Set<L2Npc> _npcs = ConcurrentHashMap.newKeySet();
 	// Npc
 	// Npc
 	private L2Npc _npc;
 	private L2Npc _npc;
 	// Player list
 	// Player list
-	private List<L2PcInstance> _players;
+	private final Set<L2PcInstance> _players = ConcurrentHashMap.newKeySet();
 	// Event Task
 	// Event Task
 	ScheduledFuture<?> _eventTask = null;
 	ScheduledFuture<?> _eventTask = null;
 	// Event state
 	// Event state
@@ -120,6 +119,7 @@ public final class Race extends Event
 		{
 		{
 			return false;
 			return false;
 		}
 		}
+		
 		// Check Custom Table - we use custom NPC's
 		// Check Custom Table - we use custom NPC's
 		if (!Config.CUSTOM_NPC_DATA)
 		if (!Config.CUSTOM_NPC_DATA)
 		{
 		{
@@ -127,9 +127,7 @@ public final class Race extends Event
 			eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPC table is disabled!");
 			eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPC table is disabled!");
 			return false;
 			return false;
 		}
 		}
-		// Initialize list
-		_npclist = new ArrayList<>();
-		_players = new CopyOnWriteArrayList<>();
+		
 		// Set Event active
 		// Set Event active
 		_isactive = true;
 		_isactive = true;
 		// Spawn Manager
 		// Spawn Manager
@@ -167,7 +165,7 @@ public final class Race extends Event
 		// Transform players and send message
 		// Transform players and send message
 		for (L2PcInstance player : _players)
 		for (L2PcInstance player : _players)
 		{
 		{
-			if ((player != null) && player.isOnline())
+			if (player.isOnline())
 			{
 			{
 				if (player.isInsideRadius(_npc, 500, false, false))
 				if (player.isInsideRadius(_npc, 500, false, false))
 				{
 				{
@@ -209,22 +207,19 @@ public final class Race extends Event
 		// Teleport to event start point
 		// Teleport to event start point
 		for (L2PcInstance player : _players)
 		for (L2PcInstance player : _players)
 		{
 		{
-			if ((player != null) && player.isOnline())
+			if (player.isOnline())
 			{
 			{
 				player.untransform();
 				player.untransform();
 				player.teleToLocation(_npc.getX(), _npc.getY(), _npc.getZ(), true);
 				player.teleToLocation(_npc.getX(), _npc.getY(), _npc.getZ(), true);
 			}
 			}
 		}
 		}
+		_players.clear();
 		// Despawn NPCs
 		// Despawn NPCs
-		for (L2Npc _npc : _npclist)
+		for (L2Npc _npc : _npcs)
 		{
 		{
-			if (_npc != null)
-			{
-				_npc.deleteMe();
-			}
+			_npc.deleteMe();
 		}
 		}
-		_npclist.clear();
-		_players.clear();
+		_npcs.clear();
 		// Announce event end
 		// Announce event end
 		Broadcast.toAllOnlinePlayers("* Race Event finished *");
 		Broadcast.toAllOnlinePlayers("* Race Event finished *");
 		
 		
@@ -355,10 +350,7 @@ public final class Race extends Event
 	private L2Npc recordSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
 	private L2Npc recordSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
 	{
 	{
 		final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
 		final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
-		if (npc != null)
-		{
-			_npclist.add(npc);
-		}
+		_npcs.add(npc);
 		return npc;
 		return npc;
 	}
 	}
 	
 	

+ 9 - 8
L2J_DataPack/dist/game/data/scripts/quests/Q00421_LittleWingsBigAdventure/Q00421_LittleWingsBigAdventure.java

@@ -89,6 +89,15 @@ public final class Q00421_LittleWingsBigAdventure extends Quest
 	@Override
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
 	{
+		if ("DESPAWN_GUARDIAN".equals(event))
+		{
+			if (npc != null)
+			{
+				npc.deleteMe();
+			}
+			return super.onAdvEvent(event, npc, player);
+		}
+		
 		final QuestState qs = getQuestState(player, false);
 		final QuestState qs = getQuestState(player, false);
 		String htmltext = null;
 		String htmltext = null;
 		if (qs == null)
 		if (qs == null)
@@ -172,14 +181,6 @@ public final class Q00421_LittleWingsBigAdventure extends Quest
 				htmltext = event;
 				htmltext = event;
 				break;
 				break;
 			}
 			}
-			case "DESPAWN_GUARDIAN":
-			{
-				if (npc != null)
-				{
-					npc.deleteMe();
-				}
-				break;
-			}
 		}
 		}
 		return htmltext;
 		return htmltext;
 	}
 	}

+ 1 - 1
L2J_DataPack/dist/sql/game/characters.sql

@@ -53,7 +53,7 @@ CREATE TABLE IF NOT EXISTS `characters` (
   `death_penalty_level` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
   `death_penalty_level` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
   `bookmarkslot` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
   `bookmarkslot` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
   `vitality_points` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
   `vitality_points` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
-  `createDate` date NOT NULL DEFAULT '0000-00-00',
+  `createDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `language` VARCHAR(2) DEFAULT NULL,
   `language` VARCHAR(2) DEFAULT NULL,
   PRIMARY KEY (`charId`),
   PRIMARY KEY (`charId`),
   KEY `account_name` (`account_name`),
   KEY `account_name` (`account_name`),

+ 1 - 0
L2J_DataPack/dist/sql/game/updates/20150705update.sql

@@ -0,0 +1 @@
+ALTER TABLE `characters` CHANGE COLUMN `createDate` `createDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `vitality_points`;