bool CBotClass::SaveStaticState(FILE* pf) { if (!WriteWord( pf, CBOTVERSION*2)) return false; // saves the state of static variables in classes CBotClass* p = m_ExClass; while ( p != NULL ) { if (!WriteWord( pf, 1)) return false; // save the name of the class if (!WriteString( pf, p->GetName() )) return false; CBotVar* pv = p->GetVar(); while( pv != NULL ) { if ( pv->IsStatic() ) { if (!WriteWord( pf, 1)) return false; if (!WriteString( pf, pv->GetName() )) return false; if ( !pv->Save0State(pf)) return false; // common header if ( !pv->Save1State(pf) ) return false; // saves as the child class if ( !WriteWord( pf, 0)) return false; } pv = pv->GetNext(); } if (!WriteWord( pf, 0)) return false; p = p->m_ExNext; } if (!WriteWord( pf, 0)) return false; return true; }
CBotVar* CBotClass::GetItem(const char* name) { CBotVar* p = m_pVar; while ( p != NULL ) { if ( p->GetName() == name ) return p; p = p->GetNext(); } if ( m_pParent != NULL ) return m_pParent->GetItem(name); return NULL; }
CBotVar* CBotStack::FindVar(const char* name) { CBotStack* p = this; while (p != NULL) { CBotVar* pp = p->m_listVar; while ( pp != NULL) { if (pp->GetName() == name) { return pp; } pp = pp->m_next; } p = p->m_prev; } return NULL; }
bool CBotCStack::CheckVarLocal(CBotToken* &pToken) { CBotCStack* p = this; CBotString name = pToken->GetString(); while (p != NULL) { CBotVar* pp = p->m_listVar; while ( pp != NULL) { if (name == pp->GetName()) return true; pp = pp->m_next; } if ( p->m_bBlock ) return false; p = p->m_prev; } return false; }
CBotVar* CBotCStack::FindVar(CBotToken* &pToken) { CBotCStack* p = this; CBotString name = pToken->GetString(); while (p != NULL) { CBotVar* pp = p->m_listVar; while ( pp != NULL) { if (name == pp->GetName()) { return pp; } pp = pp->m_next; } p = p->m_prev; } return NULL; }
CBotVar* CBotStack::FindVar(CBotToken* &pToken, bool bUpdate, bool bModif) { CBotStack* p = this; CBotString name = pToken->GetString(); while (p != NULL) { CBotVar* pp = p->m_listVar; while ( pp != NULL) { if (pp->GetName() == name) { if ( bUpdate ) pp->Maj(m_pUser, false); return pp; } pp = pp->m_next; } p = p->m_prev; } return NULL; }