/* Unpack some actions from a bit stream. Set transmitTimestamp=true for server-->client, * false for client-->server. If true, set the current gamecycle. */ void CActionFactory::unpack (NLMISC::CBitMemStream &message, std::vector <CAction *>& actions, NLMISC::TGameCycle /* currentCycle */ ) { actions.clear (); static int n = 0; n++; while ((sint32)message.length() * 8 - message.getPosInBit () >= 8) { TActionCode code; bool shortcode; message.serial (shortcode); if (shortcode) { code = 0; uint32 val; message.serial (val, 2); code = (TActionCode) val; } else { message.serial (code); } CAction *action = create (INVALID_SLOT, code); //nlinfo ("m%d size: p:%d s:%d c:%d (actionsize: %d) slot:%hu", n, message.getPosInBit (), message.length() * 8, code, action->size(), (uint16)action->CLEntityId); if (action == NULL) { nlwarning ("Unpacking an action with unknown code, skip it (%u)", code); } else { action->unpack (message); actions.push_back (action); } } }
/* Unpack an action from a bit stream. */ CAction *CActionFactory::unpack (NLMISC::CBitMemStream &message, NLMISC::TGameCycle /* currentCycle */ ) { CAction *action = NULL; if ((sint32)message.length() * 8 - message.getPosInBit () >= 8) { TActionCode code; bool shortcode; message.serial (shortcode); if (shortcode) { code = 0; uint32 val; message.serial (val, 2); code = (TActionCode) val; } else { message.serial (code); } action = create (INVALID_SLOT, (TActionCode)code); if (action == NULL) { nlwarning ("Unpacking an action with unknown code, skip it (%u)", code); } else { action->unpack (message); } } return action; }