• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
команда заморозки
lanc
The Hurt Locker
.freeze, .unfreeze, .listfreeze (наверно всем игравшим на тринити знакомы эти команды) для тех кто не играл и не в курсе, они предназначены для приморозке игрока к месту лишая его каких либо действий до отмены тем кто приморозил (наподобе бана только не удаля игрока из игры)

патч перекатал с тринити, возможно чтото упустил хотя не уверен просьба протестировать... а так же осталось к патчу добавить sql файл я просто не в курсе как там и что на тринити поэтому нащет языков не стал нечего писать по поводу команд то вот можна сделать так

Code

INSERT INTO `command` VALUES ('freeze',1,'Syntax: .freeze $name.');
INSERT INTO `command` VALUES ('unfreeze',1,'Syntax: .unfreeze $name.');
INSERT INTO `command` VALUES ('listfreeze',1,'Syntax: .listfreeze.');

не у верен что правильные команды взял навскидку по коду

вот патч

Code
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index f798cd7..2ac9992 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -764,4 +764,7 @@ ChatCommand * ChatHandler::getCommandTable()
          { "waterwalk",      SEC_GAMEMASTER,     false, &ChatHandler::HandleWaterwalkCommand,           "", NULL },
          { "quit",           SEC_CONSOLE,        true,  &ChatHandler::HandleQuitCommand,                "", NULL },
+        { "freeze",         SEC_MODERATOR,      false, &ChatHandler::HandleFreezeCommand,              "", NULL },
+        { "unfreeze",       SEC_MODERATOR,      false, &ChatHandler::HandleUnFreezeCommand,            "", NULL },
+        { "listfreeze",     SEC_MODERATOR,      false, &ChatHandler::HandleListFreezeCommand,          "", NULL },
   
          { NULL,             0,                  false, NULL,                    "", NULL }
diff --git a/src/game/Chat.h b/src/game/Chat.h
index 23f6ae6..61cae45 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -532,4 +532,7 @@ class ChatHandler
     bool HandleUnmuteCommand(char* args);
          bool HandleMovegensCommand(char* args);
+   bool HandleFreezeCommand(char *args);
+        bool HandleUnFreezeCommand(char *args);
+        bool HandleListFreezeCommand(char* args);
   
          bool HandleCooldownCommand(char* args);
diff --git a/src/game/Language.h b/src/game/Language.h
index 4e03a5c..d2fd3db 100644
--- a/src/game/Language.h
+++ b/src/game/Language.h
@@ -94,4 +94,8 @@ enum MangosStrings
      // Room for more level 0              65-99 not used
