• Страница 1 из 1
  • 1
Модератор форума: staford11  
Форум » CMaNGOS » Патчи / Моды / Фиксы CMaNGOS » [Моды в ядро] *По просьбе NameNot* (Дополняем в теме то что не добавил я.)
[Моды в ядро] *По просьбе NameNot*
L30m4nc3r
TC User
Так-как надоело что создают одни и тежи темы. В поисках патчей эта тема была последней каплей: http://wowjp.net/forum/106-50676-1
Модератор попросил создать отдельную тему с теми патчами которые "Наиболее часто ищут" - в общем дополните тему тем чем не заполнил я.
Выкладывайте Фан патчи которые не компилятся сразу с открытых исходников, а приходится набирать отдельно. (Люди просто напросто отказываются юзать поиск).

Внимание! Смотрим обязательно 8 пост прежде чем добавить ПАТЧ в тему.

*Победные медальки за БГ*
Описание: Выбираем за какое БГ что будет даваться/их кол-во.
[cut]В исходниках находим файл BattleGround.h
Открываем его и ищем строчки:

Code
ITEM_AV_MARK_OF_HONOR           = 20560,              
                  ITEM_WS_MARK_OF_HONOR           = 20558,              
                  ITEM_AB_MARK_OF_HONOR           = 20559,              
                  ITEM_EY_MARK_OF_HONOR           = 29024,              
                  ITEM_SA_MARK_OF_HONOR           = 42425              
};              

enum BattleGroundMarksCount              
{              
                  ITEM_WINNER_COUNT               = 3,              
                  ITEM_LOSER_COUNT                = 1              
};

Тут вы указываете ID медалек, которые получают игроки за то или иное БГ, а так же их кол-во для победивших и проигравших.[/cut]
*Reset hp/mana/spells*
Описание: Восстановление хп/маны и перезарядка магий при начале дуэли.
[cut]Открываем фаил -> src/game/DuelHandler.cpp
находим в нем:
Code
plTarget->duel->startTimer = now;

и добавляем после:
Code

// 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));              
                //only for cooldowns which < 15 min              
                if (!pl->GetMap()->IsDungeon()) { pl->RemoveArenaSpellCooldowns(); plTarget->RemoveArenaSpellCooldowns(); }

Code
diff --git a/src/game/DuelHandler.cpp b/src/game/DuelHandler.cpp               
index 15cbf8c..616ca27 100644               
--- a/src/game/DuelHandler.cpp                
+++ b/src/game/DuelHandler.cpp               
@@ -51,6 +51,15 @@               
                    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));               
+    //only for cooldowns which < 15 min               
+    if (!pl->GetMap()->IsDungeon()) { pl->RemoveArenaSpellCooldowns(); plTarget->RemoveArenaSpellCooldowns(); }               
+               
                    pl->SendDuelCountdown(3000);               
                    plTarget->SendDuelCountdown(3000);               
                }  
[/cut]
*Флай маунты в Азероте*
Описание: Дает возможность летать/передвигаться на флай маунтах в азероте.
Внимание! Не тестировал.
[cut]
Code
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp              
index f94b221..2b97e43 100644              
--- a/src/game/Spell.cpp              
+++ b/src/game/Spell.cpp              
@@ -4210,7 +4210,7 @@ uint8 Spell::CanCast(bool strict)              
                      if(m_caster->GetTypeId()==TYPEID_PLAYER)              
                      {              
                          u         int 32 v_map = GetVirtualMapForMapAndZone(m_caster->GetMapId(), m_caster->GetZoneId());              
-                    if( !((Player*)m_caster)->isGameMaster() && v_map != 530 && !(v_map == 571 && ((Player*)m_caster)->HasSpell(54197)))              
+                    if( !((Player*)m_caster)->isGameMaster() && v_map != 530 && v_map != 580 && v_map != 571)              
                    return SPELL_FAILED_NOT_HERE;              
                      }

Суть заключается в том, чтобы при проверке зоны 530(Азерот) можно было использовать спел 54197. Работоспособность патча я не проверял, возможно работает.
Также, можно просто попробовать вставить в src/game/Spell.cpp строчку:
Code
GetVirtualMapForMapAndZone(m_caster->GetMapId(),m_caster->GetZoneId()) != 530)

Вот выписки из spell.cpp, связанные с маунтом.
Code
  case SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED:              
                           case SPELL_AURA_FLY:              
                           {              
                     // not allow cast fly spells at old maps by players (all spells is self target)              
                     if(m_caster->GetTypeId()==TYPEID_PLAYER)              
                     {              
                         i         f( !((Player*)m_caster)->IsAllowUseFlyMountsHere() )              
                             return SPELL_FAILED_NOT_HERE;              
                     }

Code
case SPELL_AURA_MOUNTED:              
                           {              
                     if (m_caster->IsInWater())              
                         return SPELL_FAILED_ONLY_ABOVEWATER;              

                     if (m_caster->GetTypeId()==TYPEID_PLAYER && ((Player*)m_caster)->GetTransport())              
                         return SPELL_FAILED_NO_MOUNTS_ALLOWED;              

                     // Ignore map check if spell have AreaId. AreaId already checked and this prevent special mount spells              
                     if (m_caster->GetTypeId()==TYPEID_PLAYER && !sMapStore.LookupEntry(m_caster->GetMapId())->IsMountAllowed() && !m_IsTriggeredSpell && !m_spellInfo->AreaGroupId)              
                         return SPELL_FAILED_NO_MOUNTS_ALLOWED;

Code
// zone check              
                   if(uint8 res= GetSpellAllowedInLocationError(m_spellInfo,m_caster->GetMapId(),m_caster->GetZoneId(),m_caster->GetAreaId()))              
                       r    e tu rn  res;              

                   // not let players cast spells at mount (and let do it to creatures)              
                   if( m_caster->IsMounted() && m_caster->GetTypeId()==TYPEID_PLAYER && !m_IsTriggeredSpell &&              
                       !IsPassiveSpell(m_spellInfo->Id) && !(m_spellInfo->Attributes & SPELL_ATTR_CASTABLE_WHILE_MOUNTED) )              
                   {              
                       if(m_caster->isInFlight())              
                           r eturn SPELL_FAILED_NOT_FLYING;              
                       else              
                           return SPELL_FAILED_NOT_MOUNTED;              
                   }

Что хочу добавить от себя: Дождитесь катаклизма.[/cut]
*PvP Token System*
Описание: За убийство в PvP Зонах будет выдаваться игроку поощрение, в виде Badge of Justice/либо то что выберете вы, кол-во предметов/и в каких PvP Зонах, Всего их 4: на аренах(включая гурубаши) на бг, на бг и на аренах и везде.
[cut]
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))              
d iff  --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,              
                    C     O NFIG_L ISTEN_ RANGE_ YELL,              
+     C ONF IG_PVP_TOKEN_E NABLE,              
+    CONFIG_PVP_TOKEN_ITEMID,              
+    CONFIG_PVP_TOKEN_ITEMCOUNT,              
+    CONFIG_PVP_TOKEN_RESTRI C TION,              
                    CONFIG_SKILL_MILLING,              
                    CONFIG_BATTLEGROUND_CAST_DESERTER,              
                    C    O NFIG_B ATTLEG ROUND_ QUEUE_ ANNOUN CER_EN ABLE,              
- -                
1.6.3 .3
[/cut]
*Патч на команду .server info*
Описание: Убираем версии ядра/базы/скриптов, оставляем статистику: Аптайм/Онлайн/
Внимание! Также можно модифицировать под себя, читаем 2 пост от Rescript
[cut]
Code
--- a/src/game/Level0.cpp    Sat Dec 26 05:42:54 2009              
+++ b/src/game/Level0.cpp    Sat Dec 26 05:46:24 2009              
@@ -91,16 +91,6 @@              
                   uint32 maxQueuedClientsNum = sWorld.GetMaxQueuedSessionCount();              
                   std::string str = secsToTimeString(sWorld.GetUptime());              
                             
-    char const* full;              
-    if(m_session)              
-        full = _FULLVERSION(REVISION_DATE,REVISION_TIME,REVISION_NR,"|cffffffff|Hurl:" REVISION_ID "|h" REVISION_ID "|h|r");              
-    else              
-        full = _FULLVERSION(REVISION_DATE,REVISION_TIME,REVISION_NR,REVISION_ID);              
-              
-    SendSysMessage(full);              
-    PSendSysMessage(LANG_USING_SCRIPT_LIB,sWorld.GetScriptsVersion());              
-    PSendSysMessage(LANG_USING_WORLD_DB,sWorld.GetDBVersion());              
-    PSendSysMessage(LANG_USING_EVENT_AI,sWorld.GetCreatureEventAIVersion());              
                   PSendSysMessage(LANG_CONNECTED_USERS, activeClientsNum, maxActiveClientsNum, queuedClientsNum, maxQueuedClientsNum);              
                   PSendSysMessage(LANG_UPTIME, str.c_str());
[/cut]

*История арены*
Описание: После каждого рейтингового матча в базу записывается информация о том:
- кто выйграл (winner_team)
- кто проиграл (loser_team)
- новые рейтинги команд (winner_rating, loser_rating)
- карта (map)
- тип (type)
- время игры (play_time)

[cut]

Code
diff --git a/src/game/BattleGround.cpp b/src/game/BattleGround.cpp
index f30d223..d66bc45 100644
--- a/src/game/BattleGround.cpp
+++ b/src/game/BattleGround.cpp
@@ -827,6 +827,9 @@ void BattleGround::EndBattleGround(uint32 winner)
                   // this way all arena team members will get notified, not only the ones who participated in this match
                   winner_arena_team->NotifyStatsChanged();
                   loser_arena_team->NotifyStatsChanged();
+        CharacterDatabase.BeginTransaction();
+        CharacterDatabase.PExecute("INSERT INTO arena_team_history (winner_team, winner_rating, loser_team, loser_rating, type, map) VALUES ('%u', '%u', '%u', '%u', '%u', '%u')", winner_arena_team->GetId(), winner_arena_team->GetRating(), loser_arena_team->GetId(), loser_arena_team->GetRating(), winner_arena_team->GetType(), GetMapId());
+        CharacterDatabase.CommitTransaction();
               }
                     
               if (winmsg_id)

sql
Code
DROP TABLE IF EXISTS `arena_team_history`;
CREATE TABLE `arena_team_history` (
            `id` int(11) NOT NULL auto_increment COMMENT 'Identifier',
            `winner_team` int(10) unsigned NOT NULL default '0',
            `winner_rating` int(10) unsigned NOT NULL default '0',
            `loser_team` int(10) unsigned NOT NULL default '0',
            `loser_rating` int(10) unsigned NOT NULL default '0',
            `change` int(10) unsigned NOT NULL default '0',
            `type` int(2) unsigned NOT NULL default '0',
            `map` int(10) unsigned NOT NULL default '0',
            `play_time` timestamp NOT NULL default CURRENT_TIMESTAMP,
            PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1669 DEFAULT CHARSET=utf8;

[/cut]

[notice]Итак, т.к. форум редко обновляется по сравнению с другими связи с тем, что лишь единицы шарят в c++ , то решил дополнить тему, кому мало патчев...
Здесь я выложил ссылки на форумы дев проектов мангоса, где можно найти патчи, однако там не любят глупых вопросов! И нужна регистрация!

Русскоязычные форумы:
http://ru-mangos.ru/ - русский оф форум по мангосу - бывший MaNGOS.RU
http://ytdb.ru/ - русский оф форум базы ytdb - патчи в ядро и на SD2 там выкладывают тоже...

Нерусские форумы:
http://getmangos.com/ - главный сайт о MaNGOS... писать вообще не советую ничего
http://scriptdev2.com/ - оф форум SD2 - патчи на SD2 и ACID
PS: это основной список форумов[/notice]

Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. ©
Сообщение # 1 отредактировано NameNot - Понедельник, 03.01.2011, 19:06
Rescript
PANTERA R.I.P
"*Патч на команду .server info*"
можно модифицировать под себя

Code
--- a/src/game/Level0.cpp Sat Dec 26 05:42:54 2009
+++ b/src/game/Level0.cpp Sat Dec 26 05:46:24 2009
@@ -91,16 +91,6 @@
uint32 maxQueuedClientsNum = sWorld.GetMaxQueuedSessionCount();
std::string str = secsToTimeString(sWorld.GetUptime());

- char const* full;
- if(m_session)
- full = _FULLVERSION(REVISION_DATE,REVISION_TIME,REVISION_NR,"|cffffffff|Hurl:" REVISION_ID "|h" REVISION_ID "|h|r");
- else
- full = _FULLVERSION(REVISION_DATE,REVISION_TIME,REVISION_NR,REVISION_ID);
-
- SendSysMessage(full);
- PSendSysMessage(LANG_USING_SCRIPT_LIB,sWorld.GetScriptsVersion());
- PSendSysMessage(LANG_USING_WORLD_DB,sWorld.GetDBVersion());
- PSendSysMessage(LANG_USING_EVENT_AI,sWorld.GetCreatureEventAIVersion());
+ PSendSysMessage("Core: XXX\n DB: XXX\n Scripts: xxxx\n"); \\ Можно ставить так же \t для списка
PSendSysMessage(LANG_CONNECTED_USERS, activeClientsNum, maxActiveClientsNum, queuedClientsNum, maxQueuedClientsNum);
PSendSysMessage(LANG_UPTIME, str.c_str());
Vkontakte
Забанен по IP на форуме :)
Top-WoW.Ru
Сообщение # 2 отредактировано Rescript - Среда, 14.04.2010, 16:57
Rescript
PANTERA R.I.P
Code
PVP RANK / TITLE SYSTEM

diff -r 4d80ec444ac3 src/game/Player.cpp
--- a/src/game/Player.cpp    Tue Jan 13 21:04:10 2009 +0100
+++ b/src/game/Player.cpp    Wed Jan 14 00:18:55 2009 -0500
@@ -6069,6 +6069,7 @@
   
      uint64 victim_guid = 0;
      uint32 victim_rank = 0;
+    uint32 rank_diff = 0;
      time_t now = time(NULL);
   
      // need call before fields update to have chance move yesterday data to appropriate fields before today data change.
@@ -6104,21 +6105,50 @@
                  //  [15..28] Horde honor titles and player name
                  //  [29..38] Other title and player name
                  //  [39+]    Nothing
-                uint32 victim_title = pVictim->GetUInt32Value(PLAYER_CHOSEN_TITLE);
-                    // Get Killer titles, CharTitlesEntry::bit_index
+                // PLAYER__FIELD_KNOWN_TITLES describe which titles player can use,
+                // so we must find biggest pvp title , even for killer to find extra honor value
+                uint32 vtitle = pVictim->GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES);
+                uint32 victim_title = 0;
+                uint32 ktitle = GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES);
+                uint32 killer_title = 0;
+                if(PLAYER_TITLE_MASK_ALL_PVP & ktitle)
+                {
+                    for(int i = ((GetTeam() == ALLIANCE) ? 1:HKRANKMAX);i!=((GetTeam() == ALLIANCE) ? HKRANKMAX : (2*HKRANKMAX-1));i++)
+                    {
+                        if(ktitle & (1<<i))
+                            killer_title = i;
+                    }
+                }
+                if(PLAYER_TITLE_MASK_ALL_PVP & vtitle)
+                {
+                    for(int i = ((pVictim->GetTeam() == ALLIANCE) ? 1:HKRANKMAX);i!=((pVictim->GetTeam() == ALLIANCE) ? HKRANKMAX : (2*HKRANKMAX-1));i++)
+                    {
+                        if(vtitle & (1<<i))
+                            victim_title = i;
+                    }
+                }
+                // Get Killer titles, CharTitlesEntry::bit_index
                  // Ranks:
                  //  title[1..14]  -> rank[5..18]
                  //  title[15..28] -> rank[5..18]
                  //  title[other]  -> 0
                  if (victim_title == 0)
                      victim_guid = 0;                        // Don't show HK: <rank> message, only log.
-                else if (victim_title < 15)
+                else if (victim_title < HKRANKMAX)
                      victim_rank = victim_title + 4;
-                else if (victim_title < 29)
-                    victim_rank = victim_title - 14 + 4;
+                else if (victim_title < (2*HKRANKMAX-1))
+                    victim_rank = victim_title - (HKRANKMAX-1) + 4;
                  else
                      victim_guid = 0;                        // Don't show HK: <rank> message, only log.
-            }
+
+                // now find rank difference
+                if (killer_title == 0 && victim_rank>4)
+                    rank_diff = victim_rank - 4;
+                else if (killer_title < HKRANKMAX)
+                    rank_diff = (victim_rank>(killer_title + 4))? (victim_rank - (killer_title + 4)) : 0;
+                else if (killer_title < (2*HKRANKMAX-1))
+                    rank_diff = (victim_rank>(killer_title - (HKRANKMAX-1) +4))? (victim_rank - (killer_title - (HKRANKMAX-1) + 4)) : 0;
+  }
   
              if(k_level <= 5)
                  k_grey = 0;
@@ -6136,11 +6166,13 @@
   
              honor = ((f * diff_level * (190 + v_rank*10))/6);
              honor *= ((float)k_level) / 70.0f;              //factor of dependence on levels of the killer
+            honor *= 1 + sWorld.getRate(RATE_PVP_RANK_EXTRA_HONOR)*(((float)rank_diff) / 10.0f);
   
              // count the number of playerkills in one day
              ApplyModUInt32Value(PLAYER_FIELD_KILLS, 1, true);
              // and those in a lifetime
              ApplyModUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 1, true);
+            UpdateKnownTitles();
          }
          else
          {
@@ -6219,6 +6251,30 @@
      }
   
      return true;
+}
+
+void Player::UpdateKnownTitles()
+{
+    uint32 new_title = 0;
+    uint32 honor_kills = GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS);
+    uint32 old_title = GetUInt32Value(PLAYER_CHOSEN_TITLE);
+    RemoveFlag64(PLAYER__FIELD_KNOWN_TITLES,PLAYER_TITLE_MASK_ALL_PVP);
+    if(honor_kills < 0)
+        return;
+    bool max_rank = ((honor_kills >= sWorld.pvp_ranks[HKRANKMAX-1]) ? true : false);
+    for(int i = HKRANK01; i != HKRANKMAX; ++i)
+    {
+        if(honor_kills < sWorld.pvp_ranks[i] || (max_rank))
+        {
+            new_title = ((max_rank) ? (HKRANKMAX-1) : (i-1));
+            if(new_title > 0)
+                new_title += ((GetTeam() == ALLIANCE) ? 0 : (HKRANKMAX-1));
+            break;
+        }
+    }
+    SetFlag64(PLAYER__FIELD_KNOWN_TITLES,uint64(1) << new_title);
+    if(old_title > 0 && old_title < (2*HKRANKMAX-1) && new_title > old_title)
+        SetUInt32Value(PLAYER_CHOSEN_TITLE,new_title);
  }
   
  void Player::ModifyHonorPoints( int32 value )
diff -r 4d80ec444ac3 src/game/Player.h
--- a/src/game/Player.h    Tue Jan 13 21:04:10 2009 +0100
+++ b/src/game/Player.h    Wed Jan 14 00:18:55 2009 -0500
@@ -394,6 +394,27 @@
      PLAYER_FLAGS_UNK4           = 0x00020000,               // taxi benchmark mode (on/off) (2.0.1)
      PLAYER_UNK                  = 0x00040000,               // 2.0.8...
  };
+
+#define PLAYER_TITLE_MASK_ALLIANCE_PVP             \
+    ( PLAYER_TITLE_PRIVATE | PLAYER_TITLE_CORPORAL |  \
+      PLAYER_TITLE_SERGEANT_A | PLAYER_TITLE_MASTER_SERGEANT | \
+      PLAYER_TITLE_SERGEANT_MAJOR | PLAYER_TITLE_KNIGHT | \
+      PLAYER_TITLE_KNIGHT_LIEUTENANT | PLAYER_TITLE_KNIGHT_CAPTAIN | \
+      PLAYER_TITLE_KNIGHT_CHAMPION | PLAYER_TITLE_LIEUTENANT_COMMANDER | \
+      PLAYER_TITLE_COMMANDER | PLAYER_TITLE_MARSHAL | \
+      PLAYER_TITLE_FIELD_MARSHAL | PLAYER_TITLE_GRAND_MARSHAL )
+
+#define PLAYER_TITLE_MASK_HORDE_PVP                           \
+    ( PLAYER_TITLE_SCOUT | PLAYER_TITLE_GRUNT |  \
+      PLAYER_TITLE_SERGEANT_H | PLAYER_TITLE_SENIOR_SERGEANT | \
+      PLAYER_TITLE_FIRST_SERGEANT | PLAYER_TITLE_STONE_GUARD | \
+      PLAYER_TITLE_BLOOD_GUARD | PLAYER_TITLE_LEGIONNAIRE | \
+      PLAYER_TITLE_CENTURION | PLAYER_TITLE_CHAMPION | \
+      PLAYER_TITLE_LIEUTENANT_GENERAL | PLAYER_TITLE_GENERAL | \
+      PLAYER_TITLE_WARLORD | PLAYER_TITLE_HIGH_WARLORD )
+
+#define PLAYER_TITLE_MASK_ALL_PVP  \
+    ( PLAYER_TITLE_MASK_ALLIANCE_PVP | PLAYER_TITLE_MASK_HORDE_PVP )
   
  // used for PLAYER__FIELD_KNOWN_TITLES field (uint64), (1<<bit_index) without (-1)
  // can't use enum for uint64 values
@@ -1745,6 +1766,7 @@
          void ModifyHonorPoints( int32 value );
          void ModifyArenaPoints( int32 value );
          uint32 GetMaxPersonalArenaRatingRequirement();
+        void UpdateKnownTitles();
   
          //End of PvP System
   
diff -r 4d80ec444ac3 src/game/World.cpp
--- a/src/game/World.cpp    Tue Jan 13 21:04:10 2009 +0100
+++ b/src/game/World.cpp    Wed Jan 14 00:18:55 2009 -0500
@@ -714,6 +714,19 @@
          sLog.outError("StartArenaPoints (%i) must be in range 0..MaxArenaPoints(%u). Set to %u.",
              m_configs[CONFIG_START_ARENA_POINTS],m_configs[CONFIG_MAX_ARENA_POINTS],m_configs[CONFIG_MAX_ARENA_POINTS]);
          m_configs[CONFIG_START_ARENA_POINTS] = m_configs[CONFIG_MAX_ARENA_POINTS];
+    }
+
+    rate_values[RATE_PVP_RANK_EXTRA_HONOR] = sConfig.GetFloatDefault("PvPRank.Rate.ExtraHonor", 1);
+    std::string s_pvp_ranks = sConfig.GetStringDefault("PvPRank.HKPerRank", "10,50,100,200,450,750,1300,2000,3500,6000,9500,15000,21000,30000");
+    char *c_pvp_ranks = const_cast<char*>(s_pvp_ranks.c_str());
+    for (int i = 0; i !=HKRANKMAX; i++)
+    {
+        if(i==0)
+            pvp_ranks[0] = 0;
+        else if(i==1)
+            pvp_ranks[1] = atoi(strtok (c_pvp_ranks, ","));
+        else
+            pvp_ranks[i] = atoi(strtok (NULL, ","));
      }
   
      m_configs[CONFIG_ALL_TAXI_PATHS] = sConfig.GetBoolDefault("AllFlightPaths", false);
diff -r 4d80ec444ac3 src/game/World.h
--- a/src/game/World.h    Tue Jan 13 21:04:10 2009 +0100
+++ b/src/game/World.h    Wed Jan 14 00:18:55 2009 -0500
@@ -261,7 +261,28 @@
      RATE_DURABILITY_LOSS_PARRY,
      RATE_DURABILITY_LOSS_ABSORB,
      RATE_DURABILITY_LOSS_BLOCK,
+    RATE_PVP_RANK_EXTRA_HONOR,
      MAX_RATES
+};
+
+enum HonorKillPvPRank
+{
+    HKRANK00,
+    HKRANK01,
+    HKRANK02,
+    HKRANK03,
+    HKRANK04,
+    HKRANK05,
+    HKRANK06,
+    HKRANK07,
+    HKRANK08,
+    HKRANK09,
+    HKRANK10,
+    HKRANK11,
+    HKRANK12,
+    HKRANK13,
+    HKRANK14,
+    HKRANKMAX
  };
   
  /// Type of server
@@ -439,6 +460,8 @@
          void SendZoneMessage(uint32 zone, WorldPacket *packet, WorldSession *self = 0, uint32 team = 0);
          void SendZoneText(uint32 zone, const char *text, WorldSession *self = 0, uint32 team = 0);
          void SendServerMessage(uint32 type, const char *text = "", Player* player = NULL);
+
+        uint32 pvp_ranks[HKRANKMAX];
   
          /// Are we in the middle of a shutdown?
          bool IsShutdowning() const { return m_ShutdownTimer > 0; }

Не помню под какой, в моём совсем другой переделанный стоит. Ещё можно анлогично арену намутить
Vkontakte
Забанен по IP на форуме :)
Top-WoW.Ru
Сообщение # 3 написано 14.04.2010 в 17:12
L30m4nc3r
TC User
[notice]Теперь добавить патчи ваши в 1 пост не смогу *Не хватает символов*. Старайтесь оформить как я вот вам в коде мануал, переписывайте под себя
Code
[color=00ff00]*Победные медальки за БГ*[/color]
[color=red]Описание:[/color] [color=yellow]Выбираем за какое БГ что будет даваться/их кол-во.[/color]
[cut]В исходниках находим файл BattleGround.h
Открываем его и ищем строчки:
[code] ITEM_AV_MARK_OF_HONOR           = 20560,
[/code][/cut]
И.Т.Д Аналогично в КОД добавляем патч/sql[/notice]
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. ©
Сообщение # 4 отредактировано Pro[100]Hens - Среда, 14.04.2010, 17:50
L30m4nc3r
TC User
[SD2 Script] Buffer NPC
[cut]
[notice][SD2 Script] Buffer NPC[/notice][/cut]
Насчет TeleGuy. Помоему он для 3.1.3/цлк итд вроде нету. Но всеже.
[notice]Она компилируется с ScriptDev2.
#include "precompiled.h"
long long int money;
int costo;
[cut]
bool GossipHello_teleguy(Player *player, Creature *_Creature)
{
if ( player->GetTeam() == ALLIANCE ) {
player->ADD_GOSSIP_ITEM( 5, "Darnassus. 5 Silver" , GOSSIP_SENDER_MAIN, 1203);
player->ADD_GOSSIP_ITEM( 5, "Exodar. 5 Silver" , GOSSIP_SENDER_MAIN, 1216);
player->ADD_GOSSIP_ITEM( 5, "Stormwind. 5 Silver" , GOSSIP_SENDER_MAIN, 1206);
player->ADD_GOSSIP_ITEM( 5, "Ironforge. 5 Silver" , GOSSIP_SENDER_MAIN, 1224);
player->ADD_GOSSIP_ITEM( 5, "Gnomeregan. 5 Silver" , GOSSIP_SENDER_MAIN, 1222);
player->ADD_GOSSIP_ITEM( 5, "Shattrath City. 5 Silver" , GOSSIP_SENDER_MAIN, 1287);
player->ADD_GOSSIP_ITEM( 5, "Dalaran. 5 Silver" , GOSSIP_SENDER_MAIN, 1205);
player->ADD_GOSSIP_ITEM( 5, "Isle Of Quel'Danas. 5 Silver" , GOSSIP_SENDER_MAIN, 1288);
player->ADD_GOSSIP_ITEM( 7, "[Instances] ->" , GOSSIP_SENDER_MAIN, 5550);
player->ADD_GOSSIP_ITEM( 7, "[Instances WotLK] ->" , GOSSIP_SENDER_MAIN, 5554);
} else {
player->ADD_GOSSIP_ITEM( 5, "Orgrimmar. 5 Silver" , GOSSIP_SENDER_MAIN, 1215);
player->ADD_GOSSIP_ITEM( 5, "Silvermoon. 5 Silver" , GOSSIP_SENDER_MAIN, 1217);
player->ADD_GOSSIP_ITEM( 5, "Undercity. 5 Silver" , GOSSIP_SENDER_MAIN, 1213);
player->ADD_GOSSIP_ITEM( 5, "Thunder Bluff. 5 Silver" , GOSSIP_SENDER_MAIN, 1225);
player->ADD_GOSSIP_ITEM( 5, "Gnomeregan. 5 Silver" , GOSSIP_SENDER_MAIN, 1222);
player->ADD_GOSSIP_ITEM( 5, "Shattrath City. 5 Silver" , GOSSIP_SENDER_MAIN, 1287);
player->ADD_GOSSIP_ITEM( 5, "Dalaran. 5 Silver" , GOSSIP_SENDER_MAIN, 1205);
player->ADD_GOSSIP_ITEM( 5, "Isle Of Quel'Danas. 5 Silver" , GOSSIP_SENDER_MAIN, 1288);
player->ADD_GOSSIP_ITEM( 7, "[Instances] ->" , GOSSIP_SENDER_MAIN, 5550);
player->ADD_GOSSIP_ITEM( 7, "[Instances WotLK] ->" , GOSSIP_SENDER_MAIN, 5554);
}

player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,_Creature->GetGUID());
return true;
}

void SendDefaultMenu_teleguy(Player *player, Creature *_Creature, uint32 action )
{
if(!player->getAttackers().empty())
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You are in combat!", LANG_UNIVERSAL, NULL);
return;
}

if( player->getLevel() < 8 )
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be lvl 8+", LANG_UNIVERSAL, NULL);
return;
}

money = player-> GetMoney();
costo = 500;

if (money < costo )
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You haven't enough money", LANG_UNIVERSAL, NULL);
return;
}

switch(action)
{
case 5550: //Instances
player->ADD_GOSSIP_ITEM( 5, "Ragefire Chasm. 10 Silver" , GOSSIP_SENDER_MAIN, 1248);
player->ADD_GOSSIP_ITEM( 5, "The Wailing Caverns. 10 Silver" , GOSSIP_SENDER_MAIN, 1249);
player->ADD_GOSSIP_ITEM( 5, "The Stockade. 10 Silver" , GOSSIP_SENDER_MAIN, 1253);
player->ADD_GOSSIP_ITEM( 5, "Deadmines. 10 Silver" , GOSSIP_SENDER_MAIN, 1250);
player->ADD_GOSSIP_ITEM( 5, "Shadowfang Keep. 10 Silver" , GOSSIP_SENDER_MAIN, 1251);
player->ADD_GOSSIP_ITEM( 5, "Blackfathom Deeps. 10 Silver" , GOSSIP_SENDER_MAIN, 1252);
player->ADD_GOSSIP_ITEM( 5, "Razorfen Kraul. 20 Silver" , GOSSIP_SENDER_MAIN, 1254);
player->ADD_GOSSIP_ITEM( 5, "Razorfen Downs. 20 Silver" , GOSSIP_SENDER_MAIN, 1256);
player->ADD_GOSSIP_ITEM( 5, "Scarlet Monastery. 20 Silver" , GOSSIP_SENDER_MAIN, 1257);
player->ADD_GOSSIP_ITEM( 7, "[More] ->" , GOSSIP_SENDER_MAIN, 5551);
player->ADD_GOSSIP_ITEM( 7, "<- [Main Menu]" , GOSSIP_SENDER_MAIN, 5552);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,_Creature->GetGUID());
break;
case 5551: //More Instances
player->ADD_GOSSIP_ITEM( 5, "Uldaman. 30 Silver" , GOSSIP_SENDER_MAIN, 1258);
player->ADD_GOSSIP_ITEM( 5, "Zul'Farrak. 30 Silver" , GOSSIP_SENDER_MAIN, 1259);
player->ADD_GOSSIP_ITEM( 5, "Maraudon. 40 Silver" , GOSSIP_SENDER_MAIN, 1260);
player->ADD_GOSSIP_ITEM( 5, "Maraudon. 40 Silver" , GOSSIP_SENDER_MAIN, 1260);
player->ADD_GOSSIP_ITEM( 5, "The Sunken Temple. 40 Silver" , GOSSIP_SENDER_MAIN, 1261);
player->ADD_GOSSIP_ITEM( 5, "Blackrock Depths. 40 Silver" , GOSSIP_SENDER_MAIN, 1262);
player->ADD_GOSSIP_ITEM( 5, "Dire Maul. 50 Silver" , GOSSIP_SENDER_MAIN, 1263);
player->ADD_GOSSIP_ITEM( 5, "Blackrock Spire. 50 Silver" , GOSSIP_SENDER_MAIN, 1264);
player->ADD_GOSSIP_ITEM( 5, "Stratholme. 50 Silver" , GOSSIP_SENDER_MAIN, 1265);
player->ADD_GOSSIP_ITEM( 5, "Scholomance. 50 Silver" , GOSSIP_SENDER_MAIN, 1266);
player->ADD_GOSSIP_ITEM( 7, "[More] ->" , GOSSIP_SENDER_MAIN, 5553);
player->ADD_GOSSIP_ITEM( 7, "<- [Back]" , GOSSIP_SENDER_MAIN, 5550);
player->ADD_GOSSIP_ITEM( 7, "<- [Main Menu]" , GOSSIP_SENDER_MAIN, 5552);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,_Creature->GetGUID());
break;

case 5553: //Instances 60-70
player->ADD_GOSSIP_ITEM( 5, "Karazhan. 1 Gold" , GOSSIP_SENDER_MAIN, 4007);
player->ADD_GOSSIP_ITEM( 5, "Gruul's Lair. 1 Gold" , GOSSIP_SENDER_MAIN, 4008);
player->ADD_GOSSIP_ITEM( 5, "Hellfire Citadel. 1 Gold" , GOSSIP_SENDER_MAIN, 4009);
player->ADD_GOSSIP_ITEM( 5, "Coilfang Reservoir. 1 Gold" , GOSSIP_SENDER_MAIN, 4010);
player->ADD_GOSSIP_ITEM( 5, "Tempest Keep. 1 Gold" , GOSSIP_SENDER_MAIN, 4011);
player->ADD_GOSSIP_ITEM( 5, "Caverns of Time. 1 Gold" , GOSSIP_SENDER_MAIN, 4012);
player->ADD_GOSSIP_ITEM( 5, "Zul'Aman. 1 Gold" , GOSSIP_SENDER_MAIN, 4016);
player->ADD_GOSSIP_ITEM( 5, "Black Temple. 1 Gold" , GOSSIP_SENDER_MAIN, 4013);
player->ADD_GOSSIP_ITEM( 5, "Magister's Terrace. 2 Gold" , GOSSIP_SENDER_MAIN, 4017);
player->ADD_GOSSIP_ITEM( 5, "Sunwell Plateau. 2 Gold" , GOSSIP_SENDER_MAIN, 4018);
player->ADD_GOSSIP_ITEM( 7, "<- [Back]" , GOSSIP_SENDER_MAIN, 5550);
player->ADD_GOSSIP_ITEM( 7, "<- [Main Menu]" , GOSSIP_SENDER_MAIN, 5552);

player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,_Creature->GetGUID());

break;

case 5554: //Instances 75-80 NORTHREND
player->ADD_GOSSIP_ITEM( 5, "Utgarde Keep. 20 Gold" , GOSSIP_SENDER_MAIN, 4019);
player->ADD_GOSSIP_ITEM( 5, "The Nexus. 20 Gold" , GOSSIP_SENDER_MAIN, 4020);
player->ADD_GOSSIP_ITEM( 5, "Azjol-Nerub. 20 Gold" , GOSSIP_SENDER_MAIN, 4021);
player->ADD_GOSSIP_ITEM( 5, "Ahn'kahet: The Old Kingdom. 20 Gold" , GOSSIP_SENDER_MAIN, 4022);
player->ADD_GOSSIP_ITEM( 5, "Drak'Tharon Keep. 20 Gold" , GOSSIP_SENDER_MAIN, 4023);
player->ADD_GOSSIP_ITEM( 5, "The Violet Hold. 20 Gold" , GOSSIP_SENDER_MAIN, 4024);
player->ADD_GOSSIP_ITEM( 5, "Gun' Drak. 20 Gold" , GOSSIP_SENDER_MAIN, 4025);
player->ADD_GOSSIP_ITEM( 5, "Utgarde Pinnacle. 20 Gold" , GOSSIP_SENDER_MAIN, 4026);
player->ADD_GOSSIP_ITEM( 5, "Ulduar. 20 Gold" , GOSSIP_SENDER_MAIN, 4027);
player->ADD_GOSSIP_ITEM( 5, "The Obsidian Sanctum. 20 Gold" , GOSSIP_SENDER_MAIN, 4028);
player->ADD_GOSSIP_ITEM( 5, "Naxxramas. 20 Gold" , GOSSIP_SENDER_MAIN, 4029);
player->ADD_GOSSIP_ITEM( 7, "<- [Back]" , GOSSIP_SENDER_MAIN, 5550);
player->ADD_GOSSIP_ITEM( 7, "<- [Main Menu]" , GOSSIP_SENDER_MAIN, 5552);

