// --------------------------------------------------------- bool CPartyDef::MessageEvent( CGrayUID uidDst, CGrayUID uidSrc, const NCHAR * pText, int ilenmsg ) { ADDTOCALLSTACK("CPartyDef::MessageEvent"); UNREFERENCED_PARAMETER(ilenmsg); if ( pText == NULL ) return( false ); if ( uidDst && !IsInParty( uidDst.CharFind() ) ) return( false ); CChar * pFrom = uidSrc.CharFind(); CChar * pTo = NULL; if ( uidDst != (DWORD) 0 ) pTo = uidDst.CharFind(); TCHAR * szText = Str_GetTemp(); CvtNUNICODEToSystem( szText, MAX_TALK_BUFFER, pText, MAX_TALK_BUFFER ); if ( ! m_pSpeechFunction.IsEmpty() ) { TRIGRET_TYPE tr = TRIGRET_RET_FALSE; CScriptTriggerArgs Args; Args.m_iN1 = uidSrc; Args.m_iN2 = uidDst; Args.m_s1 = szText; Args.m_s1_raw = szText; if ( r_Call(m_pSpeechFunction, &g_Serv, &Args, NULL, &tr) ) { if ( tr == TRIGRET_RET_TRUE ) return( false ); } } if ( g_Log.IsLoggedMask( LOGM_PLAYER_SPEAK )) g_Log.Event( LOGM_PLAYER_SPEAK, "%lx:'%s' Says '%s' in party to '%s'\n", pFrom->GetClient()->GetSocketID(), pFrom->GetName(), szText, pTo ? pTo->GetName() : "all" ); sprintf(szText, g_Cfg.GetDefaultMsg( DEFMSG_PARTY_MSG ), pText); PacketPartyChat cmd(pFrom, pText); if ( pTo != NULL ) SendMemberMsg(pTo, &cmd); else SendAll(&cmd); return( true ); }
bool CServerDef::r_WriteVal( lpctstr pszKey, CSString &sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CServerDef::r_WriteVal"); EXC_TRY("WriteVal"); switch ( FindTableSorted( pszKey, sm_szLoadKeys, CountOf( sm_szLoadKeys )-1 ) ) { case SC_ACCAPP: sVal.FormatVal( m_eAccApp ); break; case SC_ACCAPPS: // enum string ASSERT( m_eAccApp >= 0 && m_eAccApp < ACCAPP_QTY ); sVal = sm_AccAppTable[ m_eAccApp ]; break; case SC_ADMINEMAIL: sVal = m_sEMail; break; case SC_AGE: // display the age in days. sVal.FormatLLVal( GetAgeHours()/24 ); break; case SC_CLIENTVERSION: { char szVersion[ 128 ]; sVal = m_ClientVersion.WriteClientVer( szVersion ); } break; case SC_CREATE: sVal.FormatLLVal( -( g_World.GetTimeDiff(m_timeCreate) / TICK_PER_SEC ) ); break; case SC_LANG: sVal = m_sLang; break; case SC_LASTVALIDDATE: if ( m_timeLastValid.IsTimeValid() ) sVal.FormatLLVal( GetTimeSinceLastValid() / ( TICK_PER_SEC * 60 ) ); else sVal = "NA"; break; case SC_LASTVALIDTIME: // How many seconds ago. sVal.FormatLLVal( m_timeLastValid.IsTimeValid() ? ( GetTimeSinceLastValid() / TICK_PER_SEC ) : -1 ); break; case SC_SERVIP: sVal = m_ip.GetAddrStr(); break; case SC_NAME: case SC_SERVNAME: sVal = GetName(); // What the name should be. Fill in from ping. break; case SC_SERVPORT: sVal.FormatVal( m_ip.GetPort() ); break; case SC_ACCOUNTS: sVal.FormatSTVal( StatGet( SERV_STAT_ACCOUNTS ) ); break; case SC_CLIENTS: sVal.FormatSTVal( StatGet( SERV_STAT_CLIENTS ) ); break; case SC_ITEMS: sVal.FormatSTVal( StatGet( SERV_STAT_ITEMS ) ); break; case SC_MEM: sVal.FormatSTVal( StatGet( SERV_STAT_MEM ) ); break; case SC_CHARS: sVal.FormatSTVal( StatGet( SERV_STAT_CHARS ) ); break; case SC_TIMEZONE: sVal.FormatVal( m_TimeZone ); break; case SC_URL: sVal = m_sURL; break; case SC_URLLINK: // try to make a link of it. if ( m_sURL.IsEmpty() ) { sVal = GetName(); break; } sVal.Format("<a href=\"http://%s\">%s</a>", static_cast<lpctstr>(m_sURL), GetName()); break; case SC_VERSION: sVal = SPHERE_VERSION; break; default: { lpctstr pszArgs = strchr(pszKey, ' '); if (pszArgs != NULL) GETNONWHITESPACE(pszArgs); CScriptTriggerArgs Args( pszArgs ? pszArgs : "" ); if ( r_Call( pszKey, pSrc, &Args, &sVal ) ) return true; return CScriptObj::r_WriteVal( pszKey, sVal, pSrc ); } } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CDialogDef::r_Verb( CScript & s, CTextConsole * pSrc ) // some command on this object as a target { ADDTOCALLSTACK("CDialogDef::r_Verb"); EXC_TRY("Verb"); // The first part of the key is GUMPCTL_TYPE lpctstr pszKey = s.GetKey(); int index = FindTableSorted( pszKey, sm_szLoadKeys, CountOf(sm_szLoadKeys)-1 ); if ( index < 0 ) { CSString sVal; CScriptTriggerArgs Args(s.GetArgRaw()); if ( r_Call(s.GetKey(), pSrc, &Args, &sVal) ) return true; if (!m_pObj) return CResourceLink::r_Verb(s, pSrc); return m_pObj->r_Verb(s, pSrc); } lpctstr pszArgs = s.GetArgStr(); switch( index ) { case GUMPCTL_PAGE: { if ( m_uiControls >= (CountOf(m_sControls) - 1) ) return false; GET_ABSOLUTE( page ); if ( page <= 0 ) return true; int iNewPage; if ( m_wPage == 0 || page > m_wPage || page == 0 ) iNewPage = page; else if ( page == m_wPage ) iNewPage = 1; else iNewPage = page + 1; m_sControls[m_uiControls].Format( "page %d", iNewPage ); ++m_uiControls; return true; } case GUMPCTL_BUTTON: // 7 = X,Y,Down gump,Up gump,pressable(1/0),page,id case GUMPCTL_BUTTONTILEART: // 11 = X,Y,Down gump,Up gump,pressable(1/0),page,id,tileart,hue,X,Y { if ( m_uiControls >= (CountOf(m_sControls) - 1) ) return false; GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( down ); GET_ABSOLUTE( up ); GET_ABSOLUTE( press ); GET_ABSOLUTE( page ); GET_ABSOLUTE( id ); int iNewPage; if ( m_wPage == 0 || page > m_wPage || page == 0 ) iNewPage = page; else if ( page == m_wPage ) iNewPage = 1; else iNewPage = page + 1; if (index == GUMPCTL_BUTTON) m_sControls[m_uiControls].Format( "button %d %d %d %d %d %d %d", x, y, down, up, press, iNewPage, id ); else { GET_ABSOLUTE( tileId ); GET_ABSOLUTE( tileHue ); GET_ABSOLUTE( tileX ); GET_ABSOLUTE( tileY ); m_sControls[m_uiControls].Format( "buttontileart %d %d %d %d %d %d %d %d %d %d %d", x, y, down, up, press, iNewPage, id, tileId, tileHue, tileX, tileY ); } ++m_uiControls; return true; } case GUMPCTL_GUMPPIC: { GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( id ); SKIP_ALL( pszArgs ); m_sControls[m_uiControls].Format( "gumppic %d %d %d%s%s", x, y, id, *pszArgs ? " hue=" : "", *pszArgs ? pszArgs : "" ); ++m_uiControls; return true; } case GUMPCTL_GUMPPICTILED: { GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( sX ); GET_ABSOLUTE( sY ); GET_ABSOLUTE( id ); m_sControls[m_uiControls].Format( "gumppictiled %d %d %d %d %d", x, y, sX, sY, id ); ++m_uiControls; return true; } case GUMPCTL_RESIZEPIC: { GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( id ); GET_ABSOLUTE( sX ); GET_ABSOLUTE( sY ); m_sControls[m_uiControls].Format( "resizepic %d %d %d %d %d", x, y, id, sX, sY ); ++m_uiControls; return true; } case GUMPCTL_TILEPIC: case GUMPCTL_TILEPICHUE: { GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( id ); SKIP_ALL( pszArgs ); // TilePic don't use args, TilePicHue yes :) if ( index == GUMPCTL_TILEPIC ) m_sControls[m_uiControls].Format( "tilepic %d %d %d", x, y, id ); else m_sControls[m_uiControls].Format( "tilepichue %d %d %d%s%s", x, y, id, *pszArgs ? " " : "", *pszArgs ? pszArgs : "" ); ++m_uiControls; return true; } case GUMPCTL_DTEXT: { if ( m_uiControls >= (CountOf(m_sControls) - 1) ) return false; if ( m_uiTexts >= (CountOf(m_sText) - 1) ) return false; GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( hue ); SKIP_ALL( pszArgs ) if ( *pszArgs == '.' ) pszArgs++; uint iText = GumpAddText( *pszArgs ? pszArgs : "" ); m_sControls[m_uiControls].Format( "text %d %d %d %u", x, y, hue, iText ); ++m_uiControls; return true; } case GUMPCTL_DCROPPEDTEXT: { if ( m_uiControls >= (CountOf(m_sControls) - 1) ) return false; if ( m_uiTexts >= (CountOf(m_sText) - 1) ) return false; GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( w ); GET_ABSOLUTE( h ); GET_ABSOLUTE( hue ); SKIP_ALL( pszArgs ) if ( *pszArgs == '.' ) pszArgs++; uint iText = GumpAddText( *pszArgs ? pszArgs : "" ); m_sControls[m_uiControls].Format( "croppedtext %d %d %d %d %d %u", x, y, w, h, hue, iText ); ++m_uiControls; return true; } case GUMPCTL_DHTMLGUMP: { if ( m_uiControls >= (CountOf(m_sControls) - 1) ) return false; if ( m_uiTexts >= (CountOf(m_sText) - 1) ) return false; GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( w ); GET_ABSOLUTE( h ); GET_ABSOLUTE( bck ); GET_ABSOLUTE( options ); SKIP_ALL( pszArgs ) uint iText = GumpAddText( *pszArgs ? pszArgs : "" ); m_sControls[m_uiControls].Format( "htmlgump %d %d %d %d %u %d %d", x, y, w, h, iText, bck, options ); ++m_uiControls; return true; } case GUMPCTL_DTEXTENTRY: { if ( m_uiControls >= (CountOf(m_sControls) - 1) ) return false; if ( m_uiTexts >= (CountOf(m_sText) - 1) ) return false; GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( w ); GET_ABSOLUTE( h ); GET_ABSOLUTE( hue ); GET_ABSOLUTE( id ); SKIP_ALL( pszArgs ) uint iText = GumpAddText( *pszArgs ? pszArgs : "" ); m_sControls[m_uiControls].Format( "textentry %d %d %d %d %d %d %u", x, y, w, h, hue, id, iText ); ++m_uiControls; return true; } case GUMPCTL_DTEXTENTRYLIMITED: { if ( m_uiControls >= (CountOf(m_sControls) - 1) ) return false; if ( m_uiTexts >= (CountOf(m_sText) - 1) ) return false; GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( w ); GET_ABSOLUTE( h ); GET_ABSOLUTE( hue ); GET_ABSOLUTE( id ); GET_ABSOLUTE( charLimit ); SKIP_ALL( pszArgs ) uint iText = GumpAddText( *pszArgs ? pszArgs : "" ); m_sControls[m_uiControls].Format( "textentrylimited %d %d %d %d %d %d %u %d", x, y, w, h, hue, id, iText, charLimit ); ++m_uiControls; return true; } case GUMPCTL_CHECKBOX: { if ( m_uiControls >= (CountOf(m_sControls) - 1) ) return false; GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( down ); GET_ABSOLUTE( up ); GET_ABSOLUTE( state ); GET_ABSOLUTE( id ); m_sControls[m_uiControls].Format( "checkbox %d %d %d %d %d %d", x, y, down, up, state, id ); ++m_uiControls; return true; } case GUMPCTL_RADIO: { if ( m_uiControls >= (CountOf(m_sControls) - 1) ) return false; GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( down ); GET_ABSOLUTE( up ); GET_ABSOLUTE( state ); GET_ABSOLUTE( id ); m_sControls[m_uiControls].Format( "radio %d %d %d %d %d %d", x, y, down, up, state, id ); ++m_uiControls; return true; } case GUMPCTL_CHECKERTRANS: { if ( m_uiControls >= (CountOf(m_sControls) - 1) ) return false; GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( width ); GET_ABSOLUTE( height ); m_sControls[m_uiControls].Format( "checkertrans %d %d %d %d", x, y, width, height ); ++m_uiControls; return true; } case GUMPCTL_DORIGIN: { // GET_RELATIVE( x, m_iOriginX ); // GET_RELATIVE( y, m_iOriginY ); // m_iOriginX = x; // m_iOriginY = y; SKIP_ALL( pszArgs ); if ( *pszArgs == '-' && (IsSpace( pszArgs[1] ) || !pszArgs[1]) ) pszArgs++; else if ( *pszArgs == '*' ) m_iOriginX += Exp_GetSingle( ++pszArgs ); else m_iOriginX = Exp_GetSingle( pszArgs ); SKIP_ALL( pszArgs ); if ( *pszArgs == '-' && (IsSpace( pszArgs[1] ) || !pszArgs[1]) ) pszArgs++; else if ( *pszArgs == '*' ) m_iOriginY += Exp_GetSingle( ++pszArgs ); else m_iOriginY = Exp_GetSingle( pszArgs ); return true; } case GUMPCTL_NODISPOSE: m_fNoDispose = true; break; case GUMPCTL_CROPPEDTEXT: case GUMPCTL_TEXT: case GUMPCTL_TEXTENTRY: case GUMPCTL_TEXTENTRYLIMITED: break; case GUMPCTL_XMFHTMLGUMP: // 7 = x,y,sx,sy, cliloc(1003000) hasBack canScroll case GUMPCTL_XMFHTMLGUMPCOLOR: // 7 + color. { GET_RELATIVE( x, m_iOriginX ); GET_RELATIVE( y, m_iOriginY ); GET_ABSOLUTE( sX ); GET_ABSOLUTE( sY ); GET_ABSOLUTE( cliloc ); GET_ABSOLUTE( hasBack ); GET_ABSOLUTE( canScroll ); //SKIP_ALL( pszArgs ) if ( index == GUMPCTL_XMFHTMLGUMP ) // xmfhtmlgump doesn't use color m_sControls[m_uiControls].Format( "xmfhtmlgump %d %d %d %d %d %d %d" , x, y, sX, sY, cliloc, hasBack, canScroll ); else m_sControls[m_uiControls].Format( "xmfhtmlgumpcolor %d %d %d %d %d %d %d%s%s", x, y, sX, sY, cliloc, hasBack, canScroll, *pszArgs ? " " : "", *pszArgs ? pszArgs : "" ); ++m_uiControls; return true; } case GUMPCTL_XMFHTMLTOK: // 9 = x y width height has_background has_scrollbar color cliloc_id @args { GET_RELATIVE(x, m_iOriginX); GET_RELATIVE(y, m_iOriginY); GET_ABSOLUTE(sX); GET_ABSOLUTE(sY); GET_ABSOLUTE(hasBack); GET_ABSOLUTE(canScroll); GET_ABSOLUTE(color); GET_ABSOLUTE(cliloc); SKIP_ALL(pszArgs); m_sControls[m_uiControls].Format("xmfhtmltok %d %d %d %d %d %d %d %d %s", x, y, sX, sY, hasBack, canScroll, color, cliloc, *pszArgs ? pszArgs : ""); ++m_uiControls; return true; } default: break; } if ( m_uiControls >= (CountOf(m_sControls) - 1) ) return false; m_sControls[m_uiControls].Format("%s %s", pszKey, pszArgs); ++m_uiControls; return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPTSRC; EXC_DEBUG_END; return false; }
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; }