Commit Graph

134 Commits

Author SHA1 Message Date
Machiavelli f35c85acbe Core/DBLayer: Optimization in transaction code, and prevent a crash and memleak on shutdown.
--HG--
branch : trunk
2010-12-06 19:52:37 +01:00
Machiavelli 988a6f5c93 Core/DBLayer: Simplify template usage for DatabaseWorker
--HG--
branch : trunk
2010-12-06 19:28:05 +01:00
Spp 408fce1de6 Core: Some optimizations
- Declare some functions const
- Fix some mem leak
- Fix some resource leak
- Remove unused variables and functions
- Remove duplicate functions
- Reduce the scope of some variables
- Remove unused file

--HG--
branch : trunk
2010-12-06 02:07:53 +01:00
Machiavelli b845b9d0fd Core/DBLayer:
- Make time format of MaxPingTime consistent between authserver and worldserver. Note that the value is in minutes, update your config files accordingly if needed.
- Remove obsolete atomic uint32 and prevent concurrent calls to vector::size() in DatabaseWorkerPool

--HG--
branch : trunk
2010-12-05 16:48:47 +01:00
Machiavelli 82ccfa9830 Really fix nonPCH build. With thanks to Aokromes
--HG--
branch : trunk
2010-12-04 23:42:23 +01:00
Machiavelli 533f27e732 Core: Fix non-PCH build (sorry)
--HG--
branch : trunk
2010-12-04 23:14:37 +01:00
Machiavelli f5d6319d4d Core/DBLayer:
- Make the mysql connectionpool shared for async and syncrhonous connections.
- Allow configurable amount of connections for the pool
- Allow configurable amount of delaythreads
Note that delaythreads now only represent in-core threads. Whenever they execute a task they will pick a free connection from the pool instead of using their previously unique assigned connection.
The purpose of this design change is better distribution of SQL requests (no bottlenecks paired with idling) among available resources.
This also prevents a ¨memory waste¨ of preparing async prepared statements on synchronous connections (that were never called) - and vice versa. Now, connections aren´t explicitly async or synchronous, they serve both purposes.

Use at own risk, might cause instabilities.
Don´t forget to update your config files and clear your cmake cache.

--HG--
branch : trunk
2010-12-04 21:50:36 +01:00
click bc098658c6 Core/Chat: Configure automatic owner declaration for custom chat channels (patch by leak)
Closes issue 4974.

--HG--
branch : trunk
2010-12-02 03:54:52 +01:00
Spp 6b5ff1ca25 Core: Fix some warnings
--HG--
branch : trunk
2010-11-22 10:10:46 +01:00
Machiavelli 733b72d29c Core/DBLayer: Add method DirectExecute for synchronous execution of prepared statements (without resultset)
Author: [M]axx

--HG--
branch : trunk
2010-11-21 18:50:11 +01:00
click 5cd3904059 Core/DBLayer: Move tables reserved_name, gameobject_respawn and creature_respawn from WORLD database to CHARACTER database as it's content is realm-specific and should be preserved (thanks to leak for the cleanup)
*** TO PRESERVE (COPY) THE DATA CONTAINED IN THE OLD TABLES, YOU MUST FOLLOW THE FOLLOWING SQL-RECIPE (REPLACE DATABASENAMES WHERE NEEDED!) ***

-- Move creature_respawn from world to characters db
INSERT INTO `characters`.`creature_respawn` (`guid`, `respawntime`, `instance`)
SELECT `guid, `respawntime` `instance` * FROM `world`.`creature_respawn`;
-- Remove creature_respawn table from world db
DROP TABLE `world`.`creature_respawn`;

-- Move gameobject_respawn from world to characters db
INSERT INTO `characters`.`gameobject_respawn` (`guid`, `respawntime`, `instance`)
SELECT `guid`, `respawntime`, `instance` FROM `world`.`gameobject_respawn`;
-- Remove creature_respawn table from world db
DROP TABLE `world`.`gameobject_respawn`;

-- Move reserved names from world to characters db
INSERT INTO `characters`.`reserved_name` (`name`)
SELECT `name` FROM `world`.`reserved_name`;
-- Remove reserved_names table from world db
DROP TABLE `world`.`reserved_name`;

*** THE ABOVE MUST BE DONE, OR EXISTING INSTANCES WILL BE FULLY RESPAWNED - YOU HAVE BEEN WARNED ***
Closes issue 4842. Closes issue 4849.

--HG--
branch : trunk
2010-11-19 15:53:14 +01:00
click 67fade84d3 Core/Commands: Enable SQL query logging by config and command )patch by leak)
Closes issue 4853.

--HG--
branch : trunk
2010-11-19 13:13:07 +01:00
Rat 57661c6d54 Core/SmartAI: swap menuid/actionid params in GOSSIP_SELECT event
- use proper sql ORDER to order script lines

--HG--
branch : trunk
2010-11-04 22:08:15 +01:00
Machiavelli 05a292633c Core/DBLayer:
- Fix a race condition in KeepAlive() when connections are using mysql context when ping is called.
- Don´t wait for locks to be released on a connection when pinging, this means the connection is not idle and locking is redundant.

Patch by admin@****.net

Fixes issue #4599

--HG--
branch : trunk
2010-10-31 10:55:29 +01:00
Rat 5cb119e617 Core/AI: implemented SmartScripts System (still beta) not 100% complete
WARNING: Use scripts at own risk. You were warned.
NOTE0: creature, gameobject, areatrigger type scripts should be fully functional
NOTE1: has no effect on any core related stuff if not using any SmartScript
NOTE2: all event/action/etc descriptions can be found in SmartScriptMgr.h

SmartScripts is a reloadable DB-Sript system, with full control for special scripting,
like escorting, following, complex combat handling, pre-stored AI templates(caster, turret, etc) and much more
with a total of 66 events, 78 actions, 22 target types, and can be easily extended

--HG--
branch : trunk
2010-10-27 21:01:47 +02:00
Rat 62739ed26f Core/AI: implemented basic class for GameObjectAI
--HG--
branch : trunk
2010-10-23 23:31:37 +02:00
linencloth d9d1ec3670 Core: optimize string splitting
- Mainly affects item loading performance
  - Reduces guild loading time a lot

--HG--
branch : trunk
2010-10-21 16:56:51 +02:00
azazel c0faed2251 Core/Guilds: guild code was completely refactored and rewritten.
* OOP desing and implementation;
* all the queries are moved to prepared statements;
* guild loading is optimized;
* all the possible interaction with guild's data is done inside the guild class;
* added more hooks to GuildScript class;

WARNING: Make sure you backup your characters database before applying this change (just in case).

Known problems with guilds:
* when new member is added to the guild, MOTD is not displayed for him in guild tab of social window;
* if you add item with random property to guild bank visual representation of item below it becomes wrong (it displays wrong stack number);
* packets order differs from official: currently guild bank packet traffic is twice as more than on offy.

--HG--
branch : trunk
2010-10-17 19:54:13 +06:00
azazel 3bd1ee0665 Fix most of the recently introduced warnings
--HG--
branch : trunk
2010-10-16 13:32:30 +06:00
click 613b81f36f REALLY fix the CRLF-crap...
--HG--
branch : trunk
2010-10-07 15:54:07 +02:00
click f0c4241ea4 Remove the accidental additions of CRLF-crap from the header updates
--HG--
branch : trunk
2010-10-07 15:35:36 +02:00
click a67d7c9afd Copyright header updates - part 3... (and some whitespace cleanups)
--HG--
branch : trunk
2010-10-07 14:00:52 +02:00
click df66aee929 Yet more copyright header updates
--HG--
branch : trunk
2010-10-07 13:38:35 +02:00
click 8ea4b32fab Update copyright headers (following the same standard in all files = good)
--HG--
branch : trunk
2010-10-07 12:41:56 +02:00
Spp 952d3cf10e Core: Fix couple of warnings
--HG--
branch : trunk
2010-10-01 09:10:07 +02:00
Anubisss 84a29b2d35 Remove const from MySQLConnectionInfo, can't use non const functions in a const struct. This fixes the compile error.
--HG--
branch : trunk
2010-09-30 20:32:09 +02:00
Machiavelli fcec787e9c Core/DBLayer: Pass connection info down to lower level class MySQLConnection and use relevant data in logging messages in its methods
--HG--
branch : trunk
2010-09-29 15:29:57 +02:00
Machiavelli d3b30e979a Fix linux compile. Thanks to click, hunshijie and tomkuzyno for spotting the culprits.
--HG--
branch : trunk
2010-09-29 14:59:05 +02:00
Machiavelli bf72fa749f Core/DBLayer: Store MySQL connection details in a struct and print relevant data in sql driver messages
--HG--
branch : trunk
2010-09-29 08:48:06 +02:00
Shauren 665e7a06ce Core/Commands: Remove all active bans before adding new one, prevents multiple active bans for one character/account
Core/DBLayer: Converted most of ban related queries into prepared statement (might have missed some)

Closes issue #4218.

--HG--
branch : trunk
2010-09-28 21:30:05 +02:00
Spp e27976102d Core/: Fix warnings
--HG--
branch : trunk
2010-09-28 14:48:17 +02:00
Machiavelli 7abe69b570 Core/DBLayer: Remove obsolete parameter in PreparedResultSet constructor.
Thanks to Spp for pointing out.

--HG--
branch : trunk
2010-09-28 14:03:35 +02:00
Machiavelli a9e9a2c884 Core/DBLayer:
- DB Threading model update
* Get rid of ThreadBundleMask and bundled connection
* Implement configurable amount of Synch threads for databasepools
* Use modulus based algorithm to check for free synchronous connections instead of previous ¨get connection by thread key or bundlemask¨ feature
* Locks on mysql context objects are now managed outside the mysql query methods

Fixes issue #4058
Fixes issue #4059
Introduces a ton of more issues. Use at own risk. You were warned. Really.

Don´t forget to update your worldserver.conf

--HG--
branch : trunk
2010-09-27 00:20:56 +02:00
Shauren 2e2951d037 Core/Players: Fixed action bar issues when changing active spec
--HG--
branch : trunk
2010-09-26 21:15:15 +02:00
click 461590832a Core: Generic cleanup (tab2spaces/whitespace removal)
--HG--
branch : trunk
2010-09-25 22:03:57 +02:00
Rat 28e90bbb60 Core/Scripts/SmartAI: added SmartAI files
Core/DBLayer/Texts: added CreatureTextMgr files
BuildSystem: added cmake for above files
Note: these are still under development and NOT USABLE
should not effect anything now

--HG--
branch : trunk
2010-09-25 18:47:03 +02:00
Machiavelli fec6143f42 Core/SocialMgr: Do not load recently deleted (but existant) characters to social (friend/ignore) lists.
Fixes issue #3870
Fixes issue #3610

--HG--
branch : trunk
2010-09-25 17:34:26 +02:00
Machiavelli 477b30a1ad Core/DBLayer: Fix a memory leak in Field class, properly clear buffer before repopulating it.
Fixes many issues (from wrong subnames on NPCs to absent GO/Creature spawns)
Thanks to Rat for helping find the issue

--HG--
branch : trunk
2010-09-25 13:12:12 +02:00
Machiavelli 62946f9ef6 Core/DBLayer:
- Rewrite KeepAlive method for DatabaseWorkerPool. Use mysql_ping instead of explicit select queries, and also schedule KeepAlives for asynchronous threads.
NOTE: While the function is implemented and previous keepalive calls were transformed, it´s possible the keepalive call will need to be placed in several other locations in the code. Please leave feedback on whether or not this fixes your timeout issues.

Update issue #4062

--HG--
branch : trunk
2010-09-25 01:05:24 +02:00
Machiavelli 154d11acc0 Core/DBLayer:
- Fix another pesky linux specific compile error. (Thanks to Derex/Aokromes)
- Fix a typo in an assertion. (Thanks to Derex/Aokromes)
- Add proper zero termination in SetStructuredValue to get rid of memory issues that arose in the last few commits.
- Fix a crash caused by vsprintf´ing std::string in SystemMgr::LoadVersion()

--HG--
branch : trunk
2010-09-25 01:02:40 +02:00
Machiavelli 09aeff1027 Core/DBLayer: Return proper connection handle from DatabaseWorkerPool<T>::GetConnection
Updates issue #4062
Updates issue #4058

--HG--
branch : trunk
2010-09-24 22:41:24 +02:00
Machiavelli e3bf89b6f7 Core/DBLayer:
- Fix memory leak introduced in previous rev
- Fix linux compile, thanks to Playon for reporting

--HG--
branch : trunk
2010-09-24 22:36:35 +02:00
Machiavelli 3c6dc32030 Core/DBLayer:
- Rewrite Field class to be able to store both binary prepared statement data and data from adhoc query resultsets
- Buffer the data of prepared statements using ResultSet and Field classes and let go of mysql c api structures after PreparedResultSet constructor. Fixes a race condition and thus a possible crash/data corruption (issue pointed out to Derex, basic suggestion by raczman)
- Conform PreparedResultSet and ResultSet to the same design standards, and using Field class as data buffer class for both
* NOTE: This means the fetching methods are uniform again, using ¨Field* fields = result->Fetch();¨ and access to elements trough fields[x].
* NOTE: for access to the correct row in prepared statements, ¨Field* fields = result->Fetch();¨ must ALWAYS be called inside the do { }while(result->NextRow()) loop.
* NOTE: This means that Field::GetString() returns std::string object and Field::GetCString() returns const char* pointer.

Still experimental and all that jazz, not recommended for production servers until feedback is given.

--HG--
branch : trunk
2010-09-24 22:16:21 +02:00
Shauren d8ddf38453 Core/Items: Implemented trading soulbound loot items
Core/DBLayer: Converted more more player-related queries into prepared statements
Core/Items: Fixed loading of enchantments

Closes issue #4130.

--HG--
branch : trunk
2010-09-21 21:55:16 +02:00
Machiavelli ce2d4e9a20 Core/DBLayer: Correctly print relevant mysql prepared statement creation error to give the end-user an idea of what exactly went wrong (missing SQL updates are the culprit of creation failure 99% of the time)
--HG--
branch : trunk
2010-09-20 20:53:32 +02:00
Shauren a509976369 Core/DBLayer: Converted player login queries into prepared statements
Core/DBLayer: Added missing implementation for SQLQueryHolder::SetPreparedQuery

--HG--
branch : trunk
2010-09-20 18:20:40 +02:00
click 907203fdd9 Core/DBLayer: Shuffle an #include-statement around (initialize mysql connections before working on the rest) - Fixes nonPCH-builds.
--HG--
branch : trunk
2010-09-19 17:53:45 +02:00
Shauren 97aeb251b8 Core/Players: Added support for single character bans
Core/Commands: Renamed .ban character to .ban playeraccount (.ban character will ban only the player, not account)

This revision reaches 10000, congratulations and thanks to everyone who contributed!

--HG--
branch : trunk
2010-09-19 17:02:14 +02:00
Machiavelli 019103cb5a Core/DBLayer: Correct size for storing MYSQL_TYPE_FLOAT
--HG--
branch : trunk
2010-09-19 15:28:35 +02:00
Machiavelli 22571e9443 Core/DBLayer:
- Allow storing floats in prepared statements explicitly (previously would be casted to double)
- Add GetBool ¨wrapper/hack¨ to PreparedResultset class.

--HG--
branch : trunk
2010-09-19 15:25:50 +02:00