Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Принятые патчи (http://mangos.ytdb.ru/forumdisplay.php?f=5)
-   -   [11650] Visibility of ghosts in group (http://mangos.ytdb.ru/showthread.php?t=3914)

Den 17.03.2011 19:12

[11650] Visibility of ghosts in group
 
В разделе новичков, как-то глухо... http://ru-mangos.ru/showthread.php?t=3624
Хочется услышать комментарий от разработчиков.

PHP код:

diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index d187d68
..1f9509e 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -19564,+19564,20 @@ bool Player::IsVisibleInGridForPlayerPlayerpl ) const
         return 
true;
     }
 
+    
// live player see dead player only in this group
+    if (const GrouppGroup GetGroup())
+    {
+        if (
pGroup)
+        {
+            
Unittarget = ((Player*)pl);
+            if (
target->GetTypeId() == TYPEID_PLAYER && pGroup->IsMember(((Player*)target)->GetObjectGuid()))
+            {
+                if (!(
isAlive() || m_deathTimer 0) && IsFriendlyTo(pl))
+                    return 
true;
+            }
+        }
+    }
+
     
// Live player see live player or dead player with not realized corpse
     
if(pl->isAlive() || pl->m_deathTimer 0)
     { 


Ambal 18.03.2011 02:25

Код:

if (pGroup)
- явно лишняя проверка, равно как и конвертирование указателя на Player в Unit:
Код:

Unit* target = ((Player*)pl);

Den 18.03.2011 20:05

Цитата:

Сообщение от Ambal (Сообщение 20078)
конвертирование указателя на Player в Unit:
Код:

Unit* target = ((Player*)pl);

Вот так правильно? :)
Код:

Player* target = ((Player*)pl)

virusav 18.03.2011 20:56

Возможно, так:
Код:

+    if (const Group* pGroup = GetGroup())
+        if (pl->GetTypeId() == TYPEID_PLAYER && pGroup->IsMember(pl->GetObjectGuid()))
+            if (!(isAlive() || m_deathTimer > 0) && IsFriendlyTo(pl))
+                return true;

При необходимости можно использовать (Player*)pl.

Vipertv 19.03.2011 09:27

Еще одна лишняя проверка, так как pl и так уже является типа Player:
Код:

pl->GetTypeId() == TYPEID_PLAYER

Den 18.06.2011 14:51

Скриншот делался три месяца назад: http://www.imagepost.ru/?v=wowscrnsh...311_133918.jpg
Патч обновлен 11642.
Код:

diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 71495a4..de3541f 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -19848,6 +19848,14 @@ bool Player::IsVisibleInGridForPlayer( Player* pl ) const
        return true;
    }
 
+    // live player see dead player only in this group
+    if (const Group* pGroup = GetGroup())
+    {
+        if (pGroup->IsMember(pl->GetObjectGuid()))
+            if (!(isAlive() || m_deathTimer > 0) && IsFriendlyTo(pl))
+                return true;
+    }
+
    // Live player see live player or dead player with not realized corpse
    if(pl->isAlive() || pl->m_deathTimer > 0)
    {


Vladimir 19.06.2011 02:47

есть специальная функция IsInSameRaidWith (IsInSameGroupWith учитывает тоько подгруппу в случае рейда)

не думаю что IsFriendlyTo нужно - так как члены группы по определению friendly в смысле людей - а наличие всяких charm-ов не влияет на отношение человека управляющего чаров. ;)

зачем if (!(isAlive() || m_deathTimer > 0)) я не понял. Делаю небольшое предположение что духи тоже друг друга видят из той-же группы.

тогда просто:
Код:

    if (IsInSameRaidWith(pl))
        return true;

и if (InBattleGround()) можно дропнуть как частный случай того-же

Vladimir 19.06.2011 02:59

В такой упрощенной форме добавлено в [11650]. Спасибо.


Текущее время: 08:45. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS