void TDB_packer::_load_(const xr_string& fname) { lbIncludeFolders->Items->Clear (); lbIncludeFiles->Items->Clear (); CInifile ini (fname.c_str()); if(ini.section_exist("include_folders")) { CInifile::Sect S = ini.r_section("include_folders"); CInifile::SectCIt it = S.Data.begin(); CInifile::SectCIt it_e = S.Data.end(); for( ;it!=it_e; ++it) { WideString ws; ws = (*it).first.c_str(); lbIncludeFolders->Items->Add (ws); } } if(ini.section_exist("include_files")) { CInifile::Sect S = ini.r_section("include_files"); CInifile::SectCIt it = S.Data.begin(); CInifile::SectCIt it_e = S.Data.end(); for( ;it!=it_e; ++it) { WideString ws; ws = (*it).first.c_str(); lbIncludeFiles->Items->Add (ws); } } Caption = fname.c_str(); }
void CGameFont::Initialize (LPCSTR cShader, LPCSTR cTextureName) { string_path cTexture; LPCSTR _lang = pSettings->r_string("string_table", "font_prefix"); bool is_di = strstr(cTextureName, "ui_font_hud_01") || strstr(cTextureName, "ui_font_hud_02") || strstr(cTextureName, "ui_font_console_02"); if(_lang && !is_di) strconcat (cTexture, cTextureName, _lang); else strcpy (cTexture, cTextureName); uFlags &=~fsValid; vTS.set (1.f,1.f); // обязательно !!! eCurrentAlignment = alLeft; vInterval.set (1.f,1.f); for (int i=0; i<256; i++) CharMap[i] = i; strings.reserve (128); // check ini exist string256 fn,buf; strcpy (buf,cTexture); if (strext(buf)) *strext(buf)=0; R_ASSERT2 (FS.exist(fn,"$game_textures$",buf,".ini"),fn); CInifile* ini = CInifile::Create(fn); if (ini->section_exist("symbol_coords")){ for (int i=0; i<256; i++){ sprintf (buf,"%03d",i); Fvector v = ini->r_fvector3("symbol_coords",buf); TCMap[i].set (v.x,v.y,v[2]-v[0]); } fHeight = ini->r_float("symbol_coords","height"); }else{ if (ini->section_exist("char widths")){ fHeight = ini->r_float("char widths","height"); int cpl = 16; for (int i=0; i<256; i++){ sprintf (buf,"%d",i); float w = ini->r_float("char widths",buf); TCMap[i].set ((i%cpl)*fHeight,(i/cpl)*fHeight,w); } }else{ R_ASSERT(ini->section_exist("font_size")); fHeight = ini->r_float("font_size","height"); float width = ini->r_float("font_size","width"); const int cpl = ini->r_s32 ("font_size","cpl"); for (int i=0; i<256; i++) TCMap[i].set ((i%cpl)*width,(i/cpl)*fHeight,width); } } fCurrentHeight = fHeight; CInifile::Destroy (ini); // Shading pShader.create (cShader,cTexture); pGeom.create (FVF::F_TL, RCache.Vertex.Buffer(), RCache.QuadIB); }
void CPhysicObject::create_collision_model ( ) { xr_delete( collidable.model ); VERIFY( Visual() ); IKinematics *K = Visual()->dcast_PKinematics (); VERIFY( K ); CInifile* ini = K->LL_UserData(); if( ini && ini->section_exist( "collide" ) && ini->line_exist("collide", "mesh" ) && ini->r_bool("collide", "mesh" ) ) { collidable.model = xr_new<CCF_DynamicMesh>( this ); return; } collidable.model = xr_new<CCF_Skeleton>(this); /* switch(m_type) { case epotBox: case epotFixedChain: case epotFreeChain : case epotSkeleton : collidable.model = xr_new<CCF_Skeleton>(this); break; default: NODEFAULT; } */ }
void CParticlesPlayer::LoadParticles(CKinematics* K) { VERIFY (K); m_Bones.clear(); //считать список косточек и соответствующих //офсетов куда можно вешать партиклы CInifile* ini = K->LL_UserData(); if(ini&&ini->section_exist("particle_bones")) { bone_mask = 0; CInifile::Sect& data = ini->r_section("particle_bones"); for (CInifile::SectIt I=data.begin(); I!=data.end(); I++) { CInifile::Item& item = *I; u16 index = K->LL_BoneID(*item.first); R_ASSERT3(index != BI_NONE, "Particles bone not found", *item.first); Fvector offs; sscanf (*item.second,"%f,%f,%f",&offs.x,&offs.y,&offs.z); m_Bones.push_back (SBoneInfo(index,offs)); bone_mask |= u64(1)<<u64(index); } } if(m_Bones.empty()) { bone_mask = u64(1)<<u64(0); m_Bones.push_back (SBoneInfo(K->LL_GetBoneRoot(),Fvector().set(0,0,0))); } }
void CCar::SWheel::Load(LPCSTR section) { CKinematics *K =PKinematics(car->Visual()) ; CInifile *ini =K->LL_UserData() ; VERIFY (ini) ; if(ini->section_exist(section)) { collision_params.damping_factor =READ_IF_EXISTS(ini,r_float,section,"damping_factor",collision_params.damping_factor); collision_params.spring_factor =READ_IF_EXISTS(ini,r_float,section,"spring_factor",collision_params.spring_factor); collision_params.mu_factor =READ_IF_EXISTS(ini,r_float,section,"friction_factor",collision_params.mu_factor); } else if(ini->section_exist("wheels_params")) { collision_params.damping_factor =ini->r_float("wheels_params","damping_factor") ; collision_params.spring_factor =ini->r_float("wheels_params","spring_factor") ; collision_params.mu_factor =ini->r_float("wheels_params","friction_factor") ; } }
BOOL CCar::net_Spawn (CSE_Abstract* DC) { #ifdef DEBUG InitDebug(); #endif CSE_Abstract *e = (CSE_Abstract*)(DC); CSE_ALifeCar *co=smart_cast<CSE_ALifeCar*>(e); BOOL R = inherited::net_Spawn(DC); PKinematics(Visual())->CalculateBones_Invalidate(); PKinematics(Visual())->CalculateBones(TRUE); CPHSkeleton::Spawn(e); setEnabled (TRUE); setVisible (TRUE); PKinematics(Visual())->CalculateBones_Invalidate(); PKinematics(Visual())->CalculateBones(TRUE); m_fSaveMaxRPM = m_max_rpm; SetfHealth (co->health); if(!g_Alive()) b_exploded=true; else b_exploded=false; CDamagableItem::RestoreEffect(); CInifile* pUserData = PKinematics(Visual())->LL_UserData(); if(pUserData->section_exist("destroyed")) CPHDestroyable::Load(pUserData,"destroyed"); if(pUserData->section_exist("mounted_weapon_definition")) m_car_weapon = xr_new<CCarWeapon>(this); if(pUserData->section_exist("visual_memory_definition")) { m_memory = xr_new<car_memory>(this); m_memory->reload (pUserData->r_string("visual_memory_definition", "section")); } return (CScriptEntity::net_Spawn(DC) && R); }
void CCar::SWheelBreak::Load(LPCSTR section) { CKinematics *K =PKinematics(pwheel->car->Visual()) ; CInifile *ini =K->LL_UserData() ; VERIFY (ini) ; break_torque = ini->r_float("car_definition","break_torque") ; hand_break_torque = READ_IF_EXISTS(ini,r_float,"car_definition","hand_break_torque",break_torque) ; if(ini->section_exist(section)) { break_torque =READ_IF_EXISTS(ini,r_float,section,"break_torque",break_torque); hand_break_torque =READ_IF_EXISTS(ini,r_float,section,"hand_break_torque",hand_break_torque); } }
void CMapListHelper::LoadMapInfo(LPCSTR map_cfg_fn, const xr_string& map_name, LPCSTR map_ver) { CInifile ini (map_cfg_fn); shared_str _map_name = map_name.substr(0,map_name.find('\\')).c_str(); shared_str _map_ver = map_ver; if(ini.section_exist("map_usage")) { if(ini.line_exist("map_usage","ver") && !map_ver) _map_ver = ini.r_string("map_usage", "ver"); CInifile::Sect S = ini.r_section("map_usage"); CInifile::SectCIt si = S.Data.begin(); CInifile::SectCIt si_e = S.Data.end(); for( ;si!=si_e; ++si) { const shared_str& game_type = (*si).first; if(game_type=="ver") continue; SGameTypeMaps* M = GetMapListInt(game_type); if(!M) { Msg ("--unknown game type-%s",game_type.c_str()); m_storage.resize (m_storage.size()+1); SGameTypeMaps& Itm = m_storage.back(); Itm.m_game_type_name = game_type; Itm.m_game_type_id = ParseStringToGameType(game_type.c_str()); M = &m_storage.back(); } SGameTypeMaps::SMapItm Itm; Itm.map_name = _map_name; Itm.map_ver = _map_ver; if(M->m_map_names.end()!=std::find(M->m_map_names.begin(),M->m_map_names.end(),Itm)) { Msg("! duplicate map found [%s] [%s]", _map_name.c_str(), _map_ver.c_str()); }else { #ifndef MASTER_GOLD Msg("added map [%s] [%s]", _map_name.c_str(), _map_ver.c_str()); #endif // #ifndef MASTER_GOLD M->m_map_names.push_back (Itm); } } } }
bool IsFolderAccepted(CInifile& ltx, LPCSTR path, BOOL& recurse) { // exclude folders if( ltx.section_exist("exclude_folders") ) { CInifile::Sect& ef_sect = ltx.r_section("exclude_folders"); for (CInifile::SectCIt ef_it=ef_sect.Data.begin(); ef_it!=ef_sect.Data.end(); ef_it++){ recurse = CInifile::IsBOOL(ef_it->second.c_str()); if (recurse) { if (path==strstr(path,ef_it->first.c_str())) return false; }else{ if (0==xr_strcmp(path,ef_it->first.c_str())) return false; } } } return true; }
void weather::reload_time_frame (shared_str const& frame_id) { string_path file_name; FS.update_path (file_name, "$game_weathers$", m_id.c_str()); strcat_s (file_name, ".ltx"); CInifile* config = CInifile::Create(file_name); container_type::iterator i = m_times.begin(); container_type::iterator e = m_times.end(); for ( ; i != e; ++i) { if (frame_id._get() != (*i)->id()._get()) continue; if (!config->section_exist((*i)->id())) return; (*i)->load_from ((*i)->id(), *config, (*i)->id()); CInifile::Destroy (config); return; } CInifile::Destroy (config); }
void xrCompressor::ProcessLTX(CInifile& ltx) { config_ltx =<x; if (ltx.line_exist("options","exclude_exts")) _SequenceToList(exclude_exts, ltx.r_string("options","exclude_exts")); files_list = xr_new< xr_vector<char*> >(); folders_list = xr_new< xr_vector<char*> >(); if(ltx.section_exist("include_folders")) { CInifile::Sect& if_sect = ltx.r_section("include_folders"); for (CInifile::SectCIt if_it=if_sect.Data.begin(); if_it!=if_sect.Data.end(); ++if_it) { BOOL ifRecurse = CInifile::IsBOOL(if_it->second.c_str()); u32 folder_mask = FS_ListFolders | (ifRecurse?0:FS_RootOnly); string_path path; LPCSTR _path = 0==xr_strcmp(if_it->first.c_str(),".\\")?"":if_it->first.c_str(); xr_strcpy (path,_path); u32 path_len = xr_strlen(path); if ((0!=path_len)&&(path[path_len-1]!='\\')) xr_strcat(path,"\\"); Msg (""); Msg ("Processing folder: '%s'",path); BOOL efRecurse; BOOL val = IsFolderAccepted(ltx,path,efRecurse); if (val || (!val&&!efRecurse)) { if (val) GatherFiles (path); xr_vector<char*>* i_fl_list = FS.file_list_open ("$target_folder$",path,folder_mask); if (!i_fl_list) { Msg ("ERROR: Unable to open folder list:", path); continue; } xr_vector<char*>::iterator it = i_fl_list->begin(); xr_vector<char*>::iterator itE = i_fl_list->end(); for (;it!=itE;++it) { xr_string tmp_path = xr_string(path)+xr_string(*it); bool val = IsFolderAccepted(ltx,tmp_path.c_str(),efRecurse); if (val) { folders_list->push_back(xr_strdup(tmp_path.c_str())); Msg ("+F: %s",tmp_path.c_str()); // collect files if (ifRecurse) GatherFiles (tmp_path.c_str()); }else { Msg ("-F: %s",tmp_path.c_str()); } } FS.file_list_close (i_fl_list); }else { Msg ("-F: %s",path); } } }//if(ltx.section_exist("include_folders")) if(ltx.section_exist("include_files")) { CInifile::Sect& if_sect = ltx.r_section("include_files"); for (CInifile::SectCIt if_it=if_sect.Data.begin(); if_it!=if_sect.Data.end(); ++if_it) { files_list->push_back (xr_strdup(if_it->first.c_str())); } } PerformWork (); // free xr_vector<char*>::iterator it = files_list->begin(); xr_vector<char*>::iterator itE = files_list->end(); for (;it!=itE;++it) xr_free(*it); xr_delete(files_list); it = folders_list->begin(); itE = folders_list->end(); for (;it!=itE;++it) xr_free(*it); xr_delete(folders_list); exclude_exts.clear_and_free(); }
CGraphMerger::CGraphMerger( LPCSTR game_graph_id, LPCSTR name, bool rebuild ) { // load all the graphs Phase("Processing level graphs"); CInifile *Ini = new CInifile(INI_FILE); if (!Ini->section_exist("levels")) THROW(false); R_ASSERT (Ini->section_exist("levels")); tGraphHeader.m_guid = generate_guid(); GRAPH_P_MAP tpGraphs; string4096 S1, S2; CGameGraph::SLevel tLevel; u32 dwOffset = 0; u32 l_dwPointOffset = 0; LEVEL_POINT_STORAGE l_tpLevelPoints; l_tpLevelPoints.clear (); xr_set<CLevelInfo> levels; xr_vector<LPCSTR> needed_levels; string4096 levels_string; strcpy_s (levels_string,name); strlwr (levels_string); fill_needed_levels (levels_string,needed_levels); read_levels ( Ini, levels, rebuild, &needed_levels ); xr_set<CLevelInfo>::const_iterator I = levels.begin(); xr_set<CLevelInfo>::const_iterator E = levels.end(); for ( ; I != E; ++I) { tLevel.m_offset = (*I).m_offset; tLevel.m_name = (*I).m_name; strcpy_s (S1,sizeof(S1),*(*I).m_name); strconcat (sizeof(S2),S2,name,S1); strconcat (sizeof(S1),S1,S2,"\\"); tLevel.m_id = (*I).m_id; tLevel.m_section = (*I).m_section; Msg ("%9s %2d %s","level",tLevel.id(),*tLevel.m_name); string_path _0, _1; generate_temp_file_name ("local_graph_",*tLevel.m_name,_0); generate_temp_file_name ("raw_cross_table_",*tLevel.m_name,_1); string_path level_folder; FS.update_path (level_folder,"$game_levels$",*tLevel.m_name); strcat (level_folder,"\\"); CGameGraphBuilder().build_graph (_0,_1,level_folder); ::CLevelGameGraph *tpLevelGraph = new ::CLevelGameGraph( _0, _1, &tLevel, level_folder, dwOffset, tLevel.id(), Ini ); dwOffset += tpLevelGraph->m_tpGraph->header().vertex_count(); R_ASSERT2 (tpGraphs.find(tLevel.id()) == tpGraphs.end(),"Level ids _MUST_ be different!"); tpGraphs.insert (mk_pair(tLevel.id(),tpLevelGraph)); tGraphHeader.m_levels.insert(std::make_pair(tLevel.id(),tLevel)); } R_ASSERT(tpGraphs.size()); Phase("Adding interconnection points"); { GRAPH_P_PAIR_IT I = tpGraphs.begin(); GRAPH_P_PAIR_IT E = tpGraphs.end(); for ( ; I != E; I++) { VERTEX_PAIR_IT i = (*I).second->m_tVertexMap.begin(); VERTEX_PAIR_IT e = (*I).second->m_tVertexMap.end(); for ( ; i != e; i++) if ((*i).second.caConnectName[0]) { GRAPH_P_PAIR_IT K; VERTEX_PAIR_IT M; CGameGraph::CEdge tGraphEdge; SConnectionVertex &tConnectionVertex = (*i).second; K = tpGraphs.find(tConnectionVertex.dwLevelID); if (K == tpGraphs.end()) { Msg ("Cannot find level with level_id %d. Connection point will not be generated!",tConnectionVertex.dwLevelID); continue; } R_ASSERT (K != tpGraphs.end()); M = (*K).second->m_tVertexMap.find(tConnectionVertex.caConnectName); if (M == (*K).second->m_tVertexMap.end()) { Msg ("Level %s with id %d has an INVALID connection point %s,\nwhich references to graph point %s on the level %s with id %d\n",*(*I).second->m_tLevel.name(),(*I).second->m_tLevel.id(),(*i).first,tConnectionVertex.caConnectName,*(*K).second->m_tLevel.name(),(*K).second->m_tLevel.id()); R_ASSERT (M != (*K).second->m_tVertexMap.end()); } // if (!stricmp("l06_rostok",*(*I).second->m_tLevel.name())) { // __asm int 3; // } Msg ("Level %s with id %d has VALID connection point %s,\nwhich references to graph point %s on the level %s with id %d\n",*(*I).second->m_tLevel.name(),(*I).second->m_tLevel.id(),(*i).first,tConnectionVertex.caConnectName,*(*K).second->m_tLevel.name(),(*K).second->m_tLevel.id()); VERIFY (((*M).second.tGraphID + (*K).second->m_dwOffset) < (u32(1) << (8*sizeof(GameGraph::_GRAPH_ID)))); tGraphEdge.m_vertex_id = (GameGraph::_GRAPH_ID)((*M).second.tGraphID + (*K).second->m_dwOffset); VERIFY3 (tConnectionVertex.tGraphID < (*I).second->m_tpVertices.size(),"Rebuild graph for the level",*(*I).second->m_tLevel.name()); VERIFY3 ((*M).second.tGraphID < (*K).second->m_tpVertices.size(),"Rebuild graph for the level",*(*K).second->m_tLevel.name()); tGraphEdge.m_path_distance = (*I).second->m_tpVertices[tConnectionVertex.tGraphID].tGlobalPoint.distance_to((*K).second->m_tpVertices[(*M).second.tGraphID].tGlobalPoint); (*I).second->vfAddEdge ((*i).second.tGraphID,tGraphEdge); // tGraphEdge.dwVertexNumber = (*i).second.tGraphID + (*I).second->m_dwOffset; // (*K).second->vfAddEdge ((*M).second.tGraphID,tGraphEdge); } } } // counting edges { tGraphHeader.m_edge_count = 0; tGraphHeader.m_death_point_count = 0; GRAPH_P_PAIR_IT I = tpGraphs.begin(); GRAPH_P_PAIR_IT E = tpGraphs.end(); for ( ; I != E; I++) { VERIFY ((u32(tGraphHeader.m_edge_count) + (*I).second->dwfGetEdgeCount()) < (u32(1) << (8*sizeof(GameGraph::_GRAPH_ID)))); tGraphHeader.m_edge_count += (GameGraph::_GRAPH_ID)(*I).second->dwfGetEdgeCount(); tGraphHeader.m_death_point_count+= (*I).second->dwfGetDeathPointCount(); } } /////////////////////////////////////////////////// // save all the graphs Phase("Saving graph being merged"); CMemoryWriter F; tGraphHeader.m_version = XRAI_CURRENT_VERSION; VERIFY (dwOffset < (u32(1) << (8*sizeof(GameGraph::_GRAPH_ID)))); tGraphHeader.m_vertex_count = (GameGraph::_GRAPH_ID)dwOffset; tGraphHeader.save (&F); u32 vertex_count = 0; dwOffset *= sizeof(CGameGraph::CVertex); u32 l_dwOffset = F.size(); l_dwPointOffset = dwOffset + tGraphHeader.edge_count()*sizeof(CGameGraph::CEdge); u32 l_dwStartPointOffset = l_dwPointOffset; { GRAPH_P_PAIR_IT I = tpGraphs.begin(); GRAPH_P_PAIR_IT E = tpGraphs.end(); for ( ; I != E; I++) { (*I).second->vfSaveVertices (F,dwOffset,l_dwPointOffset,&l_tpLevelPoints); vertex_count += (*I).second->m_tpGraph->header().vertex_count(); } } { GRAPH_P_PAIR_IT I = tpGraphs.begin(); GRAPH_P_PAIR_IT E = tpGraphs.end(); for ( ; I != E; I++) (*I).second->vfSaveEdges(F); } { l_tpLevelPoints.clear (); GRAPH_P_PAIR_IT I = tpGraphs.begin(); GRAPH_P_PAIR_IT E = tpGraphs.end(); for ( ; I != E; I++) l_tpLevelPoints.insert(l_tpLevelPoints.end(),(*I).second->m_tpLevelPoints.begin(),(*I).second->m_tpLevelPoints.end()); } R_ASSERT2 (l_dwStartPointOffset == F.size() - l_dwOffset,"Graph file format is corrupted"); { LEVEL_POINT_STORAGE::const_iterator I = l_tpLevelPoints.begin(); LEVEL_POINT_STORAGE::const_iterator E = l_tpLevelPoints.end(); for ( ; I != E; ++I) save_data (*I,F); } { GRAPH_P_PAIR_IT I = tpGraphs.begin(); GRAPH_P_PAIR_IT E = tpGraphs.end(); for ( ; I != E; I++) { Msg ("cross_table offset: %d",F.size()); (*I).second->save_cross_table (F); } } string256 l_caFileName; strcpy_s (l_caFileName,game_graph_id); F.save_to (l_caFileName); // free all the graphs Phase("Freeing resources being allocated"); { GRAPH_P_PAIR_IT I = tpGraphs.begin(); GRAPH_P_PAIR_IT E = tpGraphs.end(); for ( ; I != E; I++) xr_free((*I).second); } xr_delete (Ini); }
void CCar::ParseDefinitions() { bone_map.clear(); IKinematics* pKinematics=smart_cast<IKinematics*>(Visual()); bone_map.insert(mk_pair(pKinematics->LL_GetBoneRoot(),physicsBone())); CInifile* ini = pKinematics->LL_UserData(); R_ASSERT2(ini,"Car has no description !!! See ActorEditor Object - UserData"); CExplosive::Load(ini,"explosion"); //CExplosive::SetInitiator(ID()); m_camera_position = ini->r_fvector3("car_definition","camera_pos"); ///////////////////////////car definition/////////////////////////////////////////////////// fill_wheel_vector (ini->r_string ("car_definition","driving_wheels"),m_driving_wheels); fill_wheel_vector (ini->r_string ("car_definition","steering_wheels"),m_steering_wheels); fill_wheel_vector (ini->r_string ("car_definition","breaking_wheels"),m_breaking_wheels); fill_exhaust_vector (ini->r_string ("car_definition","exhausts"),m_exhausts); fill_doors_map (ini->r_string ("car_definition","doors"),m_doors); ///////////////////////////car properties/////////////////////////////// m_max_power = ini->r_float("car_definition","engine_power"); m_max_power *= (0.8f*1000.f); m_max_rpm = ini->r_float("car_definition","max_engine_rpm"); m_max_rpm *= (1.f/60.f*2.f*M_PI); m_min_rpm = ini->r_float("car_definition","idling_engine_rpm"); m_min_rpm *= (1.f/60.f*2.f*M_PI); m_power_rpm = ini->r_float("car_definition","max_power_rpm"); m_power_rpm *= (1.f/60.f*2.f*M_PI);// m_torque_rpm = ini->r_float("car_definition","max_torque_rpm"); m_torque_rpm *= (1.f/60.f*2.f*M_PI);// m_power_increment_factor = READ_IF_EXISTS(ini,r_float,"car_definition","power_increment_factor",m_power_increment_factor); m_rpm_increment_factor = READ_IF_EXISTS(ini,r_float,"car_definition","rpm_increment_factor",m_rpm_increment_factor); m_power_decrement_factor = READ_IF_EXISTS(ini,r_float,"car_definition","power_decrement_factor",m_power_increment_factor); m_rpm_decrement_factor = READ_IF_EXISTS(ini,r_float,"car_definition","rpm_decrement_factor",m_rpm_increment_factor); m_power_neutral_factor = READ_IF_EXISTS(ini,r_float,"car_definition","power_neutral_factor",m_power_neutral_factor); R_ASSERT2(m_power_neutral_factor>0.1f&&m_power_neutral_factor<1.f,"power_neutral_factor must be 0 - 1 !!"); if(ini->line_exist("car_definition","exhaust_particles")) { m_exhaust_particles =ini->r_string("car_definition","exhaust_particles"); } b_auto_switch_transmission= !!ini->r_bool("car_definition","auto_transmission"); InitParabola (); m_axle_friction = ini->r_float("car_definition","axle_friction"); m_steering_speed = ini->r_float("car_definition","steering_speed"); if(ini->line_exist("car_definition","break_time")) { m_break_time=ini->r_float("car_definition","break_time"); } /////////////////////////transmission//////////////////////////////////////////////////////////////////////// float main_gear_ratio=ini->r_float("car_definition","main_gear_ratio"); R_ASSERT2(ini->section_exist("transmission_gear_ratio"),"no section transmission_gear_ratio"); m_gear_ratious.push_back(ini->r_fvector3("transmission_gear_ratio","R")); m_gear_ratious[0][0]=-m_gear_ratious[0][0]*main_gear_ratio; string32 rat_num; for(int i=1;true;++i) { xr_sprintf(rat_num,"N%d",i); if(!ini->line_exist("transmission_gear_ratio",rat_num)) break; Fvector gear_rat=ini->r_fvector3("transmission_gear_ratio",rat_num); gear_rat[0]*=main_gear_ratio; gear_rat[1]*=(1.f/60.f*2.f*M_PI); gear_rat[2]*=(1.f/60.f*2.f*M_PI); m_gear_ratious.push_back(gear_rat); } ///////////////////////////////sound/////////////////////////////////////////////////////// m_car_sound->Init(); ///////////////////////////////fuel/////////////////////////////////////////////////// m_fuel_tank=ini->r_float("car_definition","fuel_tank"); m_fuel=m_fuel_tank; m_fuel_consumption=ini->r_float("car_definition","fuel_consumption"); m_fuel_consumption/=100000.f; if(ini->line_exist("car_definition","exhaust_particles")) m_exhaust_particles = ini->r_string("car_definition","exhaust_particles"); ///////////////////////////////lights/////////////////////////////////////////////////// m_lights.Init(this); m_lights.ParseDefinitions(); if(ini->section_exist("animations")) { m_driver_anim_type=ini->r_u16("animations","driver_animation_type"); } if(ini->section_exist("doors")) { m_doors_torque_factor=ini->r_u16("doors","open_torque_factor"); } m_damage_particles.Init(this); }
void CCar::Init() { CPHCollisionDamageReceiver::Init(); //get reference wheel radius IKinematics* pKinematics=smart_cast<IKinematics*>(Visual()); CInifile* ini = pKinematics->LL_UserData(); R_ASSERT2(ini,"Car has no description !!! See ActorEditor Object - UserData"); ///SWheel& ref_wheel=m_wheels_map.find(pKinematics->LL_BoneID(ini->r_string("car_definition","reference_wheel")))->second; if(ini->section_exist("air_resistance")) { PPhysicsShell()->SetAirResistance(default_k_l*ini->r_float("air_resistance","linear_factor"),default_k_w*ini->r_float("air_resistance","angular_factor")); } if(ini->line_exist("car_definition","steer")) { m_bone_steer=pKinematics->LL_BoneID(ini->r_string("car_definition","steer")); VERIFY2(fsimilar(DET(pKinematics->LL_GetTransform(m_bone_steer)),1.f,EPS_L),"BBADD MTX"); pKinematics->LL_GetBoneInstance(m_bone_steer).set_callback(bctPhysics,cb_Steer,this); } m_steer_angle=0.f; //ref_wheel.Init(); m_ref_radius=ini->r_float("car_definition","reference_radius");//ref_wheel.radius; b_exploded =false; b_engine_on =false; b_clutch =false; b_starting =false; b_stalling =false; b_transmission_switching =false; m_root_transform.set(bone_map.find(pKinematics->LL_GetBoneRoot())->second.element->mXFORM); m_current_transmission_num=0; m_pPhysicsShell->set_DynamicScales(1.f,1.f); CDamagableItem::Init(GetfHealth(),3); float l_time_to_explosion=READ_IF_EXISTS(ini,r_float,"car_definition","time_to_explosion",120.f); CDelayedActionFuse::Initialize(l_time_to_explosion,CDamagableItem::DamageLevelToHealth(2)); { xr_map<u16,SWheel>::iterator i,e; i=m_wheels_map.begin(); e=m_wheels_map.end(); for(;i!=e;++i) { i->second.Init(); i->second.CDamagableHealthItem::Init(100.f,2); } } { xr_vector<SWheelDrive>::iterator i,e; i=m_driving_wheels.begin(); e=m_driving_wheels.end(); for(;i!=e;++i) i->Init(); } { xr_vector<SWheelBreak>::iterator i,e; i=m_breaking_wheels.begin(); e=m_breaking_wheels.end(); for(;i!=e;++i) i->Init(); } { xr_vector<SWheelSteer>::iterator i,e; i=m_steering_wheels.begin(); e=m_steering_wheels.end(); for(;i!=e;++i) i->Init(); } { xr_vector<SExhaust>::iterator i,e; i=m_exhausts.begin(); e=m_exhausts.end(); for(;i!=e;++i) i->Init(); } { xr_map<u16,SDoor>::iterator i,e; i=m_doors.begin(); e=m_doors.end(); for(;i!=e;++i) { i->second.Init(); i->second.CDamagableHealthItem::Init(100,1); } } if(ini->section_exist("damage_items")) { CInifile::Sect& data = ini->r_section("damage_items"); for (CInifile::SectCIt I=data.Data.begin(); I!=data.Data.end(); I++){ const CInifile::Item& item = *I; u16 index = pKinematics->LL_BoneID(*item.first); R_ASSERT3(index != BI_NONE, "Wrong bone name", *item.first); xr_map <u16,SWheel>::iterator i=m_wheels_map.find(index); if(i!=m_wheels_map.end()) i->second.CDamagableHealthItem::Init(float(atof(*item.second)),2); else { xr_map <u16,SDoor>::iterator i=m_doors.find(index); R_ASSERT3(i!=m_doors.end(),"only wheel and doors bones allowed for damage defs",*item.first); i->second.CDamagableHealthItem::Init(float(atof(*item.second)),1); } } } if(ini->section_exist("immunities")) { LoadImmunities("immunities",ini); } CDamageManager::reload("car_definition","damage",ini); HandBreak(); Transmission(1); }
void CGameFont::Initialize (LPCSTR cShader, LPCSTR cTextureName) { string_path cTexture; LPCSTR _lang = pSettings->r_string("string_table", "font_prefix"); bool is_di = strstr(cTextureName, "ui_font_hud_01") || strstr(cTextureName, "ui_font_hud_02") || strstr(cTextureName, "ui_font_console_02"); if(_lang && !is_di) strconcat (sizeof(cTexture),cTexture, cTextureName, _lang); else strcpy_s (cTexture, sizeof(cTexture), cTextureName); uFlags &=~fsValid; vTS.set (1.f,1.f); // обязательно !!! eCurrentAlignment = alLeft; vInterval.set (1.f,1.f); strings.reserve (128); // check ini exist string_path fn,buf; strcpy_s (buf,cTexture); if (strext(buf)) *strext(buf)=0; R_ASSERT2 (FS.exist(fn,"$game_textures$",buf,".ini"),fn); CInifile* ini = CInifile::Create(fn); nNumChars = 0x100; TCMap = ( Fvector* ) xr_realloc( ( void* ) TCMap , nNumChars * sizeof( Fvector ) ); if ( ini->section_exist( "mb_symbol_coords" ) ) { nNumChars = 0x10000; TCMap = ( Fvector* ) xr_realloc( ( void* ) TCMap , nNumChars * sizeof( Fvector ) ); uFlags |= fsMultibyte; fHeight = ini->r_float( "mb_symbol_coords" , "height" ); fXStep = ceil( fHeight / 2.0f ); // Searching for the first valid character Fvector vFirstValid = {0,0,0}; if ( ini->line_exist( "mb_symbol_coords" , "09608" ) ) { Fvector v = ini->r_fvector3( "mb_symbol_coords" , "09608" ); vFirstValid.set( v.x , v.y , 1 + v[2] - v[0] ); } else for ( u32 i=0 ; i < nNumChars ; i++ ) { sprintf_s( buf ,sizeof(buf), "%05d" , i ); if ( ini->line_exist( "mb_symbol_coords" , buf ) ) { Fvector v = ini->r_fvector3( "mb_symbol_coords" , buf ); vFirstValid.set( v.x , v.y , 1 + v[2] - v[0] ); break; } } // Filling entire character table for ( u32 i=0 ; i < nNumChars ; i++ ) { sprintf_s( buf ,sizeof(buf), "%05d" , i ); if ( ini->line_exist( "mb_symbol_coords" , buf ) ) { Fvector v = ini->r_fvector3( "mb_symbol_coords" , buf ); TCMap[i].set( v.x , v.y , 1 + v[2] - v[0] ); } else TCMap[i] = vFirstValid; // "unassigned" unprintable characters } // Special case for space TCMap[ 0x0020 ].set( 0 , 0 , 0 ); // Special case for ideographic space TCMap[ 0x3000 ].set( 0 , 0 , 0 ); }else if (ini->section_exist("symbol_coords")) { float d = 0.0f; //. if(ini->section_exist("width_correction")) //. d = ini->r_float("width_correction", "value"); fHeight = ini->r_float("symbol_coords","height"); for (u32 i=0; i<nNumChars; i++){ sprintf_s (buf,sizeof(buf),"%03d",i); Fvector v = ini->r_fvector3("symbol_coords",buf); TCMap[i].set (v.x,v.y,v[2]-v[0]+d); } }else{ if (ini->section_exist("char widths")){ fHeight = ini->r_float("char widths","height"); int cpl = 16; for (u32 i=0; i<nNumChars; i++){ sprintf_s (buf,sizeof(buf),"%d",i); float w = ini->r_float("char widths",buf); TCMap[i].set ((i%cpl)*fHeight,(i/cpl)*fHeight,w); } }else{ R_ASSERT(ini->section_exist("font_size")); fHeight = ini->r_float("font_size","height"); float width = ini->r_float("font_size","width"); const int cpl = ini->r_s32 ("font_size","cpl"); for (u32 i=0; i<nNumChars; i++) TCMap[i].set ((i%cpl)*width,(i/cpl)*fHeight,width); } } fCurrentHeight = fHeight; CInifile::Destroy (ini); // Shading pFontRender->Initialize(cShader, cTexture); }
BOOL CHelicopter::net_Spawn(CSE_Abstract* DC) { SetfHealth(100.0f); setState(CHelicopter::eAlive); m_flame_started =false; m_light_started =false; m_exploded =false; m_ready_explode =false; m_dead =false; if (!inherited::net_Spawn(DC)) return (FALSE); CPHSkeleton::Spawn((CSE_Abstract*)(DC)); for(u32 i=0; i<4; ++i) CRocketLauncher::SpawnRocket(*m_sRocketSection, smart_cast<CGameObject*>(this)); // assigning m_animator here CSE_Abstract *abstract =(CSE_Abstract*)(DC); CSE_ALifeHelicopter *heli = smart_cast<CSE_ALifeHelicopter*>(abstract); VERIFY (heli); R_ASSERT (Visual()&&smart_cast<IKinematics*>(Visual())); IKinematics* K = smart_cast<IKinematics*>(Visual()); CInifile* pUserData = K->LL_UserData(); m_rotate_x_bone = K->LL_BoneID (pUserData->r_string("helicopter_definition","wpn_rotate_x_bone")); m_rotate_y_bone = K->LL_BoneID (pUserData->r_string("helicopter_definition","wpn_rotate_y_bone")); m_fire_bone = K->LL_BoneID (pUserData->r_string("helicopter_definition","wpn_fire_bone")); m_death_bones_to_hide = pUserData->r_string("on_death_mode","scale_bone"); m_left_rocket_bone = K->LL_BoneID (pUserData->r_string("helicopter_definition","left_rocket_bone")); m_right_rocket_bone = K->LL_BoneID (pUserData->r_string("helicopter_definition","right_rocket_bone")); m_smoke_bone = K->LL_BoneID (pUserData->r_string("helicopter_definition","smoke_bone")); m_light_bone = K->LL_BoneID (pUserData->r_string("helicopter_definition","light_bone")); CExplosive::Load (pUserData,"explosion"); CExplosive::SetInitiator(ID()); LPCSTR s = pUserData->r_string("helicopter_definition","hit_section"); if( pUserData->section_exist(s) ) { int lc = pUserData->line_count(s); LPCSTR name; LPCSTR value; s16 boneID; for (int i=0 ; i<lc; ++i) { pUserData->r_line( s, i, &name, &value); boneID =K->LL_BoneID(name); m_hitBones.insert( std::make_pair(boneID, (float)atof(value)) ); } } CBoneInstance& biX = smart_cast<IKinematics*>(Visual())->LL_GetBoneInstance(m_rotate_x_bone); biX.set_callback (bctCustom,BoneMGunCallbackX,this); CBoneInstance& biY = smart_cast<IKinematics*>(Visual())->LL_GetBoneInstance(m_rotate_y_bone); biY.set_callback (bctCustom,BoneMGunCallbackY,this); CBoneData& bdX = K->LL_GetData(m_rotate_x_bone); VERIFY(bdX.IK_data.type==jtJoint); m_lim_x_rot.set (bdX.IK_data.limits[0].limit.x,bdX.IK_data.limits[0].limit.y); CBoneData& bdY = K->LL_GetData(m_rotate_y_bone); VERIFY(bdY.IK_data.type==jtJoint); m_lim_y_rot.set (bdY.IK_data.limits[1].limit.x,bdY.IK_data.limits[1].limit.y); xr_vector<Fmatrix> matrices; K->LL_GetBindTransform (matrices); m_i_bind_x_xform.invert (matrices[m_rotate_x_bone]); m_i_bind_y_xform.invert (matrices[m_rotate_y_bone]); m_bind_rot.x = matrices[m_rotate_x_bone].k.getP(); m_bind_rot.y = matrices[m_rotate_y_bone].k.getH(); m_bind_x.set (matrices[m_rotate_x_bone].c); m_bind_y.set (matrices[m_rotate_y_bone].c); IKinematicsAnimated *A = smart_cast<IKinematicsAnimated*>(Visual()); if (A) { A->PlayCycle (*heli->startup_animation); K->CalculateBones (TRUE); } m_engineSound.create (*heli->engine_sound,st_Effect,sg_SourceType); m_engineSound.play_at_pos (0,XFORM().c,sm_Looped); CShootingObject::Light_Create (); setVisible (TRUE); setEnabled (TRUE); m_stepRemains = 0.0f; //lighting m_light_render = ::Render->light_create(); m_light_render->set_shadow (false); m_light_render->set_type (IRender_Light::POINT); m_light_render->set_range (m_light_range); m_light_render->set_color (m_light_color); if(g_Alive())processing_activate (); TurnEngineSound(false); if(pUserData->section_exist("destroyed")) CPHDestroyable::Load(pUserData,"destroyed"); #ifdef DEBUG Device.seqRender.Add(this,REG_PRIORITY_LOW-1); #endif return TRUE; }
void ProcessLTX(LPCSTR tgt_name, LPCSTR params, BOOL bFast) { xr_string ltx_name; LPCSTR ltx_nm = strstr(params,".ltx"); VERIFY(ltx_nm!=0); string_path ltx_fn; string_path tmp; strncpy (tmp,params,ltx_nm-params); tmp[ltx_nm-params]=0; _Trim (tmp); strcat (tmp,".ltx"); strcpy (ltx_fn,tmp); // append ltx path (if exist) string_path fn,dr,di; _splitpath (ltx_fn,dr,di,0,0); strconcat (sizeof(fn),fn,dr,di); if (0!=fn[0]) FS.append_path ("ltx_path",fn,0,false); if (!FS.exist(ltx_fn)&&!FS.exist(ltx_fn,"$app_root$",tmp)) Debug.fatal (DEBUG_INFO,"ERROR: Can't find ltx file: '%s'",ltx_fn); CInifile ltx (ltx_fn); printf ("Processing LTX...\n"); BOOL make_pack = ltx.line_exist("options","make_pack") ? ltx.r_bool("options","make_pack") : true; LPCSTR copy_path= ltx.line_exist("options","copy_path") ? ltx.r_string("options","copy_path") : 0; if (ltx.line_exist("options","exclude_exts")) _SequenceToList(exclude_exts,ltx.r_string("options","exclude_exts")); xr_vector<char*> list; xr_vector<char*> fl_list; if(ltx.section_exist("include_folders")) { CInifile::Sect& if_sect = ltx.r_section("include_folders"); for (CInifile::SectCIt if_it=if_sect.Data.begin(); if_it!=if_sect.Data.end(); if_it++) { BOOL ifRecurse = CInifile::IsBOOL(if_it->second.c_str()); u32 folder_mask = FS_ListFolders | (ifRecurse?0:FS_RootOnly); string_path path; LPCSTR _path = 0==xr_strcmp(if_it->first.c_str(),".\\")?"":if_it->first.c_str(); strcpy (path,_path); u32 path_len = xr_strlen(path); if ((0!=path_len)&&(path[path_len-1]!='\\')) strcat(path,"\\"); Log (""); OUT_LOG ("Processing folder: '%s'",path); BOOL efRecurse; BOOL val = IsFolderAccepted(ltx,path,efRecurse); if (val || (!val&&!efRecurse)) { if (val) ProcessFolder (list,path); xr_vector<char*>* i_fl_list = FS.file_list_open ("$target_folder$",path,folder_mask); if (!i_fl_list) { Log ("ERROR: Unable to open folder list:", path); continue; } xr_vector<char*>::iterator it = i_fl_list->begin(); xr_vector<char*>::iterator itE = i_fl_list->end(); for (;it!=itE;++it){ xr_string tmp_path = xr_string(path)+xr_string(*it); bool val = IsFolderAccepted(ltx,tmp_path.c_str(),efRecurse); if (val) { fl_list.push_back(xr_strdup(tmp_path.c_str())); Msg ("+F: %s",tmp_path.c_str()); // collect files if (ifRecurse) ProcessFolder (list,tmp_path.c_str()); }else { Msg ("-F: %s",tmp_path.c_str()); } } FS.file_list_close (i_fl_list); }else { Msg ("-F: %s",path); } } }//if(ltx.section_exist("include_folders")) // compress { if(ltx.section_exist("include_files")) { CInifile::Sect& if_sect = ltx.r_section("include_files"); for (CInifile::SectCIt if_it=if_sect.Data.begin(); if_it!=if_sect.Data.end(); if_it++) { list.push_back (xr_strdup(if_it->first.c_str())); } } } CompressList (tgt_name,&list,&fl_list,bFast,make_pack,copy_path); // free xr_vector<char*>::iterator it = list.begin(); xr_vector<char*>::iterator itE = list.end(); for (;it!=itE;++it) xr_free(*it); it = fl_list.begin(); itE = fl_list.end(); for (;it!=itE;++it) xr_free(*it); exclude_exts.clear_and_free(); }
BOOL CAI_Stalker::net_Spawn (CSE_Abstract* DC) { #ifdef DEBUG_MEMORY_MANAGER u32 start = 0; if (g_bMEMO) start = Memory.mem_usage(); #endif // DEBUG_MEMORY_MANAGER CSE_Abstract *e = (CSE_Abstract*)(DC); CSE_ALifeHumanStalker *tpHuman = smart_cast<CSE_ALifeHumanStalker*>(e); R_ASSERT (tpHuman); m_group_behaviour = !!tpHuman->m_flags.test(CSE_ALifeObject::flGroupBehaviour); if (!CObjectHandler::net_Spawn(DC) || !inherited::net_Spawn(DC)) return (FALSE); set_money (tpHuman->m_dwMoney, false); #ifdef DEBUG_MEMORY_MANAGER u32 _start = 0; if (g_bMEMO) _start = Memory.mem_usage(); #endif // DEBUG_MEMORY_MANAGER animation().reload (); #ifdef DEBUG_MEMORY_MANAGER if (g_bMEMO) Msg ("CStalkerAnimationManager::reload() : %d",Memory.mem_usage() - _start); #endif // DEBUG_MEMORY_MANAGER movement().m_head.current.yaw = movement().m_head.target.yaw = movement().m_body.current.yaw = movement().m_body.target.yaw = angle_normalize_signed(-tpHuman->o_torso.yaw); movement().m_body.current.pitch = movement().m_body.target.pitch = 0; if (ai().game_graph().valid_vertex_id(tpHuman->m_tGraphID)) ai_location().game_vertex (tpHuman->m_tGraphID); if (ai().game_graph().valid_vertex_id(tpHuman->m_tNextGraphID) && movement().restrictions().accessible(ai().game_graph().vertex(tpHuman->m_tNextGraphID)->level_point())) movement().set_game_dest_vertex (tpHuman->m_tNextGraphID); R_ASSERT2 ( ai().get_game_graph() && ai().get_level_graph() && ai().get_cross_table() && (ai().level_graph().level_id() != u32(-1)), "There is no AI-Map, level graph, cross table, or graph is not compiled into the game graph!" ); setEnabled (TRUE); if (!Level().CurrentViewEntity()) Level().SetEntity(this); if (!g_Alive()) sound().set_sound_mask(u32(eStalkerSoundMaskDie)); //загрузить иммунитеты из модельки сталкера IKinematics* pKinematics = smart_cast<IKinematics*>(Visual()); VERIFY(pKinematics); CInifile* ini = pKinematics->LL_UserData(); if(ini) { if(ini->section_exist("immunities")) { LPCSTR imm_sect = ini->r_string("immunities", "immunities_sect"); conditions().LoadImmunities(imm_sect,pSettings); } if(ini->line_exist("bone_protection","bones_protection_sect")){ m_boneHitProtection = new SBoneProtections(); m_boneHitProtection->reload (ini->r_string("bone_protection","bones_protection_sect"), pKinematics ); } } //вычислить иммунета в зависимости от ранга static float novice_rank_immunity = pSettings->r_float("ranks_properties", "immunities_novice_k"); static float expirienced_rank_immunity = pSettings->r_float("ranks_properties", "immunities_experienced_k"); static float novice_rank_visibility = pSettings->r_float("ranks_properties", "visibility_novice_k"); static float expirienced_rank_visibility = pSettings->r_float("ranks_properties", "visibility_experienced_k"); static float novice_rank_dispersion = pSettings->r_float("ranks_properties", "dispersion_novice_k"); static float expirienced_rank_dispersion = pSettings->r_float("ranks_properties", "dispersion_experienced_k"); CHARACTER_RANK_VALUE rank = Rank(); clamp(rank, 0, 100); float rank_k = float(rank)/100.f; m_fRankImmunity = novice_rank_immunity + (expirienced_rank_immunity - novice_rank_immunity) * rank_k; m_fRankVisibility = novice_rank_visibility + (expirienced_rank_visibility - novice_rank_visibility) * rank_k; m_fRankDisperison = expirienced_rank_dispersion + (expirienced_rank_dispersion - novice_rank_dispersion) * (1-rank_k); if (!fis_zero(SpecificCharacter().panic_threshold())) m_panic_threshold = SpecificCharacter().panic_threshold(); sight().setup (CSightAction(SightManager::eSightTypeCurrentDirection)); #ifdef _DEBUG if (ai().get_alife() && !Level().MapManager().HasMapLocation("debug_stalker",ID())) { CMapLocation *map_location = Level().MapManager().AddMapLocation( "debug_stalker", ID() ); map_location->SetHint (cName()); } #endif // _DEBUG #ifdef DEBUG_MEMORY_MANAGER if (g_bMEMO) { Msg ("CAI_Stalker::net_Spawn() : %d",Memory.mem_usage() - start); } #endif // DEBUG_MEMORY_MANAGER if(SpecificCharacter().terrain_sect().size()) { movement().locations().Load(*SpecificCharacter().terrain_sect()); } sight().update (); Exec_Look (.001f); m_pPhysics_support->in_NetSpawn (e); return (TRUE); }
BOOL CEntity::net_Spawn (CSE_Abstract* DC) { m_level_death_time = 0; m_game_death_time = 0; m_killer_id = ALife::_OBJECT_ID(-1); CSE_Abstract *e = (CSE_Abstract*)(DC); CSE_ALifeCreatureAbstract *E = smart_cast<CSE_ALifeCreatureAbstract*>(e); // Initialize variables if (E) { SetfHealth (E->get_health()); R_ASSERT2(!((E->get_killer_id() != ALife::_OBJECT_ID(-1)) && g_Alive()), make_string("server entity [%s][%d] has an killer [%d] and not dead", E->name_replace(), E->ID, E->get_killer_id()).c_str()); m_killer_id = E->get_killer_id(); if (m_killer_id == ID()) m_killer_id = ALife::_OBJECT_ID(-1); } else SetfHealth (1.0f); // load damage params if (!E) { // Car or trader only!!!! CSE_ALifeCar *C = smart_cast<CSE_ALifeCar*>(e); CSE_ALifeTrader *T = smart_cast<CSE_ALifeTrader*>(e); CSE_ALifeHelicopter *H = smart_cast<CSE_ALifeHelicopter*>(e); R_ASSERT2 (C||T||H,"Invalid entity (no inheritance from CSE_CreatureAbstract, CSE_ALifeItemCar and CSE_ALifeTrader and CSE_ALifeHelicopter)!"); id_Team = id_Squad = id_Group = 0; } else { id_Team = E->g_team(); id_Squad = E->g_squad(); id_Group = E->g_group(); CSE_ALifeMonsterBase *monster = smart_cast<CSE_ALifeMonsterBase*>(E); if (monster) { MONSTER_COMMUNITY monster_community; monster_community.set (pSettings->r_string(*cNameSect(), "species")); if(monster_community.team() != 255) id_Team = monster_community.team(); } } if (g_Alive() && IsGameTypeSingle()) { m_registered_member = true; Level().seniority_holder().team(g_Team()).squad(g_Squad()).group(g_Group()).register_member(this); ++Level().seniority_holder().team(g_Team()).squad(g_Squad()).group(g_Group()).m_dwAliveCount; } if(!g_Alive()) { m_level_death_time = Device.dwTimeGlobal; m_game_death_time = E->m_game_death_time;; } if (!inherited::net_Spawn(DC)) return (FALSE); // SetfHealth (E->fHealth); IKinematics* pKinematics=smart_cast<IKinematics*>(Visual()); CInifile* ini = NULL; if(pKinematics) ini = pKinematics->LL_UserData(); if (ini) { if (ini->section_exist("damage_section") && !use_simplified_visual()) CDamageManager::reload(pSettings->r_string("damage_section","damage"),ini); CParticlesPlayer::LoadParticles(pKinematics); } return TRUE; }