player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,_Creature->GetGUID());

break;

case 5552: //Back To Main Menu
if ( player->GetTeam() == ALLIANCE ) {
player->ADD_GOSSIP_ITEM( 5, "Darnassus. 5 Silver" , GOSSIP_SENDER_MAIN, 1203);
player->ADD_GOSSIP_ITEM( 5, "Exodar. 5 Silver" , GOSSIP_SENDER_MAIN, 1216);
player->ADD_GOSSIP_ITEM( 5, "Stormwind. 5 Silver" , GOSSIP_SENDER_MAIN, 1206);
player->ADD_GOSSIP_ITEM( 5, "Ironforge. 5 Silver" , GOSSIP_SENDER_MAIN, 1224);
player->ADD_GOSSIP_ITEM( 5, "Gnomeregan. 5 Silver" , GOSSIP_SENDER_MAIN, 1222);
player->ADD_GOSSIP_ITEM( 5, "Shattrath City. 5 Silver" , GOSSIP_SENDER_MAIN, 1287);
player->ADD_GOSSIP_ITEM( 5, "Dalaran. 5 Silver" , GOSSIP_SENDER_MAIN, 1205);
player->ADD_GOSSIP_ITEM( 5, "Isle Of Quel'Danas. 5 Silver" , GOSSIP_SENDER_MAIN, 1288);
player->ADD_GOSSIP_ITEM( 7, "[Instances] ->" , GOSSIP_SENDER_MAIN, 5550);
player->ADD_GOSSIP_ITEM( 7, "[Instances WotLK] ->" , GOSSIP_SENDER_MAIN, 5554);

} else {

player->ADD_GOSSIP_ITEM( 5, "Orgrimmar. 5 Silver" , GOSSIP_SENDER_MAIN, 1215);
player->ADD_GOSSIP_ITEM( 5, "Silvermoon. 5 Silver" , GOSSIP_SENDER_MAIN, 1217);
player->ADD_GOSSIP_ITEM( 5, "Undercity. 5 Silver" , GOSSIP_SENDER_MAIN, 1213);
player->ADD_GOSSIP_ITEM( 5, "Thunder Bluff. 5 Silver" , GOSSIP_SENDER_MAIN, 1225);
player->ADD_GOSSIP_ITEM( 5, "Gnomeregan. 5 Silver" , GOSSIP_SENDER_MAIN, 1222);
player->ADD_GOSSIP_ITEM( 5, "Shattrath City. 5 Silver" , GOSSIP_SENDER_MAIN, 1287);
player->ADD_GOSSIP_ITEM( 5, "Dalaran. 5 Silver" , GOSSIP_SENDER_MAIN, 1205);
player->ADD_GOSSIP_ITEM( 5, "Isle Of Quel'Danas. 5 Silver" , GOSSIP_SENDER_MAIN, 1288);
player->ADD_GOSSIP_ITEM( 7, "[Instances] ->" , GOSSIP_SENDER_MAIN, 5550);
player->ADD_GOSSIP_ITEM( 7, "[Instances WotLK] ->" , GOSSIP_SENDER_MAIN, 5554);
}

player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,_Creature->GetGUID());

break;

case 1203: // Teleport to Darnassus
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, 9947.52f, 2482.73f, 1316.21f, 0.0f);
player->ModifyMoney(-1*costo);
break;

// Teleport to Stormwind
case 1206:
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -8960.14f, 516.266f, 96.3568f, 0.0f);
player->ModifyMoney(-1*costo);
break;

// Teleport to Dalaran
case 1205:
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 5804.14f, 624.770f, 647.7670f, 1.64f);
player->ModifyMoney(-1*costo);
break;

// Teleport to Undercity
case 1213:
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, 1819.71f, 238.79f, 60.5321f, 0.0f);
player->ModifyMoney(-1*costo);

break;

// Teleport to Orgrimmar
case 1215:
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, 1552.5f, -4420.66f, 8.94802f, 0.0f);
player->ModifyMoney(-1*costo);
break;

// Teleport to Exodar
case 1216:
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, -4073.03f, -12020.4f, -1.47f, 0.0f);
player->ModifyMoney(-1*costo);
break;

// Teleport to Silvermoon
case 1217:
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, 9338.74f, -7277.27f, 13.7895f, 0.0f);
player->ModifyMoney(-1*costo);

break;

case 1222://teleport player to Gnomeregan
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -5163.43f,660.40f,348.28f,4.65f);
player->ModifyMoney(-1*costo);

break;

// Teleport to Ironforge
case 1224:
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -4924.07f, -951.95f, 501.55f, 5.40f);
player->ModifyMoney(-1*costo);

break;

// Teleport to Thunder Bluff
case 1225:
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, -1280.19f,127.21f,131.35f,5.16f);
player->ModifyMoney(-1*costo);

break;

case 1248://teleport player to Ragefire Chasm

if( player->getLevel() >= 8)
{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, 1800.53f,-4394.68f,-17.93f,5.49f);
player->ModifyMoney(-2*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 8!", LANG_UNIVERSAL, NULL);
}

break;

case 1249://teleport player to the Wailing Caverns

if (player->getLevel() >= 10)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, -722.53f,-2226.30f,16.94f,2.71f);
player->ModifyMoney(-2*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 10!", LANG_UNIVERSAL, NULL);
}

break;

case 1250://teleport player to the Deadmines

if (player->getLevel() >= 10)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -11212.04f,1658.58f,25.67f,1.45f);
player->ModifyMoney(-2*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 10!", LANG_UNIVERSAL, NULL);
}

break;

case 1251://teleport player to Shadowfang Keep

if (player->getLevel() >= 15)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -254.47f,1524.68f,76.89f,1.56f);
player->ModifyMoney(-2*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 15!", LANG_UNIVERSAL, NULL);
}

break;

case 1252://teleport player to Blackfathom Deeps

if (player->getLevel() >= 15)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, 4254.58f,664.74f,-29.04f,1.97f);
player->ModifyMoney(-2*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 15!", LANG_UNIVERSAL, NULL);
}

break;

case 1253://teleport player to the Stockade

if (player->getLevel() >= 20)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -8769.76f,813.08f,97.63f,2.26f);
player->ModifyMoney(-2*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 20!", LANG_UNIVERSAL, NULL);
}

break;

case 1254://teleport player to Razorfen Kraul

if (player->getLevel() >= 24)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, -4484.04f,-1739.40f,86.47f,1.23f);
player->ModifyMoney(-4*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 24!", LANG_UNIVERSAL, NULL);
}

break;

case 1255://teleport player to Gnomeregan

if (player->getLevel() >= 20)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -5162.62f,667.81f,248.05f,1.48f);
player->ModifyMoney(-4*costo);

} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 20!", LANG_UNIVERSAL, NULL);
}

break;

case 1256://teleport player to Razorfen Downs

if (player->getLevel() >= 25)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, -4645.08f,-2470.85f,85.53f,4.39f);
player->ModifyMoney(-4*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 25!", LANG_UNIVERSAL, NULL);
}

break;

case 1257://teleport player to the Scarlet Monastery

if (player->getLevel() >= 25)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, 2843.89f,-693.74f,139.32f,5.11f);
player->ModifyMoney(-4*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 25!", LANG_UNIVERSAL, NULL);
}

break;

case 1258://teleport player to Uldaman

if (player->getLevel() >= 35)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -6119.70f,-2957.30f,204.11f,0.03f);
player->ModifyMoney(-6*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 35!", LANG_UNIVERSAL, NULL);
}

break;

case 1259://teleport player to Zul'Farrak

if (player->getLevel() >= 35)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, -6839.39f,-2911.03f,8.87f,0.41f);
player->ModifyMoney(-6*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 35!", LANG_UNIVERSAL, NULL);
}

break;

case 1260://teleport player to Maraudon

if (player->getLevel() >= 40)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, -1433.33f,2955.34f,96.21f,4.82f);
player->ModifyMoney(-8*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 40!", LANG_UNIVERSAL, NULL);
}

break;

case 1261://teleport player to the Sunken Temple

if (player->getLevel() >= 45)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -10346.92f,-3851.90f,-43.41f,6.09f);
player->ModifyMoney(-8*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 45!", LANG_UNIVERSAL, NULL);
}

break;

case 1262://teleport player to Blackrock Depths

if (player->getLevel() >= 45)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -7301.03f,-913.19f,165.37f,0.08f);
player->ModifyMoney(-8*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 45!", LANG_UNIVERSAL, NULL);
}

break;

case 1263://teleport player to Dire Maul

if (player->getLevel() >= 50)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, -3982.47f,1127.79f,161.02f,0.05f);
player->ModifyMoney(-10*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 50!", LANG_UNIVERSAL, NULL);
}

break;

case 1264://teleport player to Blackrock Spire

if (player->getLevel() >= 50)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -7535.43f,-1212.04f,285.45f,5.29f);
player->ModifyMoney(-10*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 50!", LANG_UNIVERSAL, NULL);
}

break;

case 1265://teleport player to Stratholme

if (player->getLevel() >= 50)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, 3263.54f,-3379.46f,143.59f,0.00f);
player->ModifyMoney(-10*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 50!", LANG_UNIVERSAL, NULL);
}

break;

case 1266://teleport player to Scholomance

if (player->getLevel() >= 50)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, 1219.01f,-2604.66f,85.61f,0.50f);
player->ModifyMoney(-10*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 50!", LANG_UNIVERSAL, NULL);
}

break;

case 1287:// Shattrath City

if( player->getLevel() >= 58)
{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, -1850.209961f, 5435.821777f, -10.961435f, 3.403913f);
player->ModifyMoney(-1*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 58!", LANG_UNIVERSAL, NULL);
}

break;

case 1288://teleport player to Isle Of Quel'Danas

if (player->getLevel() >= 65)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, 12947.4f,-6893.31f,5.68398f,3.09154f);
player->ModifyMoney(-1*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 65!", LANG_UNIVERSAL, NULL);
}

break;

case 4007:// Karazhan

if (player->getLevel() >= 70)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(0, -11118.8f, -2010.84f, 47.0807f, 0.0f);
player->ModifyMoney(-20*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 70!", LANG_UNIVERSAL, NULL);
}

break;

case 4008:// Gruul's Lair

if (player->getLevel() >= 65)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, 3539.007568f, 5082.357910f, 1.691071f, 0.0f);
player->ModifyMoney(-20*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 65!", LANG_UNIVERSAL, NULL);
}

break;

case 4009:// Hellfire Citadel
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, -305.816223f, 3056.401611f, -2.473183f, 2.01f);
player->ModifyMoney(-20*costo);
break;

case 4010:// Coilfang Reservoir
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, 517.288025f, 6976.279785f, 32.007198f, 0.0f);
player->ModifyMoney(-20*costo);
break;

case 4011:// Tempest Keep

if (player->getLevel() >= 70)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, 3089.579346f, 1399.046509f, 187.653458f, 4.794070f);
player->ModifyMoney(-20*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 70!", LANG_UNIVERSAL, NULL);
}

break;

case 4012:// Caverns of Time

if (player->getLevel() >= 66)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(1, -8173.66f, -4746.36f, 33.8423f, 4.93989f);
player->ModifyMoney(-20*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 66!", LANG_UNIVERSAL, NULL);
}

break;

case 4016:// Zul'Aman

if (player->getLevel() >= 70)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, 6846.95f, -7954.5f, 170.028f, 4.61501f);
player->ModifyMoney(-20*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 70!", LANG_UNIVERSAL, NULL);
}

break;

case 4013:// Black Temple

if (player->getLevel() >= 70)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, -3610.719482f, 324.987579f, 37.400028f, 3.282981f);
player->ModifyMoney(-20*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 70!", LANG_UNIVERSAL, NULL);
}

break;

case 4017:// magistrate

if (player->getLevel() >= 70)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, 12884.6f, -7317.69f, 65.5023f, 4.799f);
player->ModifyMoney(-40*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 70!", LANG_UNIVERSAL, NULL);
}

break;

case 4018:// sunwell

if (player->getLevel() >= 70)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(530, 12574.1f, -6774.81f, 15.0904f, 3.13788f);
player->ModifyMoney(-40*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 70!", LANG_UNIVERSAL, NULL);
}

break;

case 4019:// Utgarde Keep

if (player->getLevel() >= 80)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 1219.720f, -4865.28f, 41.25f, 0.31f);
player->ModifyMoney(-400*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 80!", LANG_UNIVERSAL, NULL);
}

break;

case 4020:// The Nexus

if (player->getLevel() >= 80)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 3776.950f, 6953.80f, 105.05f, 0.345f);
player->ModifyMoney(-400*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 80!", LANG_UNIVERSAL, NULL);
}

break;

case 4021:// Azjol-Nerub

if (player->getLevel() >= 80)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 3675.430f, 2169.00f, 35.90f, 2.29f);
player->ModifyMoney(-400*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 80!", LANG_UNIVERSAL, NULL);
}

break;

case 4022:// Ahn'kahet: The Old Kingdom

if (player->getLevel() >= 80)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 3646.760f, 2045.17f, 1.79f, 4.37f);
player->ModifyMoney(-400*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 80!", LANG_UNIVERSAL, NULL);
}

break;

case 4023:// Drak'Tharon Keep

if (player->getLevel() >= 80)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 4450.860f, -2045.25f, 162.83f, 0.00f);
player->ModifyMoney(-400*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 80!", LANG_UNIVERSAL, NULL);
}

break;

case 4024:// The Violet Hold

if (player->getLevel() >= 80)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 5679.820f, 486.80f, 652.40f, 4.08f);
player->ModifyMoney(-400*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 80!", LANG_UNIVERSAL, NULL);
}

break;

case 4025:// Gun' Drak

if (player->getLevel() >= 80)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 6937.540f, -4455.98f, 450.68f, 1.00f);
player->ModifyMoney(-400*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 80!", LANG_UNIVERSAL, NULL);
}

break;

case 4026:// Utgarde Pinnacle

if (player->getLevel() >= 80)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 1245.690f, -4856.59f, 216.86f, 3.45f);
player->ModifyMoney(-400*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 80!", LANG_UNIVERSAL, NULL);
}

break;

case 4027:// Ulduar

if (player->getLevel() >= 80)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 8976.240f, -1281.33f, 1059.01f, 0.58f);
player->ModifyMoney(-400*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 80!", LANG_UNIVERSAL, NULL);
}

break;

case 4028:// The Obsidian Sanctum

if (player->getLevel() >= 80)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 3625.780f, 280.40f, -120.14f, 3.25f);
player->ModifyMoney(-400*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 80!", LANG_UNIVERSAL, NULL);
}

break;

case 4029:// Naxxramas

if (player->getLevel() >= 80)

{
player->CLOSE_GOSSIP_MENU();
player->TeleportTo(571, 3668.719f, -1262.460f, 243.63f, 5.03f);
player->ModifyMoney(-400*costo);
} else {
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("You must be at least level 80!", LANG_UNIVERSAL, NULL);
}

break;

}

}

bool GossipSelect_teleguy(Player *player, Creature *_Creature, uint32 sender, uint32 action )
{
// Main menu
if (sender == GOSSIP_SENDER_MAIN)
SendDefaultMenu_teleguy(player, _Creature, action );
return true;
}

void AddSC_teleguy()
{
Script *newscript;

newscript = new Script;
newscript->Name = "teleguy";
newscript->pGossipHello = &GossipHello_teleguy;
newscript->pGossipSelect = &GossipSelect_teleguy;
newscript->pItemHello = NULL;
newscript->pGOHello = NULL;
newscript->pAreaTrigger = NULL;
newscript->pItemQuestAccept = NULL;
newscript->pGOQuestAccept = NULL;
newscript->pGOChooseReward = NULL;
newscript->RegisterSelf();
}[/cut][/notice]

P.S: Выкладывал много раз Rescript

Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. ©
Сообщение # 5 написано 16.04.2010 в 17:59
wowslavikwow
Рыцарь
Pro[100]Hens,
Quote (Pro|100|Hens)
В исходниках находим файл BattleGround.h
Открываем его и ищем строчки:
Code
ITEM_AV_MARK_OF_HONOR           = 20560,             
                 ITEM_WS_MARK_OF_HONOR           = 20558,             
                 ITEM_AB_MARK_OF_HONOR           = 20559,             
                 ITEM_EY_MARK_OF_HONOR           = 29024,             
                 ITEM_SA_MARK_OF_HONOR           = 42425             
};             

enum BattleGroundMarksCount             
{             
                 ITEM_WINNER_COUNT               = 3,             
                 ITEM_LOSER_COUNT                = 1             


Проблемка... у меня таких строк в этом файле нету..... но есть такие
Code

enum BattleGroundMarks
{
     SPELL_WS_MARK_LOSER             = 24950,                // not create marks now
     SPELL_WS_MARK_WINNER            = 24951,                // not create marks now
     SPELL_AB_MARK_LOSER             = 24952,                // not create marks now
     SPELL_AB_MARK_WINNER            = 24953,                // not create marks now
     SPELL_AV_MARK_LOSER             = 24954,                // not create marks now
     SPELL_AV_MARK_WINNER            = 24955,                // not create marks now

     SPELL_WG_MARK_VICTORY           = 24955,                // honor + mark
     SPELL_WG_MARK_DEFEAT            = 58494,                // honor + mark
};

enum BattleGroundMarksCount
{
     ITEM_WINNER_COUNT               = 3,
     ITEM_LOSER_COUNT                = 1
};

В них нужно правлять?
REVISION_NR "10065"

Добавлено (17.06.2010, 12:40)
---------------------------------------------
и если в них то какие именно LOSER или в WINNER или это какие за проигрышь а какие за победу?

Добавлено (17.06.2010, 12:46)
---------------------------------------------
и если в них то какие именно LOSER или в WINNER или это какие за проигрышь а какие за победу?


Знаю html, css, JavaScript, PHP, несколько лет углубленно учу C, C++
ЛУЧШИЙ ЧАТ Speed-Chat.RU
Сообщение # 6 написано 17.06.2010 в 12:46
САХАЛИН
Центурион
Pro[100]Hens, ахахахахаха как можно было кидать патч на PvP Token System перед этим не исправив его, ты просто тупо скапипастил рядом стоящюю тему, мде не ожидал.


Ой ща по саням дам !
http://wow.grin.by
Сообщение # 7 написано 11.09.2010 в 00:10
wowslavikwow
Рыцарь
lokok,
Code
diff --git a/src/game/DuelHandler.cpp b/src/game/DuelHandler.cpp
index 15cbf8c..616ca27 100644
--- a/src/game/DuelHandler.cpp
+++ b/src/game/DuelHandler.cpp
@@ -51,6 +51,15 @@
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));
+ //only for cooldowns which < 15 min
+ if (!pl->GetMap()->IsDungeon()) { pl->RemoveArenaSpellCooldowns(); plTarget->RemoveArenaSpellCooldowns(); }
+
pl->SendDuelCountdown(3000);
plTarget->SendDuelCountdown(3000);
}

это версия патча для гита

а это если руками
Открываем фаил -> src/game/DuelHandler.cpp
находим в нем:
Code
plTarget->duel->startTimer = now;

и добавляем после:
Code

// 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));
//only for cooldowns which < 15 min
if (!pl->GetMap()->IsDungeon()) { pl->RemoveArenaSpellCooldowns(); plTarget->RemoveArenaSpellCooldowns(); }

Все работает.


Знаю html, css, JavaScript, PHP, несколько лет углубленно учу C, C++
ЛУЧШИЙ ЧАТ Speed-Chat.RU
Сообщение # 8 отредактировано NameNot - Понедельник, 03.01.2011, 19:04
wowslavikwow
Рыцарь
Quote (bondiano)
и ещё можно патч переделать под себя чтоб на тя ауру вешало =)

Смысл?

Знаю html, css, JavaScript, PHP, несколько лет углубленно учу C, C++
ЛУЧШИЙ ЧАТ Speed-Chat.RU
Сообщение # 9 написано 09.01.2011 в 00:20
lanc
The Hurt Locker
поставил дополнительную проверку на игрока и опонента в бою, чтобы небыло багоюза (помнится ставил старый мод и игроки в пвп юзали к друг другу дуель через макрос, и почти постоянно были с полным хп)

Code

diff --git a/src/game/DuelHandler.cpp b/src/game/DuelHandler.cpp  
index 15cbf8c..616ca27 100644  
--- a/src/game/DuelHandler.cpp  
+++ b/src/game/DuelHandler.cpp  
@@ -46,4 +46,21 @@ void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket)
     pl->duel->startTimer = now;
     plTarget->duel->startTimer = now;

+   // New!!! reset cooldowns and HP/Mana
+   if (!pl->isInCombat() || !plTarget->isInCombat())
+   {
+       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);
Сообщение # 10 написано 29.01.2011 в 14:05
Popandri
Скаут
а на тринти подойдеь?
Сообщение # 11 написано 11.02.2012 в 15:53
staford11
^s†af0rd f0rever^
Popandri, если перепишешь то пойдет. Может быть...
Победоносная @ Галакронд
Мои сборки под 3.3.5а 12340

Исправительные работы: в наличии.
Сообщение # 12 написано 11.02.2012 в 15:57
Faiser
Капрал
Добавлять ничего не будут? sad
Сообщение # 13 написано 26.10.2012 в 21:23
Форум » CMaNGOS » Патчи / Моды / Фиксы CMaNGOS » [Моды в ядро] *По просьбе NameNot* (Дополняем в теме то что не добавил я.)
  • Страница 1 из 1
  • 1
Поиск: