void CCharPlayer::r_WriteChar( CChar * pChar, CScript & s ) { ADDTOCALLSTACK("CCharPlayer::r_WriteChar"); UNREFERENCED_PARAMETER(pChar); EXC_TRY("r_WriteChar"); s.WriteKey("ACCOUNT", GetAccount()->GetName()); if ( m_wDeaths ) s.WriteKeyVal( "DEATHS", m_wDeaths ); if ( m_wMurders ) s.WriteKeyVal( "KILLS", m_wMurders ); if ( GetSkillClass()->GetResourceID().GetResIndex() ) s.WriteKey( "SKILLCLASS", GetSkillClass()->GetResourceName()); if ( m_pflag ) s.WriteKeyVal( "PFLAG", m_pflag ); if ( m_speedMode ) s.WriteKeyVal("SPEEDMODE", m_speedMode); if (( GetAccount()->GetResDisp() >= RDS_KR ) && m_bKrToolbarEnabled ) s.WriteKeyVal("KRTOOLBARSTATUS", m_bKrToolbarEnabled); EXC_SET("saving dynamic speech"); if ( m_Speech.GetCount() > 0 ) { CGString sVal; m_Speech.WriteResourceRefList( sVal ); s.WriteKey("DSPEECH", sVal); } EXC_SET("saving profile"); if ( ! m_sProfile.IsEmpty()) { TCHAR szLine[SCRIPT_MAX_LINE_LEN-16]; Str_MakeUnFiltered( szLine, m_sProfile, sizeof(szLine)); s.WriteKey( "PROFILE", szLine ); } EXC_SET("saving stats locks"); for ( int x = 0; x < STAT_BASE_QTY; x++) // Don't write all lock states! { if ( ! m_StatLock[x] ) continue; TCHAR szTemp[128]; sprintf( szTemp, "StatLock[%d]", x ); // smaller storage space. s.WriteKeyVal( szTemp, m_StatLock[x] ); } EXC_SET("saving skill locks"); for ( size_t j = 0; j < g_Cfg.m_iMaxSkill; j++ ) // Don't write all lock states! { ASSERT(j < COUNTOF(m_SkillLock)); if ( ! m_SkillLock[j] ) continue; TCHAR szTemp[128]; sprintf( szTemp, "SkillLock[%" FMTSIZE_T "]", j ); // smaller storage space. s.WriteKeyVal( szTemp, m_SkillLock[j] ); } EXC_CATCH; }
bool CClient::addRelay( const CServerDef * pServ ) { ADDTOCALLSTACK("CClient::addRelay"); EXC_TRY("addRelay"); // Tell the client to play on this server. if ( !pServ ) return false; CSocketAddressIP ipAddr = pServ->m_ip; if ( ipAddr.IsLocalAddr()) // local server address not yet filled in. { ipAddr = m_net->m_socket.GetSockName(); DEBUG_MSG(( "%x:Login_Relay to %s\n", GetSocketID(), ipAddr.GetAddrStr() )); } if ( GetPeer().IsLocalAddr() || GetPeer().IsSameIP( ipAddr )) // weird problem with client relaying back to self. { DEBUG_MSG(( "%x:Login_Relay loopback to server %s\n", GetSocketID(), ipAddr.GetAddrStr() )); ipAddr.SetAddrIP( SOCKET_LOCAL_ADDRESS ); } EXC_SET("customer id"); dword dwAddr = ipAddr.GetAddrIP(); dword dwCustomerId = 0x7f000001; if ( g_Cfg.m_fUseAuthID ) { CSString sCustomerID(pServ->GetName()); sCustomerID.Add(GetAccount()->GetName()); dwCustomerId = z_crc32(0L, Z_NULL, 0); dwCustomerId = z_crc32(dwCustomerId, reinterpret_cast<const z_Bytef *>(sCustomerID.GetPtr()), (z_uInt)sCustomerID.GetLength()); GetAccount()->m_TagDefs.SetNum("customerid", dwCustomerId); } DEBUG_MSG(( "%x:Login_Relay to server %s with AuthId %u\n", GetSocketID(), ipAddr.GetAddrStr(), dwCustomerId )); EXC_SET("server relay packet"); new PacketServerRelay(this, dwAddr, pServ->m_ip.GetPort(), dwCustomerId); m_Targ_Mode = CLIMODE_SETUP_RELAY; return true; EXC_CATCH; EXC_DEBUG_START; g_Log.EventDebug("account '%s'\n", GetAccount() ? GetAccount()->GetName() : ""); EXC_DEBUG_END; return false; }
// 保存数据 bool CPlayer::SaveData(google::protobuf::Message *pMsg) { // 没有加载数据的时候,不保存数据 if (!m_LoadDataSucc) return true; if (!pMsg) return false; if (PackData()) { svrData::LoadPlayerData *data = (svrData::LoadPlayerData *)pMsg; m_LastSaveTime = CTimer::GetTime(); data->set_account(GetAccount()); data->set_name(GetName()); data->set_nguid(GetGuid()); data->set_nsex(GetSex()); data->set_njob(GetJob()); data->set_nlevel(GetLevel()); data->set_ncreatetime(GetCreateTime()); data->set_nlogintime(GetLoginTime()); data->set_nmapid(GetMapID()); data->set_nx(GetNowPosX()); data->set_ny(GetNowPosY()); data->set_nz(GetNowPosZ()); data->set_data(g_Base64Data); return true; } return false; }
// 加载数据 bool CPlayer::LoadData(Msg *pMsg) { svrData::LoadPlayerData msg; _CHECK_PARSE_(pMsg, msg) false; if (!UnPackData(msg.data().c_str(), msg.data().size())) return false; SetAccount(msg.account()); SetName(msg.name().c_str()); SetGuid(msg.nguid()); SetSex(msg.nsex()); SetJob(msg.njob()); SetLevel(msg.nlevel()); SetCreateTime(msg.ncreatetime()); SetLoginTime(msg.nlogintime()); SetMapID(msg.nmapid()); SetNowPos(msg.nx(), msg.ny(), msg.nz()); m_LastSaveTime = CTimer::GetTime() + CRandomPool::GetOneLess(60); RunStateLog("加载玩家:%s数据成功!账号:%s", GetName(), msg.account().c_str()); if (!msg.bchangeline()) { svrData::AddPlayerToCenter SendMsg; SendMsg.set_nguid(GetGuid()); SendMsg.set_ngameid(GetGameID()); SendMsg.set_nclientid(GetClientID()); SendMsg.set_ngateid(GetGateID()); SendMsg.set_account(GetAccount()); FuncUti::SendMsgToCenter(this, SendMsg, SERVER_TYPE_MAIN, SVR_SUB_ADD_PLAYER_TO_CENTER); } m_LoadDataSucc = true; return true; }
string CIncomingFriendList :: GetDescription( ) { string Description; Description += GetAccount( ) + "\n"; Description += ExtractStatus( GetStatus( ) ) + "\n"; Description += ExtractArea( GetArea( ) ) + "\n"; Description += ExtractLocation( GetLocation( ) ) + "\n\n"; return Description; }
// 请求选择角色 void CClientAuth::SelectPlayer(CClient *cl, Msg *pMsg) { const std::string &account = GetAccount(cl->GetClientID()); if (!account.empty()) { LoginCenterConnect.SendMsgToServer(Config.GetCenterServerID(), *pMsg, cl->GetClientID()); } else RunStateError("请求选择角色失败!没有认证!clientid:%d", cl->GetClientID()); }
std::shared_ptr<model::Query> PbQueryFactory::deserialize( const protocol::Query &pb_query) { std::shared_ptr<model::Query> val; if (pb_query.has_get_account()) { // Convert to get Account auto pb_cast = pb_query.get_account(); auto account_query = GetAccount(); account_query.account_id = pb_cast.account_id(); val = std::make_shared<model::GetAccount>(account_query); } if (pb_query.has_get_account_assets()) { // Convert to get Account Asset auto pb_cast = pb_query.get_account_assets(); auto query = GetAccountAssets(); query.account_id = pb_cast.account_id(); query.asset_id = pb_cast.asset_id(); val = std::make_shared<model::GetAccountAssets>(query); } if (pb_query.has_get_account_signatories()) { // Convert to get Signatories auto pb_cast = pb_query.get_account_signatories(); auto query = GetSignatories(); query.account_id = pb_cast.account_id(); val = std::make_shared<model::GetSignatories>(query); } if (pb_query.has_get_account_transactions()) { // Convert to get Signatories auto pb_cast = pb_query.get_account_transactions(); auto query = GetAccountTransactions(); query.account_id = pb_cast.account_id(); val = std::make_shared<model::GetAccountTransactions>(query); } if (!val) { // Query not implemented return nullptr; } Signature sign; auto pb_sign = pb_query.header().signature(); std::copy(pb_sign.pubkey().begin(), pb_sign.pubkey().end(), sign.pubkey.begin()); std::copy(pb_sign.signature().begin(), pb_sign.signature().end(), sign.signature.begin()); val->query_counter = pb_query.query_counter(); val->signature = sign; val->created_ts = pb_query.header().created_time(); val->creator_account_id = pb_query.creator_account_id(); model::HashProviderImpl hashProvider; // TODO: get rid off unnecessary object initialization val->query_hash = hashProvider.get_hash(val); return val; }
void SaveEmailCommand::RunImpl() { try { GetAccount(); } catch(const std::exception& e) { Error(e); } catch(...) { Error( MailException("unknown", __FILE__, __LINE__) ); } return; }
bool CClient::r_GetRef( LPCTSTR & pszKey, CScriptObj * & pRef ) { ADDTOCALLSTACK("CClient::r_GetRef"); int i = FindTableHeadSorted( pszKey, sm_szRefKeys, COUNTOF(sm_szRefKeys)-1 ); if ( i >= 0 ) { pszKey += strlen( sm_szRefKeys[i] ); SKIP_SEPARATORS(pszKey); switch (i) { case CLIR_ACCOUNT: if ( pszKey[-1] != '.' ) // only used as a ref ! break; pRef = GetAccount(); return( true ); case CLIR_GMPAGEP: pRef = m_pGMPage; return( true ); case CLIR_HOUSEDESIGN: pRef = m_pHouseDesign; return( true ); case CLIR_PARTY: if ( !this->m_pChar->m_pParty ) { LPCTSTR oldKey = pszKey; if ( !strnicmp(pszKey, ".CREATE", 7) ) pszKey +=7; CChar * pChar = static_cast<CChar*>(static_cast<CGrayUID>(Exp_GetSingle(pszKey)).CharFind()); if ( !pChar ) return false; if ( !pChar->IsClient() ) return false; CPartyDef::AcceptEvent( pChar , this->GetChar()->GetUID(), true); if ( !this->m_pChar->m_pParty ) return false; pszKey = oldKey; // Restoring back to real pszKey, so we don't get errors for giving an uid instead of PDV_CREATE. } pRef = this->m_pChar->m_pParty; return true; case CLIR_TARG: pRef = m_Targ_UID.ObjFind(); return( true ); case CLIR_TARGPRV: pRef = m_Targ_PrvUID.ObjFind(); return( true ); case CLIR_TARGPROP: pRef = m_Prop_UID.ObjFind(); return( true ); } } return( CScriptObj::r_GetRef( pszKey, pRef )); }
// 请求创建角色 void CClientAuth::CreatePlayer(CClient *cl, Msg *pMsg) { const std::string &account = GetAccount(cl->GetClientID()); if (!account.empty()) { netData::CreatePlayer sendMsg; _CHECK_PARSE_(pMsg, sendMsg); sendMsg.set_account(account); LoginCenterConnect.SendMsgToServer(Config.GetCenterServerID(), sendMsg, LOGIN_TYPE_MAIN, LOGIN_SUB_CREATE_PLAYER, cl->GetClientID()); } else RunStateError("请求创建角色失败!没有认证!clientid:%d", cl->GetClientID()); }
void CClient::Announce( bool fArrive ) const { ADDTOCALLSTACK("CClient::Announce"); if ( !GetAccount() || !GetChar() || !GetChar()->m_pPlayer ) return; // We have logged in or disconnected. // Annouce my arrival or departure. TCHAR *pszMsg = Str_GetTemp(); if ( (g_Cfg.m_iArriveDepartMsg == 2) && (GetPrivLevel() > PLEVEL_Player) ) // notify of GMs { LPCTSTR zTitle = m_pChar->Noto_GetFameTitle(); sprintf(pszMsg, "@231 STAFF: %s%s logged %s.", zTitle, m_pChar->GetName(), (fArrive ? "in" : "out")); } else if ( g_Cfg.m_iArriveDepartMsg == 1 ) // notify of players { const CRegionBase *pRegion = m_pChar->GetTopPoint().GetRegion(REGION_TYPE_AREA); sprintf(pszMsg, g_Cfg.GetDefaultMsg(DEFMSG_MSG_ARRDEP_1), m_pChar->GetName(), fArrive ? g_Cfg.GetDefaultMsg(DEFMSG_MSG_ARRDEP_2) : g_Cfg.GetDefaultMsg(DEFMSG_MSG_ARRDEP_3), pRegion != NULL ? pRegion->GetName() : g_Serv.GetName()); } if ( pszMsg ) { ClientIterator it; for (CClient *pClient = it.next(); pClient != NULL; pClient = it.next()) { if ( (pClient == this) || (GetPrivLevel() > pClient->GetPrivLevel()) ) continue; pClient->SysMessage(pszMsg); } } // Check murder decay timer CItem *pMurders = m_pChar->LayerFind(LAYER_FLAG_Murders); if ( pMurders ) { if ( fArrive ) // on client login, set active timer on murder memory pMurders->SetTimeout(pMurders->m_itEqMurderCount.m_Decay_Balance * TICK_PER_SEC); else // or make it inactive on logout { pMurders->m_itEqMurderCount.m_Decay_Balance = static_cast<DWORD>(pMurders->GetTimerAdjusted()); pMurders->SetTimeout(-1); } } else if ( fArrive ) m_pChar->Noto_Murder(); // if there's no murder memory found, check if we need a new memory }
void LoginState::processUsername(const std::string &input, std::shared_ptr<Connection> connection) { connection->SetUsername(input); auto accounts = game_data->GetAccounts(); if(accounts.IsAccount(input)) { Sender::Send("Password: \r\n", connection); connection->SetAccount(accounts.GetAccount(input)); m_state_map[connection->GetID()] = PASSWORD; } else { Sender::Send("No account found, would you like to make a new one? Y/N\r\n", connection); m_state_map[connection->GetID()] = NEWACCOUNT; } }
void OnUserConnect(LocalUser* user) { ConfigTag* tag = user->MyClass->config; std::string vhost = tag->getString("vhost"); std::string replace; if (vhost.empty()) return; replace = "$ident"; if (vhost.find(replace) != std::string::npos) { std::string ident = user->ident; if (ident[0] == '~') ident.erase(0, 1); SearchAndReplace(vhost, replace, ident); } replace = "$account"; if (vhost.find(replace) != std::string::npos) { std::string account = GetAccount(user); if (account.empty()) account = "unidentified"; SearchAndReplace(vhost, replace, account); } if (vhost.length() > 64) { ServerInstance->Logs->Log("m_conn_vhost", DEFAULT, "m_conn_vhost: vhost in connect block %s is too long", user->MyClass->name.c_str()); return; } /* from m_sethost: validate the characters */ for (std::string::const_iterator x = vhost.begin(); x != vhost.end(); x++) { if (!hostmap.test(static_cast<unsigned char>(*x))) { ServerInstance->Logs->Log("m_conn_vhost", DEFAULT, "m_conn_vhost: vhost in connect block %s has invalid characters", user->MyClass->name.c_str()); return; } } user->ChangeDisplayedHost(vhost.c_str()); }
Json::Value AccountFolderManager::GetFolderJson(const bbpim::CalendarFolder& folder, bool skipDefaultCheck, bool fresh) { Json::Value val; val["id"] = webworks::Utils::intToStr(folder.id()); val["accountId"] = webworks::Utils::intToStr(folder.accountId()); val["name"] = folder.name().toStdString(); val["readonly"] = folder.isReadOnly(); val["ownerEmail"] = folder.ownerEmail().toStdString(); val["type"] = folder.type(); val["color"] = QString("%1").arg(folder.color(), 6, 16, QChar('0')).toUpper().toStdString(); val["visible"] = folder.isVisible(); val["default"] = skipDefaultCheck ? true : IsDefaultFolder(folder, fresh); val["enterprise"] = GetAccount(folder.accountId(), false).isEnterprise() == 1 ? true : false; return val; }
void SmtpSyncOutboxCommand::CheckNetworkConnectivity() { try { if (m_networkStatus->IsKnown()) { if (m_networkStatus->IsConnected()) { MojLogInfo(m_log, "CheckNetworkActivity: is connected, moving on"); GetAccount(); return; } else { MojLogInfo(m_log, "CheckNetworkActivity: is not connected, erroring out"); // Note that this account error explicitly doesn't delay the retry, on the assumption // that the next activity will be blocked until the network is available. m_error.errorCode = MailError::NO_NETWORK; m_error.errorOnAccount = true; m_error.errorOnEmail = false; m_error.internalError = "No network available for outbox sync"; m_error.errorText = ""; CompleteAndUpdateActivities(); return; } } else { MojLogInfo(m_log, "CheckNetworkActivity: state unknown, starting new activity"); MojLogInfo(m_log, "OutboxSyncer creating new network activity"); ActivityBuilder ab; MojString name; MojErr err = name.format("SMTP Internal Outbox Sync Network Activity for account %s", AsJsonString(m_accountId).c_str()); ErrorToException(err); ab.SetName(name); ab.SetDescription("Activity representing SMTP Outbox Sync Network Monitor"); ab.SetForeground(true); ab.SetRequiresInternet(false); ab.SetImmediate(true, ActivityBuilder::PRIORITY_LOW); m_networkActivity = Activity::PrepareNewActivity(ab); m_networkActivity->SetSlots(m_networkActivityUpdatedSlot, m_networkActivityErrorSlot); m_networkActivity->Create(m_client); } } catch (std::exception & e) { HandleException(e, __func__); } catch (...) { HandleException(__func__); } }
void AccountMgr::LoginAccount(const std::string& userId, const std::string& pw, const std::shared_ptr<Transmission::socket_session>& session){ auto accout = GetAccount(userId); if (accout){ if (accout->IsLogged()) AppendReplyBySession(session, LoginRepeatedly); if(accout->Login(session, pw) == false) AppendReplyBySession(session, LoginFailed_PW); else{ assert(m_pool.find(userId) != m_pool.end()); m_LoggedAccount[session] = m_pool[userId]; AppendReplyBySession(session, LoginSucceed); } } else{ AppendReplyBySession(session, LoginFailed_AC); } }
TEST(TryingMessageBuildTestGroup, TryingMessageDesAddrtTest) { MESSAGE *trying = NULL; AccountInit(); struct UserAgent *ua = CreateUserAgent(0); struct Dialog *dialog = AddDialog(NULL_DIALOG_ID, ua); MESSAGE *invite = BuildInviteMessage(dialog, (char *)"88002"); trying = BuildResponse(invite, STATUS_CODE_TRYING); STRCMP_EQUAL(AccountGetProxyAddr(GetAccount(0)),GetMessageAddr(trying)); DestroyMessage(&trying); DestroyMessage(&invite); ClearDialogManager(); ClearAccountManager(); DestroyUserAgent(&ua); }
CClient::~CClient() { bool bWasChar; // update ip history #ifndef _MTNETWORK HistoryIP& history = g_NetworkIn.getIPHistoryManager().getHistoryForIP(GetPeer()); #else HistoryIP& history = g_NetworkManager.getIPHistoryManager().getHistoryForIP(GetPeer()); #endif if ( GetConnectType() != CONNECT_GAME ) history.m_connecting--; history.m_connected--; bWasChar = ( m_pChar != NULL ); CharDisconnect(); // am i a char in game ? Cmd_GM_PageClear(); // Clear containers (CTAG and TOOLTIP) m_TagDefs.Empty(); m_TooltipData.Clean(true); CAccount * pAccount = GetAccount(); if ( pAccount ) { pAccount->OnLogout(this, bWasChar); m_pAccount = NULL; } if (m_pPopupPacket != NULL) { delete m_pPopupPacket; m_pPopupPacket = NULL; } if (m_net->isClosed() == false) g_Log.EventError("Client being deleted without being safely removed from the network system\n"); }
bool CClient::OnRxConsole( const byte * pData, size_t iLen ) { ADDTOCALLSTACK("CClient::OnRxConsole"); // A special console version of the client. (Not game protocol) if ( !iLen || ( GetConnectType() != CONNECT_TELNET )) return false; if ( IsSetEF( EF_AllowTelnetPacketFilter ) ) { bool fFiltered = xPacketFilter(pData, iLen); if ( fFiltered ) return fFiltered; } while ( iLen -- ) { int iRet = OnConsoleKey( m_Targ_Text, *pData++, GetAccount() != NULL ); if ( ! iRet ) return false; if ( iRet == 2 ) { if ( GetAccount() == NULL ) { if ( !m_zLogin[0] ) { if ( (uint)(m_Targ_Text.GetLength()) > (CountOf(m_zLogin) - 1) ) { SysMessage("Login:\n"); } else { strcpy(m_zLogin, m_Targ_Text); SysMessage("Password:\n"); } m_Targ_Text.Empty(); } else { CSString sMsg; CAccountRef pAccount = g_Accounts.Account_Find(m_zLogin); if (( pAccount == NULL ) || ( pAccount->GetPrivLevel() < PLEVEL_Admin )) { SysMessagef("%s\n", g_Cfg.GetDefaultMsg(DEFMSG_CONSOLE_NOT_PRIV)); m_Targ_Text.Empty(); return false; } if ( LogIn(m_zLogin, m_Targ_Text, sMsg ) == PacketLoginError::Success ) { m_Targ_Text.Empty(); return OnRxConsoleLoginComplete(); } else if ( ! sMsg.IsEmpty()) { SysMessage( sMsg ); return false; } m_Targ_Text.Empty(); } return true; } else { iRet = g_Serv.OnConsoleCmd( m_Targ_Text, this ); if (g_Cfg.m_fTelnetLog && GetPrivLevel() >= g_Cfg.m_iCommandLog) g_Log.Event(LOGM_GM_CMDS, "%x:'%s' commands '%s'=%d\n", GetSocketID(), GetName(), static_cast<lpctstr>(m_Targ_Text), iRet); } } } return true; }
bool CVmRunEvn::OpeatorAccount(const vector<CVmOperate>& listoperate, CAccountViewCache& view, const int nCurHeight) { NewAccont.clear(); for (auto& it : listoperate) { // CTransaction* tx = static_cast<CTransaction*>(listTx.get()); // CFund fund; // memcpy(&fund.value,it.money,sizeof(it.money)); // fund.nHeight = it.outheight; uint64_t value; memcpy(&value, it.money, sizeof(it.money)); auto tem = std::make_shared<CAccount>(); // vector_unsigned_char accountid = GetAccountID(it); // if (accountid.size() == 0) { // return false; // } // vector_unsigned_char accountid(it.accountid,it.accountid+sizeof(it.accountid)); vector_unsigned_char accountid = GetAccountID(it); CRegID userregId; CKeyID userkeyid; if(accountid.size() == 6){ userregId.SetRegID(accountid); if(!view.GetAccount(CUserID(userregId), *tem.get())){ return false; /// 账户不存在 } }else{ string sharkfundaddr(accountid.begin(), accountid.end()); userkeyid = CKeyID(sharkfundaddr); if(!view.GetAccount(CUserID(userkeyid), *tem.get())) { tem->keyID = userkeyid; /// 未产生过交易记录的账户 //return false; /// 账户不存在 } } shared_ptr<CAccount> vmAccount = GetAccount(tem); if (vmAccount.get() == NULL) { RawAccont.push_back(tem); vmAccount = tem; } LogPrint("vm", "account id:%s\r\n", HexStr(accountid).c_str()); LogPrint("vm", "befer account:%s\r\n", vmAccount.get()->ToString().c_str()); bool ret = false; // vector<CScriptDBOperLog> vAuthorLog; //todolist // if(IsSignatureAccount(vmAccount.get()->regID) || vmAccount.get()->regID == boost::get<CRegID>(tx->appRegId)) { ret = vmAccount.get()->OperateAccount((OperType)it.opeatortype, value, nCurHeight); } // else{ // ret = vmAccount.get()->OperateAccount((OperType)it.opeatortype, fund, *m_ScriptDBTip, vAuthorLog, height, &GetScriptRegID().GetVec6(), true); // } // LogPrint("vm", "after account:%s\r\n", vmAccount.get()->ToString().c_str()); if (!ret) { return false; } NewAccont.push_back(vmAccount); // m_dblog->insert(m_dblog->end(), vAuthorLog.begin(), vAuthorLog.end()); } return true; }
bool CClient::r_LoadVal( CScript & s ) { ADDTOCALLSTACK("CClient::r_LoadVal"); EXC_TRY("LoadVal"); if ( GetAccount() == NULL ) return( false ); LPCTSTR pszKey = s.GetKey(); if ( s.IsKeyHead( "CTAG.", 5 ) || s.IsKeyHead( "CTAG0.", 6 ) ) { bool fZero = s.IsKeyHead( "CTAG0.", 6 ); bool fQuoted = false; pszKey = pszKey + (fZero ? 6 : 5); m_TagDefs.SetStr( pszKey, fQuoted, s.GetArgStr( &fQuoted ), fZero ); return( true ); } switch ( FindTableSorted( pszKey, sm_szLoadKeys, COUNTOF(sm_szLoadKeys)-1 )) { case CC_ALLMOVE: addRemoveAll(true, false); GetAccount()->TogPrivFlags( PRIV_ALLMOVE, s.GetArgStr() ); if ( IsSetOF( OF_Command_Sysmsgs ) ) m_pChar->SysMessage( IsPriv(PRIV_ALLMOVE)? "Allmove ON" : "Allmove OFF" ); addPlayerView(NULL); break; case CC_ALLSHOW: addRemoveAll(false, true); GetAccount()->TogPrivFlags( PRIV_ALLSHOW, s.GetArgStr() ); if ( IsSetOF( OF_Command_Sysmsgs ) ) m_pChar->SysMessage( IsPriv(PRIV_ALLSHOW)? "Allshow ON" : "Allshow OFF" ); addPlayerView(NULL); break; case CC_DEBUG: addRemoveAll(true, false); GetAccount()->TogPrivFlags( PRIV_DEBUG, s.GetArgStr() ); if ( IsSetOF( OF_Command_Sysmsgs ) ) m_pChar->SysMessage( IsPriv(PRIV_DEBUG)? "Debug ON" : "Debug OFF" ); addPlayerView(NULL); break; case CC_DETAIL: GetAccount()->TogPrivFlags( PRIV_DETAIL, s.GetArgStr() ); if ( IsSetOF( OF_Command_Sysmsgs ) ) m_pChar->SysMessage( IsPriv(PRIV_DETAIL)? "Detail ON" : "Detail OFF" ); break; case CC_GM: // toggle your GM status on/off if ( GetPrivLevel() >= PLEVEL_GM ) { GetAccount()->TogPrivFlags( PRIV_GM, s.GetArgStr() ); m_pChar->ResendTooltip(); if ( IsSetOF( OF_Command_Sysmsgs ) ) m_pChar->SysMessage( IsPriv(PRIV_GM)? "GM ON" : "GM OFF" ); } break; case CC_HEARALL: GetAccount()->TogPrivFlags( PRIV_HEARALL, s.GetArgStr() ); if ( IsSetOF( OF_Command_Sysmsgs ) ) m_pChar->SysMessage( IsPriv(PRIV_HEARALL)? "Hearall ON" : "Hearall OFF" ); break; case CC_PRIVSHOW: // Hide my priv title. if ( GetPrivLevel() >= PLEVEL_Counsel ) { if ( ! s.HasArgs()) { GetAccount()->TogPrivFlags( PRIV_PRIV_NOSHOW, NULL ); } else if ( s.GetArgVal() ) { GetAccount()->ClearPrivFlags( PRIV_PRIV_NOSHOW ); } else { GetAccount()->SetPrivFlags( PRIV_PRIV_NOSHOW ); } m_pChar->ResendTooltip(); if ( IsSetOF( OF_Command_Sysmsgs ) ) m_pChar->SysMessage( IsPriv(PRIV_PRIV_NOSHOW)? "Privshow OFF" : "Privshow ON" ); } break; case CC_TARG: m_Targ_UID = s.GetArgVal(); break; case CC_TARGP: m_Targ_p.Read( s.GetArgRaw()); if ( !m_Targ_p.IsValidPoint() ) { m_Targ_p.ValidatePoint(); SysMessagef( "Invalid point: %s", s.GetArgStr() ); } break; case CC_TARGPROP: m_Prop_UID = s.GetArgVal(); break; case CC_TARGPRV: m_Targ_PrvUID = s.GetArgVal(); break; default: return( false ); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPT; EXC_DEBUG_END; return false; }
bool CClient::Cmd_Use_Item( CItem *pItem, bool fTestTouch, bool fScript ) { ADDTOCALLSTACK("CClient::Cmd_Use_Item"); // Assume we can see the target. // called from Event_DoubleClick if ( !pItem ) return false; if ( pItem->m_Can & CAN_I_FORCEDC ) fTestTouch = false; if ( fTestTouch ) { if ( !fScript ) { CItemContainer *pContainer = dynamic_cast<CItemContainer *>(pItem->GetParent()); if ( pContainer ) { // protect from ,snoop - disallow picking from not opened containers bool isInOpenedContainer = false; if ( pContainer->GetType() == IT_EQ_TRADE_WINDOW ) isInOpenedContainer = true; else { CClient::OpenedContainerMap_t::iterator itContainerFound = m_openedContainers.find(pContainer->GetUID().GetPrivateUID()); if ( itContainerFound != m_openedContainers.end() ) { DWORD dwTopContainerUID = (((*itContainerFound).second).first).first; DWORD dwTopMostContainerUID = (((*itContainerFound).second).first).second; CPointMap ptOpenedContainerPosition = ((*itContainerFound).second).second; const CObjBaseTemplate *pObjTop = pItem->GetTopLevelObj(); DWORD dwTopContainerUID_ToCheck = 0; if ( pContainer->GetContainer() ) dwTopContainerUID_ToCheck = pContainer->GetContainer()->GetUID().GetPrivateUID(); else dwTopContainerUID_ToCheck = pObjTop->GetUID().GetPrivateUID(); if ( (dwTopMostContainerUID == pObjTop->GetUID().GetPrivateUID()) && (dwTopContainerUID == dwTopContainerUID_ToCheck) ) { if ( pObjTop->IsChar() ) { // probably a pickup check from pack if pCharTop != this? isInOpenedContainer = true; } else { const CItem *pItemTop = static_cast<const CItem *>(pObjTop); if ( pItemTop && (pItemTop->IsType(IT_SHIP_HOLD) || pItemTop->IsType(IT_SHIP_HOLD_LOCK)) && (pItemTop->GetTopPoint().GetRegion(REGION_TYPE_MULTI) == m_pChar->GetTopPoint().GetRegion(REGION_TYPE_MULTI)) ) isInOpenedContainer = true; else if ( ptOpenedContainerPosition.GetDist(pObjTop->GetTopPoint()) <= 3 ) isInOpenedContainer = true; } } } } if ( !isInOpenedContainer ) { SysMessageDefault(DEFMSG_REACH_UNABLE); return false; } } } // CanTouch handles priv level compares for chars if ( !m_pChar->CanUse(pItem, false) ) { if ( !m_pChar->CanTouch(pItem) ) SysMessage((m_pChar->IsStatFlag(STATF_DEAD)) ? g_Cfg.GetDefaultMsg(DEFMSG_REACH_GHOST) : g_Cfg.GetDefaultMsg(DEFMSG_REACH_FAIL)); else SysMessageDefault(DEFMSG_REACH_UNABLE); return false; } } if ( IsTrigUsed(TRIGGER_DCLICK) || IsTrigUsed(TRIGGER_ITEMDCLICK) ) { if ( pItem->OnTrigger(ITRIG_DCLICK, m_pChar) == TRIGRET_RET_TRUE ) return true; } CItemBase *pItemDef = pItem->Item_GetDef(); bool bIsEquipped = pItem->IsItemEquipped(); if ( pItemDef->IsTypeEquippable() && !bIsEquipped && pItemDef->GetEquipLayer() ) { bool bMustEquip = true; if ( pItem->IsTypeSpellbook() ) bMustEquip = false; else if ( (pItem->IsType(IT_LIGHT_OUT) || pItem->IsType(IT_LIGHT_LIT)) && !pItem->IsItemInContainer() ) bMustEquip = false; if ( bMustEquip ) { if ( !m_pChar->CanMove(pItem) ) return false; if ( !m_pChar->CanCarry(pItem) ) { SysMessageDefault(DEFMSG_MSG_HEAVY); return false; } if ( !m_pChar->ItemEquip(pItem, NULL, true) ) return false; } } CItemSpawn *pSpawn = static_cast<CItemSpawn *>(pItem->m_uidSpawnItem.ItemFind()); // remove this item from its spawn when players DClick it from ground, no other way to take it out. if ( pSpawn ) pSpawn->DelObj(pItem->GetUID()); SetTargMode(); m_Targ_PrvUID = m_Targ_UID; m_Targ_UID = pItem->GetUID(); m_tmUseItem.m_pParent = pItem->GetParent(); // store item location to check later if it was not moved // Use types of items (specific to client) switch ( pItem->GetType() ) { case IT_TRACKER: { DIR_TYPE dir = static_cast<DIR_TYPE>(DIR_QTY + 1); // invalid value. if ( !m_pChar->Skill_Tracking(pItem->m_uidLink, dir) ) { if ( pItem->m_uidLink.IsValidUID() ) SysMessageDefault(DEFMSG_TRACKING_UNABLE); addTarget(CLIMODE_TARG_LINK, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_TRACKER_ATTUNE)); } return true; } case IT_SHAFT: case IT_FEATHER: { if ( IsTrigUsed(TRIGGER_SKILLMENU) ) { CScriptTriggerArgs args("sm_bolts"); if ( m_pChar->OnTrigger("@SkillMenu", m_pChar, &args) == TRIGRET_RET_TRUE ) return true; } return Cmd_Skill_Menu(g_Cfg.ResourceGetIDType(RES_SKILLMENU, "sm_bolts")); } case IT_FISH_POLE: // Just be near water ? addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_FISHING_PROMT), true); return true; case IT_DEED: addTargetDeed(pItem); return true; case IT_EQ_BANK_BOX: case IT_EQ_VENDOR_BOX: if ( !fScript ) g_Log.Event(LOGL_WARN|LOGM_CHEAT, "%lx:Cheater '%s' is using 3rd party tools to open bank box\n", GetSocketID(), GetAccount()->GetName()); return false; case IT_CONTAINER_LOCKED: case IT_SHIP_HOLD_LOCK: if ( !m_pChar->GetPackSafe()->ContentFindKeyFor(pItem) ) { SysMessageDefault(DEFMSG_ITEMUSE_LOCKED); if ( !IsPriv(PRIV_GM) ) return false; } case IT_CORPSE: case IT_SHIP_HOLD: case IT_CONTAINER: case IT_TRASH_CAN: { CItemContainer *pPack = static_cast<CItemContainer *>(pItem); if ( !pPack ) return false; if ( !m_pChar->Skill_Snoop_Check(pPack) ) { if ( !addContainerSetup(pPack) ) return false; } const CItemCorpse *pCorpseItem = static_cast<const CItemCorpse *>(pPack); if ( m_pChar->CheckCorpseCrime(pCorpseItem, true, true) ) SysMessageDefault(DEFMSG_LOOT_CRIMINAL_ACT); return true; } case IT_GAME_BOARD: { if ( !pItem->IsTopLevel() ) { SysMessageDefault(DEFMSG_ITEMUSE_GAMEBOARD_FAIL); return false; } CItemContainer *pBoard = static_cast<CItemContainer *>(pItem); ASSERT(pBoard); pBoard->Game_Create(); addContainerSetup(pBoard); return true; } case IT_BBOARD: addBulletinBoard(static_cast<CItemContainer *>(pItem)); return true; case IT_SIGN_GUMP: { GUMP_TYPE gumpid = pItemDef->m_ttContainer.m_gumpid; if ( !gumpid ) return false; addGumpTextDisp(pItem, gumpid, pItem->GetName(), pItem->IsIndividualName() ? pItem->GetName() : NULL); return true; } case IT_BOOK: case IT_MESSAGE: { if ( !addBookOpen(pItem) ) SysMessageDefault(DEFMSG_ITEMUSE_BOOK_FAIL); return true; } case IT_STONE_GUILD: case IT_STONE_TOWN: return true; case IT_POTION: { if ( !m_pChar->CanMove(pItem) ) { SysMessageDefault(DEFMSG_ITEMUSE_POTION_FAIL); return false; } if ( RES_GET_INDEX(pItem->m_itPotion.m_Type) == SPELL_Poison ) { // If we click directly on poison potion, we will drink poison and get ill. // To use it on Poisoning skill, the skill will request to target the potion. m_pChar->OnSpellEffect(SPELL_Poison, m_pChar, pItem->m_itSpell.m_spelllevel, NULL); return true; } if ( RES_GET_INDEX(pItem->m_itPotion.m_Type) == SPELL_Explosion ) { // Throw explosion potion if ( !m_pChar->ItemPickup(pItem, 1) ) // put the potion in our hand return false; pItem->m_itPotion.m_tick = 4; // countdown to explode pItem->m_itPotion.m_ignited = 1; // ignite it pItem->m_uidLink = m_pChar->GetUID(); pItem->SetTimeout(TICK_PER_SEC); addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_SELECT_POTION_TARGET), true, true, pItem->m_itPotion.m_tick * TICK_PER_SEC); return true; } m_pChar->Use_Drink(pItem); return true; } case IT_ANIM_ACTIVE: SysMessage(g_Cfg.GetDefaultMsg(DEFMSG_ITEM_IN_USE)); return false; case IT_CLOCK: addObjMessage(m_pChar->GetTopSector()->GetLocalGameTime(), pItem); return true; case IT_SPAWN_ITEM: case IT_SPAWN_CHAR: { pSpawn = static_cast<CItemSpawn *>(pItem); if ( !pSpawn ) return false; if ( pSpawn->m_currentSpawned ) { SysMessageDefault(DEFMSG_ITEMUSE_SPAWN_NEG); pSpawn->KillChildren(); // Removing existing objects spawned from it ( RESET ). } else { SysMessageDefault(DEFMSG_ITEMUSE_SPAWN_RESET); pSpawn->OnTick(true); // Forcing the spawn to work and create some objects ( START ). } return true; } case IT_SHRINE: { if ( m_pChar->OnSpellEffect(SPELL_Resurrection, m_pChar, 1000, pItem) ) return true; SysMessageDefault(DEFMSG_ITEMUSE_SHRINE); return true; } case IT_SHIP_TILLER: pItem->Speak(g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_TILLERMAN), HUE_TEXT_DEF, TALKMODE_SAY, FONT_NORMAL); return true; case IT_WAND: case IT_SCROLL: { SPELL_TYPE spell = static_cast<SPELL_TYPE>(RES_GET_INDEX(pItem->m_itWeapon.m_spell)); CSpellDef *pSpellDef = g_Cfg.GetSpellDef(spell); if ( !pSpellDef ) return false; if ( IsSetMagicFlags(MAGICF_PRECAST) && !pSpellDef->IsSpellType(SPELLFLAG_NOPRECAST) ) { int skill; if ( !pSpellDef->GetPrimarySkill(&skill, NULL) ) return false; m_tmSkillMagery.m_Spell = spell; // m_atMagery.m_Spell m_pChar->m_atMagery.m_Spell = spell; m_pChar->Skill_Start(static_cast<SKILL_TYPE>(skill)); return true; } return Cmd_Skill_Magery(spell, pItem); } case IT_RUNE: { if ( !m_pChar->CanMove(pItem, true) ) return false; addPromptConsole(CLIMODE_PROMPT_NAME_RUNE, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_RUNE_NAME), pItem->GetUID()); return true; } case IT_CARPENTRY: { if ( IsTrigUsed(TRIGGER_SKILLMENU) ) { CScriptTriggerArgs args("sm_carpentry"); if ( m_pChar->OnTrigger("@SkillMenu", m_pChar, &args) == TRIGRET_RET_TRUE ) return true; } return Cmd_Skill_Menu(g_Cfg.ResourceGetIDType(RES_SKILLMENU, "sm_carpentry")); } case IT_FORGE: // Solve for the combination of this item with another. addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_FORGE)); return true; case IT_ORE: return m_pChar->Skill_Mining_Smelt(pItem, NULL); case IT_INGOT: return Cmd_Skill_Smith(pItem); case IT_KEY: case IT_KEYRING: { if ( pItem->GetTopLevelObj() != m_pChar && !m_pChar->IsPriv(PRIV_GM) ) { SysMessageDefault(DEFMSG_ITEMUSE_KEY_FAIL); return false; } addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_KEY_PROMT), false, true); return true; } case IT_BANDAGE: // SKILL_HEALING, or SKILL_VETERINARY addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_BANDAGE_PROMT), false, false); return true; case IT_BANDAGE_BLOOD: // Clean the bandages. case IT_COTTON: // use on a spinning wheel. case IT_WOOL: // use on a spinning wheel. case IT_YARN: // Use this on a loom. case IT_THREAD: // Use this on a loom. case IT_COMM_CRYSTAL: addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_TARGET_PROMT), false, false); return true; case IT_CARPENTRY_CHOP: case IT_LOCKPICK: // Use on a locked thing. case IT_SCISSORS: addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_TARGET_PROMT), false, true); return true; case IT_WEAPON_MACE_PICK: if ( bIsEquipped || !IsSetOF(OF_NoDClickTarget) ) { // Mine at the location TCHAR *pszTemp = Str_GetTemp(); sprintf(pszTemp, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_MACEPICK_TARG), pItem->GetName()); addTarget(CLIMODE_TARG_USE_ITEM, pszTemp, true, true); return true; } case IT_WEAPON_SWORD: case IT_WEAPON_FENCE: case IT_WEAPON_AXE: case IT_WEAPON_MACE_SHARP: case IT_WEAPON_MACE_STAFF: case IT_WEAPON_MACE_SMITH: { if ( bIsEquipped || !IsSetOF(OF_NoDClickTarget) ) addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_WEAPON_PROMT), false, true); return true; } case IT_WEAPON_MACE_CROOK: if ( bIsEquipped || !IsSetOF(OF_NoDClickTarget) ) addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_CROOK_PROMT), false, true); return true; case IT_FISH: SysMessageDefault(DEFMSG_ITEMUSE_FISH_FAIL); return true; case IT_TELESCOPE: SysMessageDefault(DEFMSG_ITEMUSE_TELESCOPE); return true; case IT_MAP: addDrawMap(static_cast<CItemMap *>(pItem)); return true; case IT_CANNON_BALL: { TCHAR *pszTemp = Str_GetTemp(); sprintf(pszTemp, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_CBALL_PROMT), pItem->GetName()); addTarget(CLIMODE_TARG_USE_ITEM, pszTemp); return true; } case IT_CANNON_MUZZLE: { if ( !m_pChar->CanUse(pItem, false) ) return false; // Make sure the cannon is loaded. if ( !(pItem->m_itCannon.m_Load & 1) ) { addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_CANNON_POWDER)); return true; } if ( !(pItem->m_itCannon.m_Load & 2) ) { addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_CANNON_SHOT)); return true; } addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_CANNON_TARG), false, true); return true; } case IT_CRYSTAL_BALL: // Gaze into the crystal ball. return true; case IT_SEED: case IT_PITCHER_EMPTY: { TCHAR *pszTemp = Str_GetTemp(); sprintf(pszTemp, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_PITCHER_TARG), pItem->GetName()); addTarget(CLIMODE_TARG_USE_ITEM, pszTemp, true); return true; } case IT_SPELLBOOK: addSpellbookOpen(pItem); return true; case IT_SPELLBOOK_NECRO: addSpellbookOpen(pItem, 101); return true; case IT_SPELLBOOK_PALA: addSpellbookOpen(pItem, 201); return true; case IT_SPELLBOOK_BUSHIDO: addSpellbookOpen(pItem, 401); return true; case IT_SPELLBOOK_NINJITSU: addSpellbookOpen(pItem, 501); return true; case IT_SPELLBOOK_ARCANIST: addSpellbookOpen(pItem, 601); return true; case IT_SPELLBOOK_MYSTIC: addSpellbookOpen(pItem, 678); return true; case IT_SPELLBOOK_BARD: addSpellbookOpen(pItem, 701); return true; case IT_HAIR_DYE: { if ( !m_pChar->LayerFind(LAYER_BEARD) && !m_pChar->LayerFind(LAYER_HAIR) ) { SysMessageDefault(DEFMSG_ITEMUSE_DYE_NOHAIR); return true; } Dialog_Setup(CLIMODE_DIALOG, g_Cfg.ResourceGetIDType(RES_DIALOG, "d_hair_dye"), 0, pItem); return true; } case IT_DYE: addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_DYE_VAT)); return true; case IT_DYE_VAT: addTarget(CLIMODE_TARG_USE_ITEM, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_DYE_TARG), false, true); return true; case IT_MORTAR: { if ( IsTrigUsed(TRIGGER_SKILLMENU) ) { CScriptTriggerArgs args("sm_alchemy"); if ( m_pChar->OnTrigger("@SkillMenu", m_pChar, &args) == TRIGRET_RET_TRUE ) return true; } return Cmd_Skill_Menu(g_Cfg.ResourceGetIDType(RES_SKILLMENU, "sm_alchemy")); } case IT_CARTOGRAPHY: { if ( IsTrigUsed(TRIGGER_SKILLMENU) ) { CScriptTriggerArgs args("sm_cartography"); if ( m_pChar->OnTrigger("@SkillMenu", m_pChar, &args) == TRIGRET_RET_TRUE ) return true; } return Cmd_Skill_Menu(g_Cfg.ResourceGetIDType(RES_SKILLMENU, "sm_cartography")); } case IT_COOKING: { if ( IsTrigUsed(TRIGGER_SKILLMENU) ) { CScriptTriggerArgs args("sm_cooking"); if ( m_pChar->OnTrigger("@SkillMenu", m_pChar, &args) == TRIGRET_RET_TRUE ) return true; } return Cmd_Skill_Menu(g_Cfg.ResourceGetIDType(RES_SKILLMENU, "sm_cooking")); } case IT_TINKER_TOOLS: { if ( IsTrigUsed(TRIGGER_SKILLMENU) ) { CScriptTriggerArgs args("sm_tinker"); if ( m_pChar->OnTrigger("@SkillMenu", m_pChar, &args) == TRIGRET_RET_TRUE ) return true; } return Cmd_Skill_Menu(g_Cfg.ResourceGetIDType(RES_SKILLMENU, "sm_tinker")); } case IT_SEWING_KIT: { TCHAR *pszTemp = Str_GetTemp(); sprintf(pszTemp, g_Cfg.GetDefaultMsg(DEFMSG_ITEMUSE_SEWKIT_PROMT), pItem->GetName()); addTarget(CLIMODE_TARG_USE_ITEM, pszTemp); return true; } case IT_SCROLL_BLANK: Cmd_Skill_Inscription(); return true; default: { // An NPC could use it this way. if ( m_pChar->Use_Item(pItem) ) return true; break; } } SysMessageDefault(DEFMSG_ITEMUSE_CANTTHINK); return false; }
void CPlayer::SetNick ( const char* szNick ) { if ( !m_strNick.empty () && m_strNick != szNick ) { // If changing, add the new name to the whowas list g_pGame->GetConsole ()->GetWhoWas ()->Add ( szNick, inet_addr ( GetSourceIP() ), GetSerial (), GetPlayerVersion (), GetAccount ()->GetName () ); } m_strNick.AssignLeft ( szNick, MAX_NICK_LENGTH ); }
bool CClient::OnRxAxis( const byte * pData, size_t iLen ) { ADDTOCALLSTACK("CClient::OnRxAxis"); if ( !iLen || ( GetConnectType() != CONNECT_AXIS )) return false; while ( iLen -- ) { int iRet = OnConsoleKey( m_Targ_Text, *pData++, GetAccount() != NULL ); if ( ! iRet ) return false; if ( iRet == 2 ) { if ( GetAccount() == NULL ) { if ( !m_zLogin[0] ) { if ( (uint)(m_Targ_Text.GetLength()) <= (CountOf(m_zLogin) - 1) ) strcpy(m_zLogin, m_Targ_Text); m_Targ_Text.Empty(); } else { CSString sMsg; CAccountRef pAccount = g_Accounts.Account_Find(m_zLogin); if (( pAccount == NULL ) || ( pAccount->GetPrivLevel() < PLEVEL_Counsel )) { SysMessagef("\"MSG:%s\"", g_Cfg.GetDefaultMsg(DEFMSG_AXIS_NOT_PRIV)); m_Targ_Text.Empty(); return false; } if ( LogIn(m_zLogin, m_Targ_Text, sMsg ) == PacketLoginError::Success ) { m_Targ_Text.Empty(); if ( GetPrivLevel() < PLEVEL_Counsel ) { SysMessagef("\"MSG:%s\"", g_Cfg.GetDefaultMsg(DEFMSG_AXIS_NOT_PRIV)); return false; } if (GetPeer().IsValidAddr()) { CScriptTriggerArgs Args; Args.m_VarsLocal.SetStrNew("Account",GetName()); Args.m_VarsLocal.SetStrNew("IP",GetPeer().GetAddrStr()); TRIGRET_TYPE tRet = TRIGRET_RET_DEFAULT; r_Call("f_axis_preload", this, &Args, NULL, &tRet); if ( tRet == TRIGRET_RET_FALSE ) return false; if ( tRet == TRIGRET_RET_TRUE ) { SysMessagef("\"MSG:%s\"", g_Cfg.GetDefaultMsg(DEFMSG_AXIS_DENIED)); return false; } time_t dateChange; dword dwSize; if ( ! CSFileList::ReadFileInfo( "Axis.db", dateChange, dwSize )) { SysMessagef("\"MSG:%s\"", g_Cfg.GetDefaultMsg(DEFMSG_AXIS_INFO_ERROR)); return false; } CSFile FileRead; if ( ! FileRead.Open( "Axis.db", OF_READ|OF_BINARY )) { SysMessagef("\"MSG:%s\"", g_Cfg.GetDefaultMsg(DEFMSG_AXIS_FILE_ERROR)); return false; } tchar szTmp[8*1024]; PacketWeb packet; for (;;) { size_t iLength = FileRead.Read( szTmp, sizeof( szTmp ) ); if ( iLength <= 0 ) break; packet.setData((byte*)szTmp, iLength); packet.send(this); dwSize -= (dword)iLength; if ( dwSize <= 0 ) break; } return true; } return false; } else if ( ! sMsg.IsEmpty()) { SysMessagef("\"MSG:%s\"", (lpctstr)sMsg); return false; } m_Targ_Text.Empty(); } return true; } } } return true; }
bool CCharPlayer::r_WriteVal( CChar * pChar, LPCTSTR pszKey, CGString & sVal ) { ADDTOCALLSTACK("CCharPlayer::r_WriteVal"); EXC_TRY("WriteVal"); if ( !pChar || !GetAccount() ) return false; if ( !strnicmp(pszKey, "SKILLCLASS.", 11) ) { return GetSkillClass()->r_WriteVal(pszKey + 11, sVal, pChar); } else if ( ( !strnicmp(pszKey, "GUILD", 5) ) || ( !strnicmp(pszKey, "TOWN", 4) ) ) { bool bIsGuild = !strnicmp(pszKey, "GUILD", 5); pszKey += bIsGuild ? 5 : 4; if ( *pszKey == 0 ) { CItemStone *pMyGuild = pChar->Guild_Find(bIsGuild ? MEMORY_GUILD : MEMORY_TOWN); if ( pMyGuild ) sVal.FormatHex((DWORD)pMyGuild->GetUID()); else sVal.FormatVal(0); return true; } else if ( *pszKey == '.' ) { pszKey += 1; CItemStone *pMyGuild = pChar->Guild_Find(bIsGuild ? MEMORY_GUILD : MEMORY_TOWN); if ( pMyGuild ) return pMyGuild->r_WriteVal(pszKey, sVal, pChar); } return false; } switch ( FindTableHeadSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case CPC_ACCOUNT: sVal = GetAccount()->GetName(); return( true ); case CPC_DEATHS: sVal.FormatVal( m_wDeaths ); return( true ); case CPC_DSPEECH: m_Speech.WriteResourceRefList( sVal ); return( true ); case CPC_KILLS: sVal.FormatVal( m_wMurders ); return( true ); case CPC_KRTOOLBARSTATUS: sVal.FormatVal( m_bKrToolbarEnabled ); return true; case CPC_ISDSPEECH: if ( pszKey[9] != '.' ) return( false ); pszKey += 10; sVal = m_Speech.ContainsResourceName(RES_SPEECH, pszKey) ? "1" : "0"; return( true ); case CPC_LASTUSED: sVal.FormatLLVal( - g_World.GetTimeDiff( m_timeLastUsed ) / TICK_PER_SEC ); return( true ); case CPC_PFLAG: sVal.FormatVal(m_pflag); return( true ); case CPC_PROFILE: { TCHAR szLine[SCRIPT_MAX_LINE_LEN-16]; Str_MakeUnFiltered( szLine, m_sProfile, sizeof(szLine)); sVal = szLine; } return( true ); case CPC_REFUSETRADES: { CVarDefCont * pVar = pChar->GetDefKey(pszKey, true); sVal.FormatLLVal(pVar ? pVar->GetValNum() : 0); } return( true ); case CPC_SKILLCLASS: sVal = GetSkillClass()->GetResourceName(); return( true ); case CPC_SKILLLOCK: { // "SkillLock[alchemy]" SKILL_TYPE skill = Skill_GetLockType( pszKey ); if ( skill <= SKILL_NONE ) return( false ); sVal.FormatVal( Skill_GetLock( skill )); } return( true ); case CPC_SPEEDMODE: sVal.FormatVal( m_speedMode ); return( true ); case CPC_STATLOCK: { // "StatLock[str]" STAT_TYPE stat = Stat_GetLockType( pszKey ); if (( stat <= STAT_NONE ) || ( stat >= STAT_BASE_QTY )) return( false ); sVal.FormatVal( Stat_GetLock( stat )); } return( true ); default: if ( FindTableSorted( pszKey, CCharNPC::sm_szLoadKeys, COUNTOF( CCharNPC::sm_szLoadKeys )-1 ) >= 0 ) { sVal = "0"; return( true ); } return( false ); } EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pChar); EXC_DEBUG_END; return false; }
void AccountFinderCommand::RunImpl() { CommandTraceFunction(); GetAccount(); }