int CNssPlayer::PopUpMessage(CGameObject *oObject, char *Params) { CNWSPlayer *Player = (*NWN_AppManager)->app_server->GetClientObjectByObjectId(oObject->obj_id); if (Player) { CNWSMessage *Msg = (*NWN_AppManager)->app_server->GetNWSMessage(); CGameObjectArray *CGA = (*NWN_AppManager)->app_server->GetObjectArray(); CGameObject go; ((CNWMessage*)Msg)->CreateWriteMessage(128, Player->pl_id, 1); Msg->WriteOBJECTIDServer(oObject->obj_id); CExoString Text = Params; char *pMessageData = 0; nwn_objid_t Sender = 0; DWORD oldMask; ((CNWMessage*)Msg)->WriteBOOL(1); // addicted2rpg: This line is definitely failing. It crashes at 0x773DE41B writing to a null pointer. // addicted2rpg: I don't have the time to debug it and fix it. Commenting it out sends a blank // popup, which I would rather do until its fixed. // ((CNWMessage*)Msg)->WriteCExoString(Text, 32); if (((CNWMessage*)Msg)->GetWriteMessage(&pMessageData, &Sender)) { Msg->SendServerToPlayerMessage(Player->pl_id, 27, 4, pMessageData, Sender); //addicted2rpg: just experimenting below. This line actually preserves the server, but crashes the client! //Msg->SendServerToPlayerMessage(Player->pl_id, 27, 4, (void *)&Params, Sender); } return 1; } return 0; }
int CNWNXConnect::SendhakList( CNWSPlayer * ply ){ if( !ply ) return 0; CNWSMessage * msg = (*NWN_AppManager)->app_server->GetNWSMessage(); CNWNXMemory mem; CNWMessage * mess = NWNX_CreateMessage( ); if( !mess ){ return 0; } mess->WriteINT( HAKLen, 32 ); for( int n=0;n<HAKLen;n++ ){ mess->WriteCExoString( HAK[n], 32 ); } mess->WriteCExoString( *TLK, 32 ); char * data=0; DWORD len=0; if( mess->GetWriteMessage( &data, &len ) ){ msg->SendServerToPlayerMessage( ply->pl_id, 100, 0, data, len ); NWNX_DestroyMessage( mess ); return 1; } else NWNX_DestroyMessage( mess ); return 0; }