• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
Патчи Для вашего Фан Сервера
Tomogavk
Сержант
ПвП Токен система
Code

diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in   
index 0bb942e..339b5a1 100644   
--- a/src/mangosd/mangosd.conf.dist.in   
+++ b/src/mangosd/mangosd.conf.dist.in   
@@ -1375,3 +1375,33 @@ Ra.IP = 0.0.0.0   
     Ra.Port = 3443   
     Ra.MinLevel = 3   
     Ra.Secure = 1   
+   
+####################################################################################################################   
+# PvP Token System   
+#   
+#    PvPToken.Enable   
+#         Enable/disable PvP Token system.   
+#         Default: 1 (enabled)   
+#                  0 (disabled)   
+#   
+#    PvPToken.ItemID   
+#         The item ID of the token that players will receive after killing an enemy.   
+#         Default: 29434 (Badge of Justice)   
+#   
+#    PvPToken.ItemCount   
+#         The count amount of the ItemID   
+#         Default: 1   
+#   
+#    PvPToken.MapRestriction   
+#         The type of maps where players can receive the token   
+#         Default: 4 - all maps   
+#                  3 - battlegrounds only   
+#                  2 - FFA areas only (both instanced and world arenas)   
+#                  1 - battlegrounds and FFA areas only   
+#   
+###################################################################################################################   
+   
+ PvPToken  .Enable = 0   
+PvPToken.ItemID = 29434   
+PvPToken.ItemCount = 1   
+PvPToken.MapRestriction = 4   
diff --git a/src/game/Language.h b/src/game/Language.h   
index 823d6d5..938755b 100644   
--- a/src/game/Language.h   
+++ b/src/game/Language.h   
@@ -848,7 +848,7 @@ enum MangosStrings   
         //                    10000-10999   
         
         // Use for custom patches             11000-11999   
-   
+  LANG_YOU_RECEIVE_TOKEN              = 11050,   
         // NOT RESERVED IDS                   12000-1999999999   
         // `db_script_string` table index     2000000000-2000009999 (MIN_DB_SCRIPT_STRING_ID-MAX_DB_SCRIPT_STRING_ID)   
         // For other tables maybe             2000010000-2147483647 (max index)   
diff --git a/src/game/Player.cpp b/src/game/Player.cpp   
index 65c6ac0..34535df 100644   
--- a/src/game/Player.cpp   
+++ b/src/game/Player.cpp   
@@ -21017,6 +21017,35 @@ void Player::ResummonPetTemporaryUnSummonedIfAny()   
         m_temporaryUnsummonedPetNumber = 0;   
     }   
         
+void Player::ReceiveToken()   
+{   
+    if(!sWorld.getConfig(CONFIG_PVP_TOKEN_ENABLE))   
+        return;   
+   
+    uint8 MapRestriction = sWorld.getConfig(CONFIG_PVP_TOKEN_RESTRICTION);   
+   
+    if( MapRestriction == 1 && !InBattleGround() && !HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP) ||   
+        MapRestriction == 2 && !HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP) ||   
+        MapRestriction == 3 && !InBattleGround())   
+        return;   
+   
+    uint32 itemID = sWorld.getConfig(CONFIG_PVP_TOKEN_ITEMID);   
+    uint32 itemCount = sWorld.getConfig(CONFIG_PVP_TOKEN_ITEMCOUNT);   
+   
+    ItemPosCountVec dest;   
+    uint8 msg = CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemID, itemCount);   
+    if( msg != EQUIP_ERR_OK )   // convert to possible store amount   
+    {   
+        SendEquipError( msg, NULL, NULL );   
+        return;   
+    }   
+   
+    Item* item = StoreNewItem( dest, itemID, true, Item::GenerateItemRandomPropertyId(itemID));   
+    SendNewItem(item,itemCount,true,false);   
+   
+    ChatHandler(this).PSendSysMessage(LANG_YOU_RECEIVE_TOKEN);   
+}   
+   
     bool Player::canSeeSpellClickOn(Creature const *c) const   
     {   
         if(!c->HasFlag(UNIT_NPC_FLAGS,UNIT_NPC_FLAG_SPELLCLICK))   
diff --git a/src/game/Player.h b/src/game/Player.h   
index a1ea792..158da81 100644   
--- a/src/game/Player.h   
+++ b/src/game/Player.h   
@@ -1950,7 +1950,9 @@ class MANGOS_DLL_SPEC Player : public Unit   
             void ModifyHonorPoints( int32 value );   
             void ModifyArenaPoints( int32 value );   
             uint32 GetMaxPersonalArenaRatingRequirement();   
-   
+      
+        void ReceiveToken();   
+      
             //End of PvP System   
         
             void SetDrunkValue(uint16 newDrunkValue, uint32 itemid=0);   
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp   
index 06d1533..98af84b 100644   
--- a/src/game/Unit.cpp   
+++ b/src/game/Unit.cpp   
@@ -580,6 +580,11 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa   
                 player->RewardPlayerAndGroupAtKill(pVictim);   
                 player->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_EX_NONE, 0);   
         
