//------------------------------------------------------------------------------------- void Base::reqBackupCellData() { if(isGetingCellData_) return; EntityMailbox* mb = this->getCellMailbox(); if(mb == NULL) return; Mercury::Bundle bundle; bundle.newMessage(CellappInterface::reqBackupEntityCellData); bundle << this->getID(); mb->postMail(bundle); isGetingCellData_ = true; }
//------------------------------------------------------------------------------------- PyObject* Base::pyTeleport(PyObject* baseEntityMB) { if(isDestroyed()) { PyErr_Format(PyExc_Exception, "%s::teleport: %d is destroyed!\n", getScriptName(), getID()); PyErr_PrintEx(0); S_Return; } if(this->getCellMailbox() == NULL) { PyErr_Format(PyExc_Exception, "%s::teleport: %d no has cell!\n", getScriptName(), getID()); PyErr_PrintEx(0); S_Return; } if(baseEntityMB == NULL) { PyErr_Format(PyExc_Exception, "%s::teleport: %d baseEntityMB is NULL!\n", getScriptName(), getID()); PyErr_PrintEx(0); S_Return; } bool isMailbox = PyObject_TypeCheck(baseEntityMB, EntityMailbox::getScriptType()); bool isEntity = !isMailbox && (PyObject_TypeCheck(baseEntityMB, Base::getScriptType()) || PyObject_TypeCheck(baseEntityMB, Proxy::getScriptType())); if(!isMailbox && !isEntity) { PyErr_Format(PyExc_Exception, "%s::teleport: %d invalid baseEntityMB!\n", getScriptName(), getID()); PyErr_PrintEx(0); S_Return; } ENTITY_ID eid = 0; // 如果不是mailbox则是本地base if(isMailbox) { EntityMailbox* mb = static_cast<EntityMailbox*>(baseEntityMB); if(mb->getType() != MAILBOX_TYPE_BASE && mb->getType() != MAILBOX_TYPE_CELL_VIA_BASE) { PyErr_Format(PyExc_Exception, "%s::teleport: %d baseEntityMB is not baseMailbox!\n", getScriptName(), getID()); PyErr_PrintEx(0); S_Return; } eid = mb->getID(); Mercury::Bundle bundle; bundle.newMessage(BaseappInterface::reqTeleportOther); bundle << eid; BaseappInterface::reqTeleportOtherArgs3::staticAddToBundle(bundle, this->getID(), this->getCellMailbox()->getComponentID(), g_componentID); mb->postMail(bundle); } else { Base* base = static_cast<Base*>(baseEntityMB); if(!base->isDestroyed()) { base->reqTeleportOther(NULL, this->getID(), this->getCellMailbox()->getComponentID(), g_componentID); } else { PyErr_Format(PyExc_Exception, "%s::teleport: %d baseEntity is destroyed!\n", getScriptName(), getID()); PyErr_PrintEx(0); S_Return; } } S_Return; }