huangjinghao 1 сар өмнө
parent
commit
1f51c406e8
86 өөрчлөгдсөн 3689 нэмэгдсэн , 3 устгасан
  1. 8 1
      GameConfig/A_New_BuildAll.bat
  2. 10 2
      GameConfig/CFG.check
  3. 107 0
      GameConfig/Code/Client/M_fish_scheme.cpp
  4. 31 0
      GameConfig/Code/Client/M_fish_scheme.h
  5. 121 0
      GameConfig/Code/Client/M_game_battle_field.cpp
  6. 37 0
      GameConfig/Code/Client/M_game_battle_field.h
  7. 105 0
      GameConfig/Code/Client/M_game_level_config.cpp
  8. 31 0
      GameConfig/Code/Client/M_game_level_config.h
  9. 121 0
      GameConfig/Code/Client/M_hero.cpp
  10. 45 0
      GameConfig/Code/Client/M_hero.h
  11. 153 0
      GameConfig/Code/Client/M_magic_array_config.cpp
  12. 43 0
      GameConfig/Code/Client/M_magic_array_config.h
  13. 117 0
      GameConfig/Code/Client/M_monster.cpp
  14. 43 0
      GameConfig/Code/Client/M_monster.h
  15. 113 0
      GameConfig/Code/Client/M_skill.cpp
  16. 37 0
      GameConfig/Code/Client/M_skill.h
  17. 137 0
      GameConfig/Code/Client/M_un_lock_battle.cpp
  18. 39 0
      GameConfig/Code/Client/M_un_lock_battle.h
  19. 95 0
      GameConfig/Code/Server/M_fish_scheme.cpp
  20. 31 0
      GameConfig/Code/Server/M_fish_scheme.h
  21. 120 0
      GameConfig/Code/Server/M_game_battle_field.cpp
  22. 37 0
      GameConfig/Code/Server/M_game_battle_field.h
  23. 100 0
      GameConfig/Code/Server/M_game_level_config.cpp
  24. 31 0
      GameConfig/Code/Server/M_game_level_config.h
  25. 102 0
      GameConfig/Code/Server/M_hero.cpp
  26. 45 0
      GameConfig/Code/Server/M_hero.h
  27. 142 0
      GameConfig/Code/Server/M_magic_array_config.cpp
  28. 43 0
      GameConfig/Code/Server/M_magic_array_config.h
  29. 106 0
      GameConfig/Code/Server/M_monster.cpp
  30. 43 0
      GameConfig/Code/Server/M_monster.h
  31. 98 0
      GameConfig/Code/Server/M_skill.cpp
  32. 37 0
      GameConfig/Code/Server/M_skill.h
  33. 128 0
      GameConfig/Code/Server/M_un_lock_battle.cpp
  34. 39 0
      GameConfig/Code/Server/M_un_lock_battle.h
  35. 10 0
      GameConfig/Lua/M_Global_Config.lua
  36. 29 0
      GameConfig/Lua/M_fish_scheme.lua
  37. 15 0
      GameConfig/Lua/M_game_battle_field.lua
  38. 62 0
      GameConfig/Lua/M_game_level_config.lua
  39. 25 0
      GameConfig/Lua/M_hero.lua
  40. 43 0
      GameConfig/Lua/M_magic_array_config.lua
  41. 46 0
      GameConfig/Lua/M_monster.lua
  42. 17 0
      GameConfig/Lua/M_skill.lua
  43. 16 0
      GameConfig/Lua/M_un_lock_battle.lua
  44. BIN
      GameConfig/M_fish_scheme.xls
  45. BIN
      GameConfig/M_fish_scheme.xlsx
  46. BIN
      GameConfig/M_game_battle_field.xls
  47. BIN
      GameConfig/M_game_battle_field.xlsx
  48. BIN
      GameConfig/M_game_level_config.xls
  49. BIN
      GameConfig/M_game_level_config.xlsx
  50. BIN
      GameConfig/M_hero.xls
  51. BIN
      GameConfig/M_hero.xlsx
  52. BIN
      GameConfig/M_magic_array_config.xls
  53. BIN
      GameConfig/M_magic_array_config.xlsx
  54. BIN
      GameConfig/M_monster.xls
  55. BIN
      GameConfig/M_monster.xlsx
  56. BIN
      GameConfig/M_skill.xls
  57. BIN
      GameConfig/M_skill.xlsx
  58. BIN
      GameConfig/M_un_lock_battle.xls
  59. BIN
      GameConfig/M_un_lock_battle.xlsx
  60. 10 0
      GameConfig/Xml/M_Global_Config.xml
  61. 18 0
      GameConfig/Xml/M_fish_scheme.xml
  62. 4 0
      GameConfig/Xml/M_game_battle_field.xml
  63. 51 0
      GameConfig/Xml/M_game_level_config.xml
  64. 14 0
      GameConfig/Xml/M_hero.xml
  65. 32 0
      GameConfig/Xml/M_magic_array_config.xml
  66. 35 0
      GameConfig/Xml/M_monster.xml
  67. 6 0
      GameConfig/Xml/M_skill.xml
  68. 5 0
      GameConfig/Xml/M_un_lock_battle.xml
  69. 20 0
      GameConfig/json/M_Global_Config.json
  70. 31 0
      GameConfig/json/M_fish_scheme.json
  71. 3 0
      GameConfig/json/M_game_battle_field.json
  72. 97 0
      GameConfig/json/M_game_level_config.json
  73. 23 0
      GameConfig/json/M_hero.json
  74. 59 0
      GameConfig/json/M_magic_array_config.json
  75. 65 0
      GameConfig/json/M_monster.json
  76. 7 0
      GameConfig/json/M_skill.json
  77. 5 0
      GameConfig/json/M_un_lock_battle.json
  78. 20 0
      GameConfig/ts/M_Global_Config.ts
  79. 48 0
      GameConfig/ts/M_fish_scheme.ts
  80. 20 0
      GameConfig/ts/M_game_battle_field.ts
  81. 114 0
      GameConfig/ts/M_game_level_config.ts
  82. 40 0
      GameConfig/ts/M_hero.ts
  83. 76 0
      GameConfig/ts/M_magic_array_config.ts
  84. 82 0
      GameConfig/ts/M_monster.ts
  85. 24 0
      GameConfig/ts/M_skill.ts
  86. 22 0
      GameConfig/ts/M_un_lock_battle.ts

+ 8 - 1
GameConfig/A_New_BuildAll.bat

@@ -2,7 +2,14 @@ ExeclExport.exe auto
 copy /y ts\M_i18n.ts ..\..\Client\assets\Script\Config
 copy /y ts\M_test.ts ..\..\Client\assets\Script\Config
 copy /y ts\M_Global_Config.ts ..\..\Client\assets\Script\Config
-
+copy /y ts\M_fish_scheme.ts ..\..\Client\assets\Script\Config
+copy /y ts\M_game_battle_field.ts ..\..\Client\assets\Script\Config
+copy /y ts\M_game_level_config.ts ..\..\Client\assets\Script\Config
+copy /y ts\M_hero.ts ..\..\Client\assets\Script\Config
+copy /y ts\M_magic_array_config.ts ..\..\Client\assets\Script\Config
+copy /y ts\M_monster.ts ..\..\Client\assets\Script\Config
+copy /y ts\M_skill.ts ..\..\Client\assets\Script\Config
+copy /y ts\M_un_lock_battle.ts ..\..\Client\assets\Script\Config
 
 @echo off
 ::if "%nopause%" == "true" (@echo on) else (pause)

+ 10 - 2
GameConfig/CFG.check

@@ -1,4 +1,12 @@
-D:\git\newWork\FishConfig\GameConfig\M_i18n.xls:-1470678706
-D:\git\newWork\FishConfig\GameConfig\M_Global_Config.xls:73136324
+D:\git\newWork\FishConfig\GameConfig\M_hero.xls:-1828622247
+D:\git\newWork\FishConfig\GameConfig\M_un_lock_battle.xls:-497439848
+D:\git\newWork\FishConfig\GameConfig\M_magic_array_config.xls:85625343
+D:\git\newWork\FishConfig\GameConfig\M_game_level_config.xls:2009806508
 D:\git\newWork\FishConfig\GameConfig\SensitiveWordCFG.xls:-583314849
+D:\git\newWork\FishConfig\GameConfig\M_skill.xls:-2064845410
+D:\git\newWork\FishConfig\GameConfig\M_fish_scheme.xls:1825125196
+D:\git\newWork\FishConfig\GameConfig\M_Global_Config.xls:359064959
+D:\git\newWork\FishConfig\GameConfig\M_game_battle_field.xls:-497204228
+D:\git\newWork\FishConfig\GameConfig\M_i18n.xls:-1470678706
+D:\git\newWork\FishConfig\GameConfig\M_monster.xls:-501397011
 D:\git\newWork\FishConfig\GameConfig\M_test.xls:209833058

+ 107 - 0
GameConfig/Code/Client/M_fish_scheme.cpp

@@ -0,0 +1,107 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "M_fish_scheme.h"
+std::auto_ptr<M_fish_scheme> M_fish_scheme::msSingleton(nullptr);
+
+int M_fish_scheme::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_fish_schemeData* M_fish_scheme::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, M_fish_schemeData>& M_fish_scheme::GetMapData()
+{
+	return mMapData;
+}
+
+void M_fish_scheme::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/M_fish_scheme.xml");
+	auto result = xmlDoc.Parse(content.c_str(), content.length());
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		CCLOGERROR("Result:%d", result);
+		CCASSERT(false, "result != tinyxml2::XML_SUCCESS");
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		CCASSERT(false, "root == NULL");
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_fish_schemeData data;
+		data.mID = element->IntAttribute("ID");
+		data.mmonster_id = element->IntAttribute("monster_id");
+		data.mfish_group = element->IntAttribute("fish_group");
+		data.mnum = element->IntAttribute("num");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+	CCLOG("M_fish_scheme Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_fish_scheme::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/M_fish_scheme");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "M_fish_scheme");
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushstring(L, "datas");
+	lua_gettable(L, -2);
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushnil(L);
+	while(lua_next(L, 2))
+	{
+		CCASSERT(lua_istable(L, -1) == 1, "is not table");
+		M_fish_schemeData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "monster_id", data.mmonster_id);
+		LuaCfgHelper::readInt(L, "fish_group", data.mfish_group);
+		LuaCfgHelper::readInt(L, "num", data.mnum);
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		lua_pop(L, 1);
+	}
+	lua_settop(L, 0);
+	CCLOG("M_fish_scheme Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_fish_scheme::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+M_fish_scheme* M_fish_scheme::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_fish_scheme());
+	}
+	return msSingleton.get();
+}
+
+void M_fish_scheme::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 31 - 0
GameConfig/Code/Client/M_fish_scheme.h

@@ -0,0 +1,31 @@
+#pragma once
+#include <map>
+struct M_fish_schemeData
+{
+	//ID
+	int mID;
+	//¹ÖÎïID
+	int mmonster_id;
+	//ÓãÕó·½°¸×é
+	int mfish_group;
+	//ÊýÁ¿
+	int mnum;
+};
+
+class M_fish_scheme
+{
+public:
+private:
+	static std::auto_ptr<M_fish_scheme> msSingleton;
+public:
+	int GetCount();
+	const M_fish_schemeData* GetData(int ID);
+	const std::map<int, M_fish_schemeData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static M_fish_scheme* GetSingleton();
+	static void Release();
+private:
+	std::map<int, M_fish_schemeData> mMapData;
+};

+ 121 - 0
GameConfig/Code/Client/M_game_battle_field.cpp

@@ -0,0 +1,121 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "M_game_battle_field.h"
+std::auto_ptr<M_game_battle_field> M_game_battle_field::msSingleton(nullptr);
+
+int M_game_battle_field::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_game_battle_fieldData* M_game_battle_field::GetData(int64_t ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int64_t, M_game_battle_fieldData>& M_game_battle_field::GetMapData()
+{
+	return mMapData;
+}
+
+void M_game_battle_field::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/M_game_battle_field.xml");
+	auto result = xmlDoc.Parse(content.c_str(), content.length());
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		CCLOGERROR("Result:%d", result);
+		CCASSERT(false, "result != tinyxml2::XML_SUCCESS");
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		CCASSERT(false, "root == NULL");
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_game_battle_fieldData data;
+		data.mscene_type = element->IntAttribute("scene_type");
+		data.mweight = element->IntAttribute("weight");
+		data.mmax_num = element->IntAttribute("max_num");
+		{
+			const char* kill_count = element->Attribute("kill_count");
+			std::vector<std::string> veckill_count;
+			boost::split(veckill_count, kill_count, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < veckill_count.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(veckill_count[i].c_str(), &temp))
+				{
+					data.mkill_count.push_back(temp);
+				}
+			}
+		}
+		data.maward_drop_prob = element->FloatAttribute("award_drop_prob");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+	CCLOG("M_game_battle_field Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_game_battle_field::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/M_game_battle_field");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "M_game_battle_field");
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushstring(L, "datas");
+	lua_gettable(L, -2);
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushnil(L);
+	while(lua_next(L, 2))
+	{
+		CCASSERT(lua_istable(L, -1) == 1, "is not table");
+		M_game_battle_fieldData data;
+		LuaCfgHelper::readInt(L, "scene_type", data.mscene_type);
+		LuaCfgHelper::readInt(L, "weight", data.mweight);
+		LuaCfgHelper::readInt(L, "max_num", data.mmax_num);
+		LuaCfgHelper::readVectorInt(L, "kill_count", data.mkill_count);
+		LuaCfgHelper::readFloat(L, "award_drop_prob", data.maward_drop_prob);
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		lua_pop(L, 1);
+	}
+	lua_settop(L, 0);
+	CCLOG("M_game_battle_field Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_game_battle_field::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+M_game_battle_field* M_game_battle_field::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_game_battle_field());
+	}
+	return msSingleton.get();
+}
+
+void M_game_battle_field::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 37 - 0
GameConfig/Code/Client/M_game_battle_field.h

@@ -0,0 +1,37 @@
+#pragma once
+#include <map>
+struct M_game_battle_fieldData
+{
+	//ID
+	int64_t mID;
+	//怪物ID
+	int64_t mmonster_id;
+	//场地类型
+	int mscene_type;
+	//出场权重
+	int mweight;
+	//最大数量
+	int mmax_num;
+	//击杀次数
+	std::vector<int> mkill_count;
+	//魔币掉落概率(百分比)
+	float maward_drop_prob;
+};
+
+class M_game_battle_field
+{
+public:
+private:
+	static std::auto_ptr<M_game_battle_field> msSingleton;
+public:
+	int GetCount();
+	const M_game_battle_fieldData* GetData(int64_t ID);
+	const std::map<int64_t, M_game_battle_fieldData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static M_game_battle_field* GetSingleton();
+	static void Release();
+private:
+	std::map<int64_t, M_game_battle_fieldData> mMapData;
+};

+ 105 - 0
GameConfig/Code/Client/M_game_level_config.cpp

@@ -0,0 +1,105 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "M_game_level_config.h"
+std::auto_ptr<M_game_level_config> M_game_level_config::msSingleton(nullptr);
+
+int M_game_level_config::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_game_level_configData* M_game_level_config::GetData(int64_t ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int64_t, M_game_level_configData>& M_game_level_config::GetMapData()
+{
+	return mMapData;
+}
+
+void M_game_level_config::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/M_game_level_config.xml");
+	auto result = xmlDoc.Parse(content.c_str(), content.length());
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		CCLOGERROR("Result:%d", result);
+		CCASSERT(false, "result != tinyxml2::XML_SUCCESS");
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		CCASSERT(false, "root == NULL");
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_game_level_configData data;
+		data.mleve = element->IntAttribute("leve");
+		data.mup_exp = element->IntAttribute("up_exp");
+		data.mmonster_num = element->IntAttribute("monster_num");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+	CCLOG("M_game_level_config Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_game_level_config::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/M_game_level_config");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "M_game_level_config");
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushstring(L, "datas");
+	lua_gettable(L, -2);
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushnil(L);
+	while(lua_next(L, 2))
+	{
+		CCASSERT(lua_istable(L, -1) == 1, "is not table");
+		M_game_level_configData data;
+		LuaCfgHelper::readInt(L, "leve", data.mleve);
+		LuaCfgHelper::readInt(L, "up_exp", data.mup_exp);
+		LuaCfgHelper::readInt(L, "monster_num", data.mmonster_num);
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		lua_pop(L, 1);
+	}
+	lua_settop(L, 0);
+	CCLOG("M_game_level_config Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_game_level_config::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+M_game_level_config* M_game_level_config::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_game_level_config());
+	}
+	return msSingleton.get();
+}
+
+void M_game_level_config::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 31 - 0
GameConfig/Code/Client/M_game_level_config.h

@@ -0,0 +1,31 @@
+#pragma once
+#include <map>
+struct M_game_level_configData
+{
+	//ID
+	int64_t mID;
+	//等级
+	int mleve;
+	//所需经验
+	int mup_exp;
+	//同屏怪物数量
+	int mmonster_num;
+};
+
+class M_game_level_config
+{
+public:
+private:
+	static std::auto_ptr<M_game_level_config> msSingleton;
+public:
+	int GetCount();
+	const M_game_level_configData* GetData(int64_t ID);
+	const std::map<int64_t, M_game_level_configData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static M_game_level_config* GetSingleton();
+	static void Release();
+private:
+	std::map<int64_t, M_game_level_configData> mMapData;
+};

+ 121 - 0
GameConfig/Code/Client/M_hero.cpp

@@ -0,0 +1,121 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "M_hero.h"
+std::auto_ptr<M_hero> M_hero::msSingleton(nullptr);
+
+int M_hero::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_heroData* M_hero::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, M_heroData>& M_hero::GetMapData()
+{
+	return mMapData;
+}
+
+void M_hero::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/M_hero.xml");
+	auto result = xmlDoc.Parse(content.c_str(), content.length());
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		CCLOGERROR("Result:%d", result);
+		CCASSERT(false, "result != tinyxml2::XML_SUCCESS");
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		CCASSERT(false, "root == NULL");
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_heroData data;
+		data.mID = element->IntAttribute("ID");
+		data.mname = element->Attribute("name");
+		data.mgrade_type = element->IntAttribute("grade_type");
+		data.mdefault_have = element->IntAttribute("default_have");
+		data.mskill_id = element->IntAttribute("skill_id");
+		data.mattribute = element->IntAttribute("attribute");
+		data.matk = element->IntAttribute("atk");
+		data.micon = element->Attribute("icon");
+		data.maspect = element->Attribute("aspect");
+		data.mspeed = element->FloatAttribute("speed");
+		data.mzoom_factor = element->FloatAttribute("zoom_factor");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+	CCLOG("M_hero Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_hero::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/M_hero");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "M_hero");
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushstring(L, "datas");
+	lua_gettable(L, -2);
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushnil(L);
+	while(lua_next(L, 2))
+	{
+		CCASSERT(lua_istable(L, -1) == 1, "is not table");
+		M_heroData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "name", data.mname);
+		LuaCfgHelper::readInt(L, "grade_type", data.mgrade_type);
+		LuaCfgHelper::readInt(L, "default_have", data.mdefault_have);
+		LuaCfgHelper::readInt(L, "skill_id", data.mskill_id);
+		LuaCfgHelper::readInt(L, "attribute", data.mattribute);
+		LuaCfgHelper::readInt(L, "atk", data.matk);
+		LuaCfgHelper::readString(L, "icon", data.micon);
+		LuaCfgHelper::readString(L, "aspect", data.maspect);
+		LuaCfgHelper::readFloat(L, "speed", data.mspeed);
+		LuaCfgHelper::readFloat(L, "zoom_factor", data.mzoom_factor);
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		lua_pop(L, 1);
+	}
+	lua_settop(L, 0);
+	CCLOG("M_hero Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_hero::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+M_hero* M_hero::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_hero());
+	}
+	return msSingleton.get();
+}
+
+void M_hero::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 45 - 0
GameConfig/Code/Client/M_hero.h

