本文整理汇总了C++中WorldSession类的典型用法代码示例。如果您正苦于以下问题:C++ WorldSession类的具体用法?C++ WorldSession怎么用?C++ WorldSession使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了WorldSession类的16个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: MAKE_NEW_GUID
AccountOpResult AccountMgr::DeleteAccount(uint32 accountId)
{
// Check if accounts exists
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_BY_ID);
stmt->setUInt32(0, accountId);
PreparedQueryResult result = LoginDatabase.Query(stmt);
if (!result)
return AOR_NAME_NOT_EXIST;
// Obtain accounts characters
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARS_BY_ACCOUNT_ID);
stmt->setUInt32(0, accountId);
result = CharacterDatabase.Query(stmt);
if (result)
{
do
{
uint32 guidLow = (*result)[0].GetUInt32();
uint64 guid = MAKE_NEW_GUID(guidLow, 0, HIGHGUID_PLAYER);
// Kick if player is online
if (Player* p = ObjectAccessor::FindPlayer(guid))
{
WorldSession* s = p->GetSession();
s->KickPlayer(); // mark session to remove at next session list update
s->LogoutPlayer(false); // logout player without waiting next session list update
}
Player::DeleteFromDB(guid, accountId, false); // no need to update realm characters
} while (result->NextRow());
}
// table realm specific but common for all characters of account for realm
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_TUTORIALS);
stmt->setUInt32(0, accountId);
CharacterDatabase.Execute(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ACCOUNT_DATA);
stmt->setUInt32(0, accountId);
CharacterDatabase.Execute(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_BAN);
stmt->setUInt32(0, accountId);
CharacterDatabase.Execute(stmt);
SQLTransaction trans = LoginDatabase.BeginTransaction();
stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_ACCOUNT);
stmt->setUInt32(0, accountId);
trans->Append(stmt);
stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_ACCOUNT_ACCESS);
stmt->setUInt32(0, accountId);
trans->Append(stmt);
stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS);
stmt->setUInt32(0, accountId);
trans->Append(stmt);
stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_ACCOUNT_BANNED);
stmt->setUInt32(0, accountId);
trans->Append(stmt);
LoginDatabase.CommitTransaction(trans);
return AOR_OK;
}
开发者ID:3306665,项目名称:trinitycore,代码行数:71,代码来源:AccountMgr.cpp
示例2: OutPacket
void WorldSocket::InformationRetreiveCallback(WorldPacket & recvData, uint32 requestid)
{
if(requestid != mRequestID)
return;
uint32 error;
recvData >> error;
if(error != 0 || pAuthenticationPacket == NULL)
{
// something happened wrong @ the logon server
OutPacket(SMSG_AUTH_RESPONSE, 1, "\x0D");
return;
}
// Extract account information from the packet.
string AccountName;
const string * ForcedPermissions;
uint32 AccountID;
string GMFlags;
uint8 AccountFlags;
string lang = "enUS";
uint32 i;
recvData >> AccountID >> AccountName >> GMFlags >> AccountFlags;
ForcedPermissions = sLogonCommHandler.GetForcedPermissions(AccountName);
if( ForcedPermissions != NULL )
GMFlags.assign(ForcedPermissions->c_str());
sLog.outDebug( " >> got information packet from logon: `%s` ID %u (request %u)", AccountName.c_str(), AccountID, mRequestID);
// sLog.outColor(TNORMAL, "\n");
mRequestID = 0;
// Pull the session key.
uint8 K[40];
recvData.read(K, 40);
BigNumber BNK;
BNK.SetBinary(K, 40);
uint8 *key = new uint8[20];
WowCrypt::GenerateKey(key, K);
// Initialize crypto.
_crypt.SetKey(key, 20);
_crypt.Init();
delete [] key;
//checking if player is already connected
//disconnect corrent player and login this one(blizzlike)
if(recvData.rpos() != recvData.wpos())
recvData.read((uint8*)lang.data(), 4);
WorldSession *session = sWorld.FindSession( AccountID );
if( session)
{
// AUTH_FAILED = 0x0D
session->Disconnect();
// clear the logout timer so he times out straight away
session->SetLogoutTimer(1);
// we must send authentication failed here.
// the stupid newb can relog his client.
// otherwise accounts dupe up and disasters happen.
OutPacket(SMSG_AUTH_RESPONSE, 1, "\x15");
return;
}
Sha1Hash sha;
uint8 digest[20];
pAuthenticationPacket->read(digest, 20);
uint32 t = 0;
if( m_fullAccountName == NULL ) // should never happen !
sha.UpdateData(AccountName);
else
{
sha.UpdateData(*m_fullAccountName);
// this is unused now. we may as well free up the memory.
delete m_fullAccountName;
m_fullAccountName = NULL;
}
sha.UpdateData((uint8 *)&t, 4);
sha.UpdateData((uint8 *)&mClientSeed, 4);
sha.UpdateData((uint8 *)&mSeed, 4);
sha.UpdateBigNumbers(&BNK, NULL);
sha.Finalize();
if (memcmp(sha.GetDigest(), digest, 20))
{
// AUTH_UNKNOWN_ACCOUNT = 21
OutPacket(SMSG_AUTH_RESPONSE, 1, "\x15");
return;
}
//.........这里部分代码省略.........
开发者ID:Zelgadisx5,项目名称:Arcemu-2.4.3,代码行数:101,代码来源:WorldSocket.cpp
示例3: if
void SceneCharSelection::OnUpdate(s32 timepassed)
{
// treat doubleclick on listboxes as OK button click
if(eventrecv->HasGUIEvent())
{
const SEvent::SGUIEvent& ev = eventrecv->NextGUIEvent();
if(ev.EventType == EGET_LISTBOX_SELECTED_AGAIN)
{
if(ev.Caller == realmlistbox)
{
eventrecv->buttons |= BUTTON_REALMWIN_OK;
}
else if(ev.Caller == charlistbox)
{
eventrecv->buttons |= BUTTON_ENTER_WORLD;
}
}
if(ev.EventType == EGET_ELEMENT_CLOSED)
{
if(ev.Caller == realmwin)//realmwin got closed via the close button, remove pointer
{
realmwin = NULL;
}
if(ev.Caller == newcharwin)//got closed via the close button, remove pointer
{
newcharwin = NULL;
}
}
if(ev.EventType == EGET_COMBO_BOX_CHANGED)
{
if(ev.Caller == raceselect)
{
classselect->clear();
u32 class_name = classdb->GetFieldId("name");
u32 race_classmask = racedb->GetFieldId("classmask");
u32 classmask = racedb->GetInt(racemap[raceselect->getSelected()],race_classmask);
for(u32 i=1;i<=classdb->GetRowsCount();i++)
{
if(classmask & 1<<i)//if class is in classmask, put it into the list
{
core::stringw name = classdb->GetString(i,class_name);
classmap[classselect->addItem(name.c_str())]=i;
}
}
}
}
}
if(eventrecv->buttons & BUTTON_ENTER_WORLD && !realmwin && !newcharwin)
{
logdebug("GUI: SceneCharSelect: Entering world");
WorldSession *ws = instance->GetWSession();
if(ws)
{
u32 selected = charlistbox->getSelected();
if(selected < ws->GetCharsCount())
{
ws->EnterWorldWithCharacter(ws->GetCharFromList(selected).p._name);
}
else
logerror("Character selection out of bounds! (%u)",selected);
}
else
logerror("GUI: BUTTON_ENTER_ WORLD pressed, but no WorldSession exists!");
}
if(eventrecv->buttons & BUTTON_BACK && !realmwin && !newcharwin) // cant cancel with any window open (important for ESC key handling)
{
logdebug("GUI: SceneCharSelect: Back to Loginscreen");
gui->SetSceneState(SCENESTATE_LOGINSCREEN);
// disconnect from realm server if connected
if(RealmSession *rs = instance->GetRSession())
rs->SetMustDie();
if(WorldSession *ws = instance->GetWSession())
ws->SetMustDie();
}
if(eventrecv->buttons & BUTTON_DELETE_CHARACTER)
{
guienv->addMessageBox(L"Not yet implemented!", L"Deleting a character does not yet work!");
}
if(eventrecv->buttons & BUTTON_NEW_CHARACTER && !newcharwin)
{
dimension2d<s32> dim;
rect<s32> pos;
msgbox_textid = 0;
newcharwin = guienv->addWindow(CalcRelativeScreenPos(driver, 0.2f, 0.2f, 0.6f, 0.6f), true,
GetStringFromDB(ISCENE_CHARSEL_LABELS, DSCENE_CHARSEL_LABEL_NEWCHARWIN).c_str());
pos = newcharwin->getAbsolutePosition(); // get absolute position and transform <dim> to absolute in-window position
dim.Width = pos.LowerRightCorner.X - pos.UpperLeftCorner.X;
dim.Height = pos.LowerRightCorner.Y - pos.UpperLeftCorner.Y;
newcharwin->addChild(guienv->addButton(CalcRelativeScreenPos(dim, 0.7f, 0.93f, 0.12f, 0.05f), newcharwin, BUTTON_NEWCHARWIN_OK,
GetStringFromDB(ISCENE_CHARSEL_BUTTONS, DSCENE_CHARSEL_NEWCHARWIN_OK).c_str()));
newcharwin->addChild(guienv->addButton(CalcRelativeScreenPos(dim, 0.85f, 0.93f, 0.12f, 0.05f), newcharwin, BUTTON_NEWCHARWIN_CANCEL,
GetStringFromDB(ISCENE_CHARSEL_BUTTONS, DSCENE_CHARSEL_NEWCHARWIN_CANCEL).c_str()));
raceselect = guienv->addComboBox(CalcRelativeScreenPos(dim, 0.1f,0.1f,0.8f,0.05f), newcharwin);
u32 race_name = racedb->GetFieldId("name");
u32 race_classmask = racedb->GetFieldId("classmask");
for(u32 i=1;i<=racedb->GetRowsCount();i++)
//.........这里部分代码省略.........
开发者ID:Bugscz,项目名称:pseuwow,代码行数:101,代码来源:SceneCharselection.cpp
示例4: GetSession
void ClusterInterface::HandleTeleportResult(WorldPacket & pck)
{
uint32 sessionid;
uint8 result;
uint32 mapid, instanceid;
LocationVector vec;
float o;
pck >> sessionid;
WorldSession* s = GetSession(sessionid);
if (!s)
{
//tell the realm-server we have no session
WorldPacket data(ICMSG_ERROR_HANDLER, 5);
data << uint8(1); //1 = no session
data << sessionid;
sClusterInterface.SendPacket(&data);
return;
}
pck >> result >> mapid >> instanceid >> vec >> o;
//the destination is on the same server
if (result == 1)
{
if (s->GetPlayer() != NULL)
sEventMgr.AddEvent(s->GetPlayer(), &Player::EventClusterMapChange, mapid, instanceid, vec, EVENT_UNK, 1, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT);
}
else
{
//make this non-async, needs redone to support packing the player
//since were saving it HAS TO BE HERE so the new server has the correct data
WorldPacket nw(SMSG_NEW_WORLD);
nw << mapid << vec << o;
s->SendPacket(&nw);
uint32 oldmapid = s->GetPlayer()->GetMapId();
uint32 oldinstanceid = s->GetPlayer()->GetInstanceID();
uint32 playerlowguid = s->GetPlayer()->GetLowGUID();
s->GetPlayer()->SetMapId(mapid);
s->GetPlayer()->SetInstanceID(instanceid);
s->GetPlayer()->SetPosition(vec.x, vec.y, vec.z, o);
s->GetPlayer()->SaveToDB(true);
//need to shift back to old ones for removing from world :)
s->GetPlayer()->SetMapId(oldmapid);
s->GetPlayer()->SetInstanceID(oldinstanceid);
WorldPacket data(ICMSG_SWITCH_SERVER, 100);
data << sessionid << playerlowguid << mapid << instanceid << vec << o;
sClusterInterface.SendPacket(&data);
RPlayerInfo * pRPlayer = GetPlayer(playerlowguid);
bool newRplr = false;
if(pRPlayer == NULL)
{
pRPlayer = new RPlayerInfo;
newRplr = true;
}
s->GetPlayer()->UpdateRPlayerInfo(pRPlayer, newRplr);
pRPlayer->MapId = mapid;
pRPlayer->InstanceId = instanceid;
data.Initialize(ICMSG_PLAYER_INFO);
pRPlayer->Pack(data);
sClusterInterface.SendPacket(&data);
sEventMgr.AddEvent(s->GetPlayer(), &Player::HandleClusterRemove, EVENT_UNK, 1, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT);
}
}
开发者ID:Refuge89,项目名称:Arc_Mind,代码行数:71,代码来源:ClusterInterface.cpp
示例5: OnGossipSelect
bool OnGossipSelect(Player* Player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
{
WorldSession* ws = Player->GetSession();
switch (uiAction)
{
case ACTION_TITLE_PRIVATE:
{
if (GetTotalKill(Player) >= 10)
Player->SetTitle(sCharTitlesStore.LookupEntry(1));
else
ws->SendNotification("You dont have enough kills");
}
break;
case ACTION_TITLE_CORPORAL:
{
if (GetTotalKill(Player) >= 50)
Player->SetTitle(sCharTitlesStore.LookupEntry(2));
else
ws->SendNotification("You dont have enough kills");
}
break;
case ACTION_TITLE_SERGEANT:
{
if (GetTotalKill(Player) >= 100)
Player->SetTitle(sCharTitlesStore.LookupEntry(3));
else
ws->SendNotification("You dont have enough kills");
}
break;
case ACTION_TITLE_MASTER_SERGEANT:
{
if (GetTotalKill(Player) >= 200)
Player->SetTitle(sCharTitlesStore.LookupEntry(4));
else
ws->SendNotification("You dont have enough kills");
}
break;
case ACTION_TITLE_SERGEANT_MAJOR:
{
if (GetTotalKill(Player) >= 400)
Player->SetTitle(sCharTitlesStore.LookupEntry(5));
else
ws->SendNotification("You dont have enough kills");
}
break;
case ACTION_TITLE_KNIGHT:
{
if (GetTotalKill(Player) >= 500)
Player->SetTitle(sCharTitlesStore.LookupEntry(6));
else
ws->SendNotification("You dont have enough kills");
}
break;
case ACTION_TITLE_KNIGHT_LIEUTENANT:
{
if (GetTotalKill(Player) >= 600)
Player->SetTitle(sCharTitlesStore.LookupEntry(7));
else
ws->SendNotification("You dont have enough kills");
}
break;
case ACTION_TITLE_KNIGHT_CAPTAIN:
{
if (GetTotalKill(Player) >= 800)
Player->SetTitle(sCharTitlesStore.LookupEntry(8));
else
ws->SendNotification("You dont have enough kills");
}
break;
case ACTION_TITLE_KNIGHT_CHAMPION:
{
if (GetTotalKill(Player) >= 1000)
Player->SetTitle(sCharTitlesStore.LookupEntry(9));
else
ws->SendNotification("You dont have enough kills");
}
break;
case ACTION_TITLE_LIEUTENANT_COMMANDER:
{
if (GetTotalKill(Player) >= 1500)
Player->SetTitle(sCharTitlesStore.LookupEntry(10));
else
ws->SendNotification("You dont have enough kills");
}
break;
case ACTION_TITLE_COMMANDER:
{
if (GetTotalKill(Player) >= 2500)
Player->SetTitle(sCharTitlesStore.LookupEntry(11));
else
ws->SendNotification("You dont have enough kills");
}
break;
case ACTION_TITLE_MARSHAL:
{
if (GetTotalKill(Player) >= 4000)
Player->SetTitle(sCharTitlesStore.LookupEntry(12));
else
ws->SendNotification("You dont have enough kills");
//.........这里部分代码省略.........
开发者ID:beyourself,项目名称:123,代码行数:101,代码来源:npc_hks_title_rewarder.cpp
示例6: getMSTime
void MapMgr::_PerformObjectDuties()
{
++mLoopCounter;
uint32 mstime = getMSTime();
uint32 difftime = mstime - lastUnitUpdate;
if(difftime > 500)
difftime = 500;
// Update creatures.
{
CreatureSet::iterator itr = activeCreatures.begin();
PetStorageMap::iterator it2 = m_PetStorage.begin();
Creature * ptr;
Pet * ptr2;
for(; itr != activeCreatures.end();)
{
ptr = *itr;
++itr;
ptr->Update(difftime);
}
for(; it2 != m_PetStorage.end();)
{
ptr2 = it2->second;
++it2;
ptr2->Update(difftime);
}
}
// Update any events.
eventHolder.Update(difftime);
// Update players.
{
PlayerStorageMap::iterator itr = m_PlayerStorage.begin();
Player* ptr;
for(; itr != m_PlayerStorage.end(); )
{
ptr = static_cast< Player* >( (itr->second) );
++itr;
if( ptr != NULL )
ptr->Update( difftime );
}
lastUnitUpdate = mstime;
}
// Update gameobjects (not on every loop, however)
if( mLoopCounter % 2 )
{
difftime = mstime - lastGameobjectUpdate;
GameObjectSet::iterator itr = activeGameObjects.begin();
GameObject * ptr;
for(; itr != activeGameObjects.end(); )
{
ptr = *itr;
++itr;
ptr->Update( difftime );
}
lastGameobjectUpdate = mstime;
}
// Sessions are updated every loop.
{
int result;
WorldSession * session;
SessionSet::iterator itr = Sessions.begin();
SessionSet::iterator it2;
for(; itr != Sessions.end();)
{
session = (*itr);
it2 = itr;
++itr;
if(session->GetInstance() != m_instanceID)
{
Sessions.erase(it2);
continue;
}
// Don't update players not on our map.
// If we abort in the handler, it means we will "lose" packets, or not process this.
// .. and that could be diasterous to our client :P
if(session->GetPlayer() && (session->GetPlayer()->GetMapMgr() != this && session->GetPlayer()->GetMapMgr() != 0))
{
continue;
}
if((result = session->Update(m_instanceID)))
{
if(result == 1)
{
// complete deletion
sWorld.DeleteSession(session);
}
//.........这里部分代码省略.........
开发者ID:Chero,项目名称:abcwow,代码行数:101,代码来源:MapMgr.cpp
示例7: fabs
void AnticheatMgr::SpeedHackDetection(Player* player,MovementInfo movementInfo)
{
if ((sWorld->getIntConfig(CONFIG_ANTICHEAT_DETECTIONS_ENABLED) & SPEED_HACK_DETECTION) == 0)
return;
uint32 key = player->GetGUIDLow();
// We also must check the map because the movementFlag can be modified by the client.
// If we just check the flag, they could always add that flag and always skip the speed hacking detection.
// 369 == DEEPRUN TRAM
// 607 == Strand of The Ancients
if (m_Players[key].GetLastMovementInfo().HasMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY) && (player->GetMapId() == 369 || player->GetMapId() == 607))
return;
if (player->GetSession()->GetSecurity() > 0)
return;
if (!player->isAlive())
return;
uint32 distance2D = (uint32)movementInfo.pos.GetExactDist2d(&m_Players[key].GetLastMovementInfo().pos);
if (distance2D > 500)
return;
if (distance2D < 100 && player->getClass() == CLASS_PRIEST && player->isInCombat())
return;
if (player->GetAreaId() == 4281 || player->GetAreaId() == 4342 || player->GetAreaId() == 5154 || player->GetAreaId() == 4395 ||
player->GetAreaId() == 5926 || player->GetAreaId() == 5738 || player->GetAreaId() == 5535 || player->GetAreaId() == 5004 ||
player->GetAreaId() == 5088 || player->GetAreaId() == 5303 || player->GetAreaId() == 4753 || player->GetAreaId() == 4752)
return;
if (player->HasAura(66601))
return;
if (player->HasAura(66602))
{
player->RemoveAura(66602);
}
if (player->HasAura(605))
return;
if (player->HasAura(51690))
{
player->CastSpell(player, 66601, true);
return;
}
float x, y, z;
player->GetPosition(x, y, z);
float ground_Z = player->GetMap()->GetHeight(x, y, z);
float z_diff = fabs(ground_Z - z);
WorldSession* s = player->GetSession();
if ( player->GetMap()->IsDungeon() || player->GetMap()->IsRaid() || player->GetMap()->IsBattlegroundOrArena())
if ((distance2D > 50 && player->GetMapId() == 566) || (distance2D > 40 && player->GetMapId() != 566))
if (z_diff > 1.0f && !player->isGameMaster())
if (!player->HasUnitMovementFlag(MOVEMENTFLAG_FALLING) && player->isAlive())
s->KickPlayer("Player::Update");
if ((player->GetMap()->IsDungeon() || player->GetMap()->IsRaid() || player->GetMap()->IsBattlegroundOrArena() || player->GetMapId() == 732 || player->GetMapId() == 861) && (player->HasAura(33943) || player->HasAura(40120)))
{
player->RemoveAura(33943);
player->RemoveAura(40120);
}
uint8 moveType = 0;
uint32 maxSpeed = 0;
// we need to know HOW is the player moving
// TO-DO: Should we check the incoming movement flags?
if (player->HasUnitMovementFlag(MOVEMENTFLAG_SWIMMING))
{
moveType = MOVE_SWIM;
maxSpeed = 11;
if (player->HasAura(8326) || player->HasAura(20584)) //Ghost
maxSpeed += 5;
if (player->HasAura(86510)) //Epic Swimming Mount
maxSpeed += 20;
if (player->HasAura(95664)) //Advanced Swimming Mount
maxSpeed += 15;
if (player->HasAura(73701)) //Sea Legs
maxSpeed += 5;
if (player->HasAura(98718)) //Subdued Seahorse
maxSpeed = 41;
if (player->HasAura(75207)) //Abyssal Seahorse
maxSpeed = 56;
}
else if (player->IsFlying() && player->HasAuraType(SPELL_AURA_MOUNTED))
{
moveType = MOVE_FLIGHT;
if (player->HasSpell(90265)) //master riding
maxSpeed = 40;
//.........这里部分代码省略.........
开发者ID:Tithand,项目名称:TER-Server,代码行数:101,代码来源:AnticheatMgr.cpp
示例8: GOMove_Command
static bool GOMove_Command(ChatHandler* handler, const char* args)
{
if (!args)
return false;
char* ID_t = strtok((char*)args, " ");
if (!ID_t)
return false;
uint32 ID = (uint32)atol(ID_t);
char* GObjectID_C = strtok(NULL, " ");
uint32 GObjectID = 0;
bool isHex = false;
if (GObjectID_C)
{
GObjectID = strtoul(GObjectID_C, NULL, 0); // can take in hex as well as dec
isHex = (std::string(GObjectID_C).find("0x") != std::string::npos);
}
char* ARG_t = strtok(NULL, " ");
uint32 ARG = 0;
if (ARG_t)
ARG = (uint32)atol(ARG_t);
WorldSession* session = handler->GetSession();
Player* player = session->GetPlayer();
uint64 playerGUID = player->GetGUID();
if (ID < SPAWN) // no args
{
if (ID >= DELET && ID <= GOTO) // has target (needs retrieve gameobject)
{
GameObject* target = GetObjectByGObjectID(player, GObjectID, isHex);
if (!target)
ChatHandler(player->GetSession()).PSendSysMessage("Object GUID: %u not found. Temp(%u)", GObjectID, isHex ? 1 : 0);
else
{
float x,y,z,o;
target->GetPosition(x,y,z,o);
uint32 p = target->GetPhaseMask();
switch(ID)
{
case DELET: DeleteObject(target/*, isHex ? GObjectID : 0*/); SendSelectionInfo(player, GObjectID, isHex, false); break;
case X: SpawnObject(player,player->GetPositionX(),y,z,o,p,true,GObjectID, isHex); break;
case Y: SpawnObject(player,x,player->GetPositionY(),z,o,p,true,GObjectID, isHex); break;
case Z: SpawnObject(player,x,y,player->GetPositionZ(),o,p,true,GObjectID, isHex); break;
case O: SpawnObject(player,x,y,z,player->GetOrientation(),p,true,GObjectID, isHex); break;
case GOTO: player->TeleportTo(target->GetMapId(), x,y,z,o); break;
case RESPAWN: SpawnObject(player,x,y,z,o,p,false,target->GetEntry(), isHex); break;
case GROUND:
{
float ground = target->GetMap()->GetHeight(target->GetPhaseMask(), x, y, MAX_HEIGHT);
if(ground != INVALID_HEIGHT)
SpawnObject(player,x,y,ground,o,p,true,GObjectID, isHex);
} break;
}
}
}
else
{
switch(ID)
{
case TEST: session->SendAreaTriggerMessage(player->GetName().c_str()); break;
case FACE: { float piper2 = M_PI/2; float multi = player->GetOrientation()/piper2; float multi_int = floor(multi); float new_ori = (multi-multi_int > 0.5f) ? (multi_int+1)*piper2 : multi_int*piper2; player->SetFacingTo(new_ori); } break;
case SAVE: SaveObject(player, GObjectID, isHex); break;
case SELECTNEAR:
{
GameObject* object = handler->GetNearbyGameObject();
object = GetClosestGObjectID(player, object);
if (!object)
ChatHandler(player->GetSession()).PSendSysMessage("No objects found");
else
{
bool isHex = (object->GetGUIDHigh() != HIGHGUID_GAMEOBJECT);
SendSelectionInfo(player, isHex ? object->GetGUIDHigh() : object->GetDBTableGUIDLow() ? object->GetDBTableGUIDLow() : object->GetGUIDLow(), isHex, true);
session->SendAreaTriggerMessage("Selected %s", object->GetName().c_str());
}
} break;
}
}
}
else if (ARG && ID >= SPAWN)
{
if (ID >= NORTH && ID <= PHASE)
{
GameObject* target = GetObjectByGObjectID(player, GObjectID, isHex);
if (!target)
ChatHandler(player->GetSession()).PSendSysMessage("Object GUID: %u not found. Temporary: %s", GObjectID, isHex ? "true" : "false");
else
{
float x,y,z,o;
target->GetPosition(x,y,z,o);
uint32 p = target->GetPhaseMask();
switch(ID)
{
case NORTH: SpawnObject(player,x+((float)ARG/100),y,z,o,p,true,GObjectID, isHex); break;
case EAST: SpawnObject(player,x,y-((float)ARG/100),z,o,p,true,GObjectID, isHex); break;
case SOUTH: SpawnObject(player,x-((float)ARG/100),y,z,o,p,true,GObjectID, isHex); break;
case WEST: SpawnObject(player,x,y+((float)ARG/100),z,o,p,true,GObjectID, isHex); break;
case NORTHEAST: SpawnObject(player,x+((float)ARG/100),y-((float)ARG/100),z,o,p,true,GObjectID, isHex); break;
//.........这里部分代码省略.........
开发者ID:Kretol,项目名称:TrinityCore,代码行数:101,代码来源:GOMove.cpp
示例9: OnGossipSelect
bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 uiAction)
{
WorldSession* session = player->GetSession();
player->PlayerTalkClass->ClearMenus();
switch(sender)
{
case EQUIPMENT_SLOT_END: // Show items you can use
{
if (Item* oldItem = player->GetItemByPos(INVENTORY_SLOT_BAG_0, uiAction))
{
uint32 lowGUID = player->GetGUIDLow();
_items[lowGUID].clear();
uint32 limit = 0;
uint32 price = 0;
switch (sTransmogrification->GetRequireGold())
{
case 1: { price = (unsigned int)(GetFakePrice(oldItem)*sTransmogrification->GetGoldModifier()); } break;
case 2: { price = (unsigned int)sTransmogrification->GetGoldCost(); } break;
}
char tokenCost[250] = "\n";
if(sTransmogrification->GetRequireToken())
snprintf(tokenCost, 250, "\n\n%u x %s", sTransmogrification->GetTokenAmount(), GetItemName(sObjectMgr->GetItemTemplate(sTransmogrification->GetTokenEntry()), session).c_str());
for (uint8 i = INVENTORY_SLOT_ITEM_START; i < INVENTORY_SLOT_ITEM_END; i++)
{
if (limit > 30)
break;
if (Item* newItem = player->GetItemByPos(INVENTORY_SLOT_BAG_0, i))
{
uint32 display = newItem->GetTemplate()->DisplayInfoID;
if (player->SuitableForTransmogrification(oldItem, newItem) == ERR_FAKE_OK)
{
if (_items[lowGUID].find(display) == _items[lowGUID].end())
{
limit++;
_items[lowGUID][display] = newItem;
player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_INTERACT_1, GetItemName(newItem->GetTemplate(), session), uiAction, display, session->GetTrinityString(LANG_POPUP_TRANSMOGRIFY)+GetItemName(newItem->GetTemplate(), session)+tokenCost, price, false);
}
}
}
}
for (uint8 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
{
if (Bag* bag = player->GetBagByPos(i))
{
for (uint32 j = 0; j < bag->GetBagSize(); j++)
{
if (limit > 30)
break;
if (Item* newItem = player->GetItemByPos(i, j))
{
uint32 display = newItem->GetTemplate()->DisplayInfoID;
if (player->SuitableForTransmogrification(oldItem, newItem) == ERR_FAKE_OK)
{
if (_items[lowGUID].find(display) == _items[lowGUID].end())
{
limit++;
_items[lowGUID][display] = newItem;
player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_INTERACT_1, GetItemName(newItem->GetTemplate(), session), uiAction, display, session->GetTrinityString(LANG_POPUP_TRANSMOGRIFY)+GetItemName(newItem->GetTemplate(), session)+tokenCost, price, false);
}
}
}
}
}
}
char removeOnePopup[250];
snprintf(removeOnePopup, 250, session->GetTrinityString(LANG_POPUP_REMOVE_ONE), GetSlotName(uiAction, session));
player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_INTERACT_1, session->GetTrinityString(LANG_OPTION_REMOVE_ONE), EQUIPMENT_SLOT_END+3, uiAction, removeOnePopup, 0, false);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, session->GetTrinityString(LANG_OPTION_BACK), EQUIPMENT_SLOT_END+1, 0);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
}
else
OnGossipHello(player, creature);
} break;
case EQUIPMENT_SLOT_END+1: // Back
{
OnGossipHello(player, creature);
} break;
case EQUIPMENT_SLOT_END+2: // Remove Transmogrifications
{
bool removed = false;
for (uint8 Slot = EQUIPMENT_SLOT_START; Slot < EQUIPMENT_SLOT_END; Slot++)
{
if (Item* newItem = player->GetItemByPos(INVENTORY_SLOT_BAG_0, Slot))
{
if (newItem->DeleteFakeEntry() && !removed)
removed = true;
}
}
if (removed)
{
session->SendAreaTriggerMessage(session->GetTrinityString(LANG_REM_TRANSMOGRIFICATIONS_ITEMS));
player->PlayDirectSound(3337);
}
else
session->SendNotification(session->GetTrinityString(LANG_ERR_NO_TRANSMOGRIFICATIONS));
OnGossipHello(player, creature);
} break;
//.........这里部分代码省略.........
开发者ID:Xxxhackerxxx,项目名称:BlizzNetCore,代码行数:101,代码来源:Transmogrification.cpp
示例10: OnGossipSelect
bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action)
{
player->PlayerTalkClass->ClearMenus();
WorldSession* session = player->GetSession();
switch(sender)
{
case EQUIPMENT_SLOT_END: // Show items you can use
ShowTransmogItems(player, creature, action);
break;
case EQUIPMENT_SLOT_END+1: // Main menu
OnGossipHello(player, creature);
break;
case EQUIPMENT_SLOT_END+2: // Remove Transmogrifications
{
bool removed = false;
SQLTransaction trans = CharacterDatabase.BeginTransaction();
for (uint8 slot = EQUIPMENT_SLOT_START; slot < EQUIPMENT_SLOT_END; ++slot)
{
if (Item* newItem = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
{
if (!sT->GetFakeEntry(newItem->GetGUID()))
continue;
sT->DeleteFakeEntry(player, slot, newItem, &trans);
removed = true;
}
}
if (removed)
{
session->SendAreaTriggerMessage(GTS(LANG_ERR_UNTRANSMOG_OK));
CharacterDatabase.CommitTransaction(trans);
}
else
session->SendNotification(LANG_ERR_UNTRANSMOG_NO_TRANSMOGS);
OnGossipHello(player, creature);
} break;
case EQUIPMENT_SLOT_END+3: // Remove Transmogrification from single item
{
if (Item* newItem = player->GetItemByPos(INVENTORY_SLOT_BAG_0, action))
{
if (sT->GetFakeEntry(newItem->GetGUID()))
{
sT->DeleteFakeEntry(player, action, newItem);
session->SendAreaTriggerMessage(GTS(LANG_ERR_UNTRANSMOG_OK));
}
else
session->SendNotification(LANG_ERR_UNTRANSMOG_NO_TRANSMOGS);
}
OnGossipSelect(player, creature, EQUIPMENT_SLOT_END, action);
} break;
#ifdef PRESETS
case EQUIPMENT_SLOT_END+4: // Presets menu
{
if (!sT->GetEnableSets())
{
OnGossipHello(player, creature);
return true;
}
if (sT->GetEnableSetInfo())
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Book_11:30:30:-18:0|tHow sets work", EQUIPMENT_SLOT_END+10, 0);
for (Transmogrification::presetIdMap::const_iterator it = sT->presetByName[player->GetGUID()].begin(); it != sT->presetByName[player->GetGUID()].end(); ++it)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Statue_02:30:30:-18:0|t"+it->second, EQUIPMENT_SLOT_END+6, it->first);
if (sT->presetByName[player->GetGUID()].size() < sT->GetMaxSets())
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/GuildBankFrame/UI-GuildBankFrame-NewTab:30:30:-18:0|tSave set", EQUIPMENT_SLOT_END+8, 0);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Spy:30:30:-18:0|tBack..", EQUIPMENT_SLOT_END+1, 0);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
} break;
case EQUIPMENT_SLOT_END+5: // Use preset
{
if (!sT->GetEnableSets())
{
OnGossipHello(player, creature);
return true;
}
// action = presetID
for (Transmogrification::slotMap::const_iterator it = sT->presetById[player->GetGUID()][action].begin(); it != sT->presetById[player->GetGUID()][action].end(); ++it)
{
if (Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, it->first))
sT->PresetTransmog(player, item, it->second, it->first);
}
OnGossipSelect(player, creature, EQUIPMENT_SLOT_END+6, action);
} break;
case EQUIPMENT_SLOT_END+6: // view preset
{
if (!sT->GetEnableSets())
{
OnGossipHello(player, creature);
return true;
}
// action = presetID
for (Transmogrification::slotMap::const_iterator it = sT->presetById[player->GetGUID()][action].begin(); it != sT->presetById[player->GetGUID()][action].end(); ++it)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, sT->GetItemIcon(it->second, 30, 30, -18, 0)+sT->GetItemLink(it->second, session), sender, action);
player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Statue_02:30:30:-18:0|tUse set", EQUIPMENT_SLOT_END+5, action, "Using this set for transmogrify will bind transmogrified items to you and make them non-refundable and non-tradeable.\nDo you wish to continue?\n\n"+sT->presetByName[player->GetGUID()][action], 0, false);
player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "|TInterface/PaperDollInfoFrame/UI-GearManager-LeaveItem-Opaque:30:30:-18:0|tDelete set", EQUIPMENT_SLOT_END+7, action, "Are you sure you want to delete "+sT->presetByName[player->GetGUID()][action]+"?", 0, false);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Spy:30:30:-18:0|tBack..", EQUIPMENT_SLOT_END+4, 0);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
} break;
case EQUIPMENT_SLOT_END+7: // Delete preset
{
//.........这里部分代码省略.........
开发者ID:SymbolixDEV,项目名称:123,代码行数:101,代码来源:Transmogrifier.cpp
示例11: OutPacket
void WorldSocket::InformationRetreiveCallback(WorldPacket & recvData, uint32 requestid)
{
if(requestid != mRequestID)
return;
uint32 error;
recvData >> error;
if(error != 0 || pAuthenticationPacket == NULL)
{
// something happened wrong @ the logon server
OutPacket(SMSG_AUTH_RESPONSE, 1, "\x0D");
return;
}
// Extract account information from the packet.
string AccountName;
const string * ForcedPermissions;
uint32 AccountID;
string GMFlags;
uint8 AccountFlags;
string lang = "enUS";
uint32 i;
recvData >> AccountID >> AccountName >> GMFlags >> AccountFlags;
ForcedPermissions = sLogonCommHandler.GetForcedPermissions(AccountName);
if( ForcedPermissions != NULL )
GMFlags.assign(ForcedPermissions->c_str());
DEBUG_LOG( "WorldSocket","Received information packet from logon: `%s` ID %u (request %u)", AccountName.c_str(), AccountID, mRequestID);
mRequestID = 0;
// Pull the session key.
BigNumber BNK;
recvData.read(K, 40);
_crypt.Init(K);
BNK.SetBinary(K, 40);
//checking if player is already connected
//disconnect current player and login this one(blizzlike)
if(recvData.rpos() != recvData.wpos())
recvData.read((uint8*)lang.data(), 4);
WorldSession *session = NULL;
session = sWorld.FindSession( AccountID );
if( session != NULL )
{
if(session->_player != NULL && session->_player->GetMapMgr() == NULL)
{
DEBUG_LOG("WorldSocket","_player found without m_mapmgr during logon, trying to remove him [player %s, map %d, instance %d].", session->_player->GetName(), session->_player->GetMapId(), session->_player->GetInstanceID() );
if(objmgr.GetPlayer(session->_player->GetLowGUID()))
objmgr.RemovePlayer(session->_player);
session->LogoutPlayer(false);
}
// AUTH_FAILED = 0x0D
session->Disconnect();
// clear the logout timer so he times out straight away
session->SetLogoutTimer(1);
// we must send authentication failed here.
// the stupid newb can relog his client.
// otherwise accounts dupe up and disasters happen.
OutPacket(SMSG_AUTH_RESPONSE, 1, "\x15");
return;
}
Sha1Hash sha;
uint8 digest[20];
pAuthenticationPacket->read(digest, 20);
uint32 t = 0;
if( m_fullAccountName == NULL ) // should never happen !
sha.UpdateData(AccountName);
else
{
sha.UpdateData(*m_fullAccountName);
// this is unused now. we may as well free up the memory.
delete m_fullAccountName;
m_fullAccountName = NULL;
}
sha.UpdateData((uint8 *)&t, 4);
sha.UpdateData((uint8 *)&mClientSeed, 4);
sha.UpdateData((uint8 *)&mSeed, 4);
sha.UpdateBigNumbers(&BNK, NULL);
sha.Finalize();
if (memcmp(sha.GetDigest(), digest, 20))
{
// AUTH_UNKNOWN_ACCOUNT = 21
OutPacket(SMSG_AUTH_RESPONSE, 1, "\x15");
return;
}
// Allocate session
//.........这里部分代码省略.........
开发者ID:arcticdev,项目名称:arctic-test,代码行数:101,代码来源:WorldSocket.cpp
示例12: OnGossipSelect
bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action)
{
WorldSession* session = player->GetSession();
player->PlayerTalkClass->ClearMenus();
switch(sender)
{
case SENDER_SELECT_VENDOR: // action = slot
{
Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, action);
if (!item)
{
if (const char* slotname = getSlotName(action))
session->SendNotification("No item equipped in %s slot", slotname);
OnGossipHello(player, creature);
return true;
}
const ItemTemplate * itemTemplate = item->GetTemplate();
optionData* oM = &optionMap[(itemTemplate->Class == ITEM_CLASS_WEAPON ? MAX_ITEM_SUBCLASS_WEAPON : 0)+itemTemplate->SubClass][getCorrectInvType(itemTemplate->InventoryType)];
if (!oM->size())
{
if (const char* slotname = getSlotName(action))
session->SendNotification("No transmogrifications available for %s", slotname);
OnGossipHello(player, creature);
return true;
}
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, (std::string)"Update selected; "+getItemName(itemTemplate, session), sender, action);
for(optionData::iterator it = oM->begin(); it != oM->end(); ++it)
{
if (!TransmogDisplayVendorMgr::AllowedQuality(it->first)) // skip not allowed qualities
continue;
for(uint32 count = 0; count*MAX_VENDOR_ITEMS < it->second.size(); ++count)
{
std::ostringstream ss;
ss << getQualityName(it->first);
if (count)
ss << " [" << count << "]";
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, ss.str().c_str(), it->first, count*MAX_VENDOR_ITEMS);
}
}
if (player->PlayerTalkClass->GetGossipMenu().GetMenuItemCount() <= 1)
{
if (const char* slotname = getSlotName(action))
session->SendNotification("No transmogrifications available for %s", slotname);
player->PlayerTalkClass->ClearMenus();
OnGossipHello(player, creature);
return true;
}
selDataStruct temp = {action, 0, 0}; // slot, offset, quality
selData[player->GetGUIDLow()] = temp;
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, "Back..", SENDER_BACK, 0);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
} break;
case SENDER_BACK: // Back
{
OnGossipHello(player, creature);
} break;
case SENDER_REMOVE_ALL: // Remove TransmogDisplayVendorMgrs
{
bool removed = false;
for (uint8 Slot = EQUIPMENT_SLOT_START; Slot < EQUIPMENT_SLOT_END; Slot++)
{
if (Item* newItem = player->GetItemByPos(INVENTORY_SLOT_BAG_0, Slot))
{
if (TransmogDisplayVendorMgr::DeleteFakeEntry(newItem) && !removed)
removed = true;
}
}
if (removed)
{
session->SendAreaTriggerMessage("Transmogrifications removed from equipped items");
player->PlayDirectSound(3337);
}
else
session->SendNotification("You have no transmogrified items equipped");
OnGossipSelect(player, creature, SENDER_REMOVE_MENU, 0);
} break;
case SENDER_REMOVE_ONE: // Remove TransmogDisplayVendorMgr from single item
{
const char* slotname = getSlotName(action);
if (Item* newItem = player->GetItemByPos(INVENTORY_SLOT_BAG_0, action))
{
if (TransmogDisplayVendorMgr::DeleteFakeEntry(newItem))
{
if (slotname)
session->SendAreaTriggerMessage("%s transmogrification removed", slotname);
player->PlayDirectSound(3337);
}
else if (slotname)
session->SendNotification("No transmogrification on %s slot", slotname);
}
else if (slotname)
session->SendNotif
|
请发表评论