本文整理汇总了C++中SetSentErrorMessage函数的典型用法代码示例。如果您正苦于以下问题:C++ SetSentErrorMessage函数的具体用法?C++ SetSentErrorMessage怎么用?C++ SetSentErrorMessage使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SetSentErrorMessage函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PSendSysMessage
bool ChatHandler::HandlePlayerbotMainTankCommand(const char *args)
{
uint64 guid = 0;
uint64 pGuid = 0;
char *charname ;
Group *group = m_session->GetPlayer()->GetGroup();
if (group == NULL) {
PSendSysMessage("Must be in a group to set a main tank.");
SetSentErrorMessage(true);
return false;
}
QueryResult result = CharacterDatabase.PQuery("SELECT memberGuid FROM group_member WHERE memberFlags='%u' AND guid = '%u'",MEMBER_FLAG_MAINTANK, group->GetGUID());
if(result)
{
pGuid = MAKE_NEW_GUID(result->Fetch()->GetInt32(),0,HIGHGUID_PLAYER);
}
// if no arguments are passed in, just say who the current main tank is
if(!*args) {
if (pGuid>0) {
Player *pPlayer = sObjectMgr->GetPlayer(pGuid);
if (pPlayer && pPlayer->isAlive()){
PSendSysMessage("Main tank is %s.", pPlayer->GetName());
return true;
}
}
PSendSysMessage("Currently there is no main tank. ");
return true;
} else {
charname = strtok ((char*)args, " ");
std::string charnameStr = charname;
guid = sObjectMgr->GetPlayerGUIDByName(charnameStr.c_str());
// clear if same player
if (pGuid==guid) {
group->SetGroupMemberFlag(guid, false, MEMBER_FLAG_MAINTANK);
PSendSysMessage("Main tank has been cleared. ");
return true;
}
if (m_session->GetPlayer()->GetGroup()->IsMember(guid)) {
group->SetGroupMemberFlag(pGuid,false, MEMBER_FLAG_MAINTANK); // clear old one
group->SetGroupMemberFlag(guid, true, MEMBER_FLAG_MAINTANK); // set new one
Player *pPlayer = sObjectMgr->GetPlayer(guid);
if (pPlayer->IsInWorld())
PSendSysMessage("Main tank is %s.", pPlayer->GetName());
else
PSendSysMessage("Player is not online.");
} else {
PSendSysMessage("Player is not in your group.");
}
}
return true;
}
示例2: while
bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, std::string& fullcmd)
{
char const* oldtext = text;
std::string cmd = "";
while (*text != ' ' && *text != '\0')
{
cmd += *text;
++text;
}
while (*text == ' ') ++text;
for (uint32 i = 0; table[i].Name != NULL; ++i)
{
if (!hasStringAbbr(table[i].Name, cmd.c_str()))
continue;
bool match = false;
if (strlen(table[i].Name) > cmd.length())
{
for (uint32 j = 0; table[j].Name != NULL; ++j)
{
if (!hasStringAbbr(table[j].Name, cmd.c_str()))
continue;
if (strcmp(table[j].Name, cmd.c_str()) != 0)
continue;
else
{
match = true;
break;
}
}
}
if (match)
continue;
if (table[i].Name[0] != '\0' && table[i].Name)
{
fullcmd += table[i].Name;
fullcmd += " ";
}
// select subcommand from child commands list
if (table[i].ChildCommands != NULL)
{
if (!ExecuteCommandInTable(table[i].ChildCommands, text, fullcmd))
{
if (text && text[0] != '\0')
SendSysMessage(LANG_NO_SUBCMD);
else
SendSysMessage(LANG_CMD_SYNTAX);
ShowHelpForCommand(table[i].ChildCommands, text);
}
return true;
}
// must be available and have handler
if (!table[i].Handler || !isAvailable(table[i]))
continue;
SetSentErrorMessage(false);
// table[i].Name == "" is special case: send original command to handler
const char* aText = table[i].Name[0] != '\0' ? text : oldtext;
if (aText)
fullcmd += aText;
if ((table[i].Handler)(this, aText))
{
// pussywizard: ignore logging spect command
std::string fc = fullcmd;
if (fc.size() >= 5)
std::transform(fc.begin(), fc.end(), fc.begin(), ::tolower);
bool ignore = fc.size() >= 5 && fc.substr(0,5) == "spect";
if (!AccountMgr::IsPlayerAccount(table[i].SecurityLevel) && !ignore)
{
// chat case
if (m_session)
{
Player* p = m_session->GetPlayer();
uint64 sel_guid = p->GetTarget();
sLog->outCommand(m_session->GetAccountId(), "Command: .%s [Player: %s (Account: %u) X: %f Y: %f Z: %f Map: %u Selected %s: %s (GUID: %u)]",
fullcmd.c_str(), p->GetName().c_str(), m_session->GetAccountId(), p->GetPositionX(), p->GetPositionY(), p->GetPositionZ(), p->GetMapId(),
GetLogNameForGuid(sel_guid), (p->GetSelectedUnit()) ? p->GetSelectedUnit()->GetName().c_str() : "", GUID_LOPART(sel_guid));
}
}
}
// some commands have custom error messages. Don't send the default one in these cases.
else if (!HasSentErrorMessage())
{
if (!table[i].Help.empty())
SendSysMessage(table[i].Help.c_str());
else
SendSysMessage(LANG_CMD_SYNTAX);
}
return true;
//.........这里部分代码省略.........
示例3: SendSysMessage
//Teleport to Player
bool ChatHandler::HandleAppearCommand(const char* args)
{
Player* target;
uint64 target_guid;
std::string target_name;
if (!extractPlayerTarget((char*)args,&target,&target_guid,&target_name))
return false;
Player* _player = m_session->GetPlayer();
if (target == _player || target_guid == _player->GetGUID())
{
SendSysMessage(LANG_CANT_TELEPORT_SELF);
SetSentErrorMessage(true);
return false;
}
if (target)
{
// check online security
if (HasLowerSecurity(target, 0))
return false;
std::string chrNameLink = playerLink(target_name);
Map* cMap = target->GetMap();
if (cMap->IsBattlegroundOrArena())
{
// only allow if gm mode is on
if (!_player->isGameMaster())
{
PSendSysMessage(LANG_CANNOT_GO_TO_BG_GM,chrNameLink.c_str());
SetSentErrorMessage(true);
return false;
}
// if both players are in different bgs
else if (_player->GetBattlegroundId() && _player->GetBattlegroundId() != target->GetBattlegroundId())
_player->LeaveBattleground(false); // Note: should be changed so _player gets no Deserter debuff
// all's well, set bg id
// when porting out from the bg, it will be reset to 0
_player->SetBattlegroundId(target->GetBattlegroundId(), target->GetBattlegroundTypeId());
// remember current position as entry point for return at bg end teleportation
if (!_player->GetMap()->IsBattlegroundOrArena())
_player->SetBattlegroundEntryPoint();
}
else if (cMap->IsDungeon())
{
// we have to go to instance, and can go to player only if:
// 1) we are in his group (either as leader or as member)
// 2) we are not bound to any group and have GM mode on
if (_player->GetGroup())
{
// we are in group, we can go only if we are in the player group
if (_player->GetGroup() != target->GetGroup())
{
PSendSysMessage(LANG_CANNOT_GO_TO_INST_PARTY,chrNameLink.c_str());
SetSentErrorMessage(true);
return false;
}
}
else
{
// we are not in group, let's verify our GM mode
if (!_player->isGameMaster())
{
PSendSysMessage(LANG_CANNOT_GO_TO_INST_GM,chrNameLink.c_str());
SetSentErrorMessage(true);
return false;
}
}
// if the player or the player's group is bound to another instance
// the player will not be bound to another one
InstancePlayerBind *pBind = _player->GetBoundInstance(target->GetMapId(), target->GetDifficulty(cMap->IsRaid()));
if (!pBind)
{
Group *group = _player->GetGroup();
// if no bind exists, create a solo bind
InstanceGroupBind *gBind = group ? group->GetBoundInstance(target) : NULL; // if no bind exists, create a solo bind
if (!gBind)
if (InstanceSave *save = sInstanceSaveMgr->GetInstanceSave(target->GetInstanceId()))
_player->BindToInstance(save, !save->CanReset());
}
if (cMap->IsRaid())
_player->SetRaidDifficulty(target->GetRaidDifficulty());
else
_player->SetDungeonDifficulty(target->GetDungeonDifficulty());
}
PSendSysMessage(LANG_APPEARING_AT, chrNameLink.c_str());
// stop flight if need
if (_player->isInFlight())
{
_player->GetMotionMaster()->MovementExpired();
_player->CleanupAfterTaxiFlight();
}
// save only in non-flight case
//.........这里部分代码省略.........
示例4: getSelectedCreature
bool ChatHandler::HandleCreatePetCommand(const char* /*args*/)
{
Player* player = m_session->GetPlayer();
Creature* creatureTarget = getSelectedCreature();
if (!creatureTarget || creatureTarget->isPet() || creatureTarget->GetTypeId() == TYPEID_PLAYER)
{
PSendSysMessage(LANG_SELECT_CREATURE);
SetSentErrorMessage(true);
return false;
}
CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(creatureTarget->GetEntry());
// Creatures with family 0 crashes the server
if (cInfo->family == 0)
{
PSendSysMessage("This creature cannot be tamed. (family id: 0).");
SetSentErrorMessage(true);
return false;
}
if (player->GetPetGUID())
{
PSendSysMessage("You already have a pet");
SetSentErrorMessage(true);
return false;
}
// Everything looks OK, create new pet
Pet* pet = new Pet(player, HUNTER_PET);
if (!pet)
return false;
if (!pet->CreateBaseAtCreature(creatureTarget))
{
delete pet;
PSendSysMessage("Error 1");
return false;
}
creatureTarget->setDeathState(JUST_DIED);
creatureTarget->RemoveCorpse();
creatureTarget->SetHealth(0); // just for nice GM-mode view
pet->SetUInt64Value(UNIT_FIELD_CREATEDBY, player->GetGUID());
pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, player->getFaction());
if (!pet->InitStatsForLevel(creatureTarget->getLevel()))
{
sLog->outError("InitStatsForLevel() in EffectTameCreature failed! Pet deleted.");
PSendSysMessage("Error 2");
delete pet;
return false;
}
// prepare visual effect for levelup
pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()-1);
pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
// this enables pet details window (Shift+P)
pet->InitPetCreateSpells();
pet->SetFullHealth();
pet->GetMap()->Add(pet->ToCreature());
// visual effect for levelup
pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel());
player->SetMinion(pet, true);
pet->SavePetToDB(PET_SAVE_AS_CURRENT);
player->PetSpellInitialize();
return true;
}
示例5: extractGuidFromLink
bool ChatHandler::HandleGPSCommand(const char* args)
{
WorldObject *obj = NULL;
if (*args)
{
uint64 guid = extractGuidFromLink((char*)args);
if (guid)
obj = (WorldObject*)ObjectAccessor::GetObjectByTypeMask(*m_session->GetPlayer(),guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT);
if (!obj)
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
}
else
{
obj = getSelectedUnit();
if (!obj)
{
SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE);
SetSentErrorMessage(true);
return false;
}
}
CellPair cell_val = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
Cell cell(cell_val);
uint32 zone_id, area_id;
obj->GetZoneAndAreaId(zone_id,area_id);
MapEntry const* mapEntry = sMapStore.LookupEntry(obj->GetMapId());
AreaTableEntry const* zoneEntry = GetAreaEntryByAreaID(zone_id);
AreaTableEntry const* areaEntry = GetAreaEntryByAreaID(area_id);
float zone_x = obj->GetPositionX();
float zone_y = obj->GetPositionY();
Map2ZoneCoordinates(zone_x,zone_y,zone_id);
Map const *map = obj->GetMap();
float ground_z = map->GetHeight(obj->GetPositionX(), obj->GetPositionY(), MAX_HEIGHT);
float floor_z = map->GetHeight(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ());
GridPair p = Trinity::ComputeGridPair(obj->GetPositionX(), obj->GetPositionY());
// 63? WHY?
int gx = 63 - p.x_coord;
int gy = 63 - p.y_coord;
uint32 have_map = Map::ExistMap(obj->GetMapId(),gx,gy) ? 1 : 0;
uint32 have_vmap = Map::ExistVMap(obj->GetMapId(),gx,gy) ? 1 : 0;
if(have_vmap)
{
if(map->IsOutdoors(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ()))
PSendSysMessage("You are outdoors");
else
PSendSysMessage("You are indoors");
}
else PSendSysMessage("no VMAP available for area info");
PSendSysMessage(LANG_MAP_POSITION,
obj->GetMapId(), (mapEntry ? mapEntry->name[GetSessionDbcLocale()] : "<unknown>"),
zone_id, (zoneEntry ? zoneEntry->area_name[GetSessionDbcLocale()] : "<unknown>"),
area_id, (areaEntry ? areaEntry->area_name[GetSessionDbcLocale()] : "<unknown>"),
obj->GetPhaseMask(),
obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), obj->GetOrientation(),
cell.GridX(), cell.GridY(), cell.CellX(), cell.CellY(), obj->GetInstanceId(),
zone_x, zone_y, ground_z, floor_z, have_map, have_vmap);
sLog->outDebug("Player %s GPS call for %s '%s' (%s: %u):",
m_session ? GetNameLink().c_str() : GetTrinityString(LANG_CONSOLE_COMMAND),
(obj->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), obj->GetName(),
(obj->GetTypeId() == TYPEID_PLAYER ? "GUID" : "Entry"), (obj->GetTypeId() == TYPEID_PLAYER ? obj->GetGUIDLow(): obj->GetEntry()));
sLog->outDebug(GetTrinityString(LANG_MAP_POSITION),
obj->GetMapId(), (mapEntry ? mapEntry->name[sWorld->GetDefaultDbcLocale()] : "<unknown>"),
zone_id, (zoneEntry ? zoneEntry->area_name[sWorld->GetDefaultDbcLocale()] : "<unknown>"),
area_id, (areaEntry ? areaEntry->area_name[sWorld->GetDefaultDbcLocale()] : "<unknown>"),
obj->GetPhaseMask(),
obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), obj->GetOrientation(),
cell.GridX(), cell.GridY(), cell.CellX(), cell.CellY(), obj->GetInstanceId(),
zone_x, zone_y, ground_z, floor_z, have_map, have_vmap);
LiquidData liquid_status;
ZLiquidStatus res = map->getLiquidStatus(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), MAP_ALL_LIQUIDS, &liquid_status);
if (res)
{
PSendSysMessage(LANG_LIQUID_STATUS, liquid_status.level, liquid_status.depth_level, liquid_status.type, res);
}
return true;
}
示例6: strtol
// Mysteria Star
bool ChatHandler::HandleMarkCommand(char* args)
{
uint32 itemId = 38186;
int32 count;
// ak nieje parameter, pocet je defaultne 1
if (!*args)
count = 1;
else
count = strtol(args, NULL, 10);
// ak je vlozena hodnota chybna, vrati 0
if (count == 0)
return false;
// Ziskanie targetu hraca
Player* pl = m_session->GetPlayer();
Player* plTarget = getSelectedPlayer();
// Ak nieje target, da Eventerovi samotnemu.
//TODO: ma to vobec vyznam?
if (!plTarget)
plTarget = pl;
// Sprava do Logu (len pri detajlnom log-ovani)
sLog.outDetail(GetMangosString(LANG_ADDITEM), itemId, count);
// Snaha vytvorit objekt (malo by sa podarit ale aj motyka vystreli...)
ItemPrototype const *pProto = ObjectMgr::GetItemPrototype(itemId);
if (!pProto)
{
PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, itemId);
SetSentErrorMessage(true);
return false;
}
// odobratie itemu (zaporny pocet)
if (count < 0)
{
if (!plTarget->HasItemCount(itemId, -count, false)) // itemId, count, inBankAlso
{
ChatHandler(pl->GetSession()).PSendSysMessage("You do not have enough Mysteria Star!");
pl->GetSession()->SendNotification("You do not have enough Mysteria Star!");
return false;
}
plTarget->DestroyItemCount(itemId, -count, true, false);
PSendSysMessage(LANG_REMOVEITEM, itemId, -count, GetNameLink(plTarget).c_str());
return true;
}
// Pridanie itemu
uint32 noSpaceForCount = 0;
// kontrola miesta v bagu a najdenie miesta
ItemPosCountVec dest;
uint8 msg = plTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, count, &noSpaceForCount);
if (msg != EQUIP_ERR_OK) // convert to possible store amount
count -= noSpaceForCount;
if (count == 0 || dest.empty()) // can't add any
{
PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
SetSentErrorMessage(true);
return false;
}
Item* item = plTarget->StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
// Odstranenie bindovania ak gm si da item sam aby ho mohol tradeovat
//
// TODO ma to vyznam?
/*
if(pl==plTarget)
for(ItemPosCountVec::const_iterator itr = dest.begin(); itr != dest.end(); ++itr)
if(Item* item1 = pl->GetItemByPos(itr->pos))
item1->SetBinding( false );
*/
// Pridanie itemu
if (count > 0 && item)
{
pl->SendNewItem(item, count, false, true);
if (pl != plTarget)
plTarget->SendNewItem(item, count, true, false);
}
// Chyba pri nedostatku miesta
if (noSpaceForCount > 0)
PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
return true;
}
示例7: SendSysMessage
bool ChatHandler::Additem(int itemid, int count, int type, bool remplacement)
{
Player* pl = m_session->GetPlayer();
if(!pl) return false;
uint64 receiver_guid = pl->GetGUID();
int levelItem = 0;
if (type == 0)
{
int typeRecup;
QueryResult result = CharacterDatabase.PQuery("SELECT `typeRecup`, `level_item` FROM `recup_infos` WHERE name = '%s'",pl->GetName());
if (!result) return false;
Field* fields = result->Fetch();
if (!fields) return false;
typeRecup = fields[0].GetUInt32();
levelItem = fields[1].GetUInt32();
if(remplacement)
{
QueryResult result = CharacterDatabase.PQuery("SELECT `itemEpique`, `itemRare` FROM `recup_itemRemplacement` WHERE item = '%u'",itemid);
if (result)
{
Field* fields = result->Fetch();
if (fields)
{
if(typeRecup == 0 || typeRecup == 1)
itemid = fields[typeRecup].GetUInt32();
}
}
}
}
if(!levelItem)
levelItem = 200;
QueryResult result = WorldDatabase.PQuery("SELECT `ItemLevel` FROM `item_template` WHERE `entry` = '%d'",itemid);
if (!result)
return false;
if (result)
{
Field* fields = result->Fetch();
if(!fields)
return false;
if(fields)
{
int itemLevel = fields[0].GetUInt32();
if(itemLevel > levelItem)
{
return false;
}
}
}
std::string name = pl->GetName();
if(name.empty())
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
char* msgSubject;
char* msgText;
switch(type)
{
case 0 : msgSubject="Recuperation";sLog->outDetail("Recuperation");break;
case 1 : msgSubject="Achat";sLog->outDetail("Achat");break;
}
switch(type)
{
case 0 : msgText="Voici les objets de votre recuperation. Nous vous remercions d'avoir choisi Avalon";sLog->outDetail("Voici les objets de votre recuperation. Nous vous remercions d'avoir choisi Avalon");break;
case 1 : msgText="Merci pour votre achat. Bon jeu sur Avalon";sLog->outDetail("Merci pour votre achat. Bon jeu sur Avalon");break;
}
if (!msgSubject)
return false;
if (!msgText)
return false;
// msgSubject, msgText isn't NUL after prev. check
std::string subject = msgSubject;
std::string text = msgText;
// extract items
typedef std::pair<uint32,uint32> ItemPair;
typedef std::list< ItemPair > ItemPairs;
ItemPairs items;
//.........这里部分代码省略.........
示例8: strtok
bool ChatHandler::HandleAddItemToAllCommand(char* args)
{
if (!*args)
return false;
uint32 itemId = 0;
// Vyextrahovanie mena itemu
if (args[0] == '[') // [name] manual form
{
char* citemName = citemName = strtok((char*)args, "]");
if (citemName && citemName[0])
{
std::string itemName = citemName + 1;
WorldDatabase.escape_string(itemName);
QueryResult *result = WorldDatabase.PQuery("SELECT entry FROM item_template WHERE name = '%s'", itemName.c_str());
if (!result)
{
PSendSysMessage(LANG_COMMAND_COULDNOTFIND, citemName + 1);
SetSentErrorMessage(true);
return false;
}
itemId = result->Fetch()->GetUInt16();
delete result;
}
else
return false;
}
else // item_id or [name] Shift-click form |color|Hitem:item_id:0:0:0|h[name]|h|r
{
char* cId = ExtractKeyFromLink(&args, "Hitem");
if (!cId)
return false;
itemId = atol(cId);
}
// Ziskanie poctu itemov (nepovinny parameter, defaultne 1)
char* ccount = strtok(NULL, " ");
int32 countproto = 1;
if (ccount)
countproto = strtol(ccount, NULL, 10);
if (countproto == 0)
countproto = 1;
//Odrstranenie itemov sa nepovoluje
if (countproto < 0)
{
// TODO bodol by aj vypis
return false;
}
// Ziskanie typu itemu
ItemPrototype const *pProto = sObjectMgr.GetItemPrototype(itemId);
if (!pProto)
{
PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, itemId);
SetSentErrorMessage(true);
return false;
}
Player* pl = m_session->GetPlayer();
// Prechod vsetkymi hracmi servra
HashMapHolder<Player>::MapType& m = ObjectAccessor::Instance().GetPlayers();
for (HashMapHolder<Player>::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
{
int32 count = countproto;
Player* plTarget = itr->second;
//Adding items
uint32 noSpaceForCount = 0;
// check space and find places
ItemPosCountVec dest;
uint8 msg = plTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, count, &noSpaceForCount);
if (msg != EQUIP_ERR_OK) // convert to possible store amount
count -= noSpaceForCount;
if (count == 0 || dest.empty()) // can't add any
{
PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
SetSentErrorMessage(true);
continue;
}
Item* item = plTarget->StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
if (count > 0 && item)
{
pl->SendNewItem(item, count, false, true);
if (pl != plTarget)
plTarget->SendNewItem(item, count, true, false);
}
if (noSpaceForCount > 0)
PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
}
//.........这里部分代码省略.........
示例9: SendSysMessage
bool ChatHandler::HandleSetGHCommand(char* args)
{
// Vyhladanie postavy v db
std::string strargs = args;
CharacterDatabase.escape_string(strargs);
// 0 1
QueryResult* result = CharacterDatabase.PQuery("SELECT account, guid FROM characters WHERE name = '%s'", strargs.c_str());
if (!result)
{
SendSysMessage("Chyba: Hrac sa nenasiel.");
SetSentErrorMessage(true);
return false;
}
// Ziskanie ID accountu a guid postavy
Field* fields = result->Fetch();
uint32 account_id = fields[0].GetUInt32();
uint32 guid = fields[1].GetUInt32();
// Zmazanie dotazu na postavu
delete result;
// Udaje o accounte
// 0 1 2
QueryResult* result2 = LoginDatabase.PQuery("SELECT username, gmlevel, GuildHouse_comment FROM account WHERE id = '%u'", account_id);
if (!result2)
{
SendSysMessage("wtf: postava nema ziaden account ?!");
SetSentErrorMessage(true);
return false;
}
Field* fields2 = result2->Fetch();
/*
// Len pre VIP hracov
if(fields2[1].GetUInt32() != SEC_MODERATOR)
{
SendSysMessage("Chyba: Postava nie je na VIP accounte!");
SetSentErrorMessage(true);
return false;
}
*/
// Len pre tych, ktori este nemaju gh na svojom acce
if (!fields2[2].IsNULL())
{
PSendSysMessage("Chyba: Account '%s' uz ma nastaveny GH '%s' !", fields2[0].GetString(), fields2[2].GetString());
SetSentErrorMessage(true);
return false;
}
// Zmazanie dotazu na account
delete result2;
// Ziskanie guildy
// 0
QueryResult* result3 = CharacterDatabase.PQuery("SELECT name FROM guild_member JOIN guild ON guild_member.guildid = guild.guildid WHERE guild_member.guid = %u", guid);
if (!result3)
{
SendSysMessage("Chyba: Hrac nie je v guilde!");
SetSentErrorMessage(true);
return false;
}
// Nazov guildy
Field* fields3 = result3->Fetch();
std::string guildname = fields3[0].GetCppString();
LoginDatabase.escape_string(guildname);
// Zaznam do db
LoginDatabase.PExecute("UPDATE account SET GuildHouse_comment='%s' WHERE id = %u", guildname.c_str(), account_id);
PSendSysMessage("Hracovi '%s'(%u) bola nastavena guilda '%s'", strargs.c_str(), guid, fields3[0].GetString());
// Zmazanie dotazu na guildu
delete result3;
return true;
}
示例10: PSendSysMessage
bool ChatHandler::HandlePlayerbotConsoleCommand(char* args)
{
if (!sPlayerbotAIConfig.enabled)
{
PSendSysMessage("Playerbot system is currently disabled!");
SetSentErrorMessage(true);
return false;
}
if (!args || !*args)
{
sLog.outError("Usage: rndbot stats/update/reset/init/refresh/add/remove");
return false;
}
string cmd = args;
if (cmd == "reset")
{
CharacterDatabase.PExecute("delete from ai_playerbot_random_bots");
sLog.outBasic("Random bots were reset for all players");
return true;
}
else if (cmd == "stats")
{
sRandomPlayerbotMgr.PrintStats();
return true;
}
else if (cmd == "update")
{
sRandomPlayerbotMgr.UpdateAIInternal(0);
return true;
}
else if (cmd == "init" || cmd == "refresh")
{
sLog.outString("Randomizing bots for %d accounts", sPlayerbotAIConfig.randomBotAccounts.size());
BarGoLink bar(sPlayerbotAIConfig.randomBotAccounts.size());
for (list<uint32>::iterator i = sPlayerbotAIConfig.randomBotAccounts.begin(); i != sPlayerbotAIConfig.randomBotAccounts.end(); ++i)
{
uint32 account = *i;
bar.step();
if (QueryResult *results = CharacterDatabase.PQuery("SELECT guid FROM characters where account = '%u'", account))
{
do
{
Field* fields = results->Fetch();
ObjectGuid guid = ObjectGuid(fields[0].GetUInt64());
Player* bot = sObjectMgr.GetPlayer(guid, true);
if (!bot)
continue;
if (cmd == "init")
{
sLog.outDetail("Randomizing bot %s for account %u", bot->GetName(), account);
sRandomPlayerbotMgr.RandomizeFirst(bot);
}
else
{
sLog.outDetail("Refreshing bot %s for account %u", bot->GetName(), account);
bot->SetLevel(bot->getLevel() - 1);
sRandomPlayerbotMgr.IncreaseLevel(bot);
}
uint32 randomTime = urand(sPlayerbotAIConfig.minRandomBotRandomizeTime, sPlayerbotAIConfig.maxRandomBotRandomizeTime);
CharacterDatabase.PExecute("update ai_playerbot_random_bots set validIn = '%u' where event = 'randomize' and bot = '%u'",
randomTime, bot->GetGUIDLow());
CharacterDatabase.PExecute("update ai_playerbot_random_bots set validIn = '%u' where event = 'logout' and bot = '%u'",
sPlayerbotAIConfig.maxRandomBotInWorldTime, bot->GetGUIDLow());
} while (results->NextRow());
delete results;
}
}
return true;
}
else
{
list<string> messages = sRandomPlayerbotMgr.HandlePlayerbotCommand(args, NULL);
for (list<string>::iterator i = messages.begin(); i != messages.end(); ++i)
{
sLog.outString(i->c_str());
}
return true;
}
return false;
}
示例11: PSendSysMessage
bool ChatHandler::HandlePlayerbotCommand(char* args)
{
if (!(m_session->GetSecurity() > SEC_PLAYER))
{
if (botConfig.GetBoolDefault("PlayerbotAI.DisableBots", false))
{
PSendSysMessage("|cffff0000Playerbot system is currently disabled!");
SetSentErrorMessage(true);
return false;
}
}
if (!m_session)
{
PSendSysMessage("|cffff0000You may only add bots from an active session");
SetSentErrorMessage(true);
return false;
}
if (!*args)
{
PSendSysMessage("|cffff0000usage: add PLAYERNAME or remove PLAYERNAME");
SetSentErrorMessage(true);
return false;
}
// create the playerbot manager if it doesn't already exist
PlayerbotMgr* mgr = m_session->GetPlayer()->GetPlayerbotMgr();
if (!mgr)
{
mgr = new PlayerbotMgr(m_session->GetPlayer());
m_session->GetPlayer()->SetPlayerbotMgr(mgr);
}
char* cmd = strtok((char*) args, " ");
if (!cmd)
{
PSendSysMessage("|cffff0000usage: add PLAYERNAME, remove PLAYERNAME, removeall");
SetSentErrorMessage(true);
return false;
}
std::string cmdStr = cmd;
if (cmdStr == "removeall")
{
mgr->LogoutAllBots();
return true;
}
// commands that require botname
char* charname = strtok(NULL, " ");
if (!charname)
{
PSendSysMessage("|cffff0000usage: add PLAYERNAME, remove PLAYERNAME, removeall");
SetSentErrorMessage(true);
return false;
}
std::string charnameStr = charname;
if (!normalizePlayerName(charnameStr))
return false;
ObjectGuid guid = sObjectMgr.GetPlayerGuidByName(charnameStr.c_str());
if (guid == ObjectGuid() || (guid == m_session->GetPlayer()->GetObjectGuid()))
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
uint32 accountId = sObjectMgr.GetPlayerAccountIdByGUID(guid);
if (accountId != m_session->GetAccountId())
{
PSendSysMessage("|cffff0000You may only add bots from the same account.");
SetSentErrorMessage(true);
return false;
}
QueryResult* resultchar = CharacterDatabase.PQuery("SELECT COUNT(*) FROM characters WHERE online = '1' AND account = '%u'", m_session->GetAccountId());
if (resultchar)
{
Field* fields = resultchar->Fetch();
int acctcharcount = fields[0].GetUInt32();
int maxnum = botConfig.GetIntDefault("PlayerbotAI.MaxNumBots", 9);
if (!(m_session->GetSecurity() > SEC_PLAYER))
if (acctcharcount > maxnum && (cmdStr == "add" || cmdStr == "login"))
{
PSendSysMessage("|cffff0000You cannot summon anymore bots.(Current Max: |cffffffff%u)", maxnum);
SetSentErrorMessage(true);
delete resultchar;
return false;
}
delete resultchar;
}
QueryResult* resultlvl = CharacterDatabase.PQuery("SELECT level, name, race FROM characters WHERE guid = '%u'", guid.GetCounter());
if (resultlvl)
{
//.........这里部分代码省略.........
示例12: while
bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, std::string const& fullcmd)
{
char const* oldtext = text;
std::string cmd = "";
while (*text != ' ' && *text != '\0')
{
cmd += *text;
++text;
}
while (*text == ' ') ++text;
for (uint32 i = 0; table[i].Name != NULL; ++i)
{
if (!hasStringAbbr(table[i].Name, cmd.c_str()))
continue;
bool match = false;
if (strlen(table[i].Name) > cmd.length())
{
for (uint32 j = 0; table[j].Name != NULL; ++j)
{
if (!hasStringAbbr(table[j].Name, cmd.c_str()))
continue;
if (strcmp(table[j].Name, cmd.c_str()) == 0)
{
match = true;
break;
}
}
}
if (match)
continue;
// select subcommand from child commands list
if (table[i].ChildCommands != NULL)
{
if (!ExecuteCommandInTable(table[i].ChildCommands, text, fullcmd))
{
if (text[0] != '\0')
SendSysMessage(LANG_NO_SUBCMD);
else
SendSysMessage(LANG_CMD_SYNTAX);
ShowHelpForCommand(table[i].ChildCommands, text);
}
return true;
}
// must be available and have handler
if (!table[i].Handler || !isAvailable(table[i]))
continue;
SetSentErrorMessage(false);
// table[i].Name == "" is special case: send original command to handler
if ((table[i].Handler)(this, table[i].Name[0] != '\0' ? text : oldtext))
{
if (!m_session) // ignore console
return true;
Player* player = m_session->GetPlayer();
if (!AccountMgr::IsPlayerAccount(m_session->GetSecurity()))
{
uint64 guid = player->GetTarget();
uint32 areaId = player->GetAreaId();
std::string areaName = "Unknown";
std::string zoneName = "Unknown";
if (AreaTableEntry const* area = GetAreaEntryByAreaID(areaId))
{
areaName = area->area_name;
if (AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone))
zoneName = zone->area_name;
}
sLog->outCommand(m_session->GetAccountId(), "Command: %s [Player: %s (Guid: %u) (Account: %u) X: %f Y: %f Z: %f Map: %u (%s) Area: %u (%s) Zone: %s Selected %s: %s (GUID: %u)]",
fullcmd.c_str(), player->GetName().c_str(), GUID_LOPART(player->GetGUID()),
m_session->GetAccountId(), player->GetPositionX(), player->GetPositionY(),
player->GetPositionZ(), player->GetMapId(),
player->GetMap() ? player->GetMap()->GetMapName() : "Unknown",
areaId, areaName.c_str(), zoneName.c_str(), GetLogNameForGuid(guid),
(player->GetSelectedUnit()) ? player->GetSelectedUnit()->GetName().c_str() : "",
GUID_LOPART(guid));
}
}
// some commands have custom error messages. Don't send the default one in these cases.
else if (!HasSentErrorMessage())
{
if (!table[i].Help.empty())
SendSysMessage(table[i].Help.c_str());
else
SendSysMessage(LANG_CMD_SYNTAX);
}
return true;
}
return false;
//.........这里部分代码省略.........
示例13: while
bool ChatHandler::ExecuteCommandInTable(std::vector<ChatCommand> const& table, char const* text, std::string const& fullcmd)
{
char const* oldtext = text;
std::string cmd = "";
while (*text != ' ' && *text != '\0')
{
cmd += *text;
++text;
}
while (*text == ' ') ++text;
for (uint32 i = 0; i < table.size(); ++i)
{
if (!hasStringAbbr(table[i].Name, cmd.c_str()))
continue;
bool match = false;
if (strlen(table[i].Name) > cmd.length())
{
for (uint32 j = 0; j < table.size(); ++j)
{
if (!hasStringAbbr(table[j].Name, cmd.c_str()))
continue;
if (strcmp(table[j].Name, cmd.c_str()) == 0)
{
match = true;
break;
}
}
}
if (match)
continue;
// select subcommand from child commands list
if (!table[i].ChildCommands.empty())
{
if (!ExecuteCommandInTable(table[i].ChildCommands, text, fullcmd))
{
if (m_session && !m_session->HasPermission(rbac::RBAC_PERM_COMMANDS_NOTIFY_COMMAND_NOT_FOUND_ERROR))
return false;
if (text[0] != '\0')
SendSysMessage(LANG_NO_SUBCMD);
else
SendSysMessage(LANG_CMD_SYNTAX);
ShowHelpForCommand(table[i].ChildCommands, text);
}
return true;
}
// must be available and have handler
if (!table[i].Handler || !isAvailable(table[i]))
continue;
SetSentErrorMessage(false);
// table[i].Name == "" is special case: send original command to handler
if ((table[i].Handler)(this, table[i].Name[0] != '\0' ? text : oldtext))
{
if (!m_session) // ignore console
return true;
Player* player = m_session->GetPlayer();
if (!AccountMgr::IsPlayerAccount(m_session->GetSecurity()))
{
ObjectGuid guid = player->GetTarget();
uint32 areaId = player->GetAreaId();
std::string areaName = "Unknown";
std::string zoneName = "Unknown";
if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId))
{
int locale = GetSessionDbcLocale();
areaName = area->area_name[locale];
if (AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->zone))
zoneName = zone->area_name[locale];
}
sLog->outCommand(m_session->GetAccountId(), "Command: %s [Player: %s (%s) (Account: %u) X: %f Y: %f Z: %f Map: %u (%s) Area: %u (%s) Zone: %s Selected: %s (%s)]",
fullcmd.c_str(), player->GetName().c_str(), player->GetGUID().ToString().c_str(),
m_session->GetAccountId(), player->GetPositionX(), player->GetPositionY(),
player->GetPositionZ(), player->GetMapId(),
player->FindMap() ? player->FindMap()->GetMapName() : "Unknown",
areaId, areaName.c_str(), zoneName.c_str(),
(player->GetSelectedUnit()) ? player->GetSelectedUnit()->GetName().c_str() : "",
guid.ToString().c_str());
}
}
// some commands have custom error messages. Don't send the default one in these cases.
else if (!HasSentErrorMessage())
{
if (!table[i].Help.empty())
SendSysMessage(table[i].Help.c_str());
else
SendSysMessage(LANG_CMD_SYNTAX);
SetSentErrorMessage(true);
}
//.........这里部分代码省略.........
示例14: PSendSysMessage
bool ChatHandler::HandlePlayerbotCommand(char* args)
{
if (sWorld.getConfig(CONFIG_BOOL_PLAYERBOT_DISABLE))
{
PSendSysMessage("|cffff0000Playerbot system is currently disabled!");
SetSentErrorMessage(true);
return false;
}
if (!m_session)
{
PSendSysMessage("|cffff0000You may only add bots from an active session");
SetSentErrorMessage(true);
return false;
}
if (!*args)
{
PSendSysMessage("|cffff0000usage: add PLAYERNAME or remove PLAYERNAME");
SetSentErrorMessage(true);
return false;
}
char *cmd = strtok ((char *) args, " ");
char *charname = strtok (NULL, " ");
if (!cmd || !charname)
{
PSendSysMessage("|cffff0000usage: add PLAYERNAME or remove PLAYERNAME");
SetSentErrorMessage(true);
return false;
}
std::string cmdStr = cmd;
std::string charnameStr = charname;
if (!normalizePlayerName(charnameStr))
return false;
ObjectGuid guid = sObjectMgr.GetPlayerGuidByName(charnameStr.c_str());
if (guid == ObjectGuid() || (guid == m_session->GetPlayer()->GetObjectGuid()))
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
uint32 accountId = sObjectMgr.GetPlayerAccountIdByGUID(guid);
if (accountId != m_session->GetAccountId())
{
if (!sWorld.getConfig(CONFIG_BOOL_PLAYERBOT_SHAREDBOTS))
{
PSendSysMessage("|cffff0000You may only add bots from the same account.");
SetSentErrorMessage(true);
return false;
}
QueryResult *resultsocial = CharacterDatabase.PQuery("SELECT COUNT(*) FROM character_social s, characters c WHERE s.guid=c.guid AND c.online = 0 AND flags & 1 AND s.note "_LIKE_" "_CONCAT3_("'%%'","'shared'","'%%'")" AND s.friend = '%u' AND s.guid = '%u'", m_session->GetPlayer()->GetGUIDLow(), guid);
if (resultsocial)
{
Field *fields = resultsocial->Fetch();
if (fields[0].GetUInt32() == 0 && (cmdStr == "add" || cmdStr == "login"))
{
PSendSysMessage("|cffff0000You may only add bots from the same account or a friend's character that contains 'shared' in the notes on their friend list while not online.");
SetSentErrorMessage(true);
delete resultsocial;
return false;
}
}
delete resultsocial;
}
// create the playerbot manager if it doesn't already exist
PlayerbotMgr* mgr = m_session->GetPlayer()->GetPlayerbotMgr();
if (!mgr)
{
mgr = new PlayerbotMgr(m_session->GetPlayer());
m_session->GetPlayer()->SetPlayerbotMgr(mgr);
}
if (!(m_session->GetSecurity() > SEC_PLAYER))
{
int maxnum = sWorld.getConfig(CONFIG_UINT32_PLAYERBOT_MAXBOTS);
int charcount = m_session->GetPlayer()->GetPlayerbotMgr()->GetBotCount();
if (charcount >= maxnum && (cmdStr == "add" || cmdStr == "login"))
{
PSendSysMessage("|cffff0000You cannot summon anymore bots.(Current Max: |cffffffff%u)",maxnum);
SetSentErrorMessage(true);
return false;
}
}
QueryResult *resultlvl = CharacterDatabase.PQuery("SELECT level,name FROM characters WHERE guid = '%u'", guid.GetCounter());
if (resultlvl)
{
Field *fields = resultlvl->Fetch();
int charlvl = fields[0].GetUInt32();
int maxlvl = sWorld.getConfig(CONFIG_UINT32_PLAYERBOT_RESTRICTLEVEL);
if (!(m_session->GetSecurity() > SEC_PLAYER))
if (charlvl > maxlvl)
{
//.........这里部分代码省略.........
示例15: time
// Jail by WarHead
bool ChatHandler::HandleJailCommand(const char *args)
{
std::string cname, announce, ban_reason, ban_by;
time_t localtime;
localtime = time(NULL);
char *charname = strtok((char*)args, " ");
if (charname == NULL)
{
SendSysMessage(LANG_JAIL_NONAME);
return true;
} else cname = charname;
char *timetojail = strtok(NULL, " ");
if (timetojail == NULL)
{
SendSysMessage(LANG_JAIL_NOTIME);
return true;
}
uint32 jailtime = atoi(timetojail);
if (jailtime < 1 || jailtime > sWorld->getIntConfig(CONFIG_JAIL_MAX_DURATION))
{
PSendSysMessage(LANG_JAIL_VALUE, sWorld->getIntConfig(CONFIG_JAIL_MAX_DURATION));
return true;
}
char *reason = strtok(NULL, "\0");
std::string jailreason;
if (reason == NULL || strlen((const char*)reason) < sWorld->getIntConfig(CONFIG_JAIL_MIN_REASON))
{
PSendSysMessage(LANG_JAIL_NOREASON, sWorld->getIntConfig(CONFIG_JAIL_MIN_REASON));
return true;
} else jailreason = reason;
uint64 GUID = sObjectMgr->GetPlayerGUIDByName(cname.c_str());
if (GUID == 0)
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
return true;
}
//Check security
uint32 accountid = sObjectMgr->GetPlayerAccountIdByGUID(GUID);
QueryResult resultgm = LoginDatabase.PQuery("SELECT gmlevel FROM account_access WHERE id = '%u'",accountid);
if (resultgm)
{
Field* fields = resultgm->Fetch();
AccountTypes security = (AccountTypes)fields[0].GetUInt32();
if (!m_session || m_session->GetSecurity() < security)
{
SendSysMessage(LANG_YOURS_SECURITY_IS_LOW);
SetSentErrorMessage(true);
return true;
}
}
Player *chr = sObjectMgr->GetPlayer(GUID);
if (!chr)
{
uint32 jail_guid = GUID_LOPART(GUID);
std::string jail_char = cname;
bool jail_isjailed = true;
uint32 jail_release = localtime + (jailtime * 60 * 60);
uint32 jail_amnestietime = localtime +(60* 60 * 24 * sWorld->getIntConfig(CONFIG_JAIL_AMNESTIE));
std::string jail_reason = jailreason;
uint32 jail_times = 0;
QueryResult result = CharacterDatabase.PQuery("SELECT * FROM `jail` WHERE `guid`='%u' LIMIT 1", jail_guid);
if (!result)
{
jail_times = 1;
}
else
{
Field *fields = result->Fetch();
jail_times = fields[5].GetUInt32()+1;
}
uint32 jail_gmacc = m_session->GetAccountId();
std::string jail_gmchar = m_session->GetPlayerName();
if (!result)
CharacterDatabase.PExecute("INSERT INTO `jail` VALUES ('%u','%s','%u','%u','%s','%u','%u','%s',CURRENT_TIMESTAMP,'%u')", jail_guid, jail_char.c_str(), jail_release, jail_amnestietime, jail_reason.c_str(), jail_times, jail_gmacc, jail_gmchar.c_str(), jailtime);
else
CharacterDatabase.PExecute("UPDATE `jail` SET `release`='%u', `amnestietime`='%u',`reason`='%s',`times`='%u',`gmacc`='%u',`gmchar`='%s',`duration`='%u' WHERE `guid`='%u' LIMIT 1", jail_release, jail_amnestietime, jail_reason.c_str(), jail_times, jail_gmacc, jail_gmchar.c_str(), jailtime, jail_guid);
PSendSysMessage(LANG_JAIL_WAS_JAILED, cname.c_str(), jailtime);
sWorld->SendWorldText(LANG_JAIL_ANNOUNCE, jail_char.c_str(), timetojail, jail_gmchar.c_str(), jail_reason.c_str());
if ((sWorld->getIntConfig(CONFIG_JAIL_MAX_JAILS) == jail_times) && !sWorld->getBoolConfig(CONFIG_JAIL_BAN))
{
QueryResult result = CharacterDatabase.PQuery("SELECT * FROM `characters` WHERE `guid`='%u' LIMIT 1", GUID_LOPART(GUID));
if (!result)
{
PSendSysMessage(LANG_NO_PLAYER, cname.c_str());
//.........这里部分代码省略.........