+    LANG_COMMAND_FREEZE                 = 72,
+    LANG_COMMAND_UNFREEZE               = 73,
+    LANG_COMMAND_LIST_FREEZE            = 74,
+    LANG_COMMAND_FROZEN_PLAYERS         = 75,
   
      // level 1 chat
      LANG_GLOBAL_NOTIFY                  = 100,
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index 93f5aeb..a84166c 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -7180,0 +7180,156 @@ bool ChatHandler::HandleModifyGenderCommand(char *args)
+
+bool ChatHandler::HandleFreezeCommand(char *args)
+{
+    std::string name;
+    Player *player;
+    char *TargetName = strtok((char*)args, " "); //get entered name
+    if (!TargetName) //if no name entered use target
+    {
+        player = getSelectedPlayer();
+        if (player) //prevent crash with creature as target
+        {
+            name = player->GetName();
+            normalizePlayerName(name);
+        }
+    }
+    else // if name entered
+    {
+        name = TargetName;
+        normalizePlayerName(name);
+        player = objmgr.GetPlayer(name.c_str()); //get player by name
+    }
+
+    if (!player)
+    {
+        SendSysMessage(LANG_COMMAND_FREEZE_WRONG);
+        return true;
+    }
+
+    if (player == m_session->GetPlayer())
+    {
+        SendSysMessage(LANG_COMMAND_FREEZE_ERROR);
+        return true;
+    }
+
+    //effect
+    if (player && player != m_session->GetPlayer())
+    {
+        PSendSysMessage(LANG_COMMAND_FREEZE,name.c_str());
+
+        //stop combat + make player unattackable + duel stop + stop some spells
+        player->setFaction(35);
+        player->CombatStop();
+        if (player->IsNonMeleeSpellCasted(true))
+            player->InterruptNonMeleeSpells(true);
+        player->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+        player->SetUInt32Value(PLAYER_DUEL_TEAM, 1);
+
+        //if player class = hunter || warlock remove pet if alive
+        if ((player->getClass() == CLASS_HUNTER) || (player->getClass() == CLASS_WARLOCK))
+        {
+            if (Pet *pet = player->GetPet())
+            {
+                pet->SavePetToDB(PET_SAVE_AS_CURRENT);
+                // not let dismiss dead pet
+                if (pet && pet->isAlive())
+                    player->RemovePet(pet,PET_SAVE_NOT_IN_SLOT);
+            }
+        }
+
+        //m_session->GetPlayer()->CastSpell(player,spellID,false);
+        if (SpellEntry const *spellInfo = sSpellStore.LookupEntry(9454))
+            Aura::TryCreate(spellInfo, player, player);
+
+        //save player
+        player->SaveToDB();
+    }
+    return true;
+}
+
+bool ChatHandler::HandleUnFreezeCommand(char *args)
+{
+    std::string name;
+    Player *player;
+    char *TargetName = strtok((char*)args, " "); //get entered name
+    if (!TargetName) //if no name entered use target
+    {
+        player = getSelectedPlayer();
+        if (player) //prevent crash with creature as target
+            name = player->GetName();
+    }
+
+    else // if name entered
+    {
+        name = TargetName;
+        normalizePlayerName(name);
+        player = objmgr.GetPlayer(name.c_str()); //get player by name
+    }
+
+    //effect
+    if (player)
+    {
+        PSendSysMessage(LANG_COMMAND_UNFREEZE,name.c_str());
+
+        //Reset player faction + allow combat + allow duels
+        player->setFactionForRace(player->getRace());
+        player->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+
+        //allow movement and spells
+        player->RemoveAurasDueToSpell(9454);
+
+        //save player
+        player->SaveToDB();
+    }
+
+    if (!player)
+    {
+        if (TargetName)
+        {
+            //check for offline players
+            QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT characters.guid FROM characters WHERE characters.name = '%s'",name.c_str());
+            if (!result)
+            {
+                SendSysMessage(LANG_COMMAND_FREEZE_WRONG);
+                return true;
+            }
+            //if player found: delete his freeze aura
+            Field *fields=result->Fetch();
+            uint64 pguid = fields[0].GetUInt64();
+
+            CharacterDatabase.PQuery("DELETE FROM character_aura WHERE character_aura.spell = 9454 AND character_aura.guid = '%u'",pguid);
+            PSendSysMessage(LANG_COMMAND_UNFREEZE,name.c_str());
+            return true;
+        }
+        else
+        {
+            SendSysMessage(LANG_COMMAND_FREEZE_WRONG);
+            return true;
+        }
+    }
+
+    return true;
+}
+
+bool ChatHandler::HandleListFreezeCommand(char * /*args*/)
+{
+    //Get names from DB
+    QueryResult_AutoPtr result = CharacterDatabase.Query("SELECT characters.name FROM characters LEFT JOIN character_aura ON (characters.guid = character_aura.guid) WHERE character_aura.spell = 9454");
+    if (!result)
+    {
+        SendSysMessage(LANG_COMMAND_NO_FROZEN_PLAYERS);
+        return true;
+    }
+    //Header of the names
+    PSendSysMessage(LANG_COMMAND_LIST_FREEZE);
+
+    //Output of the results
+    do
+    {
+        Field *fields = result->Fetch();
+        std::string fplayers = fields[0].GetCppString();
+        PSendSysMessage(LANG_COMMAND_FROZEN_PLAYERS,fplayers.c_str());
+    } while (result->NextRow());
+
+    return true;
+}
+
Сообщение # 1 написано 15.09.2010 в 11:23
Pionerjkee
Капрал
на мангосе фриз можно заменить командой .aura например ид фриза 9454 или тупо лёрн спел, а снимать .unaura 9454

+ тыкнул)

Сообщение # 2 написано 15.09.2010 в 13:54
MaRaT_NegaTiV
Скаут
Как я знаю аура: .aura 9454 снимается после смерти!
так же как и .aura 47591(глыба - как мага)

НО... Лучше всего идёт .aura 31797 (самоизгнание) короче делает бессмертным и запрещает все действия. т.е. игрока нельзя убить и он ничего сам юзать неможет!

Сообщение # 3 написано 08.05.2011 в 14:01
wowslavikwow
Рыцарь
пля... полазил бы я тут и нашел бы патч xD я его с тринити сам тоже перписывал.

Добавлено (11.05.2011, 19:40)
---------------------------------------------
Нужно еще с базы тринити слямзить вот эти тексты

Code
+    LANG_COMMAND_FREEZE                 = 72,
+    LANG_COMMAND_UNFREEZE               = 73,
+    LANG_COMMAND_LIST_FREEZE            = 74,
+    LANG_COMMAND_FROZEN_PLAYERS         = 75,

Знаю html, css, JavaScript, PHP, несколько лет углубленно учу C, C++
ЛУЧШИЙ ЧАТ Speed-Chat.RU
Сообщение # 4 написано 11.05.2011 в 19:40
ph3n
Developer
Данная тема была перемещена из раздела Патчи в ядро MaNGOS.
Причина перемещения: устарело

Переместил: ph3n.
Сообщение # 5 написано 15.10.2012 в 16:44
  • Страница 1 из 1
  • 1
Поиск: