void SpaceStation::Load(Serializer::Reader &rd, Space *space) { ModelBody::Load(rd, space); MarketAgent::Load(rd); int num = rd.Int32(); if (num > Equip::TYPE_MAX) throw SavedGameCorruptException(); for (int i=0; i<Equip::TYPE_MAX; i++) { m_equipmentStock[i] = 0; } for (int i=0; i<num; i++) { m_equipmentStock[i] = static_cast<Equip::Type>(rd.Int32()); } // load shityard int numShipsForSale = rd.Int32(); for (int i=0; i<numShipsForSale; i++) { ShipType::Id id(rd.String()); std::string regId(rd.String()); SceneGraph::ModelSkin skin; skin.Load(rd); ShipOnSale sos(id, regId, skin); m_shipsOnSale.push_back(sos); } for (int i=0; i<MAX_DOCKING_PORTS; i++) { m_shipDocking[i].shipIndex = rd.Int32(); m_shipDocking[i].stage = rd.Int32(); m_shipDocking[i].stagePos = rd.Float(); m_shipDocking[i].fromPos = rd.Vector3d(); m_shipDocking[i].fromRot = rd.RdQuaternionf(); } m_dockingLock = rd.Bool(); m_bbCreated = rd.Bool(); m_lastUpdatedShipyard = rd.Double(); m_sbody = space->GetSystemBodyByIndex(rd.Int32()); m_numPoliceDocked = rd.Int32(); InitStation(); m_navLights->Load(rd); }
Object CVmOperate::ToJson() { Object obj; if(nacctype == regid) { vector<unsigned char> vRegId(accountid, accountid+6); CRegID regId(vRegId); obj.push_back(Pair("regid", regId.ToString())); }else if(nacctype == base58addr) { string addr(accountid,accountid+sizeof(accountid)); obj.push_back(Pair("addr", addr)); } if(opeatortype == ADD_FREE) { obj.push_back(Pair("opertype", "add")); }else if(opeatortype == MINUS_FREE) { obj.push_back(Pair("opertype", "minus")); } if(outheight > 0) obj.push_back(Pair("freezeheight", (int) outheight)); uint64_t amount; memcpy(&amount, money, sizeof(money)); obj.push_back(Pair("amount", amount)); return obj; }
void SpaceStation::Load(Serializer::Reader &rd, Space *space) { ModelBody::Load(rd, space); MarketAgent::Load(rd); int num = rd.Int32(); if (num > Equip::TYPE_MAX) throw SavedGameCorruptException(); for (int i=0; i<Equip::TYPE_MAX; i++) { m_equipmentStock[i] = 0; } for (int i=0; i<num; i++) { m_equipmentStock[i] = static_cast<Equip::Type>(rd.Int32()); } // load shityard int numShipsForSale = rd.Int32(); for (int i=0; i<numShipsForSale; i++) { ShipType::Id id(rd.String()); std::string regId(rd.String()); SceneGraph::ModelSkin skin; skin.Load(rd); ShipOnSale sos(id, regId, skin); m_shipsOnSale.push_back(sos); } const int32_t numShipDocking = rd.Int32(); m_shipDocking.reserve(numShipDocking); for (int i=0; i<numShipDocking; i++) { m_shipDocking.push_back(shipDocking_t()); shipDocking_t &sd = m_shipDocking.back(); sd.shipIndex = rd.Int32(); sd.stage = rd.Int32(); sd.stagePos = rd.Float(); sd.fromPos = rd.Vector3d(); sd.fromRot = rd.RdQuaternionf(); } // retrieve each of the bay groupings const int32_t numBays = rd.Int32(); mBayGroups.reserve(numBays); for (int32_t i=0; i<numBays; i++) { mBayGroups.push_back(SpaceStationType::SBayGroup()); SpaceStationType::SBayGroup &bay = mBayGroups.back(); bay.minShipSize = rd.Int32(); bay.maxShipSize = rd.Int32(); bay.inUse = rd.Bool(); const int32_t numBayIds = rd.Int32(); bay.bayIDs.reserve(numBayIds); for (int32_t j=0; j<numBayIds; j++) { const int32_t ID = rd.Int32(); bay.bayIDs.push_back(ID); } } m_bbCreated = rd.Bool(); m_lastUpdatedShipyard = rd.Double(); m_sbody = space->GetSystemBodyByIndex(rd.Int32()); m_numPoliceDocked = rd.Int32(); m_doorAnimationStep = rd.Double(); m_doorAnimationState = rd.Double(); InitStation(); m_navLights->Load(rd); }
bool CVmRunEvn::CheckOperate(const vector<CVmOperate> &listoperate) { // judge contract rulue uint64_t addmoey = 0, miusmoney = 0; uint64_t operValue = 0; if(listoperate.size() > MAX_OUTPUT_COUNT) { return false; } for (auto& it : listoperate) { if(it.nacctype != regid && it.nacctype != base58addr) return false; if (it.opeatortype == ADD_FREE ) { memcpy(&operValue,it.money,sizeof(it.money)); uint64_t temp = addmoey; temp += operValue; if(temp < operValue || temp<addmoey) { return false; } addmoey = temp; }else if (it.opeatortype == MINUS_FREE) { //vector<unsigned char > accountid(it.accountid,it.accountid+sizeof(it.accountid)); vector_unsigned_char accountid = GetAccountID(it); if(accountid.size() != 6) return false; CRegID regId(accountid); CTransaction* tx = static_cast<CTransaction*>(listTx.get()); /// current tx's script cant't mius other script's regid if(m_ScriptDBTip->HaveScript(regId) && regId != boost::get<CRegID>(tx->desUserId)) { return false; } memcpy(&operValue,it.money,sizeof(it.money)); uint64_t temp = miusmoney; temp += operValue; if(temp < operValue || temp < miusmoney) { return false; } miusmoney = temp; } else{ // Assert(0); return false; // 输入数据错 } //vector<unsigned char> accountid(it.accountid, it.accountid + sizeof(it.accountid)); vector_unsigned_char accountid = GetAccountID(it); if(accountid.size() == 6){ CRegID regId(accountid); if(regId.IsEmpty() || regId.getKeyID( *m_view) == uint160()) return false; // app only be allowed minus self money if (!m_ScriptDBTip->HaveScript(regId) && it.opeatortype == MINUS_FREE) { return false; } } } if (addmoey != miusmoney) { return false; } return true; }