Показать сообщение отдельно
Старый 04.04.2010, 22:41   #20
ghostpast
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 11
Поблагодарили 17 раз(а) в 11 сообщениях
ghostpast На верном пути
По умолчанию

Цитата:
Сообщение от NeatElves Посмотреть сообщение
Лучше добавить в кондиции что-то наподобие(состряпал навскидку, просто чтобы показать идею, не проверял):
Код:
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
 {
И будет тогда проверка первая на уровень перса, вторая - не знает ли он спелл дуалспека, если совпало - меню есть..))
Пригодится и дя других меню, наподобие инженер гном и т.п..))
можно оставить CONDITION_SPELL, а отрицательное значение будет означать отсутствие спелла.
и
Код:
         default:
             return false;
должен быть в конце оператора switch

Последний раз редактировалось ghostpast; 04.04.2010 в 22:52.
ghostpast вне форума