Podrobnosti:
Kdyz bude odstranen account, smazou se i jeho poznamky. Pokud ovsem smazete postavu, poznamky zustavaji.
Je pridano 5 prikazu:
.notes add [postava] "poznamka"
Prida poznamku k postave [postava]. Poznamka musi byt v uvozovkach.
.notes account [accname]
Zobrazi vsechny poznamky k accountu [accname]. Da se vyuzit jen v pripade, ze na accountu uz neni zadna postava nebo v pripade smazane postavy, u ktere chcete zjistit poznamky.
.notes view [postava]
Zobrazi poznamky, ktere ma account od [postava] podle toho, k jake postave byly pridany.
.notes clear account [accname]
Odstrani vsechny poznamky k accountu [accname].
.notes clear character [postava]
Odstrani vsechny poznamky k postave [postava].
Core side:
Spoiler
diff --git a/src/game/AccountMgr.cpp b/src/game/AccountMgr.cpp
index 2cdd146..eb2877d 100644
--- a/src/game/AccountMgr.cpp
+++ b/src/game/AccountMgr.cpp
@@ -81,6 +81,7 @@ AccountOpResult AccountMgr::DeleteAccount(uint32 accid)
}
// table realm specific but common for all characters of account for realm
+ CharacterDatabase.PExecute("DELETE FROM player_notes WHERE id = '%u'",accid);
CharacterDatabase.PExecute("DELETE FROM character_tutorial WHERE account = '%u'",accid);
loginDatabase.BeginTransaction();
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index 1047447..1e0f7c9 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -599,8 +599,28 @@ ChatCommand * ChatHandler::getCommandTable()
{ NULL, 0, false, NULL, "", NULL }
};
+ //prikaz .notes -- BY BRSEKER
+ static ChatCommand notesClrCommandTable[] =
+ {
+ { "account", SEC_ADMINISTRATOR, true , &ChatHandler::HandleNotesClearAccCommand, "", NULL },
+ { "character", SEC_ADMINISTRATOR, true , &ChatHandler::HandleNotesClearCharCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
+ //prikaz .notes -- BY BRSEKER
+ static ChatCommand notesCommandTable[] =
+ {
+ { "add", SEC_MODERATOR, true , &ChatHandler::HandleNotesAddCommand, "", NULL },
+ { "account", SEC_GAMEMASTER, true , &ChatHandler::HandleNotesAccountCommand, "", NULL },
+ { "view", SEC_MODERATOR, true , &ChatHandler::HandleNotesViewCommand, "", NULL },
+ { "clear", SEC_ADMINISTRATOR, true , NULL, "", notesClrCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
static ChatCommand commandTable[] =
{
+ //prikaz .notes -- BY BRSEKER
+ { "notes", SEC_GAMEMASTER, true , NULL, "", notesCommandTable },
{ "account", SEC_PLAYER, true, NULL, "", accountCommandTable },
{ "gm", SEC_MODERATOR, true, NULL, "", gmCommandTable },
{ "npc", SEC_MODERATOR, false, NULL, "", npcCommandTable },
diff --git a/src/game/Chat.h b/src/game/Chat.h
index 88c24e9..f2a9f69 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -98,6 +98,13 @@ class ChatHandler
ChatCommand* getCommandTable();
+ //prikaz .notes -- BY BRSEKER
+ bool HandleNotesViewCommand(const char* args);
+ bool HandleNotesAddCommand(const char* args);
+ bool HandleNotesClearCharCommand(const char* args);
+ bool HandleNotesClearAccCommand(const char* args);
+ bool HandleNotesAccountCommand(const char* args);
+
bool HandleAccountCommand(const char* args);
bool HandleAccountCharactersCommand(const char* args);
bool HandleAccountCreateCommand(const char* args);
@@ -547,6 +554,7 @@ class ChatHandler
bool LookupPlayerSearchCommand(QueryResult* result, int32 limit);
bool HandleBanListHelper(QueryResult* result);
bool HandleBanHelper(BanMode mode,char const* args);
+ bool HandleNotesClearHelper(uint32 ClearMode,char const* args); //prikaz .notes -- BY BRSEKER
bool HandleBanInfoHelper(uint32 accountid, char const* accountname);
bool HandleUnBanHelper(BanMode mode,char const* args);
void HandleCharacterLevel(Player* player, uint64 player_guid, uint32 oldlevel, uint32 newlevel);
diff --git a/src/game/Language.h b/src/game/Language.h
index d845f37..81ba10c 100644
--- a/src/game/Language.h
+++ b/src/game/Language.h
@@ -21,6 +21,17 @@
enum MangosStrings
{
+ //prikaz .notes -- BY BRSEKER
+ LANG_NOTES_VYPIS = 15030,
+ LANG_NOTES_RADEK = 15031,
+ LANG_NOTES_NO_NOTES = 15032,
+ LANG_NOTES_ADDED = 15033,
+ LANG_NOTES_CLEAR_CHAR = 15034,
+ LANG_NOTES_CLEAR_ACC = 15035,
+ LANG_NOTES_SERAZENI = 15036,
+ LANG_NOTES_SERAZENI_ACC = 15037,
+ LANG_NOTES_RADEK_ACC = 15038,
+
// for chat commands
LANG_SELECT_CHAR_OR_CREATURE = 1,
LANG_SELECT_CREATURE = 2,
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index e9e77ff..5a7cbb0 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -6471,3 +6471,178 @@ bool ChatHandler::HandleModifyGenderCommand(const char *args)
return true;
}
+
+//prikaz .notes -- BY BRSEKER
+bool ChatHandler::HandleNotesViewCommand(const char* args)
+{
+ if(!*args)
+ return false;
+
+ Player* target;
+ uint64 target_guid;
+ std::string target_name;
+ if (!extractPlayerTarget((char*)args,&target,&target_guid,&target_name))
+ {
+ PSendSysMessage(LANG_PLAYER_NOT_FOUND, target_name.c_str());
+ return false;
+ }
+
+ uint32 account_id = sObjectMgr.GetPlayerAccountIdByGUID(target_guid);
+ std::string accname;
+ sAccountMgr.GetName(account_id,accname);
+
+ QueryResult *result;
+ result = CharacterDatabase.PQuery("SELECT postava,pridal,poznamka FROM player_notes WHERE id = '%u'", account_id);
+
+ if(result)
+ {
+ PSendSysMessage(LANG_NOTES_VYPIS, accname.c_str());
+ SendSysMessage("========================");
+ PSendSysMessage(LANG_NOTES_SERAZENI);
+ do
+ {
+ Field *fields = result->Fetch();
+ PSendSysMessage(LANG_NOTES_RADEK, fields[0].GetString(),fields[1].GetString(),fields[2].GetString());
+ } while(result->NextRow());
+ SendSysMessage("========================");
+ delete result;
+ return true;
+ }
+ else
+ {
+ PSendSysMessage(LANG_NOTES_NO_NOTES,accname.c_str());
+ return true;
+ }
+}
+
+bool ChatHandler::HandleNotesAddCommand(const char* args)
+{
+ if(!*args)
+ return false;
+
+ Player* target;
+ uint64 target_guid;
+ std::string target_name;
+ if(!extractPlayerTarget(*args!='"' ? (char*)args : NULL, &target,&target_guid,&target_name))
+ {
+ PSendSysMessage(LANG_PLAYER_NOT_FOUND, target_name.c_str());
+ return false;
+ }
+
+ char* tailStr = *args!='"' ? strtok(NULL, "") : (char*)args;
+ if(!tailStr)
+ return false;
+
+ char* noteStr = extractQuotedArg(tailStr);
+ if(!noteStr)
+ return false;
+
+ uint32 account_id = sObjectMgr.GetPlayerAccountIdByGUID(target_guid);
+ std::string accname;
+ sAccountMgr.GetName(account_id,accname);
+
+ CharacterDatabase.PExecute("INSERT INTO player_notes(id,char_guid,postava,poznamka,pridal) VALUES ('%u', '%u', '%s', '%s', '%s')", account_id, target_guid, target_name.c_str(), noteStr, m_session->GetPlayerName());
+
+ PSendSysMessage(LANG_NOTES_ADDED,accname.c_str());
+ return true;
+}
+
+bool ChatHandler::HandleNotesClearAccCommand(const char* args)
+{
+ return HandleNotesClearHelper(1,args);
+}
+
+bool ChatHandler::HandleNotesClearCharCommand(const char* args)
+{
+ return HandleNotesClearHelper(2,args);
+}
+
+bool ChatHandler::HandleNotesClearHelper(uint32 ClearMode, const char* args)
+{
+ if(!*args)
+ return false;
+
+ std::string AccOrChar = (char*)args;
+
+ switch(ClearMode)
+ {
+ case 1:
+ if (sAccountMgr.GetId(AccOrChar) == 0)
+ {
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,AccOrChar.c_str());
+ return false;
+ }
+ else
+ {
+ CharacterDatabase.PExecute("DELETE FROM player_notes WHERE id = '%u'", sAccountMgr.GetId(AccOrChar));
+ PSendSysMessage(LANG_NOTES_CLEAR_ACC, AccOrChar.c_str());
+ return true;
+ }
+ break;
+
+ case 2:
+ Player* target;
+ uint64 target_guid;
+ std::string target_name;
+ if (!extractPlayerTarget((char*)args,&target,&target_guid,&target_name))
+ {
+ PSendSysMessage(LANG_PLAYER_NOT_FOUND, target_name.c_str());
+ return false;
+ }
+ else
+ {
+ CharacterDatabase.PExecute("DELETE FROM player_notes WHERE char_guid = '%u'", target_guid);
+ PSendSysMessage(LANG_NOTES_CLEAR_CHAR, AccOrChar.c_str());
+ return true;
+ }
+ break;
+ }
+
+ return true;
+}
+
+bool ChatHandler::HandleNotesAccountCommand(const char* args)
+{
+ if(!*args)
+ return false;
+
+ std::string account = (char*)args;
+
+ if (sAccountMgr.GetId(account) == 0)
+ {
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account.c_str());
+ return false;
+ }
+ else
+ {
+ QueryResult *result;
+ result = CharacterDatabase.PQuery("SELECT postava,pridal,poznamka,char_guid FROM player_notes WHERE id = '%u'",sAccountMgr.GetId(account));
+
+ if(result)
+ {
+ PSendSysMessage(LANG_NOTES_VYPIS, account.c_str());
+ SendSysMessage("========================");
+ PSendSysMessage(LANG_NOTES_SERAZENI_ACC);
+ do
+ {
+ Field *fields = result->Fetch();
+ std::string smazana;
+ std::string name = fields[3].GetString();
+ if(!normalizePlayerName(name))
+ smazana = "Ne";
+ else
+ smazana = "Ano";
+
+ PSendSysMessage(LANG_NOTES_RADEK_ACC, fields[0].GetString(),fields[1].GetString(),fields[2].GetString(),smazana.c_str());
+ } while(result->NextRow());
+ SendSysMessage("========================");
+ delete result;
+ return true;
+ }
+ else
+ {
+ PSendSysMessage(LANG_NOTES_NO_NOTES,account.c_str());
+ return true;
+ }
+ }
+}Databaze side:
Spoiler
Do mangos DB:
Do characters DB:
INSERT INTO command(name,security,help) VALUES
('notes add', 1, 'Syntax: .notes add [postava] "note"
Prida k postave [postava] poznamku "note". Poznamka musi byt v uvozovkach.'),
('notes view', 1, 'Syntax: .notes view [postava]
Zobrazi poznamky k accountu od postavy [postava] podle toho, k jake postave byly pridany.'),
('notes clear account', 3, 'Syntax: .notes clear account [accname]
Odstrani vsechny poznamky k accountu [accname].'),
('notes clear character', 3, 'Syntax: .notes clear character [postava]
Odstrani vsechny poznamky k postave [postava].'),
('notes account', 1, 'Syntax: .notes account [accname]
Zobrazi vsechny poznamky k accountu [accname]. Vyuzije se pouze v pripade smazane postavy nebo, ze ne acc uz zadna postava nezbyla.');
INSERT INTO mangos_string(entry,content_default) VALUES (15030,'Poznamky k accountu %s:'), (15031,'| %s | %s | %s'), (15032,'K accountu %s jeste nebyly zapsany zadne poznamky.'), (15033,'Poznamka k accountu %s pridana.'), (15034, 'Poznamky k postave %s smazany.'), (15035, 'Poznamky k accountu %s smazany.'), (15036, '| Postava | Pridal | Poznamka'), (15037, '| Postava | Pridal | Poznamka | Existuje postava?'), (15038,'| %s | %s | %s | %s');
Do characters DB:
CREATE TABLE `player_notes` ( `id` int(10) NOT NULL COMMENT 'ID Accountu', `char_guid` int(10) NOT NULL, `postava` varchar(10) NOT NULL, `poznamka` text NOT NULL COMMENT 'Poznamka', `pridal` varchar(50) NOT NULL COMMENT 'Jmeno GM ktery pridal poznamku' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Poznamky ke hracum'
Prikaz jsem ruzne testoval, ale urcite tam budou chyby nebo nejaky podrobnosti na doladeni, proto bych poprosil hlavne bLumu a samozrejme i ostatni programatory o kritiku
Tento příspěvek byl upraven uživatelem brseker: 17.červen 2010, 19:39















