|
Принятые патчи Иногда выкладывают патчи, которые потом в итоге все-таки принимают в ядро.
Повод для гордости. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
03.04.2010, 10:13 | #1 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
[9715][patch] gossip для двойного спека
ревизия:
9661 и новее исправление: позволяет изучать двойную специализацию у классовых тренеров автор: я, хоть и взял идею у оригинального патча зы: вынес в функцию дабы соблюдать code style Код:
diff --git a/src/game/GossipDef.h b/src/game/GossipDef.h index 68744db..8659f3d 100644 --- a/src/game/GossipDef.h +++ b/src/game/GossipDef.h @@ -48,6 +48,7 @@ enum Gossip_Option GOSSIP_OPTION_ARMORER = 15, //UNIT_NPC_FLAG_ARMORER (4096) GOSSIP_OPTION_UNLEARNTALENTS = 16, //UNIT_NPC_FLAG_TRAINER (16) (bonus option for GOSSIP_OPTION_TRAINER) GOSSIP_OPTION_UNLEARNPETSKILLS = 17, //UNIT_NPC_FLAG_TRAINER (16) (bonus option for GOSSIP_OPTION_TRAINER) + GOSSIP_OPTION_LEARNDUALSPEC = 18, //UNIT_NPC_FLAG_TRAINER (16) (bonus option for GOSSIP_OPTION_TRAINER) GOSSIP_OPTION_MAX }; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 48e091c..9c447b5 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -8318,6 +8318,14 @@ void Player::SendPetSkillWipeConfirm() GetSession()->SendPacket( &data ); } +void Player::LearnDualSpec(uint64 guid) +{ + ModifyMoney(-1000*GOLD); + + CastSpell(this, 63680, true, NULL, NULL, guid); + CastSpell(this, 63624, true, NULL, NULL, guid); +} + /*********************************************************/ /*** STORAGE SYSTEM ***/ /*********************************************************/ @@ -12520,6 +12528,10 @@ void Player::PrepareGossipMenu(WorldObject *pSource, uint32 menuId) if (!pCreature->isCanTrainingOf(this, false)) bCanTalk = false; break; + case GOSSIP_OPTION_LEARNDUALSPEC: + if(!(GetSpecsCount() == 1 && pCreature->isCanTrainingAndResetTalentsOf(this) && !(getLevel() < 40))) + bCanTalk = false; + break; case GOSSIP_OPTION_UNLEARNTALENTS: if (!pCreature->isCanTrainingAndResetTalentsOf(this)) bCanTalk = false; @@ -12719,6 +12731,10 @@ void Player::OnGossipSelect(WorldObject* pSource, uint32 gossipListId, uint32 me case GOSSIP_OPTION_TRAINER: GetSession()->SendTrainerList(guid); break; + case GOSSIP_OPTION_LEARNDUALSPEC: + PlayerTalkClass->CloseGossip(); + LearnDualSpec(guid); + break; case GOSSIP_OPTION_UNLEARNTALENTS: PlayerTalkClass->CloseGossip(); SendTalentWipeConfirm(guid); diff --git a/src/game/Player.h b/src/game/Player.h index a53339b..9d4cce5 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1444,6 +1444,7 @@ class MANGOS_DLL_SPEC Player : public Unit void SetBindPoint(uint64 guid); void SendTalentWipeConfirm(uint64 guid); + void LearnDualSpec(uint64 guid); void RewardRage( uint32 damage, uint32 weaponSpeedHitFactor, bool attacker ); void SendPetSkillWipeConfirm(); void CalcRage( uint32 damage,bool attacker ); Код:
INSERT INTO `gossip_menu_option` VALUES (0, 16, 0, 'Purchase a Dual Talent Specialization.', 18, 16, 0, 0, 0, 0, 10000000, 'Are you sure you wish to purchase a Dual Talent Specialization?', 0, 0, 0, 0, 0, 0, 0, 0, 0); Последний раз редактировалось Insider42; 03.04.2010 в 10:16. |
14 пользователя(ей) сказали cпасибо: |
03.04.2010, 10:57 | #2 |
MaNGOS Dev
Регистрация: 09.03.2010
Сообщений: 33
Сказал(а) спасибо: 27
Поблагодарили 26 раз(а) в 11 сообщениях
|
может проверку тоже отдельно типа isCanLearnDualSpec ?
|
04.04.2010, 13:24 | #3 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 11
Поблагодарили 17 раз(а) в 11 сообщениях
|
лучше заменить
Код:
&& !(getLevel() < 40) Код:
&& (getLevel() >= 40) |
04.04.2010, 14:42 | #4 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
|
Не учитывается.
|
04.04.2010, 15:14 | #5 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Последний раз редактировалось Insider42; 04.04.2010 в 15:17. |
04.04.2010, 15:57 | #6 |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Тогда в запрос и кондицию вставить на 40 левел можно(15,40,1)..)
|
04.04.2010, 16:42 | #7 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
|
04.04.2010, 16:55 | #9 |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
|
04.04.2010, 16:59 | #10 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 11
Поблагодарили 17 раз(а) в 11 сообщениях
|
Только меню должно быть не в одном окошке. вот пример того, как должно работать обучение двойной специализации. уровень проверяется первым меню, а голды - в самом конце. по аналогии работает и остановка опыта игроком
Последний раз редактировалось ghostpast; 04.04.2010 в 17:03. |
04.04.2010, 17:36 | #11 |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Это проще простого, делается через стандартный госсип меню тренера... Запрос в первом посте - это уже финальная строчка, тогда там точно не надо проверки на 40+, она должна быть в первой части меню))
Текст меню тренера - Learn about Dual Talent Specialization.(15,40,1) - текст меню дуала(+строчка из первого поста) Последний раз редактировалось NeatElves; 04.04.2010 в 17:40. |
04.04.2010, 17:42 | #12 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Кстати в патче ошибка. id 16 забронирован за банком, поэтому sql не зальется. я давно пользуюсь id 51, вроде проблем не было
|
04.04.2010, 17:44 | #13 |
YTDB Dev
Регистрация: 01.02.2010
Сообщений: 115
Сказал(а) спасибо: 0
Поблагодарили 36 раз(а) в 25 сообщениях
|
Код:
+ GOSSIP_OPTION_LEARNDUALSPEC = 18, |
04.04.2010, 18:27 | #15 | |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Цитата:
у меня в YTDB 541 этот (16) ID не занят, следовательно запрос проходит. Последний раз редактировалось Insider42; 04.04.2010 в 18:29. |
|
04.04.2010, 18:29 | #16 | |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Цитата:
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
|
04.04.2010, 18:30 | #17 | ||
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Цитата:
Цитата:
Insider42 - ПМ... |
||
04.04.2010, 20:30 | #18 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
снятия золота вроде и проверок нет пока... - но есть соотвевующеи поле...
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
04.04.2010, 22:13 | #19 |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Лучше добавить в кондиции что-то наподобие(состряпал навскидку, просто чтобы показать идею, не проверял):
Код:
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index d96c32f..d4b3b44 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -7435,6 +7435,10 @@ bool PlayerCondition::Meets(Player const * player) const return !player->HasItemCount(value1, value2); default: return false; + case CONDITION_SPELL: + return player->HasSpell(value1); + case CONDITION_NO_SPELL: + return !player->HasSpell(value1); } } @@ -7630,6 +7634,16 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val break; } + case CONDITION_SPELL: + case CONDITION_NO_SPELL: + { + if(!sSpellStore.LookupEntry(value1)) + { + sLog.outErrorDb("Spell condition requires to have non existing spell (Id: %d), skipped", value1); + return false; + } + break; + } case CONDITION_NONE: break; } diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index e3b22c5..a0b4293 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -314,9 +314,11 @@ enum ConditionType CONDITION_RACE_CLASS = 14, // race_mask class_mask CONDITION_LEVEL = 15, // player_level 0, 1 or 2 (0: equal to, 1: equal or higher than, 2: equal or less than) CONDITION_NOITEM = 16, // item_id count + CONDITION_SPELL = 17, // spell_id 0 + CONDITION_NO_SPELL = 18, // spell_id 0 }; -#define MAX_CONDITION 17 // maximum value in ConditionType enum +#define MAX_CONDITION 19 // maximum value in ConditionType enum struct PlayerCondition { Пригодится и дя других меню, наподобие инженер гном и т.п..)) |
Пользователь сказал cпасибо: | Insider42 (04.04.2010) |
04.04.2010, 22:41 | #20 | |
Пользователь
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 11
Поблагодарили 17 раз(а) в 11 сообщениях
|
Цитата:
и Код:
default: return false; Последний раз редактировалось ghostpast; 04.04.2010 в 22:52. |
|
04.04.2010, 23:26 | #21 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Как снять деньги с игрока при изучении ДС, дубль №2:
Код:
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 493d28f..e54d68f 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -12625,6 +12625,9 @@ void Player::OnGossipSelect(WorldObject* pSource, uint32 gossipListId, uint32 me uint32 gossipOptionId = gossipmenu.GetItem(gossipListId).m_gOptionId; uint64 guid = pSource->GetGUID(); + int32 MoneyTake = gossipmenu.GetItem(gossipListId).m_gBoxMoney; + if (MoneyTake > 0) + ModifyMoney(-MoneyTake); if (pSource->GetTypeId() == TYPEID_GAMEOBJECT) { Проверено, снимает деньги как положено. само обучение Код:
insert into gossip_scripts values (99999,0,15,63624,2,0,0,0,0,0); REPLACE INTO `gossip_menu_option` VALUES (10371, 0, 0, 'Purchase a Dual Talent Specialization.', 1, 16, 0, 0, 99999, 0, 10000000, 'Are you sure you wish to purchase a Dual Talent Specialization?', 0, 0, 0, 0, 0, 0, 0, 0, 0); Последний раз редактировалось Insider42; 04.04.2010 в 23:56. |
Пользователь сказал cпасибо: | Vladimir (04.04.2010) |
04.04.2010, 23:58 | #22 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Никто не видел что выдается при отсутствии денег на оффе?
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
05.04.2010, 07:01 | #24 |
Гость
Сообщений: n/a
|
Это потому что box_money = 10000000. Клиент сам проверяет, есть ли у него стока денег. Но и у сервера должна быть доп. проверка, чтобы нельзя было отослать пакет через WPE и получить дуал-спек нахаляву.
|
05.04.2010, 10:18 | #25 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Тогда должно быть так...
Код:
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 493d28f..658f3ef 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -12625,6 +12625,18 @@ void Player::OnGossipSelect(WorldObject* pSource, uint32 gossipListId, uint32 me uint32 gossipOptionId = gossipmenu.GetItem(gossipListId).m_gOptionId; uint64 guid = pSource->GetGUID(); + int32 MoneyTake = gossipmenu.GetItem(gossipListId).m_gBoxMoney; + + if (MoneyTake > 0) + { + if (GetMoney() < MoneyTake) + { + SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, 0, 0, 0); + return; + } + else + ModifyMoney(-MoneyTake); + } if (pSource->GetTypeId() == TYPEID_GAMEOBJECT) { 1) box_money из таблицы 2) из ядра 3) сразу оба, т.к. клиент не отвечает серверу что уже получил вопрос от box_money в таблице Во втором и третьем случае нужно так Код:
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 493d28f..3ecc42f 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -12625,6 +12625,15 @@ void Player::OnGossipSelect(WorldObject* pSource, uint32 gossipListId, uint32 me uint32 gossipOptionId = gossipmenu.GetItem(gossipListId).m_gOptionId; uint64 guid = pSource->GetGUID(); + int32 MoneyTake = gossipmenu.GetItem(gossipListId).m_gBoxMoney; + + if (MoneyTake > 0) + { + if (GetMoney() >= MoneyTake) + ModifyMoney(-MoneyTake); + else + return; + } if (pSource->GetTypeId() == TYPEID_GAMEOBJECT) { Последний раз редактировалось Insider42; 05.04.2010 в 10:22. |
05.04.2010, 12:39 | #26 |
Гость
Сообщений: n/a
|
Ёпрст. Обновил ревизию называется, теперь куча крашей в ActiveSpec, аналогичных как пишут на getmangos.com
Ещё вопрос. AT_LOGIN_RESET_TALENTS действует на текущий спец или на оба? Ато не порядок получается Последний раз редактировалось GriffonHeart; 05.04.2010 в 12:42. |
05.04.2010, 14:59 | #27 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Судя по всему - окончательная версия (но без нормальных данных для базы - не годится для игровых серверов)
Код:
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index d96c32f..71a2f2c 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -7433,6 +7433,15 @@ bool PlayerCondition::Meets(Player const * player) const } case CONDITION_NOITEM: return !player->HasItemCount(value1, value2); + case CONDITION_SPELL: + { + switch(value2) + { + case 0: return player->HasSpell(value1); + case 1: return !player->HasSpell(value1); + } + return false; + } default: return false; } @@ -7630,6 +7639,22 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val break; } + case CONDITION_SPELL: + { + if(!sSpellStore.LookupEntry(value1)) + { + sLog.outErrorDb("Spell condition requires to have non existing spell (Id: %d), skipped", value1); + return false; + } + + if (value2 > 1) + { + sLog.outErrorDb("Spell condition has invalid argument %u (must be 0..1), skipped", value2); + return false; + } + + break; + } case CONDITION_NONE: break; } diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index e3b22c5..f3d805d 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -314,9 +314,10 @@ enum ConditionType CONDITION_RACE_CLASS = 14, // race_mask class_mask CONDITION_LEVEL = 15, // player_level 0, 1 or 2 (0: equal to, 1: equal or higher than, 2: equal or less than) CONDITION_NOITEM = 16, // item_id count + CONDITION_SPELL = 17, // spell_id 0, 1 (0: has spell, 1: hasn't spell) }; -#define MAX_CONDITION 17 // maximum value in ConditionType enum +#define MAX_CONDITION 18 // maximum value in ConditionType enum struct PlayerCondition { diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 493d28f..bc8b7a6 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -12625,6 +12625,15 @@ void Player::OnGossipSelect(WorldObject* pSource, uint32 gossipListId, uint32 me uint32 gossipOptionId = gossipmenu.GetItem(gossipListId).m_gOptionId; uint64 guid = pSource->GetGUID(); + uint32 MoneyTake = gossipmenu.GetItem(gossipListId).m_gBoxMoney; + + if (MoneyTake > 0) + { + if (GetMoney() >= MoneyTake) + ModifyMoney(-int32(MoneyTake)); + else + return; + } if (pSource->GetTypeId() == TYPEID_GAMEOBJECT) { В общем кидаю какие есть, заранее бэкапьте таблицу gossip_menu_option, если уж собрались тестить http://paste2.org/p/757587 Последний раз редактировалось Insider42; 05.04.2010 в 16:34. |
Пользователь сказал cпасибо: | Vladimir (05.04.2010) |
05.04.2010, 15:22 | #28 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 11
Поблагодарили 17 раз(а) в 11 сообщениях
|
может имеет смысл заменить два условия
Код:
+ if (MoneyTake > 0) + { + if (GetMoney() >= MoneyTake) + ModifyMoney(-int32(MoneyTake)); + else + return; + } Код:
+ if ((MoneyTake > 0) && (GetMoney() >= MoneyTake)) + ModifyMoney(-int32(MoneyTake)); |
05.04.2010, 15:52 | #29 | |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Тренеров в базе поправим.. Давно пора все данные перенести в gossip_menu и отказаться вообще от npc_gossip и npc_option ) Также напоминаю, что в gossip_menu_option номера меню в разных базах разные...
Опечатка Цитата:
Последний раз редактировалось NeatElves; 05.04.2010 в 16:06. |
|
Пользователь сказал cпасибо: | Insider42 (05.04.2010) |
05.04.2010, 16:32 | #30 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
так нельзя, в этом случае мы не сможем добавить "return;" и будем давать бесплатно учиться WPE хакерам, если же добавим то это поломает все кнопки нафиг, т.к. это условие не будет проходить на большинстве gossip, где поле box_money = 0
Последний раз редактировалось Insider42; 05.04.2010 в 16:52. |
05.04.2010, 16:53 | #31 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 11
Поблагодарили 17 раз(а) в 11 сообщениях
|
В вашем коде при тех же условиях ModifyMoney(-int32(MoneyTake)) тоже не выполнится (будет ответвление в сторону return)
|
05.04.2010, 16:56 | #32 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Как раз у Insider42 все правильно с проверкой
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
05.04.2010, 17:11 | #33 | |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Патч корректный но не полный, а данные совершенно не правильные, как я понимаю должен выглядеть пункт меню...
Цитата:
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
|
05.04.2010, 17:13 | #34 |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Так сейчас и есть - деньги только во втором меню проверяются.
А к ним еще и уровень дописать можно..)) Последний раз редактировалось NeatElves; 05.04.2010 в 17:17. |
Пользователь сказал cпасибо: | Insider42 (05.04.2010) |
05.04.2010, 17:14 | #35 |
Новичок
Регистрация: 07.03.2010
Сообщений: 26
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 3 сообщениях
|
до 40го левела меню о дюалспеке вообще не отображается.
После 40го - появляется пункт, что то вроде "узнать подробнее о 2й специализации", после клика на которую появляется много текста с описанием и внизу пункт меню, что то вроде "да, я хочу потратить 1000г" Если не ошибаюсь - после покупки меню больше не отображается. Последний раз редактировалось `win; 05.04.2010 в 17:17. |
Пользователь сказал cпасибо: | Laise (05.04.2010) |
05.04.2010, 17:26 | #36 | |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Сейчас так и реализовано..)) Но это в основе база... В ядро надо сам патч и строчку для примера, приблизительно так:
Цитата:
|
|
05.04.2010, 17:46 | #37 | |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Цитата:
|
|
Пользователь сказал cпасибо: | NeatElves (05.04.2010) |
05.04.2010, 17:51 | #38 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Так как проверку уровня не прикурутить к gossip_option_type (всмысле через скрипт или опцию) то наверное
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
10.04.2010, 03:56 | #39 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Патч в [9715]. Спасибо! Этот же код позволит и некоторые другие покупные варианты реализовать чистой базой. Может некоторые condition_* будут еще нужны.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[10704] Add the option to close gossip window in gossip system | newsbot | CMaNGOS Commits | 0 | 09.11.2010 00:22 |
Локализация Gossip. | xmolex | Запросы | 9 | 14.05.2010 06:39 |
[9715] Implement required basic elements for dual spec learn gossips. | newsbot | CMaNGOS Commits | 0 | 10.04.2010 02:11 |