@@ -0,0 +1,45 @@
+#pragma once
+#include <map>
+struct M_heroData
+{
+	//ID
+	int mID;
+	//英雄名称
+	std::string mname;
+	//英雄品质
+	int mgrade_type;
+	//默认拥有
+	int mdefault_have;
+	//技能
+	int mskill_id;
+	//属性
+	int mattribute;
+	//攻击力
+	int matk;
+	//英雄图标
+	std::string micon;
+	//英雄形象
+	std::string maspect;
+	//移动速度
+	float mspeed;
+	//缩放倍数
+	float mzoom_factor;
+};
+
+class M_hero
+{
+public:
+private:
+	static std::auto_ptr<M_hero> msSingleton;
+public:
+	int GetCount();
+	const M_heroData* GetData(int ID);
+	const std::map<int, M_heroData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static M_hero* GetSingleton();
+	static void Release();
+private:
+	std::map<int, M_heroData> mMapData;
+};

+ 153 - 0
GameConfig/Code/Client/M_magic_array_config.cpp

@@ -0,0 +1,153 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "M_magic_array_config.h"
+std::auto_ptr<M_magic_array_config> M_magic_array_config::msSingleton(nullptr);
+
+int M_magic_array_config::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_magic_array_configData* M_magic_array_config::GetData(int64_t ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int64_t, M_magic_array_configData>& M_magic_array_config::GetMapData()
+{
+	return mMapData;
+}
+
+void M_magic_array_config::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/M_magic_array_config.xml");
+	auto result = xmlDoc.Parse(content.c_str(), content.length());
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		CCLOGERROR("Result:%d", result);
+		CCASSERT(false, "result != tinyxml2::XML_SUCCESS");
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		CCASSERT(false, "root == NULL");
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_magic_array_configData data;
+		data.mlevel = element->IntAttribute("level");
+		{
+			const char* up_cost = element->Attribute("up_cost");
+			std::vector<std::string> vecup_cost;
+			boost::split(vecup_cost, up_cost, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecup_cost.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecup_cost[i].c_str(), &temp))
+				{
+					data.mup_cost.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* atk_cost = element->Attribute("atk_cost");
+			std::vector<std::string> vecatk_cost;
+			boost::split(vecatk_cost, atk_cost, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecatk_cost.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecatk_cost[i].c_str(), &temp))
+				{
+					data.matk_cost.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* un_lock_award = element->Attribute("un_lock_award");
+			std::vector<std::string> vecun_lock_award;
+			boost::split(vecun_lock_award, un_lock_award, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecun_lock_award.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecun_lock_award[i].c_str(), &temp))
+				{
+					data.mun_lock_award.push_back(temp);
+				}
+			}
+		}
+		data.matk = element->IntAttribute("atk");
+		data.mhp = element->IntAttribute("hp");
+		data.micon = element->Attribute("icon");
+		data.mm_stone = element->Attribute("m_stone");
+		data.mmgc_stone = element->FloatAttribute("mgc_stone");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+	CCLOG("M_magic_array_config Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_magic_array_config::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/M_magic_array_config");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "M_magic_array_config");
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushstring(L, "datas");
+	lua_gettable(L, -2);
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushnil(L);
+	while(lua_next(L, 2))
+	{
+		CCASSERT(lua_istable(L, -1) == 1, "is not table");
+		M_magic_array_configData data;
+		LuaCfgHelper::readInt(L, "level", data.mlevel);
+		LuaCfgHelper::readVectorInt(L, "up_cost", data.mup_cost);
+		LuaCfgHelper::readVectorInt(L, "atk_cost", data.matk_cost);
+		LuaCfgHelper::readVectorInt(L, "un_lock_award", data.mun_lock_award);
+		LuaCfgHelper::readInt(L, "atk", data.matk);
+		LuaCfgHelper::readInt(L, "hp", data.mhp);
+		LuaCfgHelper::readString(L, "icon", data.micon);
+		LuaCfgHelper::readString(L, "m_stone", data.mm_stone);
+		LuaCfgHelper::readFloat(L, "mgc_stone", data.mmgc_stone);
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		lua_pop(L, 1);
+	}
+	lua_settop(L, 0);
+	CCLOG("M_magic_array_config Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_magic_array_config::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+M_magic_array_config* M_magic_array_config::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_magic_array_config());
+	}
+	return msSingleton.get();
+}
+
+void M_magic_array_config::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 43 - 0
GameConfig/Code/Client/M_magic_array_config.h

@@ -0,0 +1,43 @@
+#pragma once
+#include <map>
+struct M_magic_array_configData
+{
+	//ID
+	int64_t mID;
+	//等级
+	int mlevel;
+	//升级消耗(道具ID,数量)
+	std::vector<int> mup_cost;
+	//攻击消耗(道具ID,数量)
+	std::vector<int> matk_cost;
+	//解锁奖励(道具ID,数量)
+	std::vector<int> mun_lock_award;
+	//攻击
+	int matk;
+	//生命
+	int mhp;
+	//图标
+	std::string micon;
+	//魔导石掉落
+	std::string mm_stone;
+	//魔法石掉落(百分比)
+	float mmgc_stone;
+};
+
+class M_magic_array_config
+{
+public:
+private:
+	static std::auto_ptr<M_magic_array_config> msSingleton;
+public:
+	int GetCount();
+	const M_magic_array_configData* GetData(int64_t ID);
+	const std::map<int64_t, M_magic_array_configData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static M_magic_array_config* GetSingleton();
+	static void Release();
+private:
+	std::map<int64_t, M_magic_array_configData> mMapData;
+};

+ 117 - 0
GameConfig/Code/Client/M_monster.cpp

@@ -0,0 +1,117 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "M_monster.h"
+std::auto_ptr<M_monster> M_monster::msSingleton(nullptr);
+
+int M_monster::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_monsterData* M_monster::GetData(int64_t ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int64_t, M_monsterData>& M_monster::GetMapData()
+{
+	return mMapData;
+}
+
+void M_monster::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/M_monster.xml");
+	auto result = xmlDoc.Parse(content.c_str(), content.length());
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		CCLOGERROR("Result:%d", result);
+		CCASSERT(false, "result != tinyxml2::XML_SUCCESS");
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		CCASSERT(false, "root == NULL");
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_monsterData data;
+		data.mname = element->Attribute("name");
+		data.mtype = element->IntAttribute("type");
+		data.mmultiple = element->IntAttribute("multiple");
+		data.micon = element->Attribute("icon");
+		data.maspect = element->Attribute("aspect");
+		data.mspeed = element->FloatAttribute("speed");
+		data.msuper_speed = element->FloatAttribute("super_speed");
+		data.mzoom_factor = element->FloatAttribute("zoom_factor");
+		data.mexp_value = element->IntAttribute("exp_value");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+	CCLOG("M_monster Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_monster::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/M_monster");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "M_monster");
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushstring(L, "datas");
+	lua_gettable(L, -2);
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushnil(L);
+	while(lua_next(L, 2))
+	{
+		CCASSERT(lua_istable(L, -1) == 1, "is not table");
+		M_monsterData data;
+		LuaCfgHelper::readString(L, "name", data.mname);
+		LuaCfgHelper::readInt(L, "type", data.mtype);
+		LuaCfgHelper::readInt(L, "multiple", data.mmultiple);
+		LuaCfgHelper::readString(L, "icon", data.micon);
+		LuaCfgHelper::readString(L, "aspect", data.maspect);
+		LuaCfgHelper::readFloat(L, "speed", data.mspeed);
+		LuaCfgHelper::readFloat(L, "super_speed", data.msuper_speed);
+		LuaCfgHelper::readFloat(L, "zoom_factor", data.mzoom_factor);
+		LuaCfgHelper::readInt(L, "exp_value", data.mexp_value);
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		lua_pop(L, 1);
+	}
+	lua_settop(L, 0);
+	CCLOG("M_monster Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_monster::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+M_monster* M_monster::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_monster());
+	}
+	return msSingleton.get();
+}
+
+void M_monster::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 43 - 0
GameConfig/Code/Client/M_monster.h

@@ -0,0 +1,43 @@
+#pragma once
+#include <map>
+struct M_monsterData
+{
+	//ID
+	int64_t mID;
+	//怪物名称
+	std::string mname;
+	//怪物类型
+	int mtype;
+	//击杀倍数
+	int mmultiple;
+	//怪物图标
+	std::string micon;
+	//怪物形象
+	std::string maspect;
+	//移动速度
+	float mspeed;
+	//鱼阵移动速度
+	float msuper_speed;
+	//缩放倍数
+	float mzoom_factor;
+	//经验掉落(道具ID)
+	int mexp_value;
+};
+
+class M_monster
+{
+public:
+private:
+	static std::auto_ptr<M_monster> msSingleton;
+public:
+	int GetCount();
+	const M_monsterData* GetData(int64_t ID);
+	const std::map<int64_t, M_monsterData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static M_monster* GetSingleton();
+	static void Release();
+private:
+	std::map<int64_t, M_monsterData> mMapData;
+};

+ 113 - 0
GameConfig/Code/Client/M_skill.cpp

@@ -0,0 +1,113 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "M_skill.h"
+std::auto_ptr<M_skill> M_skill::msSingleton(nullptr);
+
+int M_skill::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_skillData* M_skill::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, M_skillData>& M_skill::GetMapData()
+{
+	return mMapData;
+}
+
+void M_skill::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/M_skill.xml");
+	auto result = xmlDoc.Parse(content.c_str(), content.length());
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		CCLOGERROR("Result:%d", result);
+		CCASSERT(false, "result != tinyxml2::XML_SUCCESS");
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		CCASSERT(false, "root == NULL");
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_skillData data;
+		data.mID = element->IntAttribute("ID");
+		data.mhero_id = element->IntAttribute("hero_id");
+		data.mskill_leve = element->IntAttribute("skill_leve");
+		data.mbullet_num = element->IntAttribute("bullet_num");
+		data.mbullet_radius = element->IntAttribute("bullet_radius");
+		data.mattack_distance = element->IntAttribute("attack_distance");
+		data.mskill_des = element->Attribute("skill_des");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+	CCLOG("M_skill Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_skill::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/M_skill");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "M_skill");
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushstring(L, "datas");
+	lua_gettable(L, -2);
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushnil(L);
+	while(lua_next(L, 2))
+	{
+		CCASSERT(lua_istable(L, -1) == 1, "is not table");
+		M_skillData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "hero_id", data.mhero_id);
+		LuaCfgHelper::readInt(L, "skill_leve", data.mskill_leve);
+		LuaCfgHelper::readInt(L, "bullet_num", data.mbullet_num);
+		LuaCfgHelper::readInt(L, "bullet_radius", data.mbullet_radius);
+		LuaCfgHelper::readInt(L, "attack_distance", data.mattack_distance);
+		LuaCfgHelper::readString(L, "skill_des", data.mskill_des);
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		lua_pop(L, 1);
+	}
+	lua_settop(L, 0);
+	CCLOG("M_skill Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_skill::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+M_skill* M_skill::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_skill());
+	}
+	return msSingleton.get();
+}
+
+void M_skill::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 37 - 0
GameConfig/Code/Client/M_skill.h

@@ -0,0 +1,37 @@
+#pragma once
+#include <map>
+struct M_skillData
+{
+	//ID
+	int mID;
+	//英雄ID
+	int mhero_id;
+	//技能等级
+	int mskill_leve;
+	//子弹数量
+	int mbullet_num;
+	//子弹半径
+	int mbullet_radius;
+	//攻击距离
+	int mattack_distance;
+	//技能描述
+	std::string mskill_des;
+};
+
+class M_skill
+{
+public:
+private:
+	static std::auto_ptr<M_skill> msSingleton;
+public:
+	int GetCount();
+	const M_skillData* GetData(int ID);
+	const std::map<int, M_skillData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static M_skill* GetSingleton();
+	static void Release();
+private:
+	std::map<int, M_skillData> mMapData;
+};

+ 137 - 0
GameConfig/Code/Client/M_un_lock_battle.cpp

@@ -0,0 +1,137 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "M_un_lock_battle.h"
+std::auto_ptr<M_un_lock_battle> M_un_lock_battle::msSingleton(nullptr);
+
+int M_un_lock_battle::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_un_lock_battleData* M_un_lock_battle::GetData(int64_t ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int64_t, M_un_lock_battleData>& M_un_lock_battle::GetMapData()
+{
+	return mMapData;
+}
+
+void M_un_lock_battle::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/M_un_lock_battle.xml");
+	auto result = xmlDoc.Parse(content.c_str(), content.length());
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		CCLOGERROR("Result:%d", result);
+		CCASSERT(false, "result != tinyxml2::XML_SUCCESS");
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		CCASSERT(false, "root == NULL");
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_un_lock_battleData data;
+		data.mbattle_type = element->IntAttribute("battle_type");
+		data.mun_lock_magic = element->IntAttribute("un_lock_magic");
+		data.mdemand = element->IntAttribute("demand");
+		data.mprohibit = element->IntAttribute("prohibit");
+		{
+			const char* use_magic = element->Attribute("use_magic");
+			std::vector<std::string> vecuse_magic;
+			boost::split(vecuse_magic, use_magic, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecuse_magic.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecuse_magic[i].c_str(), &temp))
+				{
+					data.muse_magic.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* fish_wave = element->Attribute("fish_wave");
+			std::vector<std::string> vecfish_wave;
+			boost::split(vecfish_wave, fish_wave, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecfish_wave.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecfish_wave[i].c_str(), &temp))
+				{
+					data.mfish_wave.push_back(temp);
+				}
+			}
+		}
+		data.mfish_scheme = element->Attribute("fish_scheme");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+	CCLOG("M_un_lock_battle Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_un_lock_battle::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/M_un_lock_battle");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "M_un_lock_battle");
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushstring(L, "datas");
+	lua_gettable(L, -2);
+	CCASSERT(lua_istable(L, -1) == 1, "is not table");
+	lua_pushnil(L);
+	while(lua_next(L, 2))
+	{
+		CCASSERT(lua_istable(L, -1) == 1, "is not table");
+		M_un_lock_battleData data;
+		LuaCfgHelper::readInt(L, "battle_type", data.mbattle_type);
+		LuaCfgHelper::readInt(L, "un_lock_magic", data.mun_lock_magic);
+		LuaCfgHelper::readInt(L, "demand", data.mdemand);
+		LuaCfgHelper::readInt(L, "prohibit", data.mprohibit);
+		LuaCfgHelper::readVectorInt(L, "use_magic", data.muse_magic);
+		LuaCfgHelper::readVectorInt(L, "fish_wave", data.mfish_wave);
+		LuaCfgHelper::readString(L, "fish_scheme", data.mfish_scheme);
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		CCASSERT(mMapData.find(data.mID) == mMapData.end(), "data.mID is exists");
+		mMapData.insert(std::make_pair(data.mID, data));
+		lua_pop(L, 1);
+	}
+	lua_settop(L, 0);
+	CCLOG("M_un_lock_battle Loaded. Load Data:%u", mMapData.size());
+}
+
+void M_un_lock_battle::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+M_un_lock_battle* M_un_lock_battle::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_un_lock_battle());
+	}
+	return msSingleton.get();
+}
+
+void M_un_lock_battle::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 39 - 0
GameConfig/Code/Client/M_un_lock_battle.h

@@ -0,0 +1,39 @@
+#pragma once
+#include <map>
+struct M_un_lock_battleData
+{
+	//ID
+	int64_t mID;
+	//场地类型
+	int mbattle_type;
+	//魔法阵解锁
+	int mun_lock_magic;
+	//魔币准入金额
+	int mdemand;
+	//魔币禁止金额
+	int mprohibit;
+	//魔法阵使用等级
+	std::vector<int> muse_magic;
+	//鱼阵波数
+	std::vector<int> mfish_wave;
+	//鱼阵方案(方案,权重|方案,权重)
+	std::string mfish_scheme;
+};
+
+class M_un_lock_battle
+{
+public:
+private:
+	static std::auto_ptr<M_un_lock_battle> msSingleton;
+public:
+	int GetCount();
+	const M_un_lock_battleData* GetData(int64_t ID);
+	const std::map<int64_t, M_un_lock_battleData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static M_un_lock_battle* GetSingleton();
+	static void Release();
+private:
+	std::map<int64_t, M_un_lock_battleData> mMapData;
+};

+ 95 - 0
GameConfig/Code/Server/M_fish_scheme.cpp

@@ -0,0 +1,95 @@
+#include "stdafx.h"
+#include <cassert>
+#include <fstream>
+#include <iostream>
+#include <iostream>
+#include <boost/smart_ptr.hpp>
+#include <boost/algorithm/string.hpp>
+#include "tinyxml2.h"
+#include "M_fish_scheme.h"
+#include "FileEncrypt.h"
+std::auto_ptr<M_fish_scheme> M_fish_scheme::msSingleton(nullptr);
+
+int M_fish_scheme::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_fish_schemeData* M_fish_scheme::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+boost::unordered_map<int, M_fish_schemeData>& M_fish_scheme::GetMapData()
+{
+	return mMapData;
+}
+
+void M_fish_scheme::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+void M_fish_scheme::Load(const std::string& path)
+{
+	std::ifstream readStream(path, std::ios::binary);
+	if (!readStream.is_open())
+	{
+		assert(false);
+		return;
+	}
+	readStream.seekg(0, std::ios::end);
+	int fileSize = readStream.tellg();
+	boost::shared_array<char> buffer(new char[fileSize+1]);
+	buffer.get()[fileSize] = '\0';
+	readStream.seekg(0, std::ios::beg);
+	readStream.read(buffer.get(), fileSize);
+	readStream.close();
+	FileEncrypt::decryptBuffer( buffer, fileSize );
+	tinyxml2::XMLDocument xmlDoc;
+	auto result = xmlDoc.Parse(buffer.get(), fileSize);
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		assert(false);
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		assert(false);
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_fish_schemeData data;
+		data.mID = element->IntAttribute("ID");
+		data.mmonster_id = element->IntAttribute("monster_id");
+		data.mfish_group = element->IntAttribute("fish_group");
+		data.mnum = element->IntAttribute("num");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		assert(mMapData.find(data.mID) == mMapData.end());
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+}
+
+void M_fish_scheme::Load()
+{
+	Load("../Config/M_fish_scheme.xml");
+}
+
+M_fish_scheme* M_fish_scheme::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_fish_scheme());
+	}
+	return msSingleton.get();
+}

+ 31 - 0
GameConfig/Code/Server/M_fish_scheme.h

@@ -0,0 +1,31 @@
+#pragma once
+#include <boost/unordered_map.hpp>
+#include <vector>
+struct M_fish_schemeData
+{
+	//ID
+	int mID;
+	//¹ÖÎïID
+	int mmonster_id;
+	//ÓãÕó·½°¸×é
+	int mfish_group;
+	//ÊýÁ¿
+	int mnum;
+};
+
+class M_fish_scheme
+{
+public:
+private:
+	static std::auto_ptr<M_fish_scheme> msSingleton;
+public:
+	int GetCount();
+	const M_fish_schemeData* GetData(int ID);
+	boost::unordered_map<int, M_fish_schemeData>& GetMapData();
+	void Reload();
+	void Load(const std::string& path);
+	void Load();
+	static M_fish_scheme* GetSingleton();
+private:
+	boost::unordered_map<int, M_fish_schemeData> mMapData;
+};

+ 120 - 0
GameConfig/Code/Server/M_game_battle_field.cpp

@@ -0,0 +1,120 @@
+#include "stdafx.h"
+#include <cassert>
+#include <fstream>
+#include <iostream>
+#include <iostream>
+#include <boost/smart_ptr.hpp>
+#include <boost/algorithm/string.hpp>
+#include "tinyxml2.h"
+#include "M_game_battle_field.h"
+#include "FileEncrypt.h"
+std::auto_ptr<M_game_battle_field> M_game_battle_field::msSingleton(nullptr);
+
+int M_game_battle_field::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_game_battle_fieldData* M_game_battle_field::GetData(int64_t ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+boost::unordered_map<int64_t, M_game_battle_fieldData>& M_game_battle_field::GetMapData()
+{
+	return mMapData;
+}
+
+void M_game_battle_field::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+void M_game_battle_field::Load(const std::string& path)
+{
+	std::ifstream readStream(path, std::ios::binary);
+	if (!readStream.is_open())
+	{
+		assert(false);
+		return;
+	}
+	readStream.seekg(0, std::ios::end);
+	int fileSize = readStream.tellg();
+	boost::shared_array<char> buffer(new char[fileSize+1]);
+	buffer.get()[fileSize] = '\0';
+	readStream.seekg(0, std::ios::beg);
+	readStream.read(buffer.get(), fileSize);
+	readStream.close();
+	FileEncrypt::decryptBuffer( buffer, fileSize );
+	tinyxml2::XMLDocument xmlDoc;
+	auto result = xmlDoc.Parse(buffer.get(), fileSize);
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		assert(false);
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		assert(false);
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_game_battle_fieldData data;
+		{
+			int64_t temp = 0;
+			const char* str = element->Attribute("ID");
+			tinyxml2::XMLUtil::ToInt64(str, &temp);
+			data.mID = temp;
+		}
+		{
+			int64_t temp = 0;
+			const char* str = element->Attribute("monster_id");
+			tinyxml2::XMLUtil::ToInt64(str, &temp);
+			data.mmonster_id = temp;
+		}
+		data.mscene_type = element->IntAttribute("scene_type");
+		data.mweight = element->IntAttribute("weight");
+		data.mmax_num = element->IntAttribute("max_num");
+		{
+			const char* kill_count = element->Attribute("kill_count");
+			std::vector<std::string> veckill_count;
+			boost::split(veckill_count, kill_count, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < veckill_count.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(veckill_count[i].c_str(), &temp))
+				{
+					data.mkill_count.push_back(temp);
+				}
+			}
+		}
+		data.maward_drop_prob = element->FloatAttribute("award_drop_prob");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		assert(mMapData.find(data.mID) == mMapData.end());
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+}
+
+void M_game_battle_field::Load()
+{
+	Load("../Config/M_game_battle_field.xml");
+}
+
+M_game_battle_field* M_game_battle_field::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_game_battle_field());
+	}
+	return msSingleton.get();
+}

+ 37 - 0
GameConfig/Code/Server/M_game_battle_field.h

@@ -0,0 +1,37 @@
+#pragma once
+#include <boost/unordered_map.hpp>
+#include <vector>
+struct M_game_battle_fieldData
+{
+	//ID
+	int64_t mID;
+	//怪物ID
+	int64_t mmonster_id;
+	//场地类型
+	int mscene_type;
+	//出场权重
+	int mweight;
+	//最大数量
+	int mmax_num;
+	//击杀次数
+	std::vector<int> mkill_count;
+	//魔币掉落概率(百分比)
+	float maward_drop_prob;
+};
+
+class M_game_battle_field
+{
+public:
+private:
+	static std::auto_ptr<M_game_battle_field> msSingleton;
+public:
+	int GetCount();
+	const M_game_battle_fieldData* GetData(int64_t ID);
+	boost::unordered_map<int64_t, M_game_battle_fieldData>& GetMapData();
+	void Reload();
+	void Load(const std::string& path);
+	void Load();
+	static M_game_battle_field* GetSingleton();
+private:
+	boost::unordered_map<int64_t, M_game_battle_fieldData> mMapData;
+};

+ 100 - 0
GameConfig/Code/Server/M_game_level_config.cpp

@@ -0,0 +1,100 @@
+#include "stdafx.h"
+#include <cassert>
+#include <fstream>
+#include <iostream>
+#include <iostream>
+#include <boost/smart_ptr.hpp>
+#include <boost/algorithm/string.hpp>
+#include "tinyxml2.h"
+#include "M_game_level_config.h"
+#include "FileEncrypt.h"
+std::auto_ptr<M_game_level_config> M_game_level_config::msSingleton(nullptr);
+
+int M_game_level_config::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_game_level_configData* M_game_level_config::GetData(int64_t ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+boost::unordered_map<int64_t, M_game_level_configData>& M_game_level_config::GetMapData()
+{
+	return mMapData;
+}
+
+void M_game_level_config::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+void M_game_level_config::Load(const std::string& path)
+{
+	std::ifstream readStream(path, std::ios::binary);
+	if (!readStream.is_open())
+	{
+		assert(false);
+		return;
+	}
+	readStream.seekg(0, std::ios::end);
+	int fileSize = readStream.tellg();
+	boost::shared_array<char> buffer(new char[fileSize+1]);
+	buffer.get()[fileSize] = '\0';
+	readStream.seekg(0, std::ios::beg);
+	readStream.read(buffer.get(), fileSize);
+	readStream.close();
+	FileEncrypt::decryptBuffer( buffer, fileSize );
+	tinyxml2::XMLDocument xmlDoc;
+	auto result = xmlDoc.Parse(buffer.get(), fileSize);
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		assert(false);
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		assert(false);
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_game_level_configData data;
+		{
+			int64_t temp = 0;
+			const char* str = element->Attribute("ID");
+			tinyxml2::XMLUtil::ToInt64(str, &temp);
+			data.mID = temp;
+		}
+		data.mleve = element->IntAttribute("leve");
+		data.mup_exp = element->IntAttribute("up_exp");
+		data.mmonster_num = element->IntAttribute("monster_num");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		assert(mMapData.find(data.mID) == mMapData.end());
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+}
+
+void M_game_level_config::Load()
+{
+	Load("../Config/M_game_level_config.xml");
+}
+
+M_game_level_config* M_game_level_config::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_game_level_config());
+	}
+	return msSingleton.get();
+}

+ 31 - 0
GameConfig/Code/Server/M_game_level_config.h

@@ -0,0 +1,31 @@
+#pragma once
+#include <boost/unordered_map.hpp>
+#include <vector>
+struct M_game_level_configData
+{
+	//ID
+	int64_t mID;
+	//等级
+	int mleve;
+	//所需经验
+	int mup_exp;
+	//同屏怪物数量
+	int mmonster_num;
+};
+
+class M_game_level_config
+{
+public:
+private:
+	static std::auto_ptr<M_game_level_config> msSingleton;
+public:
+	int GetCount();
+	const M_game_level_configData* GetData(int64_t ID);
+	boost::unordered_map<int64_t, M_game_level_configData>& GetMapData();
+	void Reload();
+	void Load(const std::string& path);
+	void Load();
+	static M_game_level_config* GetSingleton();
+private:
+	boost::unordered_map<int64_t, M_game_level_configData> mMapData;
+};

+ 102 - 0
GameConfig/Code/Server/M_hero.cpp

@@ -0,0 +1,102 @@
+#include "stdafx.h"
+#include <cassert>
+#include <fstream>
+#include <iostream>
+#include <iostream>
+#include <boost/smart_ptr.hpp>
+#include <boost/algorithm/string.hpp>
+#include "tinyxml2.h"
+#include "M_hero.h"
+#include "FileEncrypt.h"
+std::auto_ptr<M_hero> M_hero::msSingleton(nullptr);
+
+int M_hero::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_heroData* M_hero::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+boost::unordered_map<int, M_heroData>& M_hero::GetMapData()
+{
+	return mMapData;
+}
+
+void M_hero::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+void M_hero::Load(const std::string& path)
+{
+	std::ifstream readStream(path, std::ios::binary);
+	if (!readStream.is_open())
+	{
+		assert(false);
+		return;
+	}
+	readStream.seekg(0, std::ios::end);
+	int fileSize = readStream.tellg();
+	boost::shared_array<char> buffer(new char[fileSize+1]);
+	buffer.get()[fileSize] = '\0';
+	readStream.seekg(0, std::ios::beg);
+	readStream.read(buffer.get(), fileSize);
+	readStream.close();
+	FileEncrypt::decryptBuffer( buffer, fileSize );
+	tinyxml2::XMLDocument xmlDoc;
+	auto result = xmlDoc.Parse(buffer.get(), fileSize);
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		assert(false);
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		assert(false);
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_heroData data;
+		data.mID = element->IntAttribute("ID");
+		data.mname = element->Attribute("name");
+		data.mgrade_type = element->IntAttribute("grade_type");
+		data.mdefault_have = element->IntAttribute("default_have");
+		data.mskill_id = element->IntAttribute("skill_id");
+		data.mattribute = element->IntAttribute("attribute");
+		data.matk = element->IntAttribute("atk");
+		data.micon = element->Attribute("icon");
+		data.maspect = element->Attribute("aspect");
+		data.mspeed = element->FloatAttribute("speed");
+		data.mzoom_factor = element->FloatAttribute("zoom_factor");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		assert(mMapData.find(data.mID) == mMapData.end());
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+}
+
+void M_hero::Load()
+{
+	Load("../Config/M_hero.xml");
+}
+
+M_hero* M_hero::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_hero());
+	}
+	return msSingleton.get();
+}

+ 45 - 0
GameConfig/Code/Server/M_hero.h

@@ -0,0 +1,45 @@
+#pragma once
+#include <boost/unordered_map.hpp>
+#include <vector>
+struct M_heroData
+{
+	//ID
+	int mID;
+	//英雄名称
+	std::string mname;
+	//英雄品质
+	int mgrade_type;
+	//默认拥有
+	int mdefault_have;
+	//技能
+	int mskill_id;
+	//属性
+	int mattribute;
+	//攻击力
+	int matk;
+	//英雄图标
+	std::string micon;
+	//英雄形象
+	std::string maspect;
+	//移动速度
+	float mspeed;
+	//缩放倍数
+	float mzoom_factor;
+};
+
+class M_hero
+{
+public:
+private:
+	static std::auto_ptr<M_hero> msSingleton;
+public:
+	int GetCount();
+	const M_heroData* GetData(int ID);
+	boost::unordered_map<int, M_heroData>& GetMapData();
+	void Reload();
+	void Load(const std::string& path);
+	void Load();
+	static M_hero* GetSingleton();
+private:
+	boost::unordered_map<int, M_heroData> mMapData;
+};

+ 142 - 0
GameConfig/Code/Server/M_magic_array_config.cpp

@@ -0,0 +1,142 @@
+#include "stdafx.h"
+#include <cassert>
+#include <fstream>
+#include <iostream>
+#include <iostream>
+#include <boost/smart_ptr.hpp>
+#include <boost/algorithm/string.hpp>
+#include "tinyxml2.h"
+#include "M_magic_array_config.h"
+#include "FileEncrypt.h"
+std::auto_ptr<M_magic_array_config> M_magic_array_config::msSingleton(nullptr);
+
+int M_magic_array_config::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_magic_array_configData* M_magic_array_config::GetData(int64_t ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+boost::unordered_map<int64_t, M_magic_array_configData>& M_magic_array_config::GetMapData()
+{
+	return mMapData;
+}
+
+void M_magic_array_config::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+void M_magic_array_config::Load(const std::string& path)
+{
+	std::ifstream readStream(path, std::ios::binary);
+	if (!readStream.is_open())
+	{
+		assert(false);
+		return;
+	}
+	readStream.seekg(0, std::ios::end);
+	int fileSize = readStream.tellg();
+	boost::shared_array<char> buffer(new char[fileSize+1]);
+	buffer.get()[fileSize] = '\0';
+	readStream.seekg(0, std::ios::beg);
+	readStream.read(buffer.get(), fileSize);
+	readStream.close();
+	FileEncrypt::decryptBuffer( buffer, fileSize );
+	tinyxml2::XMLDocument xmlDoc;
+	auto result = xmlDoc.Parse(buffer.get(), fileSize);
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		assert(false);
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		assert(false);
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_magic_array_configData data;
+		{
+			int64_t temp = 0;
+			const char* str = element->Attribute("ID");
+			tinyxml2::XMLUtil::ToInt64(str, &temp);
+			data.mID = temp;
+		}
+		data.mlevel = element->IntAttribute("level");
+		{
+			const char* up_cost = element->Attribute("up_cost");
+			std::vector<std::string> vecup_cost;
+			boost::split(vecup_cost, up_cost, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecup_cost.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecup_cost[i].c_str(), &temp))
+				{
+					data.mup_cost.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* atk_cost = element->Attribute("atk_cost");
+			std::vector<std::string> vecatk_cost;
+			boost::split(vecatk_cost, atk_cost, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecatk_cost.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecatk_cost[i].c_str(), &temp))
+				{
+					data.matk_cost.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* un_lock_award = element->Attribute("un_lock_award");
+			std::vector<std::string> vecun_lock_award;
+			boost::split(vecun_lock_award, un_lock_award, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecun_lock_award.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecun_lock_award[i].c_str(), &temp))
+				{
+					data.mun_lock_award.push_back(temp);
+				}
+			}
+		}
+		data.matk = element->IntAttribute("atk");
+		data.mhp = element->IntAttribute("hp");
+		data.micon = element->Attribute("icon");
+		data.mm_stone = element->Attribute("m_stone");
+		data.mmgc_stone = element->FloatAttribute("mgc_stone");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		assert(mMapData.find(data.mID) == mMapData.end());
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+}
+
+void M_magic_array_config::Load()
+{
+	Load("../Config/M_magic_array_config.xml");
+}
+
+M_magic_array_config* M_magic_array_config::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_magic_array_config());
+	}
+	return msSingleton.get();
+}

+ 43 - 0
GameConfig/Code/Server/M_magic_array_config.h

@@ -0,0 +1,43 @@
+#pragma once
+#include <boost/unordered_map.hpp>
+#include <vector>
+struct M_magic_array_configData
+{
+	//ID
+	int64_t mID;
+	//等级
+	int mlevel;
+	//升级消耗(道具ID,数量)
+	std::vector<int> mup_cost;
+	//攻击消耗(道具ID,数量)
+	std::vector<int> matk_cost;
+	//解锁奖励(道具ID,数量)
+	std::vector<int> mun_lock_award;
+	//攻击
+	int matk;
+	//生命
+	int mhp;
+	//图标
+	std::string micon;
+	//魔导石掉落
+	std::string mm_stone;
+	//魔法石掉落(百分比)
+	float mmgc_stone;
+};
+
+class M_magic_array_config
+{
+public:
+private:
+	static std::auto_ptr<M_magic_array_config> msSingleton;
+public:
+	int GetCount();
+	const M_magic_array_configData* GetData(int64_t ID);
+	boost::unordered_map<int64_t, M_magic_array_configData>& GetMapData();
+	void Reload();
+	void Load(const std::string& path);
+	void Load();
+	static M_magic_array_config* GetSingleton();
+private:
+	boost::unordered_map<int64_t, M_magic_array_configData> mMapData;
+};

+ 106 - 0
GameConfig/Code/Server/M_monster.cpp

@@ -0,0 +1,106 @@
+#include "stdafx.h"
+#include <cassert>
+#include <fstream>
+#include <iostream>
+#include <iostream>
+#include <boost/smart_ptr.hpp>
+#include <boost/algorithm/string.hpp>
+#include "tinyxml2.h"
+#include "M_monster.h"
+#include "FileEncrypt.h"
+std::auto_ptr<M_monster> M_monster::msSingleton(nullptr);
+
+int M_monster::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_monsterData* M_monster::GetData(int64_t ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+boost::unordered_map<int64_t, M_monsterData>& M_monster::GetMapData()
+{
+	return mMapData;
+}
+
+void M_monster::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+void M_monster::Load(const std::string& path)
+{
+	std::ifstream readStream(path, std::ios::binary);
+	if (!readStream.is_open())
+	{
+		assert(false);
+		return;
+	}
+	readStream.seekg(0, std::ios::end);
+	int fileSize = readStream.tellg();
+	boost::shared_array<char> buffer(new char[fileSize+1]);
+	buffer.get()[fileSize] = '\0';
+	readStream.seekg(0, std::ios::beg);
+	readStream.read(buffer.get(), fileSize);
+	readStream.close();
+	FileEncrypt::decryptBuffer( buffer, fileSize );
+	tinyxml2::XMLDocument xmlDoc;
+	auto result = xmlDoc.Parse(buffer.get(), fileSize);
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		assert(false);
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		assert(false);
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_monsterData data;
+		{
+			int64_t temp = 0;
+			const char* str = element->Attribute("ID");
+			tinyxml2::XMLUtil::ToInt64(str, &temp);
+			data.mID = temp;
+		}
+		data.mname = element->Attribute("name");
+		data.mtype = element->IntAttribute("type");
+		data.mmultiple = element->IntAttribute("multiple");
+		data.micon = element->Attribute("icon");
+		data.maspect = element->Attribute("aspect");
+		data.mspeed = element->FloatAttribute("speed");
+		data.msuper_speed = element->FloatAttribute("super_speed");
+		data.mzoom_factor = element->FloatAttribute("zoom_factor");
+		data.mexp_value = element->IntAttribute("exp_value");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		assert(mMapData.find(data.mID) == mMapData.end());
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+}
+
+void M_monster::Load()
+{
+	Load("../Config/M_monster.xml");
+}
+
+M_monster* M_monster::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_monster());
+	}
+	return msSingleton.get();
+}

+ 43 - 0
GameConfig/Code/Server/M_monster.h

@@ -0,0 +1,43 @@
+#pragma once
+#include <boost/unordered_map.hpp>
+#include <vector>
+struct M_monsterData
+{
+	//ID
+	int64_t mID;
+	//怪物名称
+	std::string mname;
+	//怪物类型
+	int mtype;
+	//击杀倍数
+	int mmultiple;
+	//怪物图标
+	std::string micon;
+	//怪物形象
+	std::string maspect;
+	//移动速度
+	float mspeed;
+	//鱼阵移动速度
+	float msuper_speed;
+	//缩放倍数
+	float mzoom_factor;
+	//经验掉落(道具ID)
+	int mexp_value;
+};
+
+class M_monster
+{
+public:
+private:
+	static std::auto_ptr<M_monster> msSingleton;
+public:
+	int GetCount();
+	const M_monsterData* GetData(int64_t ID);
+	boost::unordered_map<int64_t, M_monsterData>& GetMapData();
+	void Reload();
+	void Load(const std::string& path);
+	void Load();
+	static M_monster* GetSingleton();
+private:
+	boost::unordered_map<int64_t, M_monsterData> mMapData;
+};

+ 98 - 0
GameConfig/Code/Server/M_skill.cpp

@@ -0,0 +1,98 @@
+#include "stdafx.h"
+#include <cassert>
+#include <fstream>
+#include <iostream>
+#include <iostream>
+#include <boost/smart_ptr.hpp>
+#include <boost/algorithm/string.hpp>
+#include "tinyxml2.h"
+#include "M_skill.h"
+#include "FileEncrypt.h"
+std::auto_ptr<M_skill> M_skill::msSingleton(nullptr);
+
+int M_skill::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_skillData* M_skill::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+boost::unordered_map<int, M_skillData>& M_skill::GetMapData()
+{
+	return mMapData;
+}
+
+void M_skill::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+void M_skill::Load(const std::string& path)
+{
+	std::ifstream readStream(path, std::ios::binary);
+	if (!readStream.is_open())
+	{
+		assert(false);
+		return;
+	}
+	readStream.seekg(0, std::ios::end);
+	int fileSize = readStream.tellg();
+	boost::shared_array<char> buffer(new char[fileSize+1]);
+	buffer.get()[fileSize] = '\0';
+	readStream.seekg(0, std::ios::beg);
+	readStream.read(buffer.get(), fileSize);
+	readStream.close();
+	FileEncrypt::decryptBuffer( buffer, fileSize );
+	tinyxml2::XMLDocument xmlDoc;
+	auto result = xmlDoc.Parse(buffer.get(), fileSize);
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		assert(false);
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		assert(false);
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_skillData data;
+		data.mID = element->IntAttribute("ID");
+		data.mhero_id = element->IntAttribute("hero_id");
+		data.mskill_leve = element->IntAttribute("skill_leve");
+		data.mbullet_num = element->IntAttribute("bullet_num");
+		data.mbullet_radius = element->IntAttribute("bullet_radius");
+		data.mattack_distance = element->IntAttribute("attack_distance");
+		data.mskill_des = element->Attribute("skill_des");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		assert(mMapData.find(data.mID) == mMapData.end());
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+}
+
+void M_skill::Load()
+{
+	Load("../Config/M_skill.xml");
+}
+
+M_skill* M_skill::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_skill());
+	}
+	return msSingleton.get();
+}

+ 37 - 0
GameConfig/Code/Server/M_skill.h

@@ -0,0 +1,37 @@
+#pragma once
+#include <boost/unordered_map.hpp>
+#include <vector>
+struct M_skillData
+{
+	//ID
+	int mID;
+	//英雄ID
+	int mhero_id;
+	//技能等级
+	int mskill_leve;
+	//子弹数量
+	int mbullet_num;
+	//子弹半径
+	int mbullet_radius;
+	//攻击距离
+	int mattack_distance;
+	//技能描述
+	std::string mskill_des;
+};
+
+class M_skill
+{
+public:
+private:
+	static std::auto_ptr<M_skill> msSingleton;
+public:
+	int GetCount();
+	const M_skillData* GetData(int ID);
+	boost::unordered_map<int, M_skillData>& GetMapData();
+	void Reload();
+	void Load(const std::string& path);
+	void Load();
+	static M_skill* GetSingleton();
+private:
+	boost::unordered_map<int, M_skillData> mMapData;
+};

+ 128 - 0
GameConfig/Code/Server/M_un_lock_battle.cpp

@@ -0,0 +1,128 @@
+#include "stdafx.h"
+#include <cassert>
+#include <fstream>
+#include <iostream>
+#include <iostream>
+#include <boost/smart_ptr.hpp>
+#include <boost/algorithm/string.hpp>
+#include "tinyxml2.h"
+#include "M_un_lock_battle.h"
+#include "FileEncrypt.h"
+std::auto_ptr<M_un_lock_battle> M_un_lock_battle::msSingleton(nullptr);
+
+int M_un_lock_battle::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const M_un_lock_battleData* M_un_lock_battle::GetData(int64_t ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+boost::unordered_map<int64_t, M_un_lock_battleData>& M_un_lock_battle::GetMapData()
+{
+	return mMapData;
+}
+
+void M_un_lock_battle::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+void M_un_lock_battle::Load(const std::string& path)
+{
+	std::ifstream readStream(path, std::ios::binary);
+	if (!readStream.is_open())
+	{
+		assert(false);
+		return;
+	}
+	readStream.seekg(0, std::ios::end);
+	int fileSize = readStream.tellg();
+	boost::shared_array<char> buffer(new char[fileSize+1]);
+	buffer.get()[fileSize] = '\0';
+	readStream.seekg(0, std::ios::beg);
+	readStream.read(buffer.get(), fileSize);
+	readStream.close();
+	FileEncrypt::decryptBuffer( buffer, fileSize );
+	tinyxml2::XMLDocument xmlDoc;
+	auto result = xmlDoc.Parse(buffer.get(), fileSize);
+	if (result != tinyxml2::XML_SUCCESS)
+	{
+		assert(false);
+		return;
+	}
+	auto root = xmlDoc.RootElement();
+	if (root == NULL)
+	{
+		assert(false);
+		return;
+	}
+	auto element = root->FirstChildElement("Data");
+	while (element != NULL)
+	{
+		M_un_lock_battleData data;
+		{
+			int64_t temp = 0;
+			const char* str = element->Attribute("ID");
+			tinyxml2::XMLUtil::ToInt64(str, &temp);
+			data.mID = temp;
+		}
+		data.mbattle_type = element->IntAttribute("battle_type");
+		data.mun_lock_magic = element->IntAttribute("un_lock_magic");
+		data.mdemand = element->IntAttribute("demand");
+		data.mprohibit = element->IntAttribute("prohibit");
+		{
+			const char* use_magic = element->Attribute("use_magic");
+			std::vector<std::string> vecuse_magic;
+			boost::split(vecuse_magic, use_magic, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecuse_magic.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecuse_magic[i].c_str(), &temp))
+				{
+					data.muse_magic.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* fish_wave = element->Attribute("fish_wave");
+			std::vector<std::string> vecfish_wave;
+			boost::split(vecfish_wave, fish_wave, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecfish_wave.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecfish_wave[i].c_str(), &temp))
+				{
+					data.mfish_wave.push_back(temp);
+				}
+			}
+		}
+		data.mfish_scheme = element->Attribute("fish_scheme");
+		if (mMapData.find(data.mID) != mMapData.end())std::cout <<"data refind:" << data.mID << std::endl;
+		assert(mMapData.find(data.mID) == mMapData.end());
+		mMapData.insert(std::make_pair(data.mID, data));
+		element = element->NextSiblingElement();
+	}
+}
+
+void M_un_lock_battle::Load()
+{
+	Load("../Config/M_un_lock_battle.xml");
+}
+
+M_un_lock_battle* M_un_lock_battle::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new M_un_lock_battle());
+	}
+	return msSingleton.get();
+}

+ 39 - 0
GameConfig/Code/Server/M_un_lock_battle.h

@@ -0,0 +1,39 @@
+#pragma once
+#include <boost/unordered_map.hpp>
+#include <vector>
+struct M_un_lock_battleData
+{
+	//ID
+	int64_t mID;
+	//场地类型
+	int mbattle_type;
+	//魔法阵解锁
+	int mun_lock_magic;
+	//魔币准入金额
+	int mdemand;
+	//魔币禁止金额
+	int mprohibit;
+	//魔法阵使用等级
+	std::vector<int> muse_magic;
+	//鱼阵波数
+	std::vector<int> mfish_wave;
+	//鱼阵方案(方案,权重|方案,权重)
+	std::string mfish_scheme;
+};
+
+class M_un_lock_battle
+{
+public:
+private:
+	static std::auto_ptr<M_un_lock_battle> msSingleton;
+public:
+	int GetCount();
+	const M_un_lock_battleData* GetData(int64_t ID);
+	boost::unordered_map<int64_t, M_un_lock_battleData>& GetMapData();
+	void Reload();
+	void Load(const std::string& path);
+	void Load();
+	static M_un_lock_battle* GetSingleton();
+private:
+	boost::unordered_map<int64_t, M_un_lock_battleData> mMapData;
+};

+ 10 - 0
GameConfig/Lua/M_Global_Config.lua

@@ -13,6 +13,16 @@ function M_Global_Config:init()
 	self.datas["TestKey2"] = {Key = "TestKey2", Desc = "XX说明", IntValue = 2, IntListValue = {}, StrValue = "lbt", StrListValue = {}, BoolValue = false}
 	self.datas["dropGL"] = {Key = "dropGL", Desc = "道县id8 随机强化石打开获取权重,权重", IntValue = nil, IntListValue = {10,20,50,30}, StrValue = "", StrListValue = {}, BoolValue = nil}
 	self.datas["dropID"] = {Key = "dropID", Desc = "道县id8 随机强化石打开获取道具ID,道具ID", IntValue = nil, IntListValue = {11,22,15,13}, StrValue = "", StrListValue = {}, BoolValue = nil}
+	self.datas["WarTime"] = {Key = "WarTime", Desc = "每一关战斗时长(s)", IntValue = 120, IntListValue = {}, StrValue = "", StrListValue = {}, BoolValue = nil}
+	self.datas["SkillWeight"] = {Key = "SkillWeight", Desc = "技能选择权重 传说权重,史诗权重", IntValue = nil, IntListValue = {2,1}, StrValue = "", StrListValue = {}, BoolValue = nil}
+	self.datas["Rampage"] = {Key = "Rampage", Desc = "狂暴技能:魔币消耗倍数,奖励倍数", IntValue = nil, IntListValue = {2,2}, StrValue = "", StrListValue = {}, BoolValue = nil}
+	self.datas["TreasureChestRewards"] = {Key = "TreasureChestRewards", Desc = "魔导石宝箱  奖励百分比", IntValue = nil, IntListValue = {100,125,150}, StrValue = "", StrListValue = {}, BoolValue = nil}
+	self.datas["TreasureChestProbability"] = {Key = "TreasureChestProbability", Desc = "魔导石宝箱  奖励概率(万分比)", IntValue = nil, IntListValue = {5000,2500,2500}, StrValue = "", StrListValue = {}, BoolValue = nil}
+	self.datas["SuperTriggered"] = {Key = "SuperTriggered", Desc = "鱼阵时间触发 基础间隔,随机偏移", IntValue = nil, IntListValue = {60,20}, StrValue = "", StrListValue = {}, BoolValue = nil}
+	self.datas["Death"] = {Key = "Death", Desc = "主角受击次数死亡", IntValue = 5, IntListValue = {}, StrValue = "", StrListValue = {}, BoolValue = nil}
+	self.datas["MonsterRefresh"] = {Key = "MonsterRefresh", Desc = "刷怪圈(外圈直径,内圈直径)", IntValue = nil, IntListValue = {30,20}, StrValue = "", StrListValue = {}, BoolValue = nil}
+	self.datas["Experience1"] = {Key = "Experience1", Desc = "道具ID:5 提供的经验值", IntValue = 10, IntListValue = {}, StrValue = "", StrListValue = {}, BoolValue = nil}
+	self.datas["Experience2"] = {Key = "Experience2", Desc = "道具ID:6 提供的经验值", IntValue = 20, IntListValue = {}, StrValue = "", StrListValue = {}, BoolValue = nil}
 end
 
 M_Global_Config:init()

+ 29 - 0
GameConfig/Lua/M_fish_scheme.lua

@@ -0,0 +1,29 @@
+M_fish_scheme = {}
+
+function M_fish_scheme:getData(key)
+	if self.datas == nil then
+		return nil
+	end
+	return self.datas[key]
+end
+
+function M_fish_scheme:init()
+	self.datas = {}
+	self.datas[1002] = {ID = 1002, monster_id = 1002, fish_group = 1, num = 10}
+	self.datas[1003] = {ID = 1003, monster_id = 1001, fish_group = 2, num = 200}
+	self.datas[1004] = {ID = 1004, monster_id = 1002, fish_group = 2, num = 10}
+	self.datas[1005] = {ID = 1005, monster_id = 1001, fish_group = 3, num = 200}
+	self.datas[1006] = {ID = 1006, monster_id = 1002, fish_group = 3, num = 10}
+	self.datas[1007] = {ID = 1007, monster_id = 1001, fish_group = 4, num = 200}
+	self.datas[1008] = {ID = 1008, monster_id = 1002, fish_group = 4, num = 10}
+	self.datas[1009] = {ID = 1009, monster_id = 1001, fish_group = 5, num = 200}
+	self.datas[1010] = {ID = 1010, monster_id = 1002, fish_group = 5, num = 10}
+	self.datas[1011] = {ID = 1011, monster_id = 1001, fish_group = 6, num = 200}
+	self.datas[1012] = {ID = 1012, monster_id = 1002, fish_group = 6, num = 10}
+	self.datas[1013] = {ID = 1013, monster_id = 1001, fish_group = 7, num = 200}
+	self.datas[1014] = {ID = 1014, monster_id = 1002, fish_group = 7, num = 10}
+	self.datas[1015] = {ID = 1015, monster_id = 1001, fish_group = 8, num = 200}
+	self.datas[1016] = {ID = 1016, monster_id = 1002, fish_group = 8, num = 10}
+end
+
+M_fish_scheme:init()

+ 15 - 0
GameConfig/Lua/M_game_battle_field.lua

@@ -0,0 +1,15 @@
+M_game_battle_field = {}
+
+function M_game_battle_field:getData(key)
+	if self.datas == nil then
+		return nil
+	end
+	return self.datas[key]
+end
+
+function M_game_battle_field:init()
+	self.datas = {}
+	self.datas[1002] = {ID = 1002, monster_id = 1002, scene_type = 1, weight = 20, max_num = 2000, kill_count = {2,3}, award_drop_prob = 0.33}
+end
+
+M_game_battle_field:init()

+ 62 - 0
GameConfig/Lua/M_game_level_config.lua

@@ -0,0 +1,62 @@
+M_game_level_config = {}
+
+function M_game_level_config:getData(key)
+	if self.datas == nil then
+		return nil
+	end
+	return self.datas[key]
+end
+
+function M_game_level_config:init()
+	self.datas = {}
+	self.datas[1001] = {ID = 1001, leve = 2, up_exp = 20, monster_num = 7}
+	self.datas[1002] = {ID = 1002, leve = 3, up_exp = 30, monster_num = 9}
+	self.datas[1003] = {ID = 1003, leve = 4, up_exp = 40, monster_num = 10}
+	self.datas[1004] = {ID = 1004, leve = 5, up_exp = 50, monster_num = 15}
+	self.datas[1005] = {ID = 1005, leve = 6, up_exp = 60, monster_num = 20}
+	self.datas[1006] = {ID = 1006, leve = 7, up_exp = 70, monster_num = 30}
+	self.datas[1007] = {ID = 1007, leve = 8, up_exp = 80, monster_num = 40}
+	self.datas[1008] = {ID = 1008, leve = 9, up_exp = 90, monster_num = 50}
+	self.datas[1009] = {ID = 1009, leve = 10, up_exp = 100, monster_num = 60}
+	self.datas[1010] = {ID = 1010, leve = 11, up_exp = 110, monster_num = 70}
+	self.datas[1011] = {ID = 1011, leve = 12, up_exp = 120, monster_num = 80}
+	self.datas[1012] = {ID = 1012, leve = 13, up_exp = 130, monster_num = 90}
+	self.datas[1013] = {ID = 1013, leve = 14, up_exp = 140, monster_num = 100}
+	self.datas[1014] = {ID = 1014, leve = 15, up_exp = 150, monster_num = 110}
+	self.datas[1015] = {ID = 1015, leve = 16, up_exp = 160, monster_num = 120}
+	self.datas[1016] = {ID = 1016, leve = 17, up_exp = 170, monster_num = 130}
+	self.datas[1017] = {ID = 1017, leve = 18, up_exp = 180, monster_num = 140}
+	self.datas[1018] = {ID = 1018, leve = 19, up_exp = 190, monster_num = 150}
+	self.datas[1019] = {ID = 1019, leve = 20, up_exp = 200, monster_num = 160}
+	self.datas[1020] = {ID = 1020, leve = 21, up_exp = 210, monster_num = 170}
+	self.datas[1021] = {ID = 1021, leve = 22, up_exp = 220, monster_num = 180}
+	self.datas[1022] = {ID = 1022, leve = 23, up_exp = 230, monster_num = 190}
+	self.datas[1023] = {ID = 1023, leve = 24, up_exp = 240, monster_num = 200}
+	self.datas[1024] = {ID = 1024, leve = 25, up_exp = 250, monster_num = 200}
+	self.datas[1025] = {ID = 1025, leve = 26, up_exp = 260, monster_num = 200}
+	self.datas[1026] = {ID = 1026, leve = 27, up_exp = 270, monster_num = 200}
+	self.datas[1027] = {ID = 1027, leve = 28, up_exp = 280, monster_num = 200}
+	self.datas[1028] = {ID = 1028, leve = 29, up_exp = 290, monster_num = 200}
+	self.datas[1029] = {ID = 1029, leve = 30, up_exp = 300, monster_num = 200}
+	self.datas[1030] = {ID = 1030, leve = 31, up_exp = 310, monster_num = 200}
+	self.datas[1031] = {ID = 1031, leve = 32, up_exp = 320, monster_num = 200}
+	self.datas[1032] = {ID = 1032, leve = 33, up_exp = 330, monster_num = 200}
+	self.datas[1033] = {ID = 1033, leve = 34, up_exp = 340, monster_num = 200}
+	self.datas[1034] = {ID = 1034, leve = 35, up_exp = 350, monster_num = 200}
+	self.datas[1035] = {ID = 1035, leve = 36, up_exp = 360, monster_num = 200}
+	self.datas[1036] = {ID = 1036, leve = 37, up_exp = 370, monster_num = 200}
+	self.datas[1037] = {ID = 1037, leve = 38, up_exp = nil, monster_num = 200}
+	self.datas[1038] = {ID = 1038, leve = 39, up_exp = 390, monster_num = 200}
+	self.datas[1039] = {ID = 1039, leve = 40, up_exp = 400, monster_num = 200}
+	self.datas[1040] = {ID = 1040, leve = 41, up_exp = 410, monster_num = 200}
+	self.datas[1041] = {ID = 1041, leve = 42, up_exp = 420, monster_num = 200}
+	self.datas[1042] = {ID = 1042, leve = 43, up_exp = 430, monster_num = 200}
+	self.datas[1043] = {ID = 1043, leve = 44, up_exp = 440, monster_num = 200}
+	self.datas[1044] = {ID = 1044, leve = 45, up_exp = 450, monster_num = 200}
+	self.datas[1045] = {ID = 1045, leve = 46, up_exp = 460, monster_num = 200}
+	self.datas[1046] = {ID = 1046, leve = 47, up_exp = 470, monster_num = 200}
+	self.datas[1047] = {ID = 1047, leve = 48, up_exp = 480, monster_num = 200}
+	self.datas[1048] = {ID = 1048, leve = 49, up_exp = 490, monster_num = 200}
+end
+
+M_game_level_config:init()

+ 25 - 0
GameConfig/Lua/M_hero.lua

@@ -0,0 +1,25 @@
+M_hero = {}
+
+function M_hero:getData(key)
+	if self.datas == nil then
+		return nil
+	end
+	return self.datas[key]
+end
+
+function M_hero:init()
+	self.datas = {}
+	self.datas[1002] = {ID = 1002, name = "圣天使", grade_type = 1, default_have = 1, skill_id = nil, attribute = 2, atk = 15, icon = "", aspect = "", speed = 1, zoom_factor = 1}
+	self.datas[1003] = {ID = 1003, name = "英雄3", grade_type = 1, default_have = 1, skill_id = nil, attribute = 3, atk = 15, icon = "", aspect = "", speed = 1, zoom_factor = 1}
+	self.datas[1004] = {ID = 1004, name = "英雄4", grade_type = 1, default_have = 1, skill_id = nil, attribute = 4, atk = 15, icon = "", aspect = "", speed = 1, zoom_factor = 1}
+	self.datas[1005] = {ID = 1005, name = "英雄5", grade_type = 1, default_have = 1, skill_id = nil, attribute = 1, atk = 15, icon = "", aspect = "", speed = 1, zoom_factor = 1}
+	self.datas[1006] = {ID = 1006, name = "英雄6", grade_type = 1, default_have = 1, skill_id = nil, attribute = 2, atk = 15, icon = "", aspect = "", speed = 1, zoom_factor = 1}
+	self.datas[1007] = {ID = 1007, name = "英雄7", grade_type = 1, default_have = 1, skill_id = nil, attribute = 3, atk = 15, icon = "", aspect = "", speed = 1, zoom_factor = 1}
+	self.datas[1008] = {ID = 1008, name = "英雄8", grade_type = 1, default_have = 1, skill_id = nil, attribute = 4, atk = 15, icon = "", aspect = "", speed = 1, zoom_factor = 1}
+	self.datas[1009] = {ID = 1009, name = "传说英雄1", grade_type = 2, default_have = 0, skill_id = nil, attribute = 1, atk = 20, icon = "", aspect = "", speed = 1, zoom_factor = 1}
+	self.datas[1010] = {ID = 1010, name = "传说英雄2", grade_type = 2, default_have = 0, skill_id = nil, attribute = 2, atk = 20, icon = "", aspect = "", speed = 1, zoom_factor = 1}
+	self.datas[1011] = {ID = 1011, name = "传说英雄3", grade_type = 2, default_have = 0, skill_id = nil, attribute = 3, atk = 20, icon = "", aspect = "", speed = 1, zoom_factor = 1}
+	self.datas[1012] = {ID = 1012, name = "传说英雄4", grade_type = 2, default_have = 0, skill_id = nil, attribute = 4, atk = 20, icon = "", aspect = "", speed = 1, zoom_factor = 1}
+end
+
+M_hero:init()

+ 43 - 0
GameConfig/Lua/M_magic_array_config.lua

@@ -0,0 +1,43 @@
+M_magic_array_config = {}
+
+function M_magic_array_config:getData(key)
+	if self.datas == nil then
+		return nil
+	end
+	return self.datas[key]
+end
+
+function M_magic_array_config:init()
+	self.datas = {}
+	self.datas[1002] = {ID = 1002, level = 2, up_cost = {4,2}, atk_cost = {2,200}, un_lock_award = {2,100}, atk = 2, hp = 2, icon = "", m_stone = "2", mgc_stone = 0.002}
+	self.datas[1003] = {ID = 1003, level = 3, up_cost = {4,4}, atk_cost = {2,300}, un_lock_award = {2,100}, atk = 3, hp = 3, icon = "", m_stone = "3", mgc_stone = 0.003}
+	self.datas[1004] = {ID = 1004, level = 4, up_cost = {4,8}, atk_cost = {2,400}, un_lock_award = {2,100}, atk = 4, hp = 4, icon = "", m_stone = "4", mgc_stone = 0.004}
+	self.datas[1005] = {ID = 1005, level = 5, up_cost = {4,16}, atk_cost = {2,500}, un_lock_award = {2,100}, atk = 5, hp = 5, icon = "", m_stone = "5", mgc_stone = 0.005}
+	self.datas[1006] = {ID = 1006, level = 6, up_cost = {4,32}, atk_cost = {2,600}, un_lock_award = {2,100}, atk = 6, hp = 6, icon = "", m_stone = "6", mgc_stone = 0.006}
+	self.datas[1007] = {ID = 1007, level = 7, up_cost = {4,64}, atk_cost = {2,700}, un_lock_award = {2,100}, atk = 7, hp = 7, icon = "", m_stone = "7", mgc_stone = 0.007}
+	self.datas[1008] = {ID = 1008, level = 8, up_cost = {4,128}, atk_cost = {2,800}, un_lock_award = {2,100}, atk = 8, hp = 8, icon = "", m_stone = "8", mgc_stone = 0.008}
+	self.datas[1009] = {ID = 1009, level = 9, up_cost = {4,256}, atk_cost = {2,900}, un_lock_award = {2,100}, atk = 9, hp = 9, icon = "", m_stone = "9", mgc_stone = 0.009}
+	self.datas[1010] = {ID = 1010, level = 10, up_cost = {4,512}, atk_cost = {2,1000}, un_lock_award = {2,100}, atk = 10, hp = 10, icon = "", m_stone = "10", mgc_stone = 0.01}
+	self.datas[1011] = {ID = 1011, level = 11, up_cost = {4,1024}, atk_cost = {2,2000}, un_lock_award = {2,100}, atk = 20, hp = 20, icon = "", m_stone = "20", mgc_stone = 0.011}
+	self.datas[1012] = {ID = 1012, level = 12, up_cost = {4,2048}, atk_cost = {2,3000}, un_lock_award = {2,100}, atk = 30, hp = 30, icon = "", m_stone = "30", mgc_stone = 0.012}
+	self.datas[1013] = {ID = 1013, level = 13, up_cost = {4,4096}, atk_cost = {2,4000}, un_lock_award = {2,100}, atk = 40, hp = 40, icon = "", m_stone = "40", mgc_stone = 0.013}
+	self.datas[1014] = {ID = 1014, level = 14, up_cost = {4,8192}, atk_cost = {2,5000}, un_lock_award = {2,100}, atk = 50, hp = 50, icon = "", m_stone = "50", mgc_stone = 0.014}
+	self.datas[1015] = {ID = 1015, level = 15, up_cost = {4,16384}, atk_cost = {2,6000}, un_lock_award = {2,100}, atk = 60, hp = 60, icon = "", m_stone = "60", mgc_stone = 0.015}
+	self.datas[1016] = {ID = 1016, level = 16, up_cost = {4,32768}, atk_cost = {2,7000}, un_lock_award = {2,100}, atk = 70, hp = 70, icon = "", m_stone = "70", mgc_stone = 0.016}
+	self.datas[1017] = {ID = 1017, level = 17, up_cost = {4,65536}, atk_cost = {2,8000}, un_lock_award = {2,100}, atk = 80, hp = 80, icon = "", m_stone = "80", mgc_stone = 0.017}
+	self.datas[1018] = {ID = 1018, level = 18, up_cost = {4,131072}, atk_cost = {2,9000}, un_lock_award = {2,100}, atk = 90, hp = 90, icon = "", m_stone = "90", mgc_stone = 0.018}
+	self.datas[1019] = {ID = 1019, level = 19, up_cost = {4,262144}, atk_cost = {2,10000}, un_lock_award = {2,100}, atk = 100, hp = 100, icon = "", m_stone = "100", mgc_stone = 0.019}
+	self.datas[1020] = {ID = 1020, level = 20, up_cost = {4,524288}, atk_cost = {2,20000}, un_lock_award = {2,100}, atk = 200, hp = 200, icon = "", m_stone = "200", mgc_stone = 0.02}
+	self.datas[1021] = {ID = 1021, level = 21, up_cost = {4,1048576}, atk_cost = {2,30000}, un_lock_award = {2,100}, atk = 300, hp = 300, icon = "", m_stone = "300", mgc_stone = 0.021}
+	self.datas[1022] = {ID = 1022, level = 22, up_cost = {4,2097152}, atk_cost = {2,40000}, un_lock_award = {2,100}, atk = 400, hp = 400, icon = "", m_stone = "400", mgc_stone = 0.022}
+	self.datas[1023] = {ID = 1023, level = 23, up_cost = {4,4194304}, atk_cost = {2,50000}, un_lock_award = {2,100}, atk = 500, hp = 500, icon = "", m_stone = "500", mgc_stone = 0.023}
+	self.datas[1024] = {ID = 1024, level = 24, up_cost = {4,8388608}, atk_cost = {2,60000}, un_lock_award = {2,100}, atk = 600, hp = 600, icon = "", m_stone = "600", mgc_stone = 0.024}
+	self.datas[1025] = {ID = 1025, level = 25, up_cost = {4,16777216}, atk_cost = {2,70000}, un_lock_award = {2,100}, atk = 700, hp = 700, icon = "", m_stone = "700", mgc_stone = 0.025}
+	self.datas[1026] = {ID = 1026, level = 26, up_cost = {4,33554432}, atk_cost = {2,80000}, un_lock_award = {2,100}, atk = 800, hp = 800, icon = "", m_stone = "800", mgc_stone = 0.026}
+	self.datas[1027] = {ID = 1027, level = 27, up_cost = {4,67108864}, atk_cost = {2,90000}, un_lock_award = {2,100}, atk = 900, hp = 900, icon = "", m_stone = "900", mgc_stone = 0.027}
+	self.datas[1028] = {ID = 1028, level = 28, up_cost = {4,134217728}, atk_cost = {2,100000}, un_lock_award = {2,100}, atk = 1000, hp = 1000, icon = "", m_stone = "1000", mgc_stone = 0.028}
+	self.datas[1029] = {ID = 1029, level = 29, up_cost = {4,268435456}, atk_cost = {2,200000}, un_lock_award = {2,100}, atk = 2000, hp = 2000, icon = "", m_stone = "2000", mgc_stone = 0.029}
+	self.datas[1030] = {ID = 1030, level = 30, up_cost = {4,536870912}, atk_cost = {2,300000}, un_lock_award = {2,100}, atk = 3000, hp = 3000, icon = "", m_stone = "3000", mgc_stone = 0.03}
+end
+
+M_magic_array_config:init()

+ 46 - 0
GameConfig/Lua/M_monster.lua

@@ -0,0 +1,46 @@
+M_monster = {}
+
+function M_monster:getData(key)
+	if self.datas == nil then
+		return nil
+	end
+	return self.datas[key]
+end
+
+function M_monster:init()
+	self.datas = {}
+	self.datas[1002] = {ID = 1002, name = "哥布林刺客", type = 1, multiple = 3, icon = "", aspect = "", speed = 1, super_speed = 1.5, zoom_factor = 1, exp_value = 5}
+	self.datas[1003] = {ID = 1003, name = "哥布林战士", type = 1, multiple = 4, icon = "", aspect = "", speed = 1, super_speed = 1.5, zoom_factor = 1, exp_value = 5}
+	self.datas[1004] = {ID = 1004, name = "鬼蛛", type = 1, multiple = 5, icon = "", aspect = "", speed = 1, super_speed = 1.5, zoom_factor = 1, exp_value = 5}
+	self.datas[1005] = {ID = 1005, name = "祭师", type = 1, multiple = 6, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 5}
+	self.datas[1006] = {ID = 1006, name = "祭祀小鬼", type = 1, multiple = 7, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 5}
+	self.datas[1007] = {ID = 1007, name = "冥蛊虫", type = 1, multiple = 8, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 5}
+	self.datas[1008] = {ID = 1008, name = "独眼魔", type = 1, multiple = 9, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 5}
+	self.datas[1009] = {ID = 1009, name = "石头人", type = 1, multiple = 10, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 5}
+	self.datas[1010] = {ID = 1010, name = "武器哥布林", type = 1, multiple = 12, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 5}
+	self.datas[1011] = {ID = 1011, name = "岩鼠", type = 1, multiple = 15, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 5}
+	self.datas[1012] = {ID = 1012, name = "幽面", type = 1, multiple = 18, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 5}
+	self.datas[1013] = {ID = 1013, name = "普通怪物13", type = 1, multiple = 20, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 5}
+	self.datas[1014] = {ID = 1014, name = "普通怪物14", type = 1, multiple = 20, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 5}
+	self.datas[1015] = {ID = 1015, name = "普通怪物15", type = 1, multiple = 25, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 5}
+	self.datas[2001] = {ID = 2001, name = "精英怪物1", type = 2, multiple = 30, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[2002] = {ID = 2002, name = "精英怪物2", type = 2, multiple = 50, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[2003] = {ID = 2003, name = "精英怪物3", type = 2, multiple = 60, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[2004] = {ID = 2004, name = "精英怪物4", type = 2, multiple = 80, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[2005] = {ID = 2005, name = "精英怪物5", type = 2, multiple = 100, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[2006] = {ID = 2006, name = "精英怪物6", type = 2, multiple = 200, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[2007] = {ID = 2007, name = "精英怪物7", type = 2, multiple = 300, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[2008] = {ID = 2008, name = "精英怪物8", type = 2, multiple = 500, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[3001] = {ID = 3001, name = "骷髅王", type = 3, multiple = 100, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[3002] = {ID = 3002, name = "荆棘魔", type = 3, multiple = 200, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[3003] = {ID = 3003, name = "暗影之王", type = 3, multiple = 300, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[3004] = {ID = 3004, name = "BOSS4", type = 3, multiple = 400, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[3005] = {ID = 3005, name = "BOSS5", type = 3, multiple = 500, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[3006] = {ID = 3006, name = "BOSS6", type = 3, multiple = 100, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[3007] = {ID = 3007, name = "BOSS7", type = 3, multiple = 200, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[3008] = {ID = 3008, name = "BOSS8", type = 3, multiple = 300, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[3009] = {ID = 3009, name = "BOSS9", type = 3, multiple = 400, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+	self.datas[3010] = {ID = 3010, name = "BOSS10", type = 3, multiple = 500, icon = "", aspect = "", speed = 1, super_speed = 2, zoom_factor = 1, exp_value = 6}
+end
+
+M_monster:init()

+ 17 - 0
GameConfig/Lua/M_skill.lua

@@ -0,0 +1,17 @@
+M_skill = {}
+
+function M_skill:getData(key)
+	if self.datas == nil then
+		return nil
+	end
+	return self.datas[key]
+end
+
+function M_skill:init()
+	self.datas = {}
+	self.datas[1002] = {ID = 1002, hero_id = 1001, skill_leve = 2, bullet_num = 2, bullet_radius = 2, attack_distance = 10, skill_des = "扔出2把旋转大刀"}
+	self.datas[1003] = {ID = 1003, hero_id = 1001, skill_leve = 3, bullet_num = 4, bullet_radius = 2, attack_distance = 10, skill_des = "扔出4把旋转大刀"}
+	self.datas[1004] = {ID = 1004, hero_id = 1001, skill_leve = 4, bullet_num = 8, bullet_radius = 2, attack_distance = 10, skill_des = "扔出8把旋转大刀"}
+end
+
+M_skill:init()

+ 16 - 0
GameConfig/Lua/M_un_lock_battle.lua

@@ -0,0 +1,16 @@
+M_un_lock_battle = {}
+
+function M_un_lock_battle:getData(key)
+	if self.datas == nil then
+		return nil
+	end
+	return self.datas[key]
+end
+
+function M_un_lock_battle:init()
+	self.datas = {}
+	self.datas[1002] = {ID = 1002, battle_type = 2, un_lock_magic = 11, demand = 2000, prohibit = 20000000, use_magic = {11,20}, fish_wave = {5,6}, fish_scheme = "1,1|2,1|3,2|4,2|5,2|6,2"}
+	self.datas[1003] = {ID = 1003, battle_type = 3, un_lock_magic = 19, demand = 10000, prohibit = 0, use_magic = {19,30}, fish_wave = {6,8}, fish_scheme = "1,1|2,1|3,2|4,2|5,2|6,2|7,2|8,2"}
+end
+
+M_un_lock_battle:init()

BIN
GameConfig/M_fish_scheme.xls


BIN
GameConfig/M_fish_scheme.xlsx


BIN
GameConfig/M_game_battle_field.xls


BIN
GameConfig/M_game_battle_field.xlsx


BIN
GameConfig/M_game_level_config.xls


BIN
GameConfig/M_game_level_config.xlsx


BIN
GameConfig/M_hero.xls


BIN
GameConfig/M_hero.xlsx


BIN
GameConfig/M_magic_array_config.xls


BIN
GameConfig/M_magic_array_config.xlsx


BIN
GameConfig/M_monster.xls


BIN
GameConfig/M_monster.xlsx


BIN
GameConfig/M_skill.xls


BIN
GameConfig/M_skill.xlsx


BIN
GameConfig/M_un_lock_battle.xls


BIN
GameConfig/M_un_lock_battle.xlsx


+ 10 - 0
GameConfig/Xml/M_Global_Config.xml

@@ -4,4 +4,14 @@
 	<Data Key="TestKey2" Desc="XX说明" IntValue="2" IntListValue="" StrValue="lbt" StrListValue="" BoolValue="false" />
 	<Data Key="dropGL" Desc="道县id8 随机强化石打开获取权重,权重" IntValue="" IntListValue="10,20,50,30" StrValue="" StrListValue="" BoolValue="" />
 	<Data Key="dropID" Desc="道县id8 随机强化石打开获取道具ID,道具ID" IntValue="" IntListValue="11,22,15,13" StrValue="" StrListValue="" BoolValue="" />
+	<Data Key="WarTime" Desc="每一关战斗时长(s)" IntValue="120" IntListValue="" StrValue="" StrListValue="" BoolValue="" />
+	<Data Key="SkillWeight" Desc="技能选择权重 传说权重,史诗权重" IntValue="" IntListValue="2,1" StrValue="" StrListValue="" BoolValue="" />
+	<Data Key="Rampage" Desc="狂暴技能:魔币消耗倍数,奖励倍数" IntValue="" IntListValue="2,2" StrValue="" StrListValue="" BoolValue="" />
+	<Data Key="TreasureChestRewards" Desc="魔导石宝箱  奖励百分比" IntValue="" IntListValue="100,125,150" StrValue="" StrListValue="" BoolValue="" />
+	<Data Key="TreasureChestProbability" Desc="魔导石宝箱  奖励概率(万分比)" IntValue="" IntListValue="5000,2500,2500" StrValue="" StrListValue="" BoolValue="" />
+	<Data Key="SuperTriggered" Desc="鱼阵时间触发 基础间隔,随机偏移" IntValue="" IntListValue="60,20" StrValue="" StrListValue="" BoolValue="" />
+	<Data Key="Death" Desc="主角受击次数死亡" IntValue="5" IntListValue="" StrValue="" StrListValue="" BoolValue="" />
+	<Data Key="MonsterRefresh" Desc="刷怪圈(外圈直径,内圈直径)" IntValue="" IntListValue="30,20" StrValue="" StrListValue="" BoolValue="" />
+	<Data Key="Experience1" Desc="道具ID:5 提供的经验值" IntValue="10" IntListValue="" StrValue="" StrListValue="" BoolValue="" />
+	<Data Key="Experience2" Desc="道具ID:6 提供的经验值" IntValue="20" IntListValue="" StrValue="" StrListValue="" BoolValue="" />
 </Root>

+ 18 - 0
GameConfig/Xml/M_fish_scheme.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Root>
+	<Data ID="1002" monster_id="1002" fish_group="1" num="10" />
+	<Data ID="1003" monster_id="1001" fish_group="2" num="200" />
+	<Data ID="1004" monster_id="1002" fish_group="2" num="10" />
+	<Data ID="1005" monster_id="1001" fish_group="3" num="200" />
+	<Data ID="1006" monster_id="1002" fish_group="3" num="10" />
+	<Data ID="1007" monster_id="1001" fish_group="4" num="200" />
+	<Data ID="1008" monster_id="1002" fish_group="4" num="10" />
+	<Data ID="1009" monster_id="1001" fish_group="5" num="200" />
+	<Data ID="1010" monster_id="1002" fish_group="5" num="10" />
+	<Data ID="1011" monster_id="1001" fish_group="6" num="200" />
+	<Data ID="1012" monster_id="1002" fish_group="6" num="10" />
+	<Data ID="1013" monster_id="1001" fish_group="7" num="200" />
+	<Data ID="1014" monster_id="1002" fish_group="7" num="10" />
+	<Data ID="1015" monster_id="1001" fish_group="8" num="200" />
+	<Data ID="1016" monster_id="1002" fish_group="8" num="10" />
+</Root>

+ 4 - 0
GameConfig/Xml/M_game_battle_field.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Root>
+	<Data ID="1002" monster_id="1002" scene_type="1" weight="20" max_num="2000" kill_count="2,3" award_drop_prob="0.33" />
+</Root>

+ 51 - 0
GameConfig/Xml/M_game_level_config.xml

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Root>
+	<Data ID="1001" leve="2" up_exp="20" monster_num="7" />
+	<Data ID="1002" leve="3" up_exp="30" monster_num="9" />
+	<Data ID="1003" leve="4" up_exp="40" monster_num="10" />
+	<Data ID="1004" leve="5" up_exp="50" monster_num="15" />
+	<Data ID="1005" leve="6" up_exp="60" monster_num="20" />
+	<Data ID="1006" leve="7" up_exp="70" monster_num="30" />
+	<Data ID="1007" leve="8" up_exp="80" monster_num="40" />
+	<Data ID="1008" leve="9" up_exp="90" monster_num="50" />
+	<Data ID="1009" leve="10" up_exp="100" monster_num="60" />
+	<Data ID="1010" leve="11" up_exp="110" monster_num="70" />
+	<Data ID="1011" leve="12" up_exp="120" monster_num="80" />
+	<Data ID="1012" leve="13" up_exp="130" monster_num="90" />
+	<Data ID="1013" leve="14" up_exp="140" monster_num="100" />
+	<Data ID="1014" leve="15" up_exp="150" monster_num="110" />
+	<Data ID="1015" leve="16" up_exp="160" monster_num="120" />
+	<Data ID="1016" leve="17" up_exp="170" monster_num="130" />
+	<Data ID="1017" leve="18" up_exp="180" monster_num="140" />
+	<Data ID="1018" leve="19" up_exp="190" monster_num="150" />
+	<Data ID="1019" leve="20" up_exp="200" monster_num="160" />
+	<Data ID="1020" leve="21" up_exp="210" monster_num="170" />
+	<Data ID="1021" leve="22" up_exp="220" monster_num="180" />
+	<Data ID="1022" leve="23" up_exp="230" monster_num="190" />
+	<Data ID="1023" leve="24" up_exp="240" monster_num="200" />
+	<Data ID="1024" leve="25" up_exp="250" monster_num="200" />
+	<Data ID="1025" leve="26" up_exp="260" monster_num="200" />
+	<Data ID="1026" leve="27" up_exp="270" monster_num="200" />
+	<Data ID="1027" leve="28" up_exp="280" monster_num="200" />
+	<Data ID="1028" leve="29" up_exp="290" monster_num="200" />
+	<Data ID="1029" leve="30" up_exp="300" monster_num="200" />
+	<Data ID="1030" leve="31" up_exp="310" monster_num="200" />
+	<Data ID="1031" leve="32" up_exp="320" monster_num="200" />
+	<Data ID="1032" leve="33" up_exp="330" monster_num="200" />
+	<Data ID="1033" leve="34" up_exp="340" monster_num="200" />
+	<Data ID="1034" leve="35" up_exp="350" monster_num="200" />
+	<Data ID="1035" leve="36" up_exp="360" monster_num="200" />
+	<Data ID="1036" leve="37" up_exp="370" monster_num="200" />
+	<Data ID="1037" leve="38" up_exp="" monster_num="200" />
+	<Data ID="1038" leve="39" up_exp="390" monster_num="200" />
+	<Data ID="1039" leve="40" up_exp="400" monster_num="200" />
+	<Data ID="1040" leve="41" up_exp="410" monster_num="200" />
+	<Data ID="1041" leve="42" up_exp="420" monster_num="200" />
+	<Data ID="1042" leve="43" up_exp="430" monster_num="200" />
+	<Data ID="1043" leve="44" up_exp="440" monster_num="200" />
+	<Data ID="1044" leve="45" up_exp="450" monster_num="200" />
+	<Data ID="1045" leve="46" up_exp="460" monster_num="200" />
+	<Data ID="1046" leve="47" up_exp="470" monster_num="200" />
+	<Data ID="1047" leve="48" up_exp="480" monster_num="200" />
+	<Data ID="1048" leve="49" up_exp="490" monster_num="200" />
+</Root>

+ 14 - 0
GameConfig/Xml/M_hero.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Root>
+	<Data ID="1002" name="圣天使" grade_type="1" default_have="1" skill_id="" attribute="2" atk="15" icon="" aspect="" speed="1" zoom_factor="1" />
+	<Data ID="1003" name="英雄3" grade_type="1" default_have="1" skill_id="" attribute="3" atk="15" icon="" aspect="" speed="1" zoom_factor="1" />
+	<Data ID="1004" name="英雄4" grade_type="1" default_have="1" skill_id="" attribute="4" atk="15" icon="" aspect="" speed="1" zoom_factor="1" />
+	<Data ID="1005" name="英雄5" grade_type="1" default_have="1" skill_id="" attribute="1" atk="15" icon="" aspect="" speed="1" zoom_factor="1" />
+	<Data ID="1006" name="英雄6" grade_type="1" default_have="1" skill_id="" attribute="2" atk="15" icon="" aspect="" speed="1" zoom_factor="1" />
+	<Data ID="1007" name="英雄7" grade_type="1" default_have="1" skill_id="" attribute="3" atk="15" icon="" aspect="" speed="1" zoom_factor="1" />
+	<Data ID="1008" name="英雄8" grade_type="1" default_have="1" skill_id="" attribute="4" atk="15" icon="" aspect="" speed="1" zoom_factor="1" />
+	<Data ID="1009" name="传说英雄1" grade_type="2" default_have="0" skill_id="" attribute="1" atk="20" icon="" aspect="" speed="1" zoom_factor="1" />
+	<Data ID="1010" name="传说英雄2" grade_type="2" default_have="0" skill_id="" attribute="2" atk="20" icon="" aspect="" speed="1" zoom_factor="1" />
+	<Data ID="1011" name="传说英雄3" grade_type="2" default_have="0" skill_id="" attribute="3" atk="20" icon="" aspect="" speed="1" zoom_factor="1" />
+	<Data ID="1012" name="传说英雄4" grade_type="2" default_have="0" skill_id="" attribute="4" atk="20" icon="" aspect="" speed="1" zoom_factor="1" />
+</Root>

+ 32 - 0
GameConfig/Xml/M_magic_array_config.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Root>
+	<Data ID="1002" level="2" up_cost="4,2" atk_cost="2,200" un_lock_award="2,100" atk="2" hp="2" icon="" m_stone="2" mgc_stone="0.002" />
+	<Data ID="1003" level="3" up_cost="4,4" atk_cost="2,300" un_lock_award="2,100" atk="3" hp="3" icon="" m_stone="3" mgc_stone="0.003" />
+	<Data ID="1004" level="4" up_cost="4,8" atk_cost="2,400" un_lock_award="2,100" atk="4" hp="4" icon="" m_stone="4" mgc_stone="0.004" />
+	<Data ID="1005" level="5" up_cost="4,16" atk_cost="2,500" un_lock_award="2,100" atk="5" hp="5" icon="" m_stone="5" mgc_stone="0.005" />
+	<Data ID="1006" level="6" up_cost="4,32" atk_cost="2,600" un_lock_award="2,100" atk="6" hp="6" icon="" m_stone="6" mgc_stone="0.006" />
+	<Data ID="1007" level="7" up_cost="4,64" atk_cost="2,700" un_lock_award="2,100" atk="7" hp="7" icon="" m_stone="7" mgc_stone="0.007" />
+	<Data ID="1008" level="8" up_cost="4,128" atk_cost="2,800" un_lock_award="2,100" atk="8" hp="8" icon="" m_stone="8" mgc_stone="0.008" />
+	<Data ID="1009" level="9" up_cost="4,256" atk_cost="2,900" un_lock_award="2,100" atk="9" hp="9" icon="" m_stone="9" mgc_stone="0.009" />
+	<Data ID="1010" level="10" up_cost="4,512" atk_cost="2,1000" un_lock_award="2,100" atk="10" hp="10" icon="" m_stone="10" mgc_stone="0.01" />
+	<Data ID="1011" level="11" up_cost="4,1024" atk_cost="2,2000" un_lock_award="2,100" atk="20" hp="20" icon="" m_stone="20" mgc_stone="0.011" />
+	<Data ID="1012" level="12" up_cost="4,2048" atk_cost="2,3000" un_lock_award="2,100" atk="30" hp="30" icon="" m_stone="30" mgc_stone="0.012" />
+	<Data ID="1013" level="13" up_cost="4,4096" atk_cost="2,4000" un_lock_award="2,100" atk="40" hp="40" icon="" m_stone="40" mgc_stone="0.013" />
+	<Data ID="1014" level="14" up_cost="4,8192" atk_cost="2,5000" un_lock_award="2,100" atk="50" hp="50" icon="" m_stone="50" mgc_stone="0.014" />
+	<Data ID="1015" level="15" up_cost="4,16384" atk_cost="2,6000" un_lock_award="2,100" atk="60" hp="60" icon="" m_stone="60" mgc_stone="0.015" />
+	<Data ID="1016" level="16" up_cost="4,32768" atk_cost="2,7000" un_lock_award="2,100" atk="70" hp="70" icon="" m_stone="70" mgc_stone="0.016" />
+	<Data ID="1017" level="17" up_cost="4,65536" atk_cost="2,8000" un_lock_award="2,100" atk="80" hp="80" icon="" m_stone="80" mgc_stone="0.017" />
+	<Data ID="1018" level="18" up_cost="4,131072" atk_cost="2,9000" un_lock_award="2,100" atk="90" hp="90" icon="" m_stone="90" mgc_stone="0.018" />
+	<Data ID="1019" level="19" up_cost="4,262144" atk_cost="2,10000" un_lock_award="2,100" atk="100" hp="100" icon="" m_stone="100" mgc_stone="0.019" />
+	<Data ID="1020" level="20" up_cost="4,524288" atk_cost="2,20000" un_lock_award="2,100" atk="200" hp="200" icon="" m_stone="200" mgc_stone="0.02" />
+	<Data ID="1021" level="21" up_cost="4,1048576" atk_cost="2,30000" un_lock_award="2,100" atk="300" hp="300" icon="" m_stone="300" mgc_stone="0.021" />
+	<Data ID="1022" level="22" up_cost="4,2097152" atk_cost="2,40000" un_lock_award="2,100" atk="400" hp="400" icon="" m_stone="400" mgc_stone="0.022" />
+	<Data ID="1023" level="23" up_cost="4,4194304" atk_cost="2,50000" un_lock_award="2,100" atk="500" hp="500" icon="" m_stone="500" mgc_stone="0.023" />
+	<Data ID="1024" level="24" up_cost="4,8388608" atk_cost="2,60000" un_lock_award="2,100" atk="600" hp="600" icon="" m_stone="600" mgc_stone="0.024" />
+	<Data ID="1025" level="25" up_cost="4,16777216" atk_cost="2,70000" un_lock_award="2,100" atk="700" hp="700" icon="" m_stone="700" mgc_stone="0.025" />
+	<Data ID="1026" level="26" up_cost="4,33554432" atk_cost="2,80000" un_lock_award="2,100" atk="800" hp="800" icon="" m_stone="800" mgc_stone="0.026" />
+	<Data ID="1027" level="27" up_cost="4,67108864" atk_cost="2,90000" un_lock_award="2,100" atk="900" hp="900" icon="" m_stone="900" mgc_stone="0.027" />
+	<Data ID="1028" level="28" up_cost="4,134217728" atk_cost="2,100000" un_lock_award="2,100" atk="1000" hp="1000" icon="" m_stone="1000" mgc_stone="0.028" />
+	<Data ID="1029" level="29" up_cost="4,268435456" atk_cost="2,200000" un_lock_award="2,100" atk="2000" hp="2000" icon="" m_stone="2000" mgc_stone="0.029" />
+	<Data ID="1030" level="30" up_cost="4,536870912" atk_cost="2,300000" un_lock_award="2,100" atk="3000" hp="3000" icon="" m_stone="3000" mgc_stone="0.03" />
+</Root>

+ 35 - 0
GameConfig/Xml/M_monster.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Root>
+	<Data ID="1002" name="哥布林刺客" type="1" multiple="3" icon="" aspect="" speed="1" super_speed="1.5" zoom_factor="1" exp_value="5" />
+	<Data ID="1003" name="哥布林战士" type="1" multiple="4" icon="" aspect="" speed="1" super_speed="1.5" zoom_factor="1" exp_value="5" />
+	<Data ID="1004" name="鬼蛛" type="1" multiple="5" icon="" aspect="" speed="1" super_speed="1.5" zoom_factor="1" exp_value="5" />
+	<Data ID="1005" name="祭师" type="1" multiple="6" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="5" />
+	<Data ID="1006" name="祭祀小鬼" type="1" multiple="7" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="5" />
+	<Data ID="1007" name="冥蛊虫" type="1" multiple="8" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="5" />
+	<Data ID="1008" name="独眼魔" type="1" multiple="9" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="5" />
+	<Data ID="1009" name="石头人" type="1" multiple="10" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="5" />
+	<Data ID="1010" name="武器哥布林" type="1" multiple="12" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="5" />
+	<Data ID="1011" name="岩鼠" type="1" multiple="15" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="5" />
+	<Data ID="1012" name="幽面" type="1" multiple="18" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="5" />
+	<Data ID="1013" name="普通怪物13" type="1" multiple="20" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="5" />
+	<Data ID="1014" name="普通怪物14" type="1" multiple="20" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="5" />
+	<Data ID="1015" name="普通怪物15" type="1" multiple="25" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="5" />
+	<Data ID="2001" name="精英怪物1" type="2" multiple="30" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="2002" name="精英怪物2" type="2" multiple="50" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="2003" name="精英怪物3" type="2" multiple="60" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="2004" name="精英怪物4" type="2" multiple="80" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="2005" name="精英怪物5" type="2" multiple="100" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="2006" name="精英怪物6" type="2" multiple="200" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="2007" name="精英怪物7" type="2" multiple="300" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="2008" name="精英怪物8" type="2" multiple="500" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="3001" name="骷髅王" type="3" multiple="100" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="3002" name="荆棘魔" type="3" multiple="200" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="3003" name="暗影之王" type="3" multiple="300" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="3004" name="BOSS4" type="3" multiple="400" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="3005" name="BOSS5" type="3" multiple="500" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="3006" name="BOSS6" type="3" multiple="100" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="3007" name="BOSS7" type="3" multiple="200" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="3008" name="BOSS8" type="3" multiple="300" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="3009" name="BOSS9" type="3" multiple="400" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+	<Data ID="3010" name="BOSS10" type="3" multiple="500" icon="" aspect="" speed="1" super_speed="2" zoom_factor="1" exp_value="6" />
+</Root>

+ 6 - 0
GameConfig/Xml/M_skill.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Root>
+	<Data ID="1002" hero_id="1001" skill_leve="2" bullet_num="2" bullet_radius="2" attack_distance="10" skill_des="扔出2把旋转大刀" />
+	<Data ID="1003" hero_id="1001" skill_leve="3" bullet_num="4" bullet_radius="2" attack_distance="10" skill_des="扔出4把旋转大刀" />
+	<Data ID="1004" hero_id="1001" skill_leve="4" bullet_num="8" bullet_radius="2" attack_distance="10" skill_des="扔出8把旋转大刀" />
+</Root>

+ 5 - 0
GameConfig/Xml/M_un_lock_battle.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Root>
+	<Data ID="1002" battle_type="2" un_lock_magic="11" demand="2000" prohibit="20000000" use_magic="11,20" fish_wave="5,6" fish_scheme="1,1|2,1|3,2|4,2|5,2|6,2" />
+	<Data ID="1003" battle_type="3" un_lock_magic="19" demand="10000" prohibit="0" use_magic="19,30" fish_wave="6,8" fish_scheme="1,1|2,1|3,2|4,2|5,2|6,2|7,2|8,2" />
+</Root>

+ 20 - 0
GameConfig/json/M_Global_Config.json

@@ -6,4 +6,24 @@
 
 ,"dropID":{"Key":"dropID","Desc":"道县id8 随机强化石打开获取道具ID,道具ID","IntValue":0,"IntListValue":[11,22,15,13],"StrValue":"","StrListValue":[],"BoolValue":false}
 
+,"WarTime":{"Key":"WarTime","Desc":"每一关战斗时长(s)","IntValue":120,"IntListValue":[],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+,"SkillWeight":{"Key":"SkillWeight","Desc":"技能选择权重 传说权重,史诗权重","IntValue":0,"IntListValue":[2,1],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+,"Rampage":{"Key":"Rampage","Desc":"狂暴技能:魔币消耗倍数,奖励倍数","IntValue":0,"IntListValue":[2,2],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+,"TreasureChestRewards":{"Key":"TreasureChestRewards","Desc":"魔导石宝箱  奖励百分比","IntValue":0,"IntListValue":[100,125,150],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+,"TreasureChestProbability":{"Key":"TreasureChestProbability","Desc":"魔导石宝箱  奖励概率(万分比)","IntValue":0,"IntListValue":[5000,2500,2500],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+,"SuperTriggered":{"Key":"SuperTriggered","Desc":"鱼阵时间触发 基础间隔,随机偏移","IntValue":0,"IntListValue":[60,20],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+,"Death":{"Key":"Death","Desc":"主角受击次数死亡","IntValue":5,"IntListValue":[],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+,"MonsterRefresh":{"Key":"MonsterRefresh","Desc":"刷怪圈(外圈直径,内圈直径)","IntValue":0,"IntListValue":[30,20],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+,"Experience1":{"Key":"Experience1","Desc":"道具ID:5 提供的经验值","IntValue":10,"IntListValue":[],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+,"Experience2":{"Key":"Experience2","Desc":"道具ID:6 提供的经验值","IntValue":20,"IntListValue":[],"StrValue":"","StrListValue":[],"BoolValue":false}
+
 }

+ 31 - 0
GameConfig/json/M_fish_scheme.json

@@ -0,0 +1,31 @@
+{"1002":{"ID":1002,"monster_id":1002,"fish_group":1,"num":10}
+
+,"1003":{"ID":1003,"monster_id":1001,"fish_group":2,"num":200}
+
+,"1004":{"ID":1004,"monster_id":1002,"fish_group":2,"num":10}
+
+,"1005":{"ID":1005,"monster_id":1001,"fish_group":3,"num":200}
+
+,"1006":{"ID":1006,"monster_id":1002,"fish_group":3,"num":10}
+
+,"1007":{"ID":1007,"monster_id":1001,"fish_group":4,"num":200}
+
+,"1008":{"ID":1008,"monster_id":1002,"fish_group":4,"num":10}
+
+,"1009":{"ID":1009,"monster_id":1001,"fish_group":5,"num":200}
+
+,"1010":{"ID":1010,"monster_id":1002,"fish_group":5,"num":10}
+
+,"1011":{"ID":1011,"monster_id":1001,"fish_group":6,"num":200}
+
+,"1012":{"ID":1012,"monster_id":1002,"fish_group":6,"num":10}
+
+,"1013":{"ID":1013,"monster_id":1001,"fish_group":7,"num":200}
+
+,"1014":{"ID":1014,"monster_id":1002,"fish_group":7,"num":10}
+
+,"1015":{"ID":1015,"monster_id":1001,"fish_group":8,"num":200}
+
+,"1016":{"ID":1016,"monster_id":1002,"fish_group":8,"num":10}
+
+}

+ 3 - 0
GameConfig/json/M_game_battle_field.json

@@ -0,0 +1,3 @@
+{"1002":{"ID":1002,"monster_id":1002,"scene_type":1,"weight":20,"max_num":2000,"kill_count":[2,3],"award_drop_prob":0.33}
+
+}

+ 97 - 0
GameConfig/json/M_game_level_config.json

@@ -0,0 +1,97 @@
+{"1001":{"ID":1001,"leve":2,"up_exp":20,"monster_num":7}
+
+,"1002":{"ID":1002,"leve":3,"up_exp":30,"monster_num":9}
+
+,"1003":{"ID":1003,"leve":4,"up_exp":40,"monster_num":10}
+
+,"1004":{"ID":1004,"leve":5,"up_exp":50,"monster_num":15}
+
+,"1005":{"ID":1005,"leve":6,"up_exp":60,"monster_num":20}
+
+,"1006":{"ID":1006,"leve":7,"up_exp":70,"monster_num":30}
+
+,"1007":{"ID":1007,"leve":8,"up_exp":80,"monster_num":40}
+
+,"1008":{"ID":1008,"leve":9,"up_exp":90,"monster_num":50}
+
+,"1009":{"ID":1009,"leve":10,"up_exp":100,"monster_num":60}
+
+,"1010":{"ID":1010,"leve":11,"up_exp":110,"monster_num":70}
+
+,"1011":{"ID":1011,"leve":12,"up_exp":120,"monster_num":80}
+
+,"1012":{"ID":1012,"leve":13,"up_exp":130,"monster_num":90}
+
+,"1013":{"ID":1013,"leve":14,"up_exp":140,"monster_num":100}
+
+,"1014":{"ID":1014,"leve":15,"up_exp":150,"monster_num":110}
+
+,"1015":{"ID":1015,"leve":16,"up_exp":160,"monster_num":120}
+
+,"1016":{"ID":1016,"leve":17,"up_exp":170,"monster_num":130}
+
+,"1017":{"ID":1017,"leve":18,"up_exp":180,"monster_num":140}
+
+,"1018":{"ID":1018,"leve":19,"up_exp":190,"monster_num":150}
+
+,"1019":{"ID":1019,"leve":20,"up_exp":200,"monster_num":160}
+
+,"1020":{"ID":1020,"leve":21,"up_exp":210,"monster_num":170}
+
+,"1021":{"ID":1021,"leve":22,"up_exp":220,"monster_num":180}
+
+,"1022":{"ID":1022,"leve":23,"up_exp":230,"monster_num":190}
+
+,"1023":{"ID":1023,"leve":24,"up_exp":240,"monster_num":200}
+
+,"1024":{"ID":1024,"leve":25,"up_exp":250,"monster_num":200}
+
+,"1025":{"ID":1025,"leve":26,"up_exp":260,"monster_num":200}
+
+,"1026":{"ID":1026,"leve":27,"up_exp":270,"monster_num":200}
+
+,"1027":{"ID":1027,"leve":28,"up_exp":280,"monster_num":200}
+
+,"1028":{"ID":1028,"leve":29,"up_exp":290,"monster_num":200}
+
+,"1029":{"ID":1029,"leve":30,"up_exp":300,"monster_num":200}
+
+,"1030":{"ID":1030,"leve":31,"up_exp":310,"monster_num":200}
+
+,"1031":{"ID":1031,"leve":32,"up_exp":320,"monster_num":200}
+
+,"1032":{"ID":1032,"leve":33,"up_exp":330,"monster_num":200}
+
+,"1033":{"ID":1033,"leve":34,"up_exp":340,"monster_num":200}
+
+,"1034":{"ID":1034,"leve":35,"up_exp":350,"monster_num":200}
+
+,"1035":{"ID":1035,"leve":36,"up_exp":360,"monster_num":200}
+
+,"1036":{"ID":1036,"leve":37,"up_exp":370,"monster_num":200}
+
+,"1037":{"ID":1037,"leve":38,"up_exp":0,"monster_num":200}
+
+,"1038":{"ID":1038,"leve":39,"up_exp":390,"monster_num":200}
+
+,"1039":{"ID":1039,"leve":40,"up_exp":400,"monster_num":200}
+
+,"1040":{"ID":1040,"leve":41,"up_exp":410,"monster_num":200}
+
+,"1041":{"ID":1041,"leve":42,"up_exp":420,"monster_num":200}
+
+,"1042":{"ID":1042,"leve":43,"up_exp":430,"monster_num":200}
+
+,"1043":{"ID":1043,"leve":44,"up_exp":440,"monster_num":200}
+
+,"1044":{"ID":1044,"leve":45,"up_exp":450,"monster_num":200}
+
+,"1045":{"ID":1045,"leve":46,"up_exp":460,"monster_num":200}
+
+,"1046":{"ID":1046,"leve":47,"up_exp":470,"monster_num":200}
+
+,"1047":{"ID":1047,"leve":48,"up_exp":480,"monster_num":200}
+
+,"1048":{"ID":1048,"leve":49,"up_exp":490,"monster_num":200}
+
+}

+ 23 - 0
GameConfig/json/M_hero.json

@@ -0,0 +1,23 @@
+{"1002":{"ID":1002,"name":"圣天使","grade_type":1,"default_have":1,"skill_id":0,"attribute":2,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+,"1003":{"ID":1003,"name":"英雄3","grade_type":1,"default_have":1,"skill_id":0,"attribute":3,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+,"1004":{"ID":1004,"name":"英雄4","grade_type":1,"default_have":1,"skill_id":0,"attribute":4,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+,"1005":{"ID":1005,"name":"英雄5","grade_type":1,"default_have":1,"skill_id":0,"attribute":1,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+,"1006":{"ID":1006,"name":"英雄6","grade_type":1,"default_have":1,"skill_id":0,"attribute":2,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+,"1007":{"ID":1007,"name":"英雄7","grade_type":1,"default_have":1,"skill_id":0,"attribute":3,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+,"1008":{"ID":1008,"name":"英雄8","grade_type":1,"default_have":1,"skill_id":0,"attribute":4,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+,"1009":{"ID":1009,"name":"传说英雄1","grade_type":2,"default_have":0,"skill_id":0,"attribute":1,"atk":20,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+,"1010":{"ID":1010,"name":"传说英雄2","grade_type":2,"default_have":0,"skill_id":0,"attribute":2,"atk":20,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+,"1011":{"ID":1011,"name":"传说英雄3","grade_type":2,"default_have":0,"skill_id":0,"attribute":3,"atk":20,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+,"1012":{"ID":1012,"name":"传说英雄4","grade_type":2,"default_have":0,"skill_id":0,"attribute":4,"atk":20,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+}

+ 59 - 0
GameConfig/json/M_magic_array_config.json

@@ -0,0 +1,59 @@
+{"1002":{"ID":1002,"level":2,"up_cost":[4,2],"atk_cost":[2,200],"un_lock_award":[2,100],"atk":2,"hp":2,"icon":"","m_stone":"2","mgc_stone":0.002}
+
+,"1003":{"ID":1003,"level":3,"up_cost":[4,4],"atk_cost":[2,300],"un_lock_award":[2,100],"atk":3,"hp":3,"icon":"","m_stone":"3","mgc_stone":0.003}
+
+,"1004":{"ID":1004,"level":4,"up_cost":[4,8],"atk_cost":[2,400],"un_lock_award":[2,100],"atk":4,"hp":4,"icon":"","m_stone":"4","mgc_stone":0.004}
+
+,"1005":{"ID":1005,"level":5,"up_cost":[4,16],"atk_cost":[2,500],"un_lock_award":[2,100],"atk":5,"hp":5,"icon":"","m_stone":"5","mgc_stone":0.005}
+
+,"1006":{"ID":1006,"level":6,"up_cost":[4,32],"atk_cost":[2,600],"un_lock_award":[2,100],"atk":6,"hp":6,"icon":"","m_stone":"6","mgc_stone":0.006}
+
+,"1007":{"ID":1007,"level":7,"up_cost":[4,64],"atk_cost":[2,700],"un_lock_award":[2,100],"atk":7,"hp":7,"icon":"","m_stone":"7","mgc_stone":0.007}
+
+,"1008":{"ID":1008,"level":8,"up_cost":[4,128],"atk_cost":[2,800],"un_lock_award":[2,100],"atk":8,"hp":8,"icon":"","m_stone":"8","mgc_stone":0.008}
+
+,"1009":{"ID":1009,"level":9,"up_cost":[4,256],"atk_cost":[2,900],"un_lock_award":[2,100],"atk":9,"hp":9,"icon":"","m_stone":"9","mgc_stone":0.009}
+
+,"1010":{"ID":1010,"level":10,"up_cost":[4,512],"atk_cost":[2,1000],"un_lock_award":[2,100],"atk":10,"hp":10,"icon":"","m_stone":"10","mgc_stone":0.01}
+
+,"1011":{"ID":1011,"level":11,"up_cost":[4,1024],"atk_cost":[2,2000],"un_lock_award":[2,100],"atk":20,"hp":20,"icon":"","m_stone":"20","mgc_stone":0.011}
+
+,"1012":{"ID":1012,"level":12,"up_cost":[4,2048],"atk_cost":[2,3000],"un_lock_award":[2,100],"atk":30,"hp":30,"icon":"","m_stone":"30","mgc_stone":0.012}
+
+,"1013":{"ID":1013,"level":13,"up_cost":[4,4096],"atk_cost":[2,4000],"un_lock_award":[2,100],"atk":40,"hp":40,"icon":"","m_stone":"40","mgc_stone":0.013}
+
+,"1014":{"ID":1014,"level":14,"up_cost":[4,8192],"atk_cost":[2,5000],"un_lock_award":[2,100],"atk":50,"hp":50,"icon":"","m_stone":"50","mgc_stone":0.014}
+
+,"1015":{"ID":1015,"level":15,"up_cost":[4,16384],"atk_cost":[2,6000],"un_lock_award":[2,100],"atk":60,"hp":60,"icon":"","m_stone":"60","mgc_stone":0.015}
+
+,"1016":{"ID":1016,"level":16,"up_cost":[4,32768],"atk_cost":[2,7000],"un_lock_award":[2,100],"atk":70,"hp":70,"icon":"","m_stone":"70","mgc_stone":0.016}
+
+,"1017":{"ID":1017,"level":17,"up_cost":[4,65536],"atk_cost":[2,8000],"un_lock_award":[2,100],"atk":80,"hp":80,"icon":"","m_stone":"80","mgc_stone":0.017}
+
+,"1018":{"ID":1018,"level":18,"up_cost":[4,131072],"atk_cost":[2,9000],"un_lock_award":[2,100],"atk":90,"hp":90,"icon":"","m_stone":"90","mgc_stone":0.018}
+
+,"1019":{"ID":1019,"level":19,"up_cost":[4,262144],"atk_cost":[2,10000],"un_lock_award":[2,100],"atk":100,"hp":100,"icon":"","m_stone":"100","mgc_stone":0.019}
+
+,"1020":{"ID":1020,"level":20,"up_cost":[4,524288],"atk_cost":[2,20000],"un_lock_award":[2,100],"atk":200,"hp":200,"icon":"","m_stone":"200","mgc_stone":0.02}
+
+,"1021":{"ID":1021,"level":21,"up_cost":[4,1048576],"atk_cost":[2,30000],"un_lock_award":[2,100],"atk":300,"hp":300,"icon":"","m_stone":"300","mgc_stone":0.021}
+
+,"1022":{"ID":1022,"level":22,"up_cost":[4,2097152],"atk_cost":[2,40000],"un_lock_award":[2,100],"atk":400,"hp":400,"icon":"","m_stone":"400","mgc_stone":0.022}
+
+,"1023":{"ID":1023,"level":23,"up_cost":[4,4194304],"atk_cost":[2,50000],"un_lock_award":[2,100],"atk":500,"hp":500,"icon":"","m_stone":"500","mgc_stone":0.023}
+
+,"1024":{"ID":1024,"level":24,"up_cost":[4,8388608],"atk_cost":[2,60000],"un_lock_award":[2,100],"atk":600,"hp":600,"icon":"","m_stone":"600","mgc_stone":0.024}
+
+,"1025":{"ID":1025,"level":25,"up_cost":[4,16777216],"atk_cost":[2,70000],"un_lock_award":[2,100],"atk":700,"hp":700,"icon":"","m_stone":"700","mgc_stone":0.025}
+
+,"1026":{"ID":1026,"level":26,"up_cost":[4,33554432],"atk_cost":[2,80000],"un_lock_award":[2,100],"atk":800,"hp":800,"icon":"","m_stone":"800","mgc_stone":0.026}
+
+,"1027":{"ID":1027,"level":27,"up_cost":[4,67108864],"atk_cost":[2,90000],"un_lock_award":[2,100],"atk":900,"hp":900,"icon":"","m_stone":"900","mgc_stone":0.027}
+
+,"1028":{"ID":1028,"level":28,"up_cost":[4,134217728],"atk_cost":[2,100000],"un_lock_award":[2,100],"atk":1000,"hp":1000,"icon":"","m_stone":"1000","mgc_stone":0.028}
+
+,"1029":{"ID":1029,"level":29,"up_cost":[4,268435456],"atk_cost":[2,200000],"un_lock_award":[2,100],"atk":2000,"hp":2000,"icon":"","m_stone":"2000","mgc_stone":0.029}
+
+,"1030":{"ID":1030,"level":30,"up_cost":[4,536870912],"atk_cost":[2,300000],"un_lock_award":[2,100],"atk":3000,"hp":3000,"icon":"","m_stone":"3000","mgc_stone":0.03}
+
+}

+ 65 - 0
GameConfig/json/M_monster.json

@@ -0,0 +1,65 @@
+{"1002":{"ID":1002,"name":"哥布林刺客","type":1,"multiple":3,"icon":"","aspect":"","speed":1.0,"super_speed":1.5,"zoom_factor":1.0,"exp_value":5}
+
+,"1003":{"ID":1003,"name":"哥布林战士","type":1,"multiple":4,"icon":"","aspect":"","speed":1.0,"super_speed":1.5,"zoom_factor":1.0,"exp_value":5}
+
+,"1004":{"ID":1004,"name":"鬼蛛","type":1,"multiple":5,"icon":"","aspect":"","speed":1.0,"super_speed":1.5,"zoom_factor":1.0,"exp_value":5}
+
+,"1005":{"ID":1005,"name":"祭师","type":1,"multiple":6,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+,"1006":{"ID":1006,"name":"祭祀小鬼","type":1,"multiple":7,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+,"1007":{"ID":1007,"name":"冥蛊虫","type":1,"multiple":8,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+,"1008":{"ID":1008,"name":"独眼魔","type":1,"multiple":9,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+,"1009":{"ID":1009,"name":"石头人","type":1,"multiple":10,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+,"1010":{"ID":1010,"name":"武器哥布林","type":1,"multiple":12,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+,"1011":{"ID":1011,"name":"岩鼠","type":1,"multiple":15,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+,"1012":{"ID":1012,"name":"幽面","type":1,"multiple":18,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+,"1013":{"ID":1013,"name":"普通怪物13","type":1,"multiple":20,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+,"1014":{"ID":1014,"name":"普通怪物14","type":1,"multiple":20,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+,"1015":{"ID":1015,"name":"普通怪物15","type":1,"multiple":25,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+,"2001":{"ID":2001,"name":"精英怪物1","type":2,"multiple":30,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"2002":{"ID":2002,"name":"精英怪物2","type":2,"multiple":50,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"2003":{"ID":2003,"name":"精英怪物3","type":2,"multiple":60,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"2004":{"ID":2004,"name":"精英怪物4","type":2,"multiple":80,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"2005":{"ID":2005,"name":"精英怪物5","type":2,"multiple":100,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"2006":{"ID":2006,"name":"精英怪物6","type":2,"multiple":200,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"2007":{"ID":2007,"name":"精英怪物7","type":2,"multiple":300,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"2008":{"ID":2008,"name":"精英怪物8","type":2,"multiple":500,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"3001":{"ID":3001,"name":"骷髅王","type":3,"multiple":100,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"3002":{"ID":3002,"name":"荆棘魔","type":3,"multiple":200,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"3003":{"ID":3003,"name":"暗影之王","type":3,"multiple":300,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"3004":{"ID":3004,"name":"BOSS4","type":3,"multiple":400,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"3005":{"ID":3005,"name":"BOSS5","type":3,"multiple":500,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"3006":{"ID":3006,"name":"BOSS6","type":3,"multiple":100,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"3007":{"ID":3007,"name":"BOSS7","type":3,"multiple":200,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"3008":{"ID":3008,"name":"BOSS8","type":3,"multiple":300,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"3009":{"ID":3009,"name":"BOSS9","type":3,"multiple":400,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+,"3010":{"ID":3010,"name":"BOSS10","type":3,"multiple":500,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+}

+ 7 - 0
GameConfig/json/M_skill.json

@@ -0,0 +1,7 @@
+{"1002":{"ID":1002,"hero_id":1001,"skill_leve":2,"bullet_num":2,"bullet_radius":2,"attack_distance":10,"skill_des":"扔出2把旋转大刀"}
+
+,"1003":{"ID":1003,"hero_id":1001,"skill_leve":3,"bullet_num":4,"bullet_radius":2,"attack_distance":10,"skill_des":"扔出4把旋转大刀"}
+
+,"1004":{"ID":1004,"hero_id":1001,"skill_leve":4,"bullet_num":8,"bullet_radius":2,"attack_distance":10,"skill_des":"扔出8把旋转大刀"}
+
+}

+ 5 - 0
GameConfig/json/M_un_lock_battle.json

@@ -0,0 +1,5 @@
+{"1002":{"ID":1002,"battle_type":2,"un_lock_magic":11,"demand":2000,"prohibit":20000000,"use_magic":[11,20],"fish_wave":[5,6],"fish_scheme":"1,1|2,1|3,2|4,2|5,2|6,2"}
+
+,"1003":{"ID":1003,"battle_type":3,"un_lock_magic":19,"demand":10000,"prohibit":0,"use_magic":[19,30],"fish_wave":[6,8],"fish_scheme":"1,1|2,1|3,2|4,2|5,2|6,2|7,2|8,2"}
+
+}

+ 20 - 0
GameConfig/ts/M_Global_Config.ts

@@ -10,6 +10,26 @@ export default class M_Global_Config {
 
       ,"dropID":{"Key":"dropID","Desc":"道县id8 随机强化石打开获取道具ID,道具ID","IntValue":0,"IntListValue":[11,22,15,13],"StrValue":"","StrListValue":[],"BoolValue":false}
 
+      ,"WarTime":{"Key":"WarTime","Desc":"每一关战斗时长(s)","IntValue":120,"IntListValue":[],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+      ,"SkillWeight":{"Key":"SkillWeight","Desc":"技能选择权重 传说权重,史诗权重","IntValue":0,"IntListValue":[2,1],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+      ,"Rampage":{"Key":"Rampage","Desc":"狂暴技能:魔币消耗倍数,奖励倍数","IntValue":0,"IntListValue":[2,2],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+      ,"TreasureChestRewards":{"Key":"TreasureChestRewards","Desc":"魔导石宝箱  奖励百分比","IntValue":0,"IntListValue":[100,125,150],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+      ,"TreasureChestProbability":{"Key":"TreasureChestProbability","Desc":"魔导石宝箱  奖励概率(万分比)","IntValue":0,"IntListValue":[5000,2500,2500],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+      ,"SuperTriggered":{"Key":"SuperTriggered","Desc":"鱼阵时间触发 基础间隔,随机偏移","IntValue":0,"IntListValue":[60,20],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+      ,"Death":{"Key":"Death","Desc":"主角受击次数死亡","IntValue":5,"IntListValue":[],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+      ,"MonsterRefresh":{"Key":"MonsterRefresh","Desc":"刷怪圈(外圈直径,内圈直径)","IntValue":0,"IntListValue":[30,20],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+      ,"Experience1":{"Key":"Experience1","Desc":"道具ID:5 提供的经验值","IntValue":10,"IntListValue":[],"StrValue":"","StrListValue":[],"BoolValue":false}
+
+      ,"Experience2":{"Key":"Experience2","Desc":"道具ID:6 提供的经验值","IntValue":20,"IntListValue":[],"StrValue":"","StrListValue":[],"BoolValue":false}
+
       }// Key:Key, Desc:备注, IntValue:数值, IntListValue:数值列表, StrValue:字符串, StrListValue:字符串列表, BoolValue:布尔值参数
 
 

+ 48 - 0
GameConfig/ts/M_fish_scheme.ts

@@ -0,0 +1,48 @@
+// ID:ID, monster_id:怪物ID, fish_group:鱼阵方案组, num:数量
+
+export default class M_fish_scheme {
+  private static data =
+      {"1002":{"ID":1002,"monster_id":1002,"fish_group":1,"num":10}
+
+      ,"1003":{"ID":1003,"monster_id":1001,"fish_group":2,"num":200}
+
+      ,"1004":{"ID":1004,"monster_id":1002,"fish_group":2,"num":10}
+
+      ,"1005":{"ID":1005,"monster_id":1001,"fish_group":3,"num":200}
+
+      ,"1006":{"ID":1006,"monster_id":1002,"fish_group":3,"num":10}
+
+      ,"1007":{"ID":1007,"monster_id":1001,"fish_group":4,"num":200}
+
+      ,"1008":{"ID":1008,"monster_id":1002,"fish_group":4,"num":10}
+
+      ,"1009":{"ID":1009,"monster_id":1001,"fish_group":5,"num":200}
+
+      ,"1010":{"ID":1010,"monster_id":1002,"fish_group":5,"num":10}
+
+      ,"1011":{"ID":1011,"monster_id":1001,"fish_group":6,"num":200}
+
+      ,"1012":{"ID":1012,"monster_id":1002,"fish_group":6,"num":10}
+
+      ,"1013":{"ID":1013,"monster_id":1001,"fish_group":7,"num":200}
+
+      ,"1014":{"ID":1014,"monster_id":1002,"fish_group":7,"num":10}
+
+      ,"1015":{"ID":1015,"monster_id":1001,"fish_group":8,"num":200}
+
+      ,"1016":{"ID":1016,"monster_id":1002,"fish_group":8,"num":10}
+
+      }// ID:ID, monster_id:怪物ID, fish_group:鱼阵方案组, num:数量
+
+
+    static getData(key: any): any {
+        if (key == null || key == undefined)
+            return null;
+        return this.data[key];
+    }
+
+    static getAllData(): any {
+        return this.data;
+    }
+
+}

+ 20 - 0
GameConfig/ts/M_game_battle_field.ts

@@ -0,0 +1,20 @@
+// ID:ID, monster_id:怪物ID, scene_type:场地类型, weight:出场权重, max_num:最大数量, kill_count:击杀次数, award_drop_prob:魔币掉落概率(百分比)
+
+export default class M_game_battle_field {
+  private static data =
+      {"1002":{"ID":1002,"monster_id":1002,"scene_type":1,"weight":20,"max_num":2000,"kill_count":[2,3],"award_drop_prob":0.33}
+
+      }// ID:ID, monster_id:怪物ID, scene_type:场地类型, weight:出场权重, max_num:最大数量, kill_count:击杀次数, award_drop_prob:魔币掉落概率(百分比)
+
+
+    static getData(key: any): any {
+        if (key == null || key == undefined)
+            return null;
+        return this.data[key];
+    }
+
+    static getAllData(): any {
+        return this.data;
+    }
+
+}

+ 114 - 0
GameConfig/ts/M_game_level_config.ts

@@ -0,0 +1,114 @@
+// ID:ID, leve:等级, up_exp:所需经验, monster_num:同屏怪物数量
+
+export default class M_game_level_config {
+  private static data =
+      {"1001":{"ID":1001,"leve":2,"up_exp":20,"monster_num":7}
+
+      ,"1002":{"ID":1002,"leve":3,"up_exp":30,"monster_num":9}
+
+      ,"1003":{"ID":1003,"leve":4,"up_exp":40,"monster_num":10}
+
+      ,"1004":{"ID":1004,"leve":5,"up_exp":50,"monster_num":15}
+
+      ,"1005":{"ID":1005,"leve":6,"up_exp":60,"monster_num":20}
+
+      ,"1006":{"ID":1006,"leve":7,"up_exp":70,"monster_num":30}
+
+      ,"1007":{"ID":1007,"leve":8,"up_exp":80,"monster_num":40}
+
+      ,"1008":{"ID":1008,"leve":9,"up_exp":90,"monster_num":50}
+
+      ,"1009":{"ID":1009,"leve":10,"up_exp":100,"monster_num":60}
+
+      ,"1010":{"ID":1010,"leve":11,"up_exp":110,"monster_num":70}
+
+      ,"1011":{"ID":1011,"leve":12,"up_exp":120,"monster_num":80}
+
+      ,"1012":{"ID":1012,"leve":13,"up_exp":130,"monster_num":90}
+
+      ,"1013":{"ID":1013,"leve":14,"up_exp":140,"monster_num":100}
+
+      ,"1014":{"ID":1014,"leve":15,"up_exp":150,"monster_num":110}
+
+      ,"1015":{"ID":1015,"leve":16,"up_exp":160,"monster_num":120}
+
+      ,"1016":{"ID":1016,"leve":17,"up_exp":170,"monster_num":130}
+
+      ,"1017":{"ID":1017,"leve":18,"up_exp":180,"monster_num":140}
+
+      ,"1018":{"ID":1018,"leve":19,"up_exp":190,"monster_num":150}
+
+      ,"1019":{"ID":1019,"leve":20,"up_exp":200,"monster_num":160}
+
+      ,"1020":{"ID":1020,"leve":21,"up_exp":210,"monster_num":170}
+
+      ,"1021":{"ID":1021,"leve":22,"up_exp":220,"monster_num":180}
+
+      ,"1022":{"ID":1022,"leve":23,"up_exp":230,"monster_num":190}
+
+      ,"1023":{"ID":1023,"leve":24,"up_exp":240,"monster_num":200}
+
+      ,"1024":{"ID":1024,"leve":25,"up_exp":250,"monster_num":200}
+
+      ,"1025":{"ID":1025,"leve":26,"up_exp":260,"monster_num":200}
+
+      ,"1026":{"ID":1026,"leve":27,"up_exp":270,"monster_num":200}
+
+      ,"1027":{"ID":1027,"leve":28,"up_exp":280,"monster_num":200}
+
+      ,"1028":{"ID":1028,"leve":29,"up_exp":290,"monster_num":200}
+
+      ,"1029":{"ID":1029,"leve":30,"up_exp":300,"monster_num":200}
+
+      ,"1030":{"ID":1030,"leve":31,"up_exp":310,"monster_num":200}
+
+      ,"1031":{"ID":1031,"leve":32,"up_exp":320,"monster_num":200}
+
+      ,"1032":{"ID":1032,"leve":33,"up_exp":330,"monster_num":200}
+
+      ,"1033":{"ID":1033,"leve":34,"up_exp":340,"monster_num":200}
+
+      ,"1034":{"ID":1034,"leve":35,"up_exp":350,"monster_num":200}
+
+      ,"1035":{"ID":1035,"leve":36,"up_exp":360,"monster_num":200}
+
+      ,"1036":{"ID":1036,"leve":37,"up_exp":370,"monster_num":200}
+
+      ,"1037":{"ID":1037,"leve":38,"up_exp":0,"monster_num":200}
+
+      ,"1038":{"ID":1038,"leve":39,"up_exp":390,"monster_num":200}
+
+      ,"1039":{"ID":1039,"leve":40,"up_exp":400,"monster_num":200}
+
+      ,"1040":{"ID":1040,"leve":41,"up_exp":410,"monster_num":200}
+
+      ,"1041":{"ID":1041,"leve":42,"up_exp":420,"monster_num":200}
+
+      ,"1042":{"ID":1042,"leve":43,"up_exp":430,"monster_num":200}
+
+      ,"1043":{"ID":1043,"leve":44,"up_exp":440,"monster_num":200}
+
+      ,"1044":{"ID":1044,"leve":45,"up_exp":450,"monster_num":200}
+
+      ,"1045":{"ID":1045,"leve":46,"up_exp":460,"monster_num":200}
+
+      ,"1046":{"ID":1046,"leve":47,"up_exp":470,"monster_num":200}
+
+      ,"1047":{"ID":1047,"leve":48,"up_exp":480,"monster_num":200}
+
+      ,"1048":{"ID":1048,"leve":49,"up_exp":490,"monster_num":200}
+
+      }// ID:ID, leve:等级, up_exp:所需经验, monster_num:同屏怪物数量
+
+
+    static getData(key: any): any {
+        if (key == null || key == undefined)
+            return null;
+        return this.data[key];
+    }
+
+    static getAllData(): any {
+        return this.data;
+    }
+
+}

+ 40 - 0
GameConfig/ts/M_hero.ts

@@ -0,0 +1,40 @@
+// ID:ID, name:英雄名称, grade_type:英雄品质, default_have:默认拥有, skill_id:技能, attribute:属性, atk:攻击力, icon:英雄图标, aspect:英雄形象, speed:移动速度, zoom_factor:缩放倍数
+
+export default class M_hero {
+  private static data =
+      {"1002":{"ID":1002,"name":"圣天使","grade_type":1,"default_have":1,"skill_id":0,"attribute":2,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+      ,"1003":{"ID":1003,"name":"英雄3","grade_type":1,"default_have":1,"skill_id":0,"attribute":3,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+      ,"1004":{"ID":1004,"name":"英雄4","grade_type":1,"default_have":1,"skill_id":0,"attribute":4,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+      ,"1005":{"ID":1005,"name":"英雄5","grade_type":1,"default_have":1,"skill_id":0,"attribute":1,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+      ,"1006":{"ID":1006,"name":"英雄6","grade_type":1,"default_have":1,"skill_id":0,"attribute":2,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+      ,"1007":{"ID":1007,"name":"英雄7","grade_type":1,"default_have":1,"skill_id":0,"attribute":3,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+      ,"1008":{"ID":1008,"name":"英雄8","grade_type":1,"default_have":1,"skill_id":0,"attribute":4,"atk":15,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+      ,"1009":{"ID":1009,"name":"传说英雄1","grade_type":2,"default_have":0,"skill_id":0,"attribute":1,"atk":20,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+      ,"1010":{"ID":1010,"name":"传说英雄2","grade_type":2,"default_have":0,"skill_id":0,"attribute":2,"atk":20,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+      ,"1011":{"ID":1011,"name":"传说英雄3","grade_type":2,"default_have":0,"skill_id":0,"attribute":3,"atk":20,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+      ,"1012":{"ID":1012,"name":"传说英雄4","grade_type":2,"default_have":0,"skill_id":0,"attribute":4,"atk":20,"icon":"","aspect":"","speed":1.0,"zoom_factor":1.0}
+
+      }// ID:ID, name:英雄名称, grade_type:英雄品质, default_have:默认拥有, skill_id:技能, attribute:属性, atk:攻击力, icon:英雄图标, aspect:英雄形象, speed:移动速度, zoom_factor:缩放倍数
+
+
+    static getData(key: any): any {
+        if (key == null || key == undefined)
+            return null;
+        return this.data[key];
+    }
+
+    static getAllData(): any {
+        return this.data;
+    }
+
+}

+ 76 - 0
GameConfig/ts/M_magic_array_config.ts

@@ -0,0 +1,76 @@
+// ID:ID, level:等级, up_cost:升级消耗(道具ID,数量), atk_cost:攻击消耗(道具ID,数量), un_lock_award:解锁奖励(道具ID,数量), atk:攻击, hp:生命, icon:图标, m_stone:魔导石掉落, mgc_stone:魔法石掉落(百分比)
+
+export default class M_magic_array_config {
+  private static data =
+      {"1002":{"ID":1002,"level":2,"up_cost":[4,2],"atk_cost":[2,200],"un_lock_award":[2,100],"atk":2,"hp":2,"icon":"","m_stone":"2","mgc_stone":0.002}
+
+      ,"1003":{"ID":1003,"level":3,"up_cost":[4,4],"atk_cost":[2,300],"un_lock_award":[2,100],"atk":3,"hp":3,"icon":"","m_stone":"3","mgc_stone":0.003}
+
+      ,"1004":{"ID":1004,"level":4,"up_cost":[4,8],"atk_cost":[2,400],"un_lock_award":[2,100],"atk":4,"hp":4,"icon":"","m_stone":"4","mgc_stone":0.004}
+
+      ,"1005":{"ID":1005,"level":5,"up_cost":[4,16],"atk_cost":[2,500],"un_lock_award":[2,100],"atk":5,"hp":5,"icon":"","m_stone":"5","mgc_stone":0.005}
+
+      ,"1006":{"ID":1006,"level":6,"up_cost":[4,32],"atk_cost":[2,600],"un_lock_award":[2,100],"atk":6,"hp":6,"icon":"","m_stone":"6","mgc_stone":0.006}
+
+      ,"1007":{"ID":1007,"level":7,"up_cost":[4,64],"atk_cost":[2,700],"un_lock_award":[2,100],"atk":7,"hp":7,"icon":"","m_stone":"7","mgc_stone":0.007}
+
+      ,"1008":{"ID":1008,"level":8,"up_cost":[4,128],"atk_cost":[2,800],"un_lock_award":[2,100],"atk":8,"hp":8,"icon":"","m_stone":"8","mgc_stone":0.008}
+
+      ,"1009":{"ID":1009,"level":9,"up_cost":[4,256],"atk_cost":[2,900],"un_lock_award":[2,100],"atk":9,"hp":9,"icon":"","m_stone":"9","mgc_stone":0.009}
+
+      ,"1010":{"ID":1010,"level":10,"up_cost":[4,512],"atk_cost":[2,1000],"un_lock_award":[2,100],"atk":10,"hp":10,"icon":"","m_stone":"10","mgc_stone":0.01}
+
+      ,"1011":{"ID":1011,"level":11,"up_cost":[4,1024],"atk_cost":[2,2000],"un_lock_award":[2,100],"atk":20,"hp":20,"icon":"","m_stone":"20","mgc_stone":0.011}
+
+      ,"1012":{"ID":1012,"level":12,"up_cost":[4,2048],"atk_cost":[2,3000],"un_lock_award":[2,100],"atk":30,"hp":30,"icon":"","m_stone":"30","mgc_stone":0.012}
+
+      ,"1013":{"ID":1013,"level":13,"up_cost":[4,4096],"atk_cost":[2,4000],"un_lock_award":[2,100],"atk":40,"hp":40,"icon":"","m_stone":"40","mgc_stone":0.013}
+
+      ,"1014":{"ID":1014,"level":14,"up_cost":[4,8192],"atk_cost":[2,5000],"un_lock_award":[2,100],"atk":50,"hp":50,"icon":"","m_stone":"50","mgc_stone":0.014}
+
+      ,"1015":{"ID":1015,"level":15,"up_cost":[4,16384],"atk_cost":[2,6000],"un_lock_award":[2,100],"atk":60,"hp":60,"icon":"","m_stone":"60","mgc_stone":0.015}
+
+      ,"1016":{"ID":1016,"level":16,"up_cost":[4,32768],"atk_cost":[2,7000],"un_lock_award":[2,100],"atk":70,"hp":70,"icon":"","m_stone":"70","mgc_stone":0.016}
+
+      ,"1017":{"ID":1017,"level":17,"up_cost":[4,65536],"atk_cost":[2,8000],"un_lock_award":[2,100],"atk":80,"hp":80,"icon":"","m_stone":"80","mgc_stone":0.017}
+
+      ,"1018":{"ID":1018,"level":18,"up_cost":[4,131072],"atk_cost":[2,9000],"un_lock_award":[2,100],"atk":90,"hp":90,"icon":"","m_stone":"90","mgc_stone":0.018}
+
+      ,"1019":{"ID":1019,"level":19,"up_cost":[4,262144],"atk_cost":[2,10000],"un_lock_award":[2,100],"atk":100,"hp":100,"icon":"","m_stone":"100","mgc_stone":0.019}
+
+      ,"1020":{"ID":1020,"level":20,"up_cost":[4,524288],"atk_cost":[2,20000],"un_lock_award":[2,100],"atk":200,"hp":200,"icon":"","m_stone":"200","mgc_stone":0.02}
+
+      ,"1021":{"ID":1021,"level":21,"up_cost":[4,1048576],"atk_cost":[2,30000],"un_lock_award":[2,100],"atk":300,"hp":300,"icon":"","m_stone":"300","mgc_stone":0.021}
+
+      ,"1022":{"ID":1022,"level":22,"up_cost":[4,2097152],"atk_cost":[2,40000],"un_lock_award":[2,100],"atk":400,"hp":400,"icon":"","m_stone":"400","mgc_stone":0.022}
+
+      ,"1023":{"ID":1023,"level":23,"up_cost":[4,4194304],"atk_cost":[2,50000],"un_lock_award":[2,100],"atk":500,"hp":500,"icon":"","m_stone":"500","mgc_stone":0.023}
+
+      ,"1024":{"ID":1024,"level":24,"up_cost":[4,8388608],"atk_cost":[2,60000],"un_lock_award":[2,100],"atk":600,"hp":600,"icon":"","m_stone":"600","mgc_stone":0.024}
+
+      ,"1025":{"ID":1025,"level":25,"up_cost":[4,16777216],"atk_cost":[2,70000],"un_lock_award":[2,100],"atk":700,"hp":700,"icon":"","m_stone":"700","mgc_stone":0.025}
+
+      ,"1026":{"ID":1026,"level":26,"up_cost":[4,33554432],"atk_cost":[2,80000],"un_lock_award":[2,100],"atk":800,"hp":800,"icon":"","m_stone":"800","mgc_stone":0.026}
+
+      ,"1027":{"ID":1027,"level":27,"up_cost":[4,67108864],"atk_cost":[2,90000],"un_lock_award":[2,100],"atk":900,"hp":900,"icon":"","m_stone":"900","mgc_stone":0.027}
+
+      ,"1028":{"ID":1028,"level":28,"up_cost":[4,134217728],"atk_cost":[2,100000],"un_lock_award":[2,100],"atk":1000,"hp":1000,"icon":"","m_stone":"1000","mgc_stone":0.028}
+
+      ,"1029":{"ID":1029,"level":29,"up_cost":[4,268435456],"atk_cost":[2,200000],"un_lock_award":[2,100],"atk":2000,"hp":2000,"icon":"","m_stone":"2000","mgc_stone":0.029}
+
+      ,"1030":{"ID":1030,"level":30,"up_cost":[4,536870912],"atk_cost":[2,300000],"un_lock_award":[2,100],"atk":3000,"hp":3000,"icon":"","m_stone":"3000","mgc_stone":0.03}
+
+      }// ID:ID, level:等级, up_cost:升级消耗(道具ID,数量), atk_cost:攻击消耗(道具ID,数量), un_lock_award:解锁奖励(道具ID,数量), atk:攻击, hp:生命, icon:图标, m_stone:魔导石掉落, mgc_stone:魔法石掉落(百分比)
+
+
+    static getData(key: any): any {
+        if (key == null || key == undefined)
+            return null;
+        return this.data[key];
+    }
+
+    static getAllData(): any {
+        return this.data;
+    }
+
+}

+ 82 - 0
GameConfig/ts/M_monster.ts

@@ -0,0 +1,82 @@
+// ID:ID, name:怪物名称, type:怪物类型, multiple:击杀倍数, icon:怪物图标, aspect:怪物形象, speed:移动速度, super_speed:鱼阵移动速度, zoom_factor:缩放倍数, exp_value:经验掉落(道具ID)
+
+export default class M_monster {
+  private static data =
+      {"1002":{"ID":1002,"name":"哥布林刺客","type":1,"multiple":3,"icon":"","aspect":"","speed":1.0,"super_speed":1.5,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1003":{"ID":1003,"name":"哥布林战士","type":1,"multiple":4,"icon":"","aspect":"","speed":1.0,"super_speed":1.5,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1004":{"ID":1004,"name":"鬼蛛","type":1,"multiple":5,"icon":"","aspect":"","speed":1.0,"super_speed":1.5,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1005":{"ID":1005,"name":"祭师","type":1,"multiple":6,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1006":{"ID":1006,"name":"祭祀小鬼","type":1,"multiple":7,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1007":{"ID":1007,"name":"冥蛊虫","type":1,"multiple":8,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1008":{"ID":1008,"name":"独眼魔","type":1,"multiple":9,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1009":{"ID":1009,"name":"石头人","type":1,"multiple":10,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1010":{"ID":1010,"name":"武器哥布林","type":1,"multiple":12,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1011":{"ID":1011,"name":"岩鼠","type":1,"multiple":15,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1012":{"ID":1012,"name":"幽面","type":1,"multiple":18,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1013":{"ID":1013,"name":"普通怪物13","type":1,"multiple":20,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1014":{"ID":1014,"name":"普通怪物14","type":1,"multiple":20,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+      ,"1015":{"ID":1015,"name":"普通怪物15","type":1,"multiple":25,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":5}
+
+      ,"2001":{"ID":2001,"name":"精英怪物1","type":2,"multiple":30,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"2002":{"ID":2002,"name":"精英怪物2","type":2,"multiple":50,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"2003":{"ID":2003,"name":"精英怪物3","type":2,"multiple":60,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"2004":{"ID":2004,"name":"精英怪物4","type":2,"multiple":80,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"2005":{"ID":2005,"name":"精英怪物5","type":2,"multiple":100,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"2006":{"ID":2006,"name":"精英怪物6","type":2,"multiple":200,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"2007":{"ID":2007,"name":"精英怪物7","type":2,"multiple":300,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"2008":{"ID":2008,"name":"精英怪物8","type":2,"multiple":500,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"3001":{"ID":3001,"name":"骷髅王","type":3,"multiple":100,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"3002":{"ID":3002,"name":"荆棘魔","type":3,"multiple":200,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"3003":{"ID":3003,"name":"暗影之王","type":3,"multiple":300,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"3004":{"ID":3004,"name":"BOSS4","type":3,"multiple":400,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"3005":{"ID":3005,"name":"BOSS5","type":3,"multiple":500,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"3006":{"ID":3006,"name":"BOSS6","type":3,"multiple":100,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"3007":{"ID":3007,"name":"BOSS7","type":3,"multiple":200,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"3008":{"ID":3008,"name":"BOSS8","type":3,"multiple":300,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"3009":{"ID":3009,"name":"BOSS9","type":3,"multiple":400,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      ,"3010":{"ID":3010,"name":"BOSS10","type":3,"multiple":500,"icon":"","aspect":"","speed":1.0,"super_speed":2.0,"zoom_factor":1.0,"exp_value":6}
+
+      }// ID:ID, name:怪物名称, type:怪物类型, multiple:击杀倍数, icon:怪物图标, aspect:怪物形象, speed:移动速度, super_speed:鱼阵移动速度, zoom_factor:缩放倍数, exp_value:经验掉落(道具ID)
+
+
+    static getData(key: any): any {
+        if (key == null || key == undefined)
+            return null;
+        return this.data[key];
+    }
+
+    static getAllData(): any {
+        return this.data;
+    }
+
+}

+ 24 - 0
GameConfig/ts/M_skill.ts

@@ -0,0 +1,24 @@
+// ID:ID, hero_id:英雄ID, skill_leve:技能等级, bullet_num:子弹数量, bullet_radius:子弹半径, attack_distance:攻击距离, skill_des:技能描述
+
+export default class M_skill {
+  private static data =
+      {"1002":{"ID":1002,"hero_id":1001,"skill_leve":2,"bullet_num":2,"bullet_radius":2,"attack_distance":10,"skill_des":"扔出2把旋转大刀"}
+
+      ,"1003":{"ID":1003,"hero_id":1001,"skill_leve":3,"bullet_num":4,"bullet_radius":2,"attack_distance":10,"skill_des":"扔出4把旋转大刀"}
+
+      ,"1004":{"ID":1004,"hero_id":1001,"skill_leve":4,"bullet_num":8,"bullet_radius":2,"attack_distance":10,"skill_des":"扔出8把旋转大刀"}
+
+      }// ID:ID, hero_id:英雄ID, skill_leve:技能等级, bullet_num:子弹数量, bullet_radius:子弹半径, attack_distance:攻击距离, skill_des:技能描述
+
+
+    static getData(key: any): any {
+        if (key == null || key == undefined)
+            return null;
+        return this.data[key];
+    }
+
+    static getAllData(): any {
+        return this.data;
+    }
+
+}

+ 22 - 0
GameConfig/ts/M_un_lock_battle.ts

@@ -0,0 +1,22 @@
+// ID:ID, battle_type:场地类型, un_lock_magic:魔法阵解锁, demand:魔币准入金额, prohibit:魔币禁止金额, use_magic:魔法阵使用等级, fish_wave:鱼阵波数, fish_scheme:鱼阵方案(方案,权重|方案,权重)
+
+export default class M_un_lock_battle {
+  private static data =
+      {"1002":{"ID":1002,"battle_type":2,"un_lock_magic":11,"demand":2000,"prohibit":20000000,"use_magic":[11,20],"fish_wave":[5,6],"fish_scheme":"1,1|2,1|3,2|4,2|5,2|6,2"}
+
+      ,"1003":{"ID":1003,"battle_type":3,"un_lock_magic":19,"demand":10000,"prohibit":0,"use_magic":[19,30],"fish_wave":[6,8],"fish_scheme":"1,1|2,1|3,2|4,2|5,2|6,2|7,2|8,2"}
+
+      }// ID:ID, battle_type:场地类型, un_lock_magic:魔法阵解锁, demand:魔币准入金额, prohibit:魔币禁止金额, use_magic:魔法阵使用等级, fish_wave:鱼阵波数, fish_scheme:鱼阵方案(方案,权重|方案,权重)
+
+
+    static getData(key: any): any {
+        if (key == null || key == undefined)
+            return null;
+        return this.data[key];
+    }
+
+    static getAllData(): any {
+        return this.data;
+    }
+
+}