+   // PvP Token   
+   int8 leveldiff = player->getLevel() - pVictim->getLevel();   
+   if(!pVictim->HasAuraType(SPELL_AURA_NO_PVP_CREDIT) && leveldiff < 10)   
+   player->ReceiveToken();   
+       
                 WorldPacket data(SMSG_PARTYKILLLOG, (8+8)); //send event PARTY_KILL   
                 data << uint64(player->GetGUID()); //player with killing blow   
                 data << uint64(pVictim->GetGUID()); //victim   
diff --git a/src/game/World.cpp b/src/game/World.cpp   
index 3361b5e..c9a4ffb 100644   
--- a/src/game/World.cpp   
+++ b/src/game/World.cpp   
@@ -954,6 +954,15 @@ void World::LoadConfigSettings(bool reload)   
         
         m_configs[CONFIG_THREAT_RADIUS] = sConfig.GetIntDefault("ThreatRadius", 100);   
         
+     /* PvP Token System */   
+    m_configs[CONFIG_PVP_TOKEN_ENABLE] = sConfig.GetBoolDefault("PvPToken.Enable", true);   
+    m_configs[CONFIG_PVP_TOKEN_ITEMID] = sConfig.GetIntDefault("PvPToken.ItemID", 29434);   
+    m_configs[CONFIG_PVP_TOKEN_ITEMCOUNT] = sConfig.GetIntDefault("PvPToken.ItemCount", 1);   
+    m_configs[CONFIG_PVP_TOKEN_RESTRICTION] = sConfig.GetIntDefault("PvPToken.MapRestriction", 4);   
+   
+    if(m_configs[CONFIG_PVP_TOKEN_ITEMCOUNT] <= 0)   
+        m_configs[CONFIG_PVP_TOKEN_ENABLE] = 0;   
+   
         // always use declined names in the russian client   
         m_configs[CONFIG_DECLINED_NAMES_USED] =   
             (m_configs[CONFIG_REALM_ZONE] == REALM_ZONE_RUSSIAN) ? true : sConfig.GetBoolDefault("DeclinedNames", false);   
diff --git a/src/game/World.h b/src/game/World.h   
index 977a440..f67cd72 100644   
--- a/src/game/World.h   
+++ b/src/game/World.h   
@@ -199,6 +199,10 @@ enum WorldConfigs   
         CONFIG_LISTEN_RANGE_SAY,   
         CONFIG_LISTEN_RANGE_TEXTEMOTE,   
         CONFIG_LISTEN_RANGE_YELL,   
+    CONF IG_PVP_TOKEN_E NABLE,   
+    CONFIG_PVP_TOKEN_ITEMID,   
+    CONFIG_PVP_TOKEN_ITEMCOUNT,   
+    CONFIG_PVP_TOKEN_RESTRIC TION,   
         CONFIG_SKILL_MILLING,   
         CONFIG_BATTLEGROUND_CAST_DESERTER,   
         CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE,   
- -     
1.6.3 .3

Сброс Кд, востановление хп и манны

Code

diff --git a/src/game/DuelHandler.cpp b/src/game/DuelHandler.cpp
index a73be6f..0b82b4b 100644
--- a/src/game/DuelHandler.cpp
+++ b/src/game/DuelHandler.cpp
@@ -48,6 +48,14 @@ void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket)
       time_t now = time(NULL);
       pl->duel->startTimer = now;
       plTarget->duel->startTimer = now;
+   
+   // reset cooldowns and HP/Mana   
+   pl->SetHealth(pl->GetMaxHealth());   
+   plTarget->SetHealth(plTarget->GetMaxHealth());   
+
+   if (pl->getPowerType() == POWER_MANA) pl->SetPower(POWER_MANA, pl->GetMaxPower(POWER_MANA));   
+   if (plTarget->getPowerType() == POWER_MANA) plTarget->SetPower(POWER_MANA, plTarget->GetMaxPower(POWER_MANA));   
+   if (!pl->GetMap()->IsDungeon()) { pl->RemoveArenaSpellCooldowns(); plTarget->RemoveArenaSpellCooldowns(); }
     
       pl->SendDuelCountdown(3000);
       plTarget->SendDuelCountdown(3000);
--   
1.6.5.1.1367.gcd48

ПК Анонсер
Code

diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 8b91327..75e35b3 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -579,6 +579,12 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa
           {
               player->RewardPlayerAndGroupAtKill(pVictim);
               player->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_EX_NONE, 0);
+     
+   //PK Announce System
+   if (pVictim->GetTypeId() == TYPEID_PLAYER)
+           {
+          sWorld.SendPvPAnnounce(player, ((Player*)pVictim));
+           }
     
      // PvP Token
      int8 leveldiff = player->getLevel() - pVictim->getLevel();
diff --git a/src/game/World.cpp b/src/game/World.cpp
index b01a31e..1949aaa 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -62,6 +62,7 @@
   #include "WaypointManager.h"
   #include "GMTicketMgr.h"
   #include "Util.h"
+#include "Language.h"
     
   INSTANTIATE_SINGLETON_1( World );
     
@@ -2224,3 +2225,16 @@ void World::LoadDBVersion()
       if(m_CreatureEventAIVersion.empty())
           m_CreatureEventAIVersion = "Unknown creature EventAI.";
   }
+
+void World::SendPvPAnnounce(Player* killer, Player* killed)
+{
+    std::ostringstream msg;
+    std::ostringstream KillerName;
+    std::ostringstream KilledName;
+
+    KillerName << killer->GetName();
+    KilledName << killed->GetName();
+
+    msg << "[" << KillerName.str().c_str() << "]" << " just made a corpse out of " << "[" << KilledName.str().c_str() << "]" << " in " << "[" << killer->GetBaseMap()->GetMapName() << "]";
+    SendWorldText(LANG_SYSTEMMESSAGE, msg.str().c_str());
+}

diff --git a/src/game/World.h b/src/game/World.h
index 9df65d3..8b9b306 100644
--- a/src/game/World.h
+++ b/src/game/World.h
@@ -496,6 +496,7 @@ class World
           bool IsFFAPvPRealm() { return getConfig(CONFIG_GAME_TYPE) == REALM_TYPE_FFA_PVP; }
     
           void KickAll();
+  void SendPvPAnnounce(Player* killer, Player* killed);
           void KickAllLess(AccountTypes sec);
           BanReturn BanAccount(BanMode mode, std::string nameOrIP, std::string duration, std::string reason, std::string author);
           bool RemoveBanAccount(BanMode mode, std::string nameOrIP);
--   
Сообщение # 1 отредактировано Tomogavk - Воскресенье, 17.01.2010, 02:22
L30m4nc3r
TC User
Quote (Tomogavk)
Пвп Анонсер

всмысле, Арены и БГ?
возможно будет в конфиге оставить только анонсер для арены, бг отключить, на 2.4.3 + непашут анонсеры.
если я это понял
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. ©
Сообщение # 2 написано 17.01.2010 в 01:55
Tomogavk
Сержант
Я не так выразился, это патч чтобы когда убиваешь игрока в чат анонсом писало - "такой-то убил такого-то там-то"
Сообщение # 3 написано 17.01.2010 в 02:12
L30m4nc3r
TC User
жесть, вот это флуд будет smile
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. ©
Сообщение # 4 написано 17.01.2010 в 20:14
leader
Сержант
а флуда...ууууу
ладно,ладно сори:)
Сообщение # 5 отредактировано leader - Воскресенье, 17.01.2010, 22:19
RipLe
Рыцарь
Quote (Tomogavk)
Сброс Кд, востановление хп и манны

У меня не покатило((
Сообщение # 6 написано 07.02.2010 в 15:10
Chons
Скаут
Патч на токены на 3.3.2 катит?
Сообщение # 7 написано 07.02.2010 в 22:43
zyxel8
Сержант
Сообщение # 8 написано 09.02.2010 в 00:40
ZetGet
Рыцарь
Quote (zyxel8)
не может быть, даже на 2.4.3 подошло.

иии? у тя 243 ток и стоит - а ты не думаешь, что существуют выше ревизии где код меняется с каждым днем (а если еще включить еще в пример форки которые жестоко меняются (например форк мангоса - TrinityCore загляни в код у них там на половину всё переделано)...
Сообщение # 9 написано 10.02.2010 в 10:17
smitt2009
Сержант
а можно для 3.2.2.а переделать токен систем?плз,с меня +
Помог-ставь +
НЕ помог-ставь +
Послал куда подальше-ставь+
Почему? ТЫ НАУЧИЛСЯ
Сообщение # 10 написано 18.02.2010 в 17:41
Demonikrus
Сержант
а что с этим делать что - бы заработало ?)
Сообщение # 11 написано 18.02.2010 в 23:09
NiceDeluxe
Форумный Бот
все работает,спасибо

Я знаю о людях больше, чем они думают, что я знаю о них..©
---------------------------------------------------------
Поиск информации, данных, пробив авто, людей, телефонов по РФ. Дорого


не зная ни сна ни отдыха
при солнечном свете
мы делаем деньги из воздуха
чтоб пустить их на ветер
Сообщение # 12 написано 06.04.2010 в 14:14
Гладиатор
Капрал
а на 3.2.2 а ето пашет кто пробивал?

Пойду Гм-ом на Фан сервера 3.1.3 3.2.2 3.3.5

Сообщение # 13 написано 21.04.2010 в 07:59
ph3n
Developer
Данная тема была перемещена из раздела Патчи в ядро MaNGOS.
Причина перемещения: устарело

Переместил: ph3n.
Сообщение # 14 написано 14.10.2012 в 13:28
  • Страница 1 из 1
  • 1
Поиск: