Advertisement
Guest User

Untitled

a guest
Jul 26th, 2014
545
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 40.89 KB | None | 0 0
  1. From 8b4613f987dcbe3e6299911b5c6035190567df14 Mon Sep 17 00:00:00 2001
  2. From: SignFinder <Pandemonium709@mail.ru>
  3. Date: Tue, 24 Jun 2014 07:19:16 -0400
  4. Subject: [PATCH] GuildLevelSystem
  5.  
  6. ---
  7. .../GuildLevelSystem/auth_guild_level_system.sql | 7 +
  8. .../characters_guild_level_system.sql | 55 ++++++++
  9. .../GuildLevelSystem/world_guild_level_system.sql | 6 +
  10. src/server/game/Accounts/RBAC.h | 4 +
  11. src/server/game/Conditions/ConditionMgr.cpp | 22 +++
  12. src/server/game/Conditions/ConditionMgr.h | 3 +-
  13. src/server/game/Entities/Player/Player.cpp | 41 ++++++
  14. src/server/game/Entities/Unit/Unit.cpp | 22 ++-
  15. src/server/game/Guilds/Guild.cpp | 144 ++++++++++++++++++++
  16. src/server/game/Guilds/Guild.h | 37 +++++
  17. src/server/game/Handlers/LootHandler.cpp | 11 ++
  18. src/server/game/Miscellaneous/Formulas.h | 11 ++
  19. src/server/game/Miscellaneous/Language.h | 6 +-
  20. src/server/game/Reputation/ReputationMgr.cpp | 10 ++
  21. src/server/game/World/World.cpp | 87 ++++++++++++
  22. src/server/game/World/World.h | 20 +++
  23. src/server/scripts/Commands/cs_guild.cpp | 133 +++++++++++++++++-
  24. .../Database/Implementation/CharacterDatabase.cpp | 10 ++
  25. .../Database/Implementation/CharacterDatabase.h | 7 +
  26. 19 files changed, 626 insertions(+), 10 deletions(-)
  27. create mode 100644 sql/TrinityCore-Patches/GuildLevelSystem/auth_guild_level_system.sql
  28. create mode 100644 sql/TrinityCore-Patches/GuildLevelSystem/characters_guild_level_system.sql
  29. create mode 100644 sql/TrinityCore-Patches/GuildLevelSystem/world_guild_level_system.sql
  30.  
  31. diff --git a/sql/TrinityCore-Patches/GuildLevelSystem/auth_guild_level_system.sql b/sql/TrinityCore-Patches/GuildLevelSystem/auth_guild_level_system.sql
  32. new file mode 100644
  33. index 0000000..598b496
  34. --- /dev/null
  35. +++ b/sql/TrinityCore-Patches/GuildLevelSystem/auth_guild_level_system.sql
  36. @@ -0,0 +1,7 @@
  37. +INSERT INTO `rbac_permissions` VALUES ('1000', 'Command: guild info');
  38. +INSERT INTO `rbac_permissions` VALUES ('1001', 'Command: guild setlevel');
  39. +INSERT INTO `rbac_permissions` VALUES ('1002', 'Command: guild givexp');
  40. +
  41. +INSERT INTO `rbac_linked_permissions` VALUES ('195', '1000');
  42. +INSERT INTO `rbac_linked_permissions` VALUES ('192', '1001');
  43. +INSERT INTO `rbac_linked_permissions` VALUES ('192', '1002');
  44. diff --git a/sql/TrinityCore-Patches/GuildLevelSystem/characters_guild_level_system.sql b/sql/TrinityCore-Patches/GuildLevelSystem/characters_guild_level_system.sql
  45. new file mode 100644
  46. index 0000000..ae05ff6
  47. --- /dev/null
  48. +++ b/sql/TrinityCore-Patches/GuildLevelSystem/characters_guild_level_system.sql
  49. @@ -0,0 +1,55 @@
  50. +ALTER TABLE `guild` ADD `xp` INT(10) DEFAULT 0 NOT NULL AFTER `BankMoney`;
  51. +ALTER TABLE `guild` ADD `level` TINYINT(3) DEFAULT 0 NOT NULL AFTER `xp`;
  52. +
  53. +SET FOREIGN_KEY_CHECKS=0;
  54. +
  55. +-- ----------------------------
  56. +-- Table structure for `guild_bonus_config`
  57. +-- ----------------------------
  58. +DROP TABLE IF EXISTS `guild_bonus_config`;
  59. +CREATE TABLE `guild_bonus_config` (
  60. + `BonusId` smallint(5) NOT NULL DEFAULT '0',
  61. + `RequiredGuildLevel` tinyint(3) NOT NULL DEFAULT '0',
  62. + `comment` longtext CHARACTER SET utf8
  63. +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  64. +
  65. +-- ----------------------------
  66. +-- Records of guild_bonus_config
  67. +-- ----------------------------
  68. +INSERT INTO `guild_bonus_config` VALUES ('1', '1', 'Goldbonus | 5% Bonus gold for the guild bank');
  69. +INSERT INTO `guild_bonus_config` VALUES ('2', '1', 'XP-Bonus | +5% XP at the end of quest or kill monsters');
  70. +INSERT INTO `guild_bonus_config` VALUES ('3', '2', 'Faster Spirit | Double movement speed as spirit');
  71. +INSERT INTO `guild_bonus_config` VALUES ('4', '2', 'Cheap repair | -25% Repair costs');
  72. +INSERT INTO `guild_bonus_config` VALUES ('5', '3', 'Goldbonus-2 | 10% Bonus gold for the guild bank');
  73. +INSERT INTO `guild_bonus_config` VALUES ('6', '4', 'Riding Pace | +5% Riding pace (Except Battlegrounds and Arenas)');
  74. +INSERT INTO `guild_bonus_config` VALUES ('7', '4', 'Good Relationships | +5% Reputation gain');
  75. +INSERT INTO `guild_bonus_config` VALUES ('8', '5', 'XP-Bonus-2 | +10% XP at the end of quest or kill monsters');
  76. +INSERT INTO `guild_bonus_config` VALUES ('9', '6', 'Cheap Repair-2 | -50% Repair costs');
  77. +INSERT INTO `guild_bonus_config` VALUES ('10', '6', 'Riding Pace-2 | +10% Riding pace (Except Battlegrounds and Arenas)');
  78. +INSERT INTO `guild_bonus_config` VALUES ('11', '7', 'Good Relationships-2 | +10% Reputation gain');
  79. +INSERT INTO `guild_bonus_config` VALUES ('12', '5', 'Bonus Honor | +5% Honor');
  80. +INSERT INTO `guild_bonus_config` VALUES ('13', '8', 'Bonus Honor-2 | +10% Honor');
  81. +
  82. +SET FOREIGN_KEY_CHECKS=0;
  83. +
  84. +-- ----------------------------
  85. +-- Table structure for `guild_xp_for_next_level`
  86. +-- ----------------------------
  87. +DROP TABLE IF EXISTS `guild_xp_for_next_level`;
  88. +CREATE TABLE `guild_xp_for_next_level` (
  89. + `level` tinyint(3) NOT NULL DEFAULT '0',
  90. + `xp_for_next_level` int(10) NOT NULL DEFAULT '0',
  91. + PRIMARY KEY (`level`)
  92. +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  93. +
  94. +-- ----------------------------
  95. +-- Records of guild_xp_for_next_level
  96. +-- ----------------------------
  97. +INSERT INTO `guild_xp_for_next_level` VALUES ('0', '8000000');
  98. +INSERT INTO `guild_xp_for_next_level` VALUES ('1', '12000000');
  99. +INSERT INTO `guild_xp_for_next_level` VALUES ('2', '18000000');
  100. +INSERT INTO `guild_xp_for_next_level` VALUES ('3', '27000000');
  101. +INSERT INTO `guild_xp_for_next_level` VALUES ('4', '40500000');
  102. +INSERT INTO `guild_xp_for_next_level` VALUES ('5', '60750000');
  103. +INSERT INTO `guild_xp_for_next_level` VALUES ('6', '91125000');
  104. +INSERT INTO `guild_xp_for_next_level` VALUES ('7', '136687500');
  105. \ No newline at end of file
  106. diff --git a/sql/TrinityCore-Patches/GuildLevelSystem/world_guild_level_system.sql b/sql/TrinityCore-Patches/GuildLevelSystem/world_guild_level_system.sql
  107. new file mode 100644
  108. index 0000000..2c72414
  109. --- /dev/null
  110. +++ b/sql/TrinityCore-Patches/GuildLevelSystem/world_guild_level_system.sql
  111. @@ -0,0 +1,6 @@
  112. +INSERT INTO `trinity_string` VALUES ('13000', 'Guild Level: %u.', null, null, null, null, null, null, null, null);
  113. +INSERT INTO `trinity_string` VALUES ('13001', 'Guild Experience: %u/%u.', null, null, null, null, null, null, null, null);
  114. +
  115. +INSERT INTO `command` VALUES ('guild info', '1000', 'Syntax: .guild info');
  116. +INSERT INTO `command` VALUES ('guild setlevel', '1001', 'Syntax: .guild setlevel $GuildName $Level');
  117. +INSERT INTO `command` VALUES ('guild givexp', '1002', 'Syntax: .guild givexp $GuildName $Xp');
  118. \ No newline at end of file
  119. diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
  120. index 9ce1f9b..668d717 100644
  121. --- a/src/server/game/Accounts/RBAC.h
  122. +++ b/src/server/game/Accounts/RBAC.h
  123. @@ -683,6 +683,10 @@ enum RBACPermissions
  124. RBAC_PERM_COMMAND_MAILBOX = 777,
  125.  
  126. // custom permissions 1000+
  127. +
  128. + RBAC_PERM_COMMAND_GUILD_INFO = 1000,
  129. + RBAC_PERM_COMMAND_GUILD_SET_LEVEL = 1001,
  130. + RBAC_PERM_COMMAND_GUILD_GIVE_XP = 1002,
  131. RBAC_PERM_MAX
  132. };
  133.  
  134. diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
  135. index bb1a722..13800b6 100644
  136. --- a/src/server/game/Conditions/ConditionMgr.cpp
  137. +++ b/src/server/game/Conditions/ConditionMgr.cpp
  138. @@ -28,6 +28,7 @@
  139. #include "SpellAuras.h"
  140. #include "SpellMgr.h"
  141. #include "Spell.h"
  142. +#include "Guild.h"
  143.  
  144. // Checks if object meets the condition
  145. // Can have CONDITION_SOURCE_TYPE_NONE && !mReferenceId if called from a special event (ie: eventAI)
  146. @@ -323,6 +324,13 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
  147. condMeets = creature->GetCreatureTemplate()->type == ConditionValue1;
  148. break;
  149. }
  150. + case CONDITION_GUILD_LEVEL:
  151. + {
  152. + if (Player* player = object->ToPlayer())
  153. + if (Guild* guild = player->GetGuild())
  154. + condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), static_cast<uint32>(guild->GetLevel()), ConditionValue1);
  155. + break;
  156. + }
  157. default:
  158. condMeets = false;
  159. break;
  160. @@ -487,6 +495,9 @@ uint32 Condition::GetSearcherTypeMaskForCondition()
  161. case CONDITION_CREATURE_TYPE:
  162. mask |= GRID_MAP_TYPE_MASK_CREATURE;
  163. break;
  164. + case CONDITION_GUILD_LEVEL:
  165. + mask |= GRID_MAP_TYPE_MASK_PLAYER;
  166. + break;
  167. default:
  168. ASSERT(false && "Condition::GetSearcherTypeMaskForCondition - missing condition handling!");
  169. break;
  170. @@ -2009,6 +2020,17 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
  171. }
  172. break;
  173. }
  174. + case CONDITION_GUILD_LEVEL:
  175. + {
  176. + if (cond->ConditionValue2 >= COMP_TYPE_MAX)
  177. + {
  178. + TC_LOG_ERROR("sql.sql", "Guildlevel condition has invalid option (%u), skipped", cond->ConditionValue2);
  179. + return false;
  180. + }
  181. + if (cond->ConditionValue3)
  182. + TC_LOG_ERROR("sql.sql", "Guildlevel condition has useless data in value3 (%u)!", cond->ConditionValue3);
  183. + break;
  184. + }
  185. default:
  186. break;
  187. }
  188. diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h
  189. index 876b922..993f892 100644
  190. --- a/src/server/game/Conditions/ConditionMgr.h
  191. +++ b/src/server/game/Conditions/ConditionMgr.h
  192. @@ -72,7 +72,8 @@ enum ConditionTypes
  193. CONDITION_ALIVE = 36, // 0 0 0 true if unit is alive
  194. CONDITION_HP_VAL = 37, // hpVal ComparisonType 0 true if unit's hp matches given value
  195. CONDITION_HP_PCT = 38, // hpPct ComparisonType 0 true if unit's hp matches given pct
  196. - CONDITION_MAX = 39 // MAX
  197. + CONDITION_GUILD_LEVEL = 39, // Gildenlevel Level Vergleichstyp
  198. + CONDITION_MAX = 40 // MAX
  199. };
  200.  
  201. /*! Documentation on implementing a new ConditionSourceType:
  202. diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
  203. index 9733c0f..a9f450d 100644
  204. --- a/src/server/game/Entities/Player/Player.cpp
  205. +++ b/src/server/game/Entities/Player/Player.cpp
  206. @@ -5107,6 +5107,12 @@ void Player::BuildPlayerRepop()
  207. // convert player body to ghost
  208. SetHealth(1);
  209.  
  210. + //Guild-Level-System (Bonus: Faster spirit)
  211. + if (!GetMap()->IsBattlegroundOrArena())
  212. + if (Guild* guild = GetGuild())
  213. + if (guild->HasLevelForBonus(GUILD_BONUS_SCHNELLER_GEIST))
  214. + SetSpeed(MOVE_RUN, 2.0f, true);
  215. +
  216. SetMovement(MOVE_WATER_WALK);
  217. if (!GetSession()->isLogingOut())
  218. SetMovement(MOVE_UNROOT);
  219. @@ -5154,6 +5160,9 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness)
  220. SetMovement(MOVE_LAND_WALK);
  221. SetMovement(MOVE_UNROOT);
  222.  
  223. + //Guild-Level-System (Bonus: Faster spirit)
  224. + SetSpeed(MOVE_RUN, 1.0f, true);
  225. +
  226. m_deathTimer = 0;
  227.  
  228. // set health/powers (0- will be set in caller)
  229. @@ -5479,6 +5488,15 @@ uint32 Player::DurabilityRepair(uint16 pos, bool cost, float discountMod, bool g
  230.  
  231. costs = uint32(costs * discountMod * sWorld->getRate(RATE_REPAIRCOST));
  232.  
  233. + //Guild-Level-System (Bonus: Guenstige Reperatur)
  234. + if (Guild* guild = GetGuild())
  235. + {
  236. + if (guild->HasLevelForBonus(GUILD_BONUS_REPERATUR_1))
  237. + costs -= uint32(costs*0.25f);
  238. + if (guild->HasLevelForBonus(GUILD_BONUS_REPERATUR_2))
  239. + costs -= uint32(costs*0.5f);
  240. + }
  241. +
  242. if (costs == 0) //fix for ITEM_QUALITY_ARTIFACT
  243. costs = 1;
  244.  
  245. @@ -7249,6 +7267,16 @@ bool Player::RewardHonor(Unit* victim, uint32 groupsize, int32 honor, bool pvpto
  246. }
  247.  
  248. honor_f *= sWorld->getRate(RATE_HONOR);
  249. +
  250. + //Guild-Level-System (Bonus: Ehre)
  251. + if (Guild* guild = GetGuild())
  252. + {
  253. + if (guild->HasLevelForBonus(GUILD_BONUS_EHRE_1))
  254. + honor_f *= 0.05f;
  255. + if (guild->HasLevelForBonus(GUILD_BONUS_EHRE_2))
  256. + honor_f *= 0.1f;
  257. + }
  258. +
  259. // Back to int now
  260. honor = int32(honor_f);
  261. // honor - for show honor points in log
  262. @@ -15333,6 +15361,19 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
  263. for (Unit::AuraEffectList::const_iterator i = ModXPPctAuras.begin(); i != ModXPPctAuras.end(); ++i)
  264. AddPct(XP, (*i)->GetAmount());
  265.  
  266. + //Guild-Level-System (Bonus: QuestXP)
  267. + if (Guild* guild = GetGuild())
  268. + {
  269. + //QuestXP for the Guild
  270. + guild->GiveXp(50000);
  271. +
  272. + //GuildXP-Bonus
  273. + if (guild->HasLevelForBonus(GUILD_BONUS_XP_1))
  274. + XP += uint32(XP*0.05f);
  275. + if (guild->HasLevelForBonus(GUILD_BONUS_XP_2))
  276. + XP += uint32(XP*0.1f);
  277. + }
  278. +
  279. int32 moneyRew = 0;
  280. if (getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
  281. GiveXP(XP, NULL);
  282. diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
  283. index 492197d..89a955e 100644
  284. --- a/src/server/game/Entities/Unit/Unit.cpp
  285. +++ b/src/server/game/Entities/Unit/Unit.cpp
  286. @@ -60,6 +60,7 @@
  287. #include "World.h"
  288. #include "WorldPacket.h"
  289. #include "WorldSession.h"
  290. +#include "Guild.h"
  291.  
  292. #include <math.h>
  293.  
  294. @@ -12195,6 +12196,23 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
  295. float stack_bonus = 1.0f;
  296. float non_stack_bonus = 1.0f;
  297.  
  298. + //Guild-Level-System (Bonus: Reittempo)
  299. + uint8 bonusSpeed = 0;
  300. + if (GetTypeId() == TYPEID_PLAYER)
  301. + {
  302. + Player* player = ToPlayer();
  303. + if (Guild* guild = player->GetGuild())
  304. + {
  305. + if (!player->GetMap()->IsBattlegroundOrArena())
  306. + {
  307. + if (guild->HasLevelForBonus(GUILD_BONUS_REITTEMPO_1))
  308. + bonusSpeed = 5;
  309. + if (guild->HasLevelForBonus(GUILD_BONUS_REITTEMPO_2))
  310. + bonusSpeed = 10;
  311. + }
  312. + }
  313. + }
  314. +
  315. switch (mtype)
  316. {
  317. // Only apply debuffs
  318. @@ -12208,7 +12226,7 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
  319. {
  320. if (IsMounted()) // Use on mount auras
  321. {
  322. - main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED);
  323. + main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED) + bonusSpeed;
  324. stack_bonus = GetTotalAuraMultiplier(SPELL_AURA_MOD_MOUNTED_SPEED_ALWAYS);
  325. non_stack_bonus += GetMaxPositiveAuraModifier(SPELL_AURA_MOD_MOUNTED_SPEED_NOT_STACK) / 100.0f;
  326. }
  327. @@ -12242,7 +12260,7 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
  328. }
  329. else if (IsMounted())
  330. {
  331. - main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED);
  332. + main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) + bonusSpeed;
  333. stack_bonus = GetTotalAuraMultiplier(SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS);
  334. }
  335. else // Use not mount (shapeshift for example) auras (should stack)
  336. diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
  337. index db0a196..cdb4ecf 100644
  338. --- a/src/server/game/Guilds/Guild.cpp
  339. +++ b/src/server/game/Guilds/Guild.cpp
  340. @@ -1206,6 +1206,9 @@ bool Guild::Create(Player* pLeader, std::string const& name)
  341. if (ret)
  342. sScriptMgr->OnGuildCreate(this, pLeader, name);
  343.  
  344. + //Guild-Level-System
  345. + LoadLevelInfo();
  346. +
  347. return ret;
  348. }
  349.  
  350. @@ -1957,6 +1960,10 @@ bool Guild::LoadFromDB(Field* fields)
  351. m_bankTabs[i] = new BankTab(m_id, i);
  352.  
  353. _CreateLogHolders();
  354. +
  355. + //Guild-Level-System
  356. + LoadLevelInfo();
  357. +
  358. return true;
  359. }
  360.  
  361. @@ -2924,3 +2931,140 @@ void Guild::ResetTimes()
  362.  
  363. _BroadcastEvent(GE_BANK_TAB_AND_MONEY_UPDATED, 0);
  364. }
  365. +
  366. +//Guild-Level-System [Start]
  367. +void Guild::LoadLevelInfo()
  368. +{
  369. + PreparedStatement* stmt;
  370. + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_LEVEL_INFO);
  371. + stmt->setUInt32(0, m_id);
  372. + PreparedQueryResult result = CharacterDatabase.Query(stmt);
  373. +
  374. + if (result)
  375. + {
  376. + m_current_guildXp = (*result)[0].GetUInt32();
  377. + m_guild_level = (*result)[1].GetUInt8();
  378. + }
  379. + else
  380. + {
  381. + m_current_guildXp = 0;
  382. + m_guild_level = 0;
  383. + }
  384. +
  385. + if (m_guild_level < GUILD_MAX_LEVEL)
  386. + {
  387. + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_XP_FOR_NEXT_LEVEL);
  388. + stmt->setUInt32(0, m_guild_level);
  389. + PreparedQueryResult result = CharacterDatabase.Query(stmt);
  390. +
  391. + if (result)
  392. + m_xp_for_next_level = (*result)[0].GetUInt32();
  393. + else
  394. + m_xp_for_next_level = 0;
  395. + }
  396. +}
  397. +
  398. +bool Guild::HasLevelForBonus(uint8 guildBonus)
  399. +{
  400. + switch (guildBonus)
  401. + {
  402. + case GUILD_BONUS_GOLD_1:
  403. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_GOLD_1);
  404. + break;
  405. + case GUILD_BONUS_XP_1:
  406. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_XP_1);
  407. + break;
  408. + case GUILD_BONUS_SCHNELLER_GEIST:
  409. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_SCHNELLER_GEIST);
  410. + break;
  411. + case GUILD_BONUS_REPERATUR_1:
  412. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_REPERATUR_1);
  413. + break;
  414. + case GUILD_BONUS_GOLD_2:
  415. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_GOLD_2);
  416. + break;
  417. + case GUILD_BONUS_REITTEMPO_1:
  418. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_REITTEMPO_1);
  419. + break;
  420. + case GUILD_BONUS_RUF_1:
  421. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_RUF_1);
  422. + break;
  423. + case GUILD_BONUS_XP_2:
  424. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_XP_2);
  425. + break;
  426. + case GUILD_BONUS_REPERATUR_2:
  427. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_REPERATUR_2);
  428. + break;
  429. + case GUILD_BONUS_REITTEMPO_2:
  430. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_REITTEMPO_2);
  431. + break;
  432. + case GUILD_BONUS_RUF_2:
  433. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_RUF_2);
  434. + break;
  435. + case GUILD_BONUS_EHRE_1:
  436. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_EHRE_1);
  437. + break;
  438. + case GUILD_BONUS_EHRE_2:
  439. + return m_guild_level >= sWorld->GetReqGuildLevelForBonus(GUILD_BONUS_EHRE_2);
  440. + break;
  441. + default:
  442. + return false;
  443. + break;
  444. + }
  445. +}
  446. +
  447. +void Guild::GiveXp(uint32 value)
  448. +{
  449. + if (m_guild_level > GUILD_MAX_LEVEL)
  450. + return;
  451. +
  452. + if ((m_current_guildXp + value) >= m_xp_for_next_level)
  453. + {
  454. + m_current_guildXp = ((m_current_guildXp + value) - m_xp_for_next_level);
  455. + SetLevel(m_guild_level + 1, false);
  456. + }
  457. + else
  458. + m_current_guildXp += value;
  459. +
  460. + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_XP);
  461. + stmt->setUInt32(0, value);
  462. + stmt->setUInt32(1, m_id);
  463. + CharacterDatabase.Execute(stmt);
  464. +}
  465. +
  466. +void Guild::SetLevel(uint8 level, bool byCommand)
  467. +{
  468. + if (level > GUILD_MAX_LEVEL)
  469. + return;
  470. +
  471. + m_guild_level = level;
  472. +
  473. + if (byCommand)
  474. + {
  475. + m_current_guildXp = 0;
  476. +
  477. + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_XP);
  478. + stmt->setUInt8(0, m_current_guildXp);
  479. + stmt->setUInt32(1, m_id);
  480. + CharacterDatabase.Execute(stmt);
  481. + }
  482. +
  483. + char worldMsg[250];
  484. + sprintf(worldMsg, "Die Gilde %s hat das Gildenlevel %d erreicht.", m_name.c_str(), level);
  485. + sWorld->SendWorldText(SERVER_MSG_STRING, worldMsg);
  486. +
  487. + //Save to DB
  488. + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_LEVEL);
  489. + stmt->setUInt8(0, level);
  490. + stmt->setUInt32(1, m_id);
  491. + CharacterDatabase.Execute(stmt);
  492. +
  493. + //reqXp fuers naechste Level laden
  494. + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_XP_FOR_NEXT_LEVEL);
  495. + stmt->setUInt32(0, level);
  496. + PreparedQueryResult result = CharacterDatabase.Query(stmt);
  497. +
  498. + if (result)
  499. + m_xp_for_next_level = (*result)[0].GetUInt32();
  500. +}
  501. +//Guild-Level-System [End]
  502. diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
  503. index ea0b2e4..ef71bb6 100644
  504. --- a/src/server/game/Guilds/Guild.h
  505. +++ b/src/server/game/Guilds/Guild.h
  506. @@ -222,6 +222,29 @@ enum GuildMemberFlags
  507. GUILDMEMBER_STATUS_MOBILE = 0x0008, // remote chat from mobile app
  508. };
  509.  
  510. +//Guild-Level-System [Start]
  511. +enum GuildBonus
  512. +{
  513. + GUILD_BONUS_GOLD_1 = 1,
  514. + GUILD_BONUS_XP_1 = 2,
  515. + GUILD_BONUS_SCHNELLER_GEIST = 3,
  516. + GUILD_BONUS_REPERATUR_1 = 4,
  517. + GUILD_BONUS_GOLD_2 = 5,
  518. + GUILD_BONUS_REITTEMPO_1 = 6,
  519. + GUILD_BONUS_RUF_1 = 7,
  520. + GUILD_BONUS_XP_2 = 8,
  521. + GUILD_BONUS_REPERATUR_2 = 9,
  522. + GUILD_BONUS_REITTEMPO_2 = 10,
  523. + GUILD_BONUS_RUF_2 = 11,
  524. + GUILD_BONUS_EHRE_1 = 12,
  525. + GUILD_BONUS_EHRE_2 = 13,
  526. +
  527. + GUILD_BONUS_MAX = 14
  528. +};
  529. +
  530. +#define GUILD_MAX_LEVEL 8
  531. +//Guild-Level-System [End]
  532. +
  533. // Emblem info
  534. class EmblemInfo
  535. {
  536. @@ -740,6 +763,15 @@ public:
  537.  
  538. void ResetTimes();
  539.  
  540. + //Guild-Level-System
  541. + void LoadLevelInfo();
  542. + bool HasLevelForBonus(uint8 guildBonus);
  543. + void GiveXp(uint32 value);
  544. + void SetLevel(uint8 level, bool byCommand);
  545. + uint8 GetLevel() const { return m_guild_level; };
  546. + uint32 GetCurrentXP() const { return m_current_guildXp; };
  547. + uint32 GetXpForNextLevel() const { return m_xp_for_next_level; };
  548. +
  549. protected:
  550. uint32 m_id;
  551. std::string m_name;
  552. @@ -760,6 +792,11 @@ protected:
  553. LogHolder* m_eventLog;
  554. LogHolder* m_bankEventLog[GUILD_BANK_MAX_TABS + 1];
  555.  
  556. + //Guild-Level-System
  557. + uint8 m_guild_level;
  558. + uint32 m_current_guildXp;
  559. + uint32 m_xp_for_next_level;
  560. +
  561. private:
  562. inline uint8 _GetRanksSize() const { return uint8(m_ranks.size()); }
  563. inline const RankInfo* GetRankInfo(uint8 rankId) const { return rankId < _GetRanksSize() ? &m_ranks[rankId] : NULL; }
  564. diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp
  565. index 61f0b9a..ab9bc11 100644
  566. --- a/src/server/game/Handlers/LootHandler.cpp
  567. +++ b/src/server/game/Handlers/LootHandler.cpp
  568. @@ -30,6 +30,7 @@
  569. #include "World.h"
  570. #include "WorldPacket.h"
  571. #include "WorldSession.h"
  572. +#include "Guild.h"
  573.  
  574. void WorldSession::HandleAutostoreLootItemOpcode(WorldPacket& recvData)
  575. {
  576. @@ -203,6 +204,16 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/)
  577. SendPacket(&data);
  578. }
  579.  
  580. + //Guild-Level-System (Bonus: Gold)
  581. + if (Guild* guild = player->GetGuild())
  582. + {
  583. + //Extra Gold fuer die Gildenbank
  584. + if (guild->HasLevelForBonus(GUILD_BONUS_GOLD_1))
  585. + guild->HandleMemberDepositMoney(this, uint32(loot->gold*0.05f));
  586. + if (guild->HasLevelForBonus(GUILD_BONUS_GOLD_2))
  587. + guild->HandleMemberDepositMoney(this, uint32(loot->gold*0.1f));
  588. + }
  589. +
  590. loot->gold = 0;
  591.  
  592. // Delete the money loot record from the DB
  593. diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h
  594. index 8d0e97d..185c073 100644
  595. --- a/src/server/game/Miscellaneous/Formulas.h
  596. +++ b/src/server/game/Miscellaneous/Formulas.h
  597. @@ -23,6 +23,7 @@
  598. #include "SharedDefines.h"
  599. #include "ScriptMgr.h"
  600. #include "Player.h"
  601. +#include "Guild.h"
  602.  
  603. namespace Trinity
  604. {
  605. @@ -181,6 +182,16 @@ namespace Trinity
  606. }
  607.  
  608. gain = uint32(gain * sWorld->getRate(RATE_XP_KILL));
  609. +
  610. + //Guild-Level-System (Bonus: MonsterKillXp)
  611. + if (Guild* guild = player->GetGuild())
  612. + {
  613. + //GildenXP-Bonus
  614. + if (guild->HasLevelForBonus(GUILD_BONUS_XP_1))
  615. + gain += uint32(gain*0.05f);
  616. + if (guild->HasLevelForBonus(GUILD_BONUS_XP_2))
  617. + gain += uint32(gain*0.1f);
  618. + }
  619. }
  620.  
  621. sScriptMgr->OnGainCalculation(gain, player, u);
  622. diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
  623. index 3a680e3..f144aff 100644
  624. --- a/src/server/game/Miscellaneous/Language.h
  625. +++ b/src/server/game/Miscellaneous/Language.h
  626. @@ -1225,7 +1225,11 @@ enum TrinityStrings
  627. LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD = 11007,
  628.  
  629. LANG_NPCINFO_INHABIT_TYPE = 11008,
  630. - LANG_NPCINFO_FLAGS_EXTRA = 11009
  631. + LANG_NPCINFO_FLAGS_EXTRA = 11009,
  632. +
  633. + //Guild-Level-System
  634. + LANG_GUILDINFO_LEVEL = 13000,
  635. + LANG_GUILDINFO_XP_INFO = 13001,
  636.  
  637. // NOT RESERVED IDS 12000-1999999999
  638. // `db_script_string` table index 2000000000-2000009999 (MIN_DB_SCRIPT_STRING_ID-MAX_DB_SCRIPT_STRING_ID)
  639. diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
  640. index 46b73e7..a6f2437 100644
  641. --- a/src/server/game/Reputation/ReputationMgr.cpp
  642. +++ b/src/server/game/Reputation/ReputationMgr.cpp
  643. @@ -25,6 +25,7 @@
  644. #include "ObjectMgr.h"
  645. #include "ScriptMgr.h"
  646. #include "WorldSession.h"
  647. +#include "Guild.h"
  648.  
  649. const int32 ReputationMgr::PointsInRank[MAX_REPUTATION_RANK] = {36000, 3000, 3000, 3000, 6000, 12000, 21000, 1000};
  650.  
  651. @@ -367,6 +368,15 @@ bool ReputationMgr::SetOneFactionReputation(FactionEntry const* factionEntry, in
  652. standing += itr->second.Standing + BaseRep;
  653. }
  654.  
  655. + //Guild-Level-System (Bonus: Ruf)
  656. + if (Guild* guild = _player->GetGuild())
  657. + {
  658. + if (guild->HasLevelForBonus(GUILD_BONUS_RUF_1))
  659. + standing += uint32(standing*0.05f);
  660. + if (guild->HasLevelForBonus(GUILD_BONUS_RUF_2))
  661. + standing += uint32(standing*0.1f);
  662. + }
  663. +
  664. if (standing > Reputation_Cap)
  665. standing = Reputation_Cap;
  666. else if (standing < Reputation_Bottom)
  667. diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
  668. index b643d12..9b1652f 100644
  669. --- a/src/server/game/World/World.cpp
  670. +++ b/src/server/game/World/World.cpp
  671. @@ -1257,6 +1257,9 @@ void World::LoadConfigSettings(bool reload)
  672.  
  673. m_bool_configs[CONFIG_IP_BASED_LOGIN_LOGGING] = sConfigMgr->GetBoolDefault("Wrong.Password.Login.Logging", false);
  674.  
  675. + //Guild-Level-System
  676. + LoadGuildBonusInfo();
  677. +
  678. // call ScriptMgr if we're reloading the configuration
  679. if (reload)
  680. sScriptMgr->OnConfigLoad(reload);
  681. @@ -3204,3 +3207,87 @@ void World::ReloadRBAC()
  682. if (WorldSession* session = itr->second)
  683. session->InvalidateRBACData();
  684. }
  685. +
  686. +//Guild-Level-System [Start]
  687. +void World::LoadGuildBonusInfo()
  688. +{
  689. + //Moechte keinen riesigen Abschnitt in die Worldconf hinzufuegen, deswegen
  690. + //soll das ganze ueber eine Tabelle in der CharDB geregelt werden.
  691. + //Hier werden die benoetigten Daten geladen.
  692. + m_req_guildLevel_gold_1 = SelectReqGuildLevelForBonus(GUILD_BONUS_GOLD_1);
  693. + m_req_guildLevel_xp_1 = SelectReqGuildLevelForBonus(GUILD_BONUS_XP_1);
  694. + m_req_guildLevel_schneller_geist = SelectReqGuildLevelForBonus(GUILD_BONUS_SCHNELLER_GEIST);
  695. + m_req_guildLevel_reperatur_1 = SelectReqGuildLevelForBonus(GUILD_BONUS_REPERATUR_1);
  696. + m_req_guildLevel_gold_2 = SelectReqGuildLevelForBonus(GUILD_BONUS_GOLD_2);
  697. + m_req_guildLevel_reittempo_1 = SelectReqGuildLevelForBonus(GUILD_BONUS_REITTEMPO_1);
  698. + m_req_guildLevel_reputation_1 = SelectReqGuildLevelForBonus(GUILD_BONUS_RUF_1);
  699. + m_req_guildLevel_xp_2 = SelectReqGuildLevelForBonus(GUILD_BONUS_XP_2);
  700. + m_req_guildLevel_reperatur_2 = SelectReqGuildLevelForBonus(GUILD_BONUS_REPERATUR_2);
  701. + m_req_guildLevel_reittempo_2 = SelectReqGuildLevelForBonus(GUILD_BONUS_REITTEMPO_2);
  702. + m_req_guildLevel_reputation_2 = SelectReqGuildLevelForBonus(GUILD_BONUS_RUF_2);
  703. + m_req_guildLevel_honor_1 = SelectReqGuildLevelForBonus(GUILD_BONUS_EHRE_1);
  704. + m_req_guildLevel_honor_2 = SelectReqGuildLevelForBonus(GUILD_BONUS_EHRE_2);
  705. +}
  706. +
  707. +uint8 World::SelectReqGuildLevelForBonus(uint8 guildBonus)
  708. +{
  709. + PreparedStatement* stmt;
  710. + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_BONUS_INFO);
  711. + stmt->setUInt8(0, guildBonus);
  712. + PreparedQueryResult result = CharacterDatabase.Query(stmt);
  713. +
  714. + if (result)
  715. + return (*result)[0].GetUInt8();
  716. + else
  717. + return 0;
  718. +}
  719. +
  720. +uint8 World::GetReqGuildLevelForBonus(uint8 guildBonus)
  721. +{
  722. + switch (guildBonus)
  723. + {
  724. + case GUILD_BONUS_GOLD_1:
  725. + return m_req_guildLevel_gold_1;
  726. + break;
  727. + case GUILD_BONUS_GOLD_2:
  728. + return m_req_guildLevel_gold_2;
  729. + break;
  730. + case GUILD_BONUS_EHRE_1:
  731. + return m_req_guildLevel_honor_1;
  732. + break;
  733. + case GUILD_BONUS_EHRE_2:
  734. + return m_req_guildLevel_honor_2;
  735. + break;
  736. + case GUILD_BONUS_REITTEMPO_1:
  737. + return m_req_guildLevel_reittempo_1;
  738. + break;
  739. + case GUILD_BONUS_REITTEMPO_2:
  740. + return m_req_guildLevel_reittempo_2;
  741. + break;
  742. + case GUILD_BONUS_REPERATUR_1:
  743. + return m_req_guildLevel_reperatur_1;
  744. + break;
  745. + case GUILD_BONUS_REPERATUR_2:
  746. + return m_req_guildLevel_reperatur_2;
  747. + break;
  748. + case GUILD_BONUS_RUF_1:
  749. + return m_req_guildLevel_reputation_1;
  750. + break;
  751. + case GUILD_BONUS_RUF_2:
  752. + return m_req_guildLevel_reputation_2;
  753. + break;
  754. + case GUILD_BONUS_SCHNELLER_GEIST:
  755. + return m_req_guildLevel_schneller_geist;
  756. + break;
  757. + case GUILD_BONUS_XP_1:
  758. + return m_req_guildLevel_xp_1;
  759. + break;
  760. + case GUILD_BONUS_XP_2:
  761. + return m_req_guildLevel_xp_2;
  762. + break;
  763. + default:
  764. + return 0;
  765. + break;
  766. + }
  767. +}
  768. +//Guild-Level-System [End]
  769. diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
  770. index efd7570..29508f9 100644
  771. --- a/src/server/game/World/World.h
  772. +++ b/src/server/game/World/World.h
  773. @@ -741,6 +741,11 @@ class World
  774.  
  775. void ReloadRBAC();
  776.  
  777. + //Guild-Level-System
  778. + void LoadGuildBonusInfo();
  779. + uint8 GetReqGuildLevelForBonus(uint8 guildBonus);
  780. + uint8 SelectReqGuildLevelForBonus(uint8 guildBonus);
  781. +
  782. protected:
  783. void _UpdateGameTime();
  784. // callback for UpdateRealmCharacters
  785. @@ -840,6 +845,21 @@ class World
  786.  
  787. void ProcessQueryCallbacks();
  788. ACE_Future_Set<PreparedQueryResult> m_realmCharCallbacks;
  789. +
  790. + //Guild-Level-System
  791. + uint8 m_req_guildLevel_gold_1;
  792. + uint8 m_req_guildLevel_xp_1;
  793. + uint8 m_req_guildLevel_schneller_geist;
  794. + uint8 m_req_guildLevel_reperatur_1;
  795. + uint8 m_req_guildLevel_gold_2;
  796. + uint8 m_req_guildLevel_reittempo_1;
  797. + uint8 m_req_guildLevel_reputation_1;
  798. + uint8 m_req_guildLevel_xp_2;
  799. + uint8 m_req_guildLevel_reperatur_2;
  800. + uint8 m_req_guildLevel_reittempo_2;
  801. + uint8 m_req_guildLevel_reputation_2;
  802. + uint8 m_req_guildLevel_honor_1;
  803. + uint8 m_req_guildLevel_honor_2;
  804. };
  805.  
  806. extern uint32 realmID;
  807. diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp
  808. index 4627f6b..50645fd 100644
  809. --- a/src/server/scripts/Commands/cs_guild.cpp
  810. +++ b/src/server/scripts/Commands/cs_guild.cpp
  811. @@ -38,12 +38,15 @@ public:
  812. {
  813. static ChatCommand guildCommandTable[] =
  814. {
  815. - { "create", rbac::RBAC_PERM_COMMAND_GUILD_CREATE, true, &HandleGuildCreateCommand, "", NULL },
  816. - { "delete", rbac::RBAC_PERM_COMMAND_GUILD_DELETE, true, &HandleGuildDeleteCommand, "", NULL },
  817. - { "invite", rbac::RBAC_PERM_COMMAND_GUILD_INVITE, true, &HandleGuildInviteCommand, "", NULL },
  818. - { "uninvite", rbac::RBAC_PERM_COMMAND_GUILD_UNINVITE, true, &HandleGuildUninviteCommand, "", NULL },
  819. - { "rank", rbac::RBAC_PERM_COMMAND_GUILD_RANK, true, &HandleGuildRankCommand, "", NULL },
  820. - { "rename", rbac::RBAC_PERM_COMMAND_GUILD_RENAME, true, &HandleGuildRenameCommand, "", NULL },
  821. + { "create", rbac::RBAC_PERM_COMMAND_GUILD_CREATE, true, &HandleGuildCreateCommand, "", NULL },
  822. + { "delete", rbac::RBAC_PERM_COMMAND_GUILD_DELETE, true, &HandleGuildDeleteCommand, "", NULL },
  823. + { "invite", rbac::RBAC_PERM_COMMAND_GUILD_INVITE, true, &HandleGuildInviteCommand, "", NULL },
  824. + { "uninvite", rbac::RBAC_PERM_COMMAND_GUILD_UNINVITE, true, &HandleGuildUninviteCommand, "", NULL },
  825. + { "rank", rbac::RBAC_PERM_COMMAND_GUILD_RANK, true, &HandleGuildRankCommand, "", NULL },
  826. + { "rename", rbac::RBAC_PERM_COMMAND_GUILD_RENAME, true, &HandleGuildRenameCommand, "", NULL },
  827. + { "info", rbac::RBAC_PERM_COMMAND_GUILD_INFO, true, &HandleGuildInfoCommand, "", NULL },
  828. + { "setlevel", rbac::RBAC_PERM_COMMAND_GUILD_SET_LEVEL, true, &HandleGuildSetLevelCommand, "", NULL },
  829. + { "givexp", rbac::RBAC_PERM_COMMAND_GUILD_GIVE_XP, true, &HandleGuildGiveXpCommand, "", NULL },
  830. { NULL, 0, false, NULL, "", NULL }
  831. };
  832. static ChatCommand commandTable[] =
  833. @@ -243,6 +246,124 @@ public:
  834. handler->PSendSysMessage(LANG_GUILD_RENAME_DONE, oldGuildStr, newGuildStr);
  835. return true;
  836. }
  837. +
  838. + //Guild-Level-System
  839. + static bool HandleGuildInfoCommand(ChatHandler* handler, char const* /*args*/)
  840. + {
  841. + Guild* guild = handler->GetSession()->GetPlayer()->GetGuild();
  842. +
  843. + if (guild)
  844. + {
  845. + handler->PSendSysMessage(LANG_GUILDINFO_LEVEL, guild->GetLevel());
  846. +
  847. + if (guild->GetLevel() >= GUILD_MAX_LEVEL)
  848. + handler->PSendSysMessage(LANG_GUILDINFO_XP_INFO, 0, 0);
  849. + else
  850. + handler->PSendSysMessage(LANG_GUILDINFO_XP_INFO, guild->GetCurrentXP(), guild->GetXpForNextLevel());
  851. +
  852. + handler->PSendSysMessage("Aktive Gildenboni:");
  853. +
  854. + if (guild->GetLevel() > 0)
  855. + {
  856. + if (guild->HasLevelForBonus(GUILD_BONUS_GOLD_1))
  857. + handler->PSendSysMessage("Goldbonus [Rang 1]");
  858. + if (guild->HasLevelForBonus(GUILD_BONUS_XP_1))
  859. + handler->PSendSysMessage("Erfahrungszuwachs [Rang 1]");
  860. + if (guild->HasLevelForBonus(GUILD_BONUS_SCHNELLER_GEIST))
  861. + handler->PSendSysMessage("Schneller Geist");
  862. + if (guild->HasLevelForBonus(GUILD_BONUS_REPERATUR_1))
  863. + handler->PSendSysMessage("G\303\274nstige Reperatur [Rang 1]");
  864. + if (guild->HasLevelForBonus(GUILD_BONUS_GOLD_2))
  865. + handler->PSendSysMessage("Goldbonus [Rang 2]");
  866. + if (guild->HasLevelForBonus(GUILD_BONUS_REITTEMPO_1))
  867. + handler->PSendSysMessage("Reittempo [Rang 1]");
  868. + if (guild->HasLevelForBonus(GUILD_BONUS_RUF_1))
  869. + handler->PSendSysMessage("Rufzuwachs [Rang 1]");
  870. + if (guild->HasLevelForBonus(GUILD_BONUS_XP_2))
  871. + handler->PSendSysMessage("Erfahrungszuwachs [Rang 2]");
  872. + if (guild->HasLevelForBonus(GUILD_BONUS_REPERATUR_2))
  873. + handler->PSendSysMessage("G\303\274nstige Reperatur [Rang 2]");
  874. + if (guild->HasLevelForBonus(GUILD_BONUS_REITTEMPO_2))
  875. + handler->PSendSysMessage("Reittempo [Rang 2]");
  876. + if (guild->HasLevelForBonus(GUILD_BONUS_REPERATUR_2))
  877. + handler->PSendSysMessage("Rufzuwachs [Rang 2]");
  878. + if (guild->HasLevelForBonus(GUILD_BONUS_EHRE_1))
  879. + handler->PSendSysMessage("Ehrezuwachs [Rang 1]");
  880. + if (guild->HasLevelForBonus(GUILD_BONUS_EHRE_2))
  881. + handler->PSendSysMessage("Ehrezuwachs [Rang 2]");
  882. + }
  883. + else
  884. + handler->PSendSysMessage("Keine");
  885. +
  886. + return true;
  887. + }
  888. + else
  889. + {
  890. + handler->PSendSysMessage("Du bist in keiner Gilde.");
  891. + return false;
  892. + }
  893. + }
  894. +
  895. + static bool HandleGuildSetLevelCommand(ChatHandler* handler, char const* args)
  896. + {
  897. + if (!*args)
  898. + return false;
  899. +
  900. + char* guildNameStr;
  901. + char* levelStr;
  902. + handler->extractOptFirstArg((char*)args, &guildNameStr, &levelStr);
  903. +
  904. + if (!levelStr)
  905. + return false;
  906. +
  907. + uint8 newLevel = uint8(atoi(levelStr));
  908. + Guild* guild = sGuildMgr->GetGuildByName(guildNameStr);
  909. +
  910. + if (guild)
  911. + {
  912. + if (newLevel > GUILD_MAX_LEVEL)
  913. + {
  914. + handler->PSendSysMessage("Das angegebene Level ist zu hoch.");
  915. + return false;
  916. + }
  917. + else
  918. + guild->SetLevel(newLevel, true);
  919. + }
  920. + else
  921. + {
  922. + handler->PSendSysMessage("Es konnte keine Gilde mit den Namen [%s] gefunden werden.", guildNameStr);
  923. + return false;
  924. + }
  925. +
  926. + return true;
  927. + }
  928. +
  929. + static bool HandleGuildGiveXpCommand(ChatHandler* handler, char const* args)
  930. + {
  931. + if (!*args)
  932. + return false;
  933. +
  934. + char* guildNameStr;
  935. + char* xpStr;
  936. + handler->extractOptFirstArg((char*)args, &guildNameStr, &xpStr);
  937. +
  938. + if (!xpStr)
  939. + return false;
  940. +
  941. + uint32 value = uint32(atoi(xpStr));
  942. +
  943. + Guild* guild = sGuildMgr->GetGuildByName(guildNameStr);
  944. +
  945. + if (guild)
  946. + guild->GiveXp(value);
  947. + else
  948. + {
  949. + handler->PSendSysMessage("There was no guild with the name [%s] be found.", guildNameStr);
  950. + return false;
  951. + }
  952. +
  953. + return true;
  954. + }
  955. };
  956.  
  957. void AddSC_guild_commandscript()
  958. diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
  959. index 24e61e7..8f50914 100644
  960. --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
  961. +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
  962. @@ -600,4 +600,14 @@ void CharacterDatabaseConnection::DoPrepareStatements()
  963. PrepareStatement(CHAR_UPD_CHAR_PET_SLOT_BY_ID, "UPDATE character_pet SET slot = ? WHERE owner = ? AND id = ?", CONNECTION_ASYNC);
  964. PrepareStatement(CHAR_DEL_CHAR_PET_BY_ID, "DELETE FROM character_pet WHERE id = ?", CONNECTION_ASYNC);
  965. PrepareStatement(CHAR_DEL_CHAR_PET_BY_SLOT, "DELETE FROM character_pet WHERE owner = ? AND (slot = ? OR slot > ?)", CONNECTION_ASYNC);
  966. +
  967. + //Guild-Level-System
  968. + //Load
  969. + PrepareStatement(CHAR_SEL_GUILD_BONUS_INFO, "SELECT RequiredGuildLevel FROM guild_bonus_config WHERE BonusId = ?", CONNECTION_SYNCH);
  970. + PrepareStatement(CHAR_SEL_GUILD_LEVEL_INFO, "SELECT xp, level FROM guild WHERE guildid = ?", CONNECTION_SYNCH);
  971. + PrepareStatement(CHAR_SEL_GUILD_XP_FOR_NEXT_LEVEL, "SELECT xp_for_next_level FROM guild_xp_for_next_level WHERE level = ?", CONNECTION_SYNCH);
  972. +
  973. + //Save
  974. + PrepareStatement(CHAR_UPD_GUILD_LEVEL, "UPDATE guild SET level = ? WHERE guildid = ?", CONNECTION_ASYNC);
  975. + PrepareStatement(CHAR_UPD_GUILD_XP, "UPDATE guild SET xp = (xp + ?) WHERE guildid = ?", CONNECTION_ASYNC);
  976. }
  977. diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
  978. index 98d7fe2..816fe14 100644
  979. --- a/src/server/shared/Database/Implementation/CharacterDatabase.h
  980. +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
  981. @@ -534,6 +534,13 @@ enum CharacterDatabaseStatements
  982. CHAR_DEL_ITEMCONTAINER_MONEY,
  983. CHAR_INS_ITEMCONTAINER_MONEY,
  984.  
  985. + //Guild-Level-System
  986. + CHAR_SEL_GUILD_BONUS_INFO,
  987. + CHAR_SEL_GUILD_LEVEL_INFO,
  988. + CHAR_SEL_GUILD_XP_FOR_NEXT_LEVEL,
  989. + CHAR_UPD_GUILD_LEVEL,
  990. + CHAR_UPD_GUILD_XP,
  991. +
  992. MAX_CHARACTERDATABASE_STATEMENTS
  993. };
  994.  
  995. --
  996. 1.7.10.4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement