|
Архив - только для чтения |
Модератор форума: andycrowz |
Форум Корзина форума Корзина команда заморозки (взятая с тринити) |
команда заморозки |
.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
|
Как я знаю аура: .aura 9454 снимается после смерти!
так же как и .aura 47591(глыба - как мага) НО... Лучше всего идёт .aura 31797 (самоизгнание) короче делает бессмертным и запрещает все действия. т.е. игрока нельзя убить и он ничего сам юзать неможет!
Сообщение # 3 написано 08.05.2011 в 14:01
|
пля... полазил бы я тут и нашел бы патч 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,
Сообщение # 4 написано 11.05.2011 в 19:40
|
Данная тема была перемещена из раздела Патчи в ядро MaNGOS.
Причина перемещения: устарело Переместил: ph3n.
Сообщение # 5 написано 15.10.2012 в 16:44
|
| |||
| |||