コード例 #1
0
ファイル: config.cpp プロジェクト: borzh/botrix
//------------------------------------------------------------------------------------------------------------
TModId CConfiguration::Load( const good::string& sGameDir, const good::string& sModDir )
{
    m_bModified = false;
    if ( m_iniFile.load() >= good::IniFileNotFound )
    {
        BLOG_E("Error reading configuration file %s.", m_iniFile.name.c_str());
        return EModId_Invalid;
    }

    good::string_buffer sbBuffer(szMainBuffer, iMainBufferSize, false);
    TModId iModId = EModId_Invalid;

    // Process general section.
    good::ini_file::const_iterator it = m_iniFile.find("General");
    if ( it == m_iniFile.end() )
        BLOG_E( "File %s, missing [General] section.", m_iniFile.name.c_str() );
    else
        ProcessGeneralSection(it);

    if ( (iModId = SearchMod(sGameDir, sModDir)) == EModId_Invalid )
    {
        BLOG_E( "File %s:", m_iniFile.name.c_str() );
        BLOG_E( "  There is no mod that matches current game (%s) & mod (%s) folders.", sGameDir.c_str(), sModDir.c_str() );
        BLOG_E( "  Using default mod 'HalfLife2Deathmatch'." );
        CMod::sModName = "HalfLife2Deathmatch";
        iModId = EModId_HL2DM;
    }
    else
        BLOG_D("Current mod: '%s'.", CMod::sModName.c_str());

    // Find section "<mod name>.mod".
    sbBuffer = CMod::sModName;
    sbBuffer << ".mod";
    it = m_iniFile.find( sbBuffer );
    if ( it == m_iniFile.end() )
        BLOG_E( "File %s, missing [%s.mod] section.", m_iniFile.name.c_str(), CMod::sModName.c_str() );
    else
        ProcessModSection(it);

    LoadItemClasses();

    // Load weapons.
    sbBuffer = CMod::sModName;
    sbBuffer << ".weapons";
    it = m_iniFile.find( sbBuffer );
    if ( it == m_iniFile.end() )
        BLOG_E( "File %s, missing [%s.weapons] section.", m_iniFile.name.c_str(), CMod::sModName.c_str() );
    else
        LoadWeapons(it);


#ifdef BOTRIX_CHAT
    // Load chat: synonims.
    BLOG_D("Loading chat synonims:");
    it = m_iniFile.find( "Chat.replace" );
    if ( it != m_iniFile.end() )
    {
        // Iterate throught key values.
        for ( good::ini_section::const_iterator wordIt = it->begin(); wordIt != it->end(); ++wordIt )
            CChat::AddSynonims( wordIt->key, wordIt->value );
    }

    // Load chat: commands.
    BLOG_D("Loading chat sentences:");
    it = m_iniFile.find( "Chat.sentences" );
    if ( it != m_iniFile.end() )
    {
        // Iterate throught key values.
        for ( good::ini_section::const_iterator wordIt = it->begin(); wordIt != it->end(); ++wordIt )
            CChat::AddChat( wordIt->key, wordIt->value );
    }
#endif // BOTRIX_CHAT

    return iModId;
}
コード例 #2
0
ファイル: map_new.c プロジェクト: alexmustafa/cdogs-sdl
void LoadMissions(CArray *missions, json_t *missionsNode, int version)
{
	json_t *child;
	for (child = missionsNode->child; child; child = child->next)
	{
		Mission m;
		MissionInit(&m);
		m.Title = GetString(child, "Title");
		m.Description = GetString(child, "Description");
		JSON_UTILS_LOAD_ENUM(m.Type, child, "Type", StrMapType);
		LoadInt(&m.Size.x, child, "Width");
		LoadInt(&m.Size.y, child, "Height");
		if (version <= 10)
		{
			int style;
			LoadInt(&style, child, "WallStyle");
			strcpy(m.WallStyle, IntWallStyle(style));
			LoadInt(&style, child, "FloorStyle");
			strcpy(m.FloorStyle, IntFloorStyle(style));
			LoadInt(&style, child, "RoomStyle");
			strcpy(m.RoomStyle, IntRoomStyle(style));
		}
		else
		{
			char *tmp = GetString(child, "WallStyle");
			strcpy(m.WallStyle, tmp);
			CFREE(tmp);
			tmp = GetString(child, "FloorStyle");
			strcpy(m.FloorStyle, tmp);
			CFREE(tmp);
			tmp = GetString(child, "RoomStyle");
			strcpy(m.RoomStyle, tmp);
			CFREE(tmp);
		}
		if (version <= 9)
		{
			int style;
			LoadInt(&style, child, "ExitStyle");
			strcpy(m.ExitStyle, IntExitStyle(style));
		}
		else
		{
			char *tmp = GetString(child, "ExitStyle");
			strcpy(m.ExitStyle, tmp);
			CFREE(tmp);
		}
		if (version <= 8)
		{
			int keyStyle;
			LoadInt(&keyStyle, child, "KeyStyle");
			strcpy(m.KeyStyle, IntKeyStyle(keyStyle));
		}
		else
		{
			char *tmp = GetString(child, "KeyStyle");
			strcpy(m.KeyStyle, tmp);
			CFREE(tmp);
		}
		if (version <= 5)
		{
			int doorStyle;
			LoadInt(&doorStyle, child, "DoorStyle");
			strcpy(m.DoorStyle, IntDoorStyle(doorStyle));
		}
		else
		{
			char *tmp = GetString(child, "DoorStyle");
			strcpy(m.DoorStyle, tmp);
			CFREE(tmp);
		}
		LoadMissionObjectives(
			&m.Objectives,
			json_find_first_label(child, "Objectives")->child,
			version);
		LoadIntArray(&m.Enemies, child, "Enemies");
		LoadIntArray(&m.SpecialChars, child, "SpecialChars");
		if (version <= 3)
		{
			CArray items;
			CArrayInit(&items, sizeof(int));
			LoadIntArray(&items, child, "Items");
			CArray densities;
			CArrayInit(&densities, sizeof(int));
			LoadIntArray(&densities, child, "ItemDensities");
			for (int i = 0; i < (int)items.size; i++)
			{
				MapObjectDensity mod;
				mod.M = IntMapObject(*(int *)CArrayGet(&items, i));
				mod.Density = *(int *)CArrayGet(&densities, i);
				CArrayPushBack(&m.MapObjectDensities, &mod);
			}
		}
		else
		{
			json_t *modsNode =
				json_find_first_label(child, "MapObjectDensities");
			if (modsNode && modsNode->child)
			{
				modsNode = modsNode->child;
				for (json_t *modNode = modsNode->child;
					modNode;
					modNode = modNode->next)
				{
					MapObjectDensity mod;
					mod.M = StrMapObject(
						json_find_first_label(modNode, "MapObject")->child->text);
					LoadInt(&mod.Density, modNode, "Density");
					CArrayPushBack(&m.MapObjectDensities, &mod);
				}
			}
		}
		LoadInt(&m.EnemyDensity, child, "EnemyDensity");
		LoadWeapons(
			&m.Weapons, json_find_first_label(child, "Weapons")->child);
		strcpy(m.Song, json_find_first_label(child, "Song")->child->text);
		if (version <= 4)
		{
			// Load colour indices
			int wc, fc, rc, ac;
			LoadInt(&wc, child, "WallColor");
			LoadInt(&fc, child, "FloorColor");
			LoadInt(&rc, child, "RoomColor");
			LoadInt(&ac, child, "AltColor");
			m.WallMask = RangeToColor(wc);
			m.FloorMask = RangeToColor(fc);
			m.RoomMask = RangeToColor(rc);
			m.AltMask = RangeToColor(ac);
		}
		else
		{
			LoadColor(&m.WallMask, child, "WallMask");
			LoadColor(&m.FloorMask, child, "FloorMask");
			LoadColor(&m.RoomMask, child, "RoomMask");
			LoadColor(&m.AltMask, child, "AltMask");
		}
		switch (m.Type)
		{
		case MAPTYPE_CLASSIC:
			LoadInt(&m.u.Classic.Walls, child, "Walls");
			LoadInt(&m.u.Classic.WallLength, child, "WallLength");
			LoadInt(&m.u.Classic.CorridorWidth, child, "CorridorWidth");
			LoadClassicRooms(
				&m, json_find_first_label(child, "Rooms")->child);
			LoadInt(&m.u.Classic.Squares, child, "Squares");
			LoadClassicDoors(&m, child, "Doors");
			LoadClassicPillars(&m, child, "Pillars");
			break;
		case MAPTYPE_STATIC:
			if (!TryLoadStaticMap(&m, child, version))
			{
				continue;
			}
			break;
		case MAPTYPE_CAVE:
			LoadInt(&m.u.Cave.FillPercent, child, "FillPercent");
			LoadInt(&m.u.Cave.Repeat, child, "Repeat");
			LoadInt(&m.u.Cave.R1, child, "R1");
			LoadInt(&m.u.Cave.R2, child, "R2");
			break;
		default:
			assert(0 && "unknown map type");
			continue;
		}
		CArrayPushBack(missions, &m);
	}
}