CSE_Abstract *CALifeSimulatorBase::spawn_item (LPCSTR section, const Fvector &position, u32 level_vertex_id, GameGraph::_GRAPH_ID game_vertex_id, u16 parent_id, bool registration) { CSE_Abstract *abstract = F_entity_Create(section); R_ASSERT3 (abstract,"Cannot find item with section",section); abstract->s_name = section; abstract->s_gameid = u8(GAME_SINGLE); // GameID() abstract->s_RP = 0xff; abstract->ID = server().PerformIDgen(0xffff); abstract->ID_Parent = parent_id; abstract->ID_Phantom = 0xffff; abstract->o_Position = position; abstract->m_wVersion = SPAWN_VERSION; string256 s_name_replace; strcpy (s_name_replace,*abstract->s_name); if (abstract->ID < 1000) strcat (s_name_replace,"0"); if (abstract->ID < 100) strcat (s_name_replace,"0"); if (abstract->ID < 10) strcat (s_name_replace,"0"); string16 S1; strcat (s_name_replace,itoa(abstract->ID,S1,10)); abstract->set_name_replace (s_name_replace); CSE_ALifeDynamicObject *dynamic_object = smart_cast<CSE_ALifeDynamicObject*>(abstract); VERIFY (dynamic_object); //оружие спавним с полным магазинои CSE_ALifeItemWeapon* weapon = smart_cast<CSE_ALifeItemWeapon*>(dynamic_object); if(weapon) weapon->a_elapsed = weapon->get_ammo_magsize(); dynamic_object->m_tNodeID = level_vertex_id; dynamic_object->m_tGraphID = game_vertex_id; dynamic_object->m_tSpawnID = u16(-1); if (registration) register_object (dynamic_object,true); #ifdef LUAICP_COMPAT if (parent_id < 0xFFFF) { CSE_Abstract *parent = (CSE_Abstract*) objects().object(parent_id,true); if (parent && parent->name() && strstr(parent->name(), "physic_")) { Msg("!WARN: object with section %-32s spawned into %s", section, parent->name()); Msg(" %s", get_lua_traceback(game_lua(), 1)); } } #endif dynamic_object->spawn_supplies (); dynamic_object->on_spawn (); // Msg ("LSS : SPAWN : [%s],[%s], level %s",*dynamic_object->s_name,dynamic_object->name_replace(),*ai().game_graph().header().level(ai().game_graph().vertex(dynamic_object->m_tGraphID)->level_id()).name()); return (dynamic_object); }
CSE_Abstract *CLevel::spawn_item (LPCSTR section, const Fvector &position, u32 level_vertex_id, u16 parent_id, bool return_item) { CSE_Abstract *abstract = F_entity_Create(section); R_ASSERT3 (abstract,"Cannot find item with section",section); CSE_ALifeDynamicObject *dynamic_object = smart_cast<CSE_ALifeDynamicObject*>(abstract); if (dynamic_object && ai().get_level_graph()) { dynamic_object->m_tNodeID = level_vertex_id; if (ai().level_graph().valid_vertex_id(level_vertex_id) && ai().get_game_graph() && ai().get_cross_table()) dynamic_object->m_tGraphID = ai().cross_table().vertex(level_vertex_id).game_vertex_id(); } //оружие спавним с полным магазинои CSE_ALifeItemWeapon* weapon = smart_cast<CSE_ALifeItemWeapon*>(abstract); if(weapon) weapon->a_elapsed = weapon->get_ammo_magsize(); // Fill abstract->s_name = section; abstract->set_name_replace (section); //. abstract->s_gameid = u8(GameID()); abstract->o_Position = position; abstract->s_RP = 0xff; abstract->ID = 0xffff; abstract->ID_Parent = parent_id; abstract->ID_Phantom = 0xffff; abstract->s_flags.assign(M_SPAWN_OBJECT_LOCAL); abstract->RespawnTime = 0; if (!return_item) { NET_Packet P; abstract->Spawn_Write (P,TRUE); Send (P,net_flags(TRUE)); F_entity_Destroy (abstract); return (0); } else return (abstract); }