huangjinghao 2 сар өмнө
parent
commit
e684f29850
100 өөрчлөгдсөн 8401 нэмэгдсэн , 0 устгасан
  1. BIN
      FishConfig/.DS_Store
  2. 76 0
      FishConfig/BuildClient - 副本.bat
  3. 76 0
      FishConfig/BuildClient.bat
  4. 76 0
      FishConfig/BuildClient_Dev.bat
  5. 11 0
      FishConfig/BuildServer.bat
  6. 121 0
      FishConfig/CFG.check
  7. BIN
      FishConfig/Code/.DS_Store
  8. 133 0
      FishConfig/Code/Client/Fish_ActivityKillCrabLifeValueCFG.cpp
  9. 33 0
      FishConfig/Code/Client/Fish_ActivityKillCrabLifeValueCFG.h
  10. 193 0
      FishConfig/Code/Client/Fish_ActivityKillCrabLotteryCFG.cpp
  11. 45 0
      FishConfig/Code/Client/Fish_ActivityKillCrabLotteryCFG.h
  12. 133 0
      FishConfig/Code/Client/Fish_ActivityKillCrabRankRewardCFG.cpp
  13. 33 0
      FishConfig/Code/Client/Fish_ActivityKillCrabRankRewardCFG.h
  14. 111 0
      FishConfig/Code/Client/Fish_ArenaFreeRankingCFG.cpp
  15. 35 0
      FishConfig/Code/Client/Fish_ArenaFreeRankingCFG.h
  16. 137 0
      FishConfig/Code/Client/Fish_ArenaRankingCFG.cpp
  17. 37 0
      FishConfig/Code/Client/Fish_ArenaRankingCFG.h
  18. 117 0
      FishConfig/Code/Client/Fish_ArenaTaskCFG.cpp
  19. 41 0
      FishConfig/Code/Client/Fish_ArenaTaskCFG.h
  20. 105 0
      FishConfig/Code/Client/Fish_ArenaTurretCFG.cpp
  21. 29 0
      FishConfig/Code/Client/Fish_ArenaTurretCFG.h
  22. 169 0
      FishConfig/Code/Client/Fish_ArmatureCFG.cpp
  23. 53 0
      FishConfig/Code/Client/Fish_ArmatureCFG.h
  24. 103 0
      FishConfig/Code/Client/Fish_BaseInfo.cpp
  25. 27 0
      FishConfig/Code/Client/Fish_BaseInfo.h
  26. 133 0
      FishConfig/Code/Client/Fish_BuffCFG.cpp
  27. 45 0
      FishConfig/Code/Client/Fish_BuffCFG.h
  28. 163 0
      FishConfig/Code/Client/Fish_BulletCFG.cpp
  29. 63 0
      FishConfig/Code/Client/Fish_BulletCFG.h
  30. 177 0
      FishConfig/Code/Client/Fish_BulletHeadCFG.cpp
  31. 53 0
      FishConfig/Code/Client/Fish_BulletHeadCFG.h
  32. 107 0
      FishConfig/Code/Client/Fish_ChatCFG.cpp
  33. 31 0
      FishConfig/Code/Client/Fish_ChatCFG.h
  34. 105 0
      FishConfig/Code/Client/Fish_DiceFishCFG.cpp
  35. 29 0
      FishConfig/Code/Client/Fish_DiceFishCFG.h
  36. 127 0
      FishConfig/Code/Client/Fish_DragonPalace.cpp
  37. 35 0
      FishConfig/Code/Client/Fish_DragonPalace.h
  38. 113 0
      FishConfig/Code/Client/Fish_DropGoldCFG.cpp
  39. 37 0
      FishConfig/Code/Client/Fish_DropGoldCFG.h
  40. 117 0
      FishConfig/Code/Client/Fish_EffectCFG.cpp
  41. 33 0
      FishConfig/Code/Client/Fish_EffectCFG.h
  42. 111 0
      FishConfig/Code/Client/Fish_FieldParameter.cpp
  43. 35 0
      FishConfig/Code/Client/Fish_FieldParameter.h
  44. 283 0
      FishConfig/Code/Client/Fish_FishCFG.cpp
  45. 111 0
      FishConfig/Code/Client/Fish_FishCFG.h
  46. 129 0
      FishConfig/Code/Client/Fish_FishChuBaoCFG.cpp
  47. 41 0
      FishConfig/Code/Client/Fish_FishChuBaoCFG.h
  48. 171 0
      FishConfig/Code/Client/Fish_FishRankCFG.cpp
  49. 47 0
      FishConfig/Code/Client/Fish_FishRankCFG.h
  50. 133 0
      FishConfig/Code/Client/Fish_FishRankRankingCFG.cpp
  51. 33 0
      FishConfig/Code/Client/Fish_FishRankRankingCFG.h
  52. 167 0
      FishConfig/Code/Client/Fish_FreeLotteryCFG.cpp
  53. 43 0
      FishConfig/Code/Client/Fish_FreeLotteryCFG.h
  54. 119 0
      FishConfig/Code/Client/Fish_GeneratorCFG.cpp
  55. 31 0
      FishConfig/Code/Client/Fish_GeneratorCFG.h
  56. 109 0
      FishConfig/Code/Client/Fish_GetTelephoneBill.cpp
  57. 33 0
      FishConfig/Code/Client/Fish_GetTelephoneBill.h
  58. 191 0
      FishConfig/Code/Client/Fish_GiantSharkBomber.cpp
  59. 43 0
      FishConfig/Code/Client/Fish_GiantSharkBomber.h
  60. 109 0
      FishConfig/Code/Client/Fish_GiantSharkCardReward.cpp
  61. 33 0
      FishConfig/Code/Client/Fish_GiantSharkCardReward.h
  62. 119 0
      FishConfig/Code/Client/Fish_GiantSharkImmediateDecapitation.cpp
  63. 43 0
      FishConfig/Code/Client/Fish_GiantSharkImmediateDecapitation.h
  64. 141 0
      FishConfig/Code/Client/Fish_GiantSharkIntegral.cpp
  65. 65 0
      FishConfig/Code/Client/Fish_GiantSharkIntegral.h
  66. 123 0
      FishConfig/Code/Client/Fish_GiantSharkLevel.cpp
  67. 35 0
      FishConfig/Code/Client/Fish_GiantSharkLevel.h
  68. 121 0
      FishConfig/Code/Client/Fish_GiantSharkRanking.cpp
  69. 33 0
      FishConfig/Code/Client/Fish_GiantSharkRanking.h
  70. 105 0
      FishConfig/Code/Client/Fish_GiftCFG.cpp
  71. 29 0
      FishConfig/Code/Client/Fish_GiftCFG.h
  72. 111 0
      FishConfig/Code/Client/Fish_GoldenTurtleFishCFG.cpp
  73. 35 0
      FishConfig/Code/Client/Fish_GoldenTurtleFishCFG.h
  74. 109 0
      FishConfig/Code/Client/Fish_GoldenTurtleHitCFG.cpp
  75. 33 0
      FishConfig/Code/Client/Fish_GoldenTurtleHitCFG.h
  76. 113 0
      FishConfig/Code/Client/Fish_GoldenTurtleTaskCFG.cpp
  77. 37 0
      FishConfig/Code/Client/Fish_GoldenTurtleTaskCFG.h
  78. 121 0
      FishConfig/Code/Client/Fish_GrandPrixRankingCFG.cpp
  79. 33 0
      FishConfig/Code/Client/Fish_GrandPrixRankingCFG.h
  80. 107 0
      FishConfig/Code/Client/Fish_GuideCFG.cpp
  81. 31 0
      FishConfig/Code/Client/Fish_GuideCFG.h
  82. 257 0
      FishConfig/Code/Client/Fish_IntermediateExchange.cpp
  83. 49 0
      FishConfig/Code/Client/Fish_IntermediateExchange.h
  84. 123 0
      FishConfig/Code/Client/Fish_IntermediateRanking.cpp
  85. 35 0
      FishConfig/Code/Client/Fish_IntermediateRanking.h
  86. 109 0
      FishConfig/Code/Client/Fish_IntermediateVipExchange.cpp
  87. 33 0
      FishConfig/Code/Client/Fish_IntermediateVipExchange.h
  88. 105 0
      FishConfig/Code/Client/Fish_JuKunCardCFG.cpp
  89. 29 0
      FishConfig/Code/Client/Fish_JuKunCardCFG.h
  90. 115 0
      FishConfig/Code/Client/Fish_JuKunEggCFG.cpp
  91. 39 0
      FishConfig/Code/Client/Fish_JuKunEggCFG.h
  92. 121 0
      FishConfig/Code/Client/Fish_JuKunFuHuaJiFenCFG.cpp
  93. 33 0
      FishConfig/Code/Client/Fish_JuKunFuHuaJiFenCFG.h
  94. 123 0
      FishConfig/Code/Client/Fish_JuKunPaiHangCFG.cpp
  95. 35 0
      FishConfig/Code/Client/Fish_JuKunPaiHangCFG.h
  96. 113 0
      FishConfig/Code/Client/Fish_JuKunShopCFG.cpp
  97. 37 0
      FishConfig/Code/Client/Fish_JuKunShopCFG.h
  98. 111 0
      FishConfig/Code/Client/Fish_JumpCFG.cpp
  99. 35 0
      FishConfig/Code/Client/Fish_JumpCFG.h
  100. 121 0
      FishConfig/Code/Client/Fish_LargeFishCFG.cpp

BIN
FishConfig/.DS_Store


+ 76 - 0
FishConfig/BuildClient - 副本.bat

@@ -0,0 +1,76 @@
+ExeclExport.exe auto
+TransRouteData.exe ..\Config\RouteDataCFG.xml  ts\RouteDataCFG.ts
+
+::copy /y ts\RouteDataCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ArmatureCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FishCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GeneratorCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ChatCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG1.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG2.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG3.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG4.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretSetCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretLevelCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_BulletCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_RoomCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_BaseInfo.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_IntermediateExchange.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_IntermediateRanking.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FreeLotteryCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SeniorFish.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SeniorKilLlist.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_EffectCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ShopCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_BulletHeadCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SquamaExchangeCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SoundCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SquamaRankRewardCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_DragonPalace.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_MultiLanguageCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TorpedoRankRewardCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TorpedoRankType.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SouthSeaTreasureHuntEnterCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SouthSeaTreasureHuntRewardCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GetTelephoneBill.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkRanking.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkBomber.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkIntegral.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkTurntable.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkLevel.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ActivityKillCrabLifeValueCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ActivityKillCrabLotteryCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SquamaDragonArrowCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TorpedoRankShortlistedCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_JuKunFuHuaJiFenCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_JuKunPaiHangCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_RedPackagelotteryCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_RedJumpCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TherionRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_DiceFishCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkCardReward.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GrandPrixRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_JuKunEggCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_JuKunShopCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SquamaDragonSlayerCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FishChuBaoCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FishChuBaoCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SquamaDragonSlayerCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GoldenTurtleFishCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GoldenTurtleTaskCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretSkillCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ArenaRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ArenaFreeRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ArenaTaskCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FishRankRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FishRankCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SeniorItemExchangeCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SeniorRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SeniorItemDropCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ActivityKillCrabRankRewardCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretWingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretSkillWing.ts ..\..\Client\assets\Script\Config
+@echo off
+::if "%nopause%" == "true" (@echo on) else (pause)

+ 76 - 0
FishConfig/BuildClient.bat

@@ -0,0 +1,76 @@
+ExeclExport.exe auto
+TransRouteData.exe ..\Config\RouteDataCFG.xml  ts\RouteDataCFG.ts
+
+::copy /y ts\RouteDataCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ArmatureCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FishCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GeneratorCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ChatCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG1.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG2.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG3.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG4.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretSetCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretLevelCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_BulletCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_RoomCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_BaseInfo.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_IntermediateExchange.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_IntermediateRanking.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FreeLotteryCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SeniorFish.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SeniorKilLlist.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_EffectCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ShopCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_BulletHeadCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SquamaExchangeCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SoundCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SquamaRankRewardCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_DragonPalace.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_MultiLanguageCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TorpedoRankRewardCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TorpedoRankType.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SouthSeaTreasureHuntEnterCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SouthSeaTreasureHuntRewardCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GetTelephoneBill.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkRanking.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkBomber.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkIntegral.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkTurntable.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkLevel.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ActivityKillCrabLifeValueCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ActivityKillCrabLotteryCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SquamaDragonArrowCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TorpedoRankShortlistedCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_JuKunFuHuaJiFenCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_JuKunPaiHangCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_RedPackagelotteryCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_RedJumpCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TherionRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_DiceFishCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GiantSharkCardReward.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GrandPrixRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_JuKunEggCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_JuKunShopCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SquamaDragonSlayerCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FishChuBaoCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FishChuBaoCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SquamaDragonSlayerCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GoldenTurtleFishCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_GoldenTurtleTaskCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretSkillCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ArenaRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ArenaFreeRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ArenaTaskCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FishRankRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_FishRankCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SeniorItemExchangeCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SeniorRankingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_SeniorItemDropCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_ActivityKillCrabRankRewardCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretWingCFG.ts ..\..\Client\assets\Script\Config
+copy /y ts\Fish_TurretSkillWing.ts ..\..\Client\assets\Script\Config
+@echo off
+::if "%nopause%" == "true" (@echo on) else (pause)

+ 76 - 0
FishConfig/BuildClient_Dev.bat

@@ -0,0 +1,76 @@
+ExeclExport.exe auto
+TransRouteData.exe ..\Config\RouteDataCFG.xml  ts\RouteDataCFG.ts
+
+::copy /y ts\RouteDataCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_ArmatureCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_FishCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_GeneratorCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_ChatCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG1.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG2.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG3.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_LargeFishCFG4.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_TurretSetCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_TurretCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_TurretLevelCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_BulletCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_RoomCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_BaseInfo.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_IntermediateExchange.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_IntermediateRanking.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_FreeLotteryCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SeniorFish.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SeniorKilLlist.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_EffectCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_ShopCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_BulletHeadCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SquamaExchangeCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SoundCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SquamaRankRewardCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_DragonPalace.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_MultiLanguageCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_TorpedoRankRewardCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_TorpedoRankType.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SouthSeaTreasureHuntEnterCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SouthSeaTreasureHuntRewardCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_GetTelephoneBill.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_GiantSharkRanking.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_GiantSharkBomber.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_GiantSharkIntegral.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_GiantSharkTurntable.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_GiantSharkLevel.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_ActivityKillCrabLifeValueCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_ActivityKillCrabLotteryCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SquamaDragonArrowCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_TorpedoRankShortlistedCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_JuKunFuHuaJiFenCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_JuKunPaiHangCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_RedPackagelotteryCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_RedJumpCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_TherionRankingCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_DiceFishCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_GiantSharkCardReward.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_GrandPrixRankingCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_JuKunEggCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_JuKunShopCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SquamaDragonSlayerCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_FishChuBaoCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_FishChuBaoCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SquamaDragonSlayerCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_GoldenTurtleFishCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_GoldenTurtleTaskCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_TurretSkillCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_ArenaRankingCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_ArenaFreeRankingCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_ArenaTaskCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_FishRankRankingCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_FishRankCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SeniorItemExchangeCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SeniorRankingCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_SeniorItemDropCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_ActivityKillCrabRankRewardCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_TurretWingCFG.ts ..\..\Client_Dev\assets\Script\Config
+copy /y ts\Fish_TurretSkillWing.ts ..\..\Client_Dev\assets\Script\Config
+@echo off
+::if "%nopause%" == "true" (@echo on) else (pause)

+ 11 - 0
FishConfig/BuildServer.bat

@@ -0,0 +1,11 @@
+ExeclExport.exe auto
+
+::FileCompare.exe .\Xml ..\..\Client\Fish_GameData\res\
+FileCompare.exe .\Code\Server ..\..\server\games\game_fishlord
+
+copy Xml\*.xml ..\Config
+
+copy ..\..\Client\FishEditRes\res\RouteDataCFG.xml ..\Config
+::copy ..\..\Client\GameData_Fish\res\Config\RouteDataCFG.xml ..\Config
+@echo off
+if "%nopause%" == "true" (@echo on) else (pause)

+ 121 - 0
FishConfig/CFG.check

@@ -0,0 +1,121 @@
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_LargeFishCFG3.xls:-54139730
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TorpedoRankType.xls:2099971513
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_BuffCFG.xls:-1557182096
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SquamaExchangeCFG.xls:-1112479973
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ArenaTaskCFG.xls:-850166774
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG9.xls:179423996
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_DragonPalace.xls:1059005442
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG4.xls:-953187687
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_LargeFishCFG.xls:-611283368
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_LuckyDrawCFG.xls:-2008053345
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SeniorDrawCFG.xls:-444842770
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_JuKunShopCFG.xls:-1966374153
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GiantSharkImmediateDecapitation.xls:-563965700
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SeniorMonkeyFishCFG.xls:-2071203242
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GrandPrixRankingCFG.xls:1198117569
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GiantSharkIntegral.xls:-2111939485
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ArmatureCFG.xls:-1988767189
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TurretSetCFG.xls:985396603
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Odds2_Profit.xls:1842222158
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SquamaRankRewardCFG.xls:-1445199393
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ActivityKillCrabRankRewardCFG.xls:-1267924456
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_LargeFishCFG1.xls:1832920510
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ChatCFG.xls:1146935367
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_EffectCFG.xls:-7142918
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ArenaTurretCFG.xls:-1605257338
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SceneCFG.xls:-532767154
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GoldenTurtleFishCFG.xls:1045826371
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GiantSharkBomber.xls:1955456795
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG1.xls:-1080051410
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_IntermediateRanking.xls:1209137840
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SquamaDragonArrowCFG.xls:259557776
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_FishCFG.xls:-1813508652
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_JuKunCardCFG.xls:-421907336
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_MultiLanguageCFG.xls:-1956449375
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TurretCFG.xls:387821166
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_FreeLotteryCFG.xls:1345495622
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_FishChuBaoCFG.xls:244771549
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_LoadResourceCFG.xls:-59103169
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TorpedoRankShortlistedCFG.xls:967991105
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_DropGoldCFG.xls:616523310
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_IntermediateVipExchange.xls:745601397
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GuideCFG.xls:1146203747
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_JuKunFuHuaJiFenCFG.xls:1222958141
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG6.xls:251243374
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ActivityKillCrabLotteryCFG.xls:-1404798047
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_PirateOutFishCFG.xls:296388954
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GiantSharkRanking.xls:-1258592370
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_RobotCFG.xls:-1825887580
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TurretWingCFG.xls:-1239414802
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SeniorPrizeWeight.xls:-1325979114
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Odds2_HitCoefficient.xls:2007080647
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TherionIntegralCFG.xls:466072368
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_FishRankCFG.xls:1287292085
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SeniorRankingCFG.xls:683109740
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GoldenTurtleHitCFG.xls:518438076
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_JuKunPaiHangCFG.xls:408312111
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GetTelephoneBill.xls:1603492216
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_RankPointParam.xls:-1465341449
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SeniorItemExchangeCFG.xls:290926918
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_LargeFishCFG5.xls:-210910841
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_FishRankRankingCFG.xls:-442108173
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Odds2_Buff.xls:-1501867790
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SouthSeaTreasureHuntRewardCFG.xls:-1677017094
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Odds2_DayBuff.xls:-1777840823
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_BulletHeadCFG.xls:-205754835
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GeneratorCFG.xls:1166482923
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG3.xls:-615041923
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Odds2_Info.xls:-441948380
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GiantSharkLevel.xls:-1852828585
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG8.xls:409519798
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_FieldParameter.xls:-836215610
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TorpedoRankRewardCFG.xls:481615165
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TurretSkillWing.xls:295730486
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_LargeFishCFG2.xls:1138349801
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishActivityCFG.xls:865994939
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_RedPackagelotteryCFG.xls:944961930
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SeniorDivideJackpotCFG.xls:-1441185380
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_LargeFishCFG4.xls:1905696904
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TherionEventWeightCFG.xls:1638443331
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_IntermediateExchange.xls:-1510247510
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Odds2_VIP.xls:1176890056
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_JumpCFG.xls:1391796690
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ActivityKillCrabLifeValueCFG.xls:-625256066
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG12.xls:-843455736
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SeniorGraphicalCFG.xls:432944539
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TurretLevelCFG.xls:-753045611
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_OddsCFG.xls:1999115950
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SoundCFG.xls:-1085127893
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ShellCFG.xls:443017007
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_BaseInfo.xls:879812674
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GiftCFG.xls:-1849844954
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_JuKunEggCFG.xls:1305725038
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ShellItemCFG.xls:-1567613456
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TurretSkillCFG.xls:-2042479820
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_DiceFishCFG.xls:53422025
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Odds2_Room.xls:-544816040
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GoldenTurtleTaskCFG.xls:980337182
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SeniorItemDropCFG.xls:1354249827
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG13.xls:594317161
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG2.xls:-503893583
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ArenaFreeRankingCFG.xls:1165207480
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SouthSeaTreasureHuntEnterCFG.xls:-1196634472
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_RoomCFG.xls:-858699627
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_RedJumpCFG.xls:-1286818621
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TherionRankingCFG.xls:-156204620
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TurretPosCFG.xls:-689989023
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG5.xls:246541711
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_GiantSharkCardReward.xls:-1965956700
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TherionTreasureCFG.xls:-1032161658
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TherionLevelCFG.xls:875990524
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG7.xls:1942745051
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_SquamaDragonSlayerCFG.xls:677241756
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_RouteGroupCFG.xls:-793156148
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ArenaRankingCFG.xls:-596284620
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG.xls:-1523846084
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG10.xls:-1514017258
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_LargeFishCFG6.xls:466336414
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_TelephoneBillDropCFG.xls:1494864240
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_BulletCFG.xls:-364699488
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_NormalOutFishCFG11.xls:817736474
+D:\第五代全民捕鱼源码\server\bin\FishConfig\Fish_ShopCFG.xls:1296445799

BIN
FishConfig/Code/.DS_Store


+ 133 - 0
FishConfig/Code/Client/Fish_ActivityKillCrabLifeValueCFG.cpp

@@ -0,0 +1,133 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_ActivityKillCrabLifeValueCFG.h"
+std::auto_ptr<Fish_ActivityKillCrabLifeValueCFG> Fish_ActivityKillCrabLifeValueCFG::msSingleton(nullptr);
+
+int Fish_ActivityKillCrabLifeValueCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_ActivityKillCrabLifeValueCFGData* Fish_ActivityKillCrabLifeValueCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_ActivityKillCrabLifeValueCFGData>& Fish_ActivityKillCrabLifeValueCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_ActivityKillCrabLifeValueCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_ActivityKillCrabLifeValueCFG.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)
+	{
+		Fish_ActivityKillCrabLifeValueCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mLifeValue = element->IntAttribute("LifeValue");
+		{
+			const char* RewardItem = element->Attribute("RewardItem");
+			std::vector<std::string> vecRewardItem;
+			boost::split(vecRewardItem, RewardItem, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRewardItem.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRewardItem[i].c_str(), &temp))
+				{
+					data.mRewardItem.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* RewardCount = element->Attribute("RewardCount");
+			std::vector<std::string> vecRewardCount;
+			boost::split(vecRewardCount, RewardCount, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRewardCount.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRewardCount[i].c_str(), &temp))
+				{
+					data.mRewardCount.push_back(temp);
+				}
+			}
+		}
+		data.mNextLife = element->IntAttribute("NextLife");
+		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("Fish_ActivityKillCrabLifeValueCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ActivityKillCrabLifeValueCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_ActivityKillCrabLifeValueCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_ActivityKillCrabLifeValueCFG");
+	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");
+		Fish_ActivityKillCrabLifeValueCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "LifeValue", data.mLifeValue);
+		LuaCfgHelper::readVectorInt(L, "RewardItem", data.mRewardItem);
+		LuaCfgHelper::readVectorInt(L, "RewardCount", data.mRewardCount);
+		LuaCfgHelper::readInt(L, "NextLife", data.mNextLife);
+		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("Fish_ActivityKillCrabLifeValueCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ActivityKillCrabLifeValueCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_ActivityKillCrabLifeValueCFG* Fish_ActivityKillCrabLifeValueCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_ActivityKillCrabLifeValueCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_ActivityKillCrabLifeValueCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 33 - 0
FishConfig/Code/Client/Fish_ActivityKillCrabLifeValueCFG.h

@@ -0,0 +1,33 @@
+#pragma once
+#include <map>
+struct Fish_ActivityKillCrabLifeValueCFGData
+{
+	//ID,1作为第一个生命值
+	int mID;
+	//生命值
+	int mLifeValue;
+	//奖励道具(对应M_itemcfg中的道具ID)
+	std::vector<int> mRewardItem;
+	//奖励道具数量
+	std::vector<int> mRewardCount;
+	//下个生命值ID
+	int mNextLife;
+};
+
+class Fish_ActivityKillCrabLifeValueCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_ActivityKillCrabLifeValueCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_ActivityKillCrabLifeValueCFGData* GetData(int ID);
+	const std::map<int, Fish_ActivityKillCrabLifeValueCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_ActivityKillCrabLifeValueCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_ActivityKillCrabLifeValueCFGData> mMapData;
+};

+ 193 - 0
FishConfig/Code/Client/Fish_ActivityKillCrabLotteryCFG.cpp

@@ -0,0 +1,193 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_ActivityKillCrabLotteryCFG.h"
+std::auto_ptr<Fish_ActivityKillCrabLotteryCFG> Fish_ActivityKillCrabLotteryCFG::msSingleton(nullptr);
+
+int Fish_ActivityKillCrabLotteryCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_ActivityKillCrabLotteryCFGData* Fish_ActivityKillCrabLotteryCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_ActivityKillCrabLotteryCFGData>& Fish_ActivityKillCrabLotteryCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_ActivityKillCrabLotteryCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_ActivityKillCrabLotteryCFG.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)
+	{
+		Fish_ActivityKillCrabLotteryCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mCostItemCount = element->IntAttribute("CostItemCount");
+		{
+			const char* AwardItemIDs = element->Attribute("AwardItemIDs");
+			std::vector<std::string> vecAwardItemIDs;
+			boost::split(vecAwardItemIDs, AwardItemIDs, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecAwardItemIDs.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecAwardItemIDs[i].c_str(), &temp))
+				{
+					data.mAwardItemIDs.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* AwardItemCounts = element->Attribute("AwardItemCounts");
+			std::vector<std::string> vecAwardItemCounts;
+			boost::split(vecAwardItemCounts, AwardItemCounts, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecAwardItemCounts.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecAwardItemCounts[i].c_str(), &temp))
+				{
+					data.mAwardItemCounts.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* AwardWeight = element->Attribute("AwardWeight");
+			std::vector<std::string> vecAwardWeight;
+			boost::split(vecAwardWeight, AwardWeight, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecAwardWeight.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecAwardWeight[i].c_str(), &temp))
+				{
+					data.mAwardWeight.push_back(temp);
+				}
+			}
+		}
+		data.mHarmValueMin = element->IntAttribute("HarmValueMin");
+		data.mHarmValueMax = element->IntAttribute("HarmValueMax");
+		{
+			const char* DisplayLabel = element->Attribute("DisplayLabel");
+			std::vector<std::string> vecDisplayLabel;
+			boost::split(vecDisplayLabel, DisplayLabel, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecDisplayLabel.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecDisplayLabel[i].c_str(), &temp))
+				{
+					data.mDisplayLabel.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* ShowAwardItemIDs = element->Attribute("ShowAwardItemIDs");
+			std::vector<std::string> vecShowAwardItemIDs;
+			boost::split(vecShowAwardItemIDs, ShowAwardItemIDs, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecShowAwardItemIDs.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecShowAwardItemIDs[i].c_str(), &temp))
+				{
+					data.mShowAwardItemIDs.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* ShowAwardItemCounts = element->Attribute("ShowAwardItemCounts");
+			std::vector<std::string> vecShowAwardItemCounts;
+			boost::split(vecShowAwardItemCounts, ShowAwardItemCounts, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecShowAwardItemCounts.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecShowAwardItemCounts[i].c_str(), &temp))
+				{
+					data.mShowAwardItemCounts.push_back(temp);
+				}
+			}
+		}
+		data.mDisplayICON = element->Attribute("DisplayICON");
+		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("Fish_ActivityKillCrabLotteryCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ActivityKillCrabLotteryCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_ActivityKillCrabLotteryCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_ActivityKillCrabLotteryCFG");
+	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");
+		Fish_ActivityKillCrabLotteryCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "CostItemCount", data.mCostItemCount);
+		LuaCfgHelper::readVectorInt(L, "AwardItemIDs", data.mAwardItemIDs);
+		LuaCfgHelper::readVectorInt(L, "AwardItemCounts", data.mAwardItemCounts);
+		LuaCfgHelper::readVectorInt(L, "AwardWeight", data.mAwardWeight);
+		LuaCfgHelper::readInt(L, "HarmValueMin", data.mHarmValueMin);
+		LuaCfgHelper::readInt(L, "HarmValueMax", data.mHarmValueMax);
+		LuaCfgHelper::readVectorInt(L, "DisplayLabel", data.mDisplayLabel);
+		LuaCfgHelper::readVectorInt(L, "ShowAwardItemIDs", data.mShowAwardItemIDs);
+		LuaCfgHelper::readVectorInt(L, "ShowAwardItemCounts", data.mShowAwardItemCounts);
+		LuaCfgHelper::readString(L, "DisplayICON", data.mDisplayICON);
+		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("Fish_ActivityKillCrabLotteryCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ActivityKillCrabLotteryCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_ActivityKillCrabLotteryCFG* Fish_ActivityKillCrabLotteryCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_ActivityKillCrabLotteryCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_ActivityKillCrabLotteryCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 45 - 0
FishConfig/Code/Client/Fish_ActivityKillCrabLotteryCFG.h

@@ -0,0 +1,45 @@
+#pragma once
+#include <map>
+struct Fish_ActivityKillCrabLotteryCFGData
+{
+	//ID,1普通攻击, 2超级攻击
+	int mID;
+	//消耗大宝剑数量
+	int mCostItemCount;
+	//奖励道具列表
+	std::vector<int> mAwardItemIDs;
+	//奖励数量
+	std::vector<int> mAwardItemCounts;
+	//奖励权重
+	std::vector<int> mAwardWeight;
+	//伤害下限
+	int mHarmValueMin;
+	//伤害上限
+	int mHarmValueMax;
+	//显示标签
+	std::vector<int> mDisplayLabel;
+	//用于客户端显示奖励道具
+	std::vector<int> mShowAwardItemIDs;
+	//显示奖励道具数量
+	std::vector<int> mShowAwardItemCounts;
+	//显示Icon
+	std::string mDisplayICON;
+};
+
+class Fish_ActivityKillCrabLotteryCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_ActivityKillCrabLotteryCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_ActivityKillCrabLotteryCFGData* GetData(int ID);
+	const std::map<int, Fish_ActivityKillCrabLotteryCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_ActivityKillCrabLotteryCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_ActivityKillCrabLotteryCFGData> mMapData;
+};

+ 133 - 0
FishConfig/Code/Client/Fish_ActivityKillCrabRankRewardCFG.cpp

@@ -0,0 +1,133 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_ActivityKillCrabRankRewardCFG.h"
+std::auto_ptr<Fish_ActivityKillCrabRankRewardCFG> Fish_ActivityKillCrabRankRewardCFG::msSingleton(nullptr);
+
+int Fish_ActivityKillCrabRankRewardCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_ActivityKillCrabRankRewardCFGData* Fish_ActivityKillCrabRankRewardCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_ActivityKillCrabRankRewardCFGData>& Fish_ActivityKillCrabRankRewardCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_ActivityKillCrabRankRewardCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_ActivityKillCrabRankRewardCFG.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)
+	{
+		Fish_ActivityKillCrabRankRewardCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mStartRank = element->IntAttribute("StartRank");
+		data.mEndRank = element->IntAttribute("EndRank");
+		{
+			const char* RewardList = element->Attribute("RewardList");
+			std::vector<std::string> vecRewardList;
+			boost::split(vecRewardList, RewardList, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRewardList.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRewardList[i].c_str(), &temp))
+				{
+					data.mRewardList.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* RewardCount = element->Attribute("RewardCount");
+			std::vector<std::string> vecRewardCount;
+			boost::split(vecRewardCount, RewardCount, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRewardCount.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRewardCount[i].c_str(), &temp))
+				{
+					data.mRewardCount.push_back(temp);
+				}
+			}
+		}
+		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("Fish_ActivityKillCrabRankRewardCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ActivityKillCrabRankRewardCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_ActivityKillCrabRankRewardCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_ActivityKillCrabRankRewardCFG");
+	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");
+		Fish_ActivityKillCrabRankRewardCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "StartRank", data.mStartRank);
+		LuaCfgHelper::readInt(L, "EndRank", data.mEndRank);
+		LuaCfgHelper::readVectorInt(L, "RewardList", data.mRewardList);
+		LuaCfgHelper::readVectorInt(L, "RewardCount", data.mRewardCount);
+		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("Fish_ActivityKillCrabRankRewardCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ActivityKillCrabRankRewardCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_ActivityKillCrabRankRewardCFG* Fish_ActivityKillCrabRankRewardCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_ActivityKillCrabRankRewardCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_ActivityKillCrabRankRewardCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 33 - 0
FishConfig/Code/Client/Fish_ActivityKillCrabRankRewardCFG.h

@@ -0,0 +1,33 @@
+#pragma once
+#include <map>
+struct Fish_ActivityKillCrabRankRewardCFGData
+{
+	//ID
+	int mID;
+	//开始排名
+	int mStartRank;
+	//结束排名
+	int mEndRank;
+	//奖励道具列表,填写M_ItemCFG中的道具ID
+	std::vector<int> mRewardList;
+	//奖励数量
+	std::vector<int> mRewardCount;
+};
+
+class Fish_ActivityKillCrabRankRewardCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_ActivityKillCrabRankRewardCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_ActivityKillCrabRankRewardCFGData* GetData(int ID);
+	const std::map<int, Fish_ActivityKillCrabRankRewardCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_ActivityKillCrabRankRewardCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_ActivityKillCrabRankRewardCFGData> mMapData;
+};

+ 111 - 0
FishConfig/Code/Client/Fish_ArenaFreeRankingCFG.cpp

@@ -0,0 +1,111 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_ArenaFreeRankingCFG.h"
+std::auto_ptr<Fish_ArenaFreeRankingCFG> Fish_ArenaFreeRankingCFG::msSingleton(nullptr);
+
+int Fish_ArenaFreeRankingCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_ArenaFreeRankingCFGData* Fish_ArenaFreeRankingCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_ArenaFreeRankingCFGData>& Fish_ArenaFreeRankingCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_ArenaFreeRankingCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_ArenaFreeRankingCFG.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)
+	{
+		Fish_ArenaFreeRankingCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mType = element->IntAttribute("Type");
+		data.mStartRank = element->IntAttribute("StartRank");
+		data.mEndRank = element->IntAttribute("EndRank");
+		data.mRewardItem = element->IntAttribute("RewardItem");
+		data.mRewardCount = element->IntAttribute("RewardCount");
+		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("Fish_ArenaFreeRankingCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ArenaFreeRankingCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_ArenaFreeRankingCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_ArenaFreeRankingCFG");
+	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");
+		Fish_ArenaFreeRankingCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "Type", data.mType);
+		LuaCfgHelper::readInt(L, "StartRank", data.mStartRank);
+		LuaCfgHelper::readInt(L, "EndRank", data.mEndRank);
+		LuaCfgHelper::readInt(L, "RewardItem", data.mRewardItem);
+		LuaCfgHelper::readInt(L, "RewardCount", data.mRewardCount);
+		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("Fish_ArenaFreeRankingCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ArenaFreeRankingCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_ArenaFreeRankingCFG* Fish_ArenaFreeRankingCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_ArenaFreeRankingCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_ArenaFreeRankingCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 35 - 0
FishConfig/Code/Client/Fish_ArenaFreeRankingCFG.h

@@ -0,0 +1,35 @@
+#pragma once
+#include <map>
+struct Fish_ArenaFreeRankingCFGData
+{
+	//긍뵀
+	int mID;
+	//훨蛟잚謹
+	int mType;
+	//역迦탤츰
+	int mStartRank;
+	//써監탤츰
+	int mEndRank;
+	//쉽쟨돛야
+	int mRewardItem;
+	//쉽쟨鑒좆
+	int mRewardCount;
+};
+
+class Fish_ArenaFreeRankingCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_ArenaFreeRankingCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_ArenaFreeRankingCFGData* GetData(int ID);
+	const std::map<int, Fish_ArenaFreeRankingCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_ArenaFreeRankingCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_ArenaFreeRankingCFGData> mMapData;
+};

+ 137 - 0
FishConfig/Code/Client/Fish_ArenaRankingCFG.cpp

@@ -0,0 +1,137 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_ArenaRankingCFG.h"
+std::auto_ptr<Fish_ArenaRankingCFG> Fish_ArenaRankingCFG::msSingleton(nullptr);
+
+int Fish_ArenaRankingCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_ArenaRankingCFGData* Fish_ArenaRankingCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_ArenaRankingCFGData>& Fish_ArenaRankingCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_ArenaRankingCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_ArenaRankingCFG.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)
+	{
+		Fish_ArenaRankingCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mType = element->IntAttribute("Type");
+		data.mStartRank = element->IntAttribute("StartRank");
+		data.mEndRank = element->IntAttribute("EndRank");
+		{
+			const char* RewardItem = element->Attribute("RewardItem");
+			std::vector<std::string> vecRewardItem;
+			boost::split(vecRewardItem, RewardItem, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRewardItem.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRewardItem[i].c_str(), &temp))
+				{
+					data.mRewardItem.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* RewardCount = element->Attribute("RewardCount");
+			std::vector<std::string> vecRewardCount;
+			boost::split(vecRewardCount, RewardCount, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRewardCount.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRewardCount[i].c_str(), &temp))
+				{
+					data.mRewardCount.push_back(temp);
+				}
+			}
+		}
+		data.mLimit = element->IntAttribute("Limit");
+		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("Fish_ArenaRankingCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ArenaRankingCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_ArenaRankingCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_ArenaRankingCFG");
+	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");
+		Fish_ArenaRankingCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "Type", data.mType);
+		LuaCfgHelper::readInt(L, "StartRank", data.mStartRank);
+		LuaCfgHelper::readInt(L, "EndRank", data.mEndRank);
+		LuaCfgHelper::readVectorInt(L, "RewardItem", data.mRewardItem);
+		LuaCfgHelper::readVectorInt(L, "RewardCount", data.mRewardCount);
+		LuaCfgHelper::readInt(L, "Limit", data.mLimit);
+		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("Fish_ArenaRankingCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ArenaRankingCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_ArenaRankingCFG* Fish_ArenaRankingCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_ArenaRankingCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_ArenaRankingCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 37 - 0
FishConfig/Code/Client/Fish_ArenaRankingCFG.h

@@ -0,0 +1,37 @@
+#pragma once
+#include <map>
+struct Fish_ArenaRankingCFGData
+{
+	//编号
+	int mID;
+	//任务类型
+	int mType;
+	//开始排名
+	int mStartRank;
+	//结束排名
+	int mEndRank;
+	//奖励道具
+	std::vector<int> mRewardItem;
+	//奖励数量
+	std::vector<int> mRewardCount;
+	//上榜限制
+	int mLimit;
+};
+
+class Fish_ArenaRankingCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_ArenaRankingCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_ArenaRankingCFGData* GetData(int ID);
+	const std::map<int, Fish_ArenaRankingCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_ArenaRankingCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_ArenaRankingCFGData> mMapData;
+};

+ 117 - 0
FishConfig/Code/Client/Fish_ArenaTaskCFG.cpp

@@ -0,0 +1,117 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_ArenaTaskCFG.h"
+std::auto_ptr<Fish_ArenaTaskCFG> Fish_ArenaTaskCFG::msSingleton(nullptr);
+
+int Fish_ArenaTaskCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_ArenaTaskCFGData* Fish_ArenaTaskCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_ArenaTaskCFGData>& Fish_ArenaTaskCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_ArenaTaskCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_ArenaTaskCFG.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)
+	{
+		Fish_ArenaTaskCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mGroup = element->IntAttribute("Group");
+		data.mTaskDesc = element->Attribute("TaskDesc");
+		data.mfishId = element->IntAttribute("fishId");
+		data.mneedCount = element->IntAttribute("needCount");
+		data.mType = element->IntAttribute("Type");
+		data.mTaskReward = element->IntAttribute("TaskReward");
+		data.mTaskRewardDesc1 = element->Attribute("TaskRewardDesc1");
+		data.mTaskRewardDesc2 = element->Attribute("TaskRewardDesc2");
+		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("Fish_ArenaTaskCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ArenaTaskCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_ArenaTaskCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_ArenaTaskCFG");
+	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");
+		Fish_ArenaTaskCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "Group", data.mGroup);
+		LuaCfgHelper::readString(L, "TaskDesc", data.mTaskDesc);
+		LuaCfgHelper::readInt(L, "fishId", data.mfishId);
+		LuaCfgHelper::readInt(L, "needCount", data.mneedCount);
+		LuaCfgHelper::readInt(L, "Type", data.mType);
+		LuaCfgHelper::readInt(L, "TaskReward", data.mTaskReward);
+		LuaCfgHelper::readString(L, "TaskRewardDesc1", data.mTaskRewardDesc1);
+		LuaCfgHelper::readString(L, "TaskRewardDesc2", data.mTaskRewardDesc2);
+		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("Fish_ArenaTaskCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ArenaTaskCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_ArenaTaskCFG* Fish_ArenaTaskCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_ArenaTaskCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_ArenaTaskCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 41 - 0
FishConfig/Code/Client/Fish_ArenaTaskCFG.h

@@ -0,0 +1,41 @@
+#pragma once
+#include <map>
+struct Fish_ArenaTaskCFGData
+{
+	//编号
+	int mID;
+	//任务组
+	int mGroup;
+	//任务描述
+	std::string mTaskDesc;
+	//鱼ID
+	int mfishId;
+	//完成计数
+	int mneedCount;
+	//奖励类型
+	int mType;
+	//任务奖励
+	int mTaskReward;
+	//任务1奖励说明
+	std::string mTaskRewardDesc1;
+	//任务2奖励说明
+	std::string mTaskRewardDesc2;
+};
+
+class Fish_ArenaTaskCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_ArenaTaskCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_ArenaTaskCFGData* GetData(int ID);
+	const std::map<int, Fish_ArenaTaskCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_ArenaTaskCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_ArenaTaskCFGData> mMapData;
+};

+ 105 - 0
FishConfig/Code/Client/Fish_ArenaTurretCFG.cpp

@@ -0,0 +1,105 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_ArenaTurretCFG.h"
+std::auto_ptr<Fish_ArenaTurretCFG> Fish_ArenaTurretCFG::msSingleton(nullptr);
+
+int Fish_ArenaTurretCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_ArenaTurretCFGData* Fish_ArenaTurretCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_ArenaTurretCFGData>& Fish_ArenaTurretCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_ArenaTurretCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_ArenaTurretCFG.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)
+	{
+		Fish_ArenaTurretCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mOpenRate = element->IntAttribute("OpenRate");
+		data.mArenaIntegral = element->IntAttribute("ArenaIntegral");
+		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("Fish_ArenaTurretCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ArenaTurretCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_ArenaTurretCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_ArenaTurretCFG");
+	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");
+		Fish_ArenaTurretCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "OpenRate", data.mOpenRate);
+		LuaCfgHelper::readInt(L, "ArenaIntegral", data.mArenaIntegral);
+		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("Fish_ArenaTurretCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ArenaTurretCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_ArenaTurretCFG* Fish_ArenaTurretCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_ArenaTurretCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_ArenaTurretCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 29 - 0
FishConfig/Code/Client/Fish_ArenaTurretCFG.h

@@ -0,0 +1,29 @@
+#pragma once
+#include <map>
+struct Fish_ArenaTurretCFGData
+{
+	//ID
+	int mID;
+	//开放倍率
+	int mOpenRate;
+	//竞技场积分加成
+	int mArenaIntegral;
+};
+
+class Fish_ArenaTurretCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_ArenaTurretCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_ArenaTurretCFGData* GetData(int ID);
+	const std::map<int, Fish_ArenaTurretCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_ArenaTurretCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_ArenaTurretCFGData> mMapData;
+};

+ 169 - 0
FishConfig/Code/Client/Fish_ArmatureCFG.cpp

@@ -0,0 +1,169 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_ArmatureCFG.h"
+std::auto_ptr<Fish_ArmatureCFG> Fish_ArmatureCFG::msSingleton(nullptr);
+
+int Fish_ArmatureCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_ArmatureCFGData* Fish_ArmatureCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_ArmatureCFGData>& Fish_ArmatureCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_ArmatureCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_ArmatureCFG.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)
+	{
+		Fish_ArmatureCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mResType = element->IntAttribute("ResType");
+		data.mResName = element->Attribute("ResName");
+		data.mResPath = element->Attribute("ResPath");
+		data.mMoveAction = element->Attribute("MoveAction");
+		data.mDieAction = element->Attribute("DieAction");
+		data.mColor = element->IntAttribute("Color");
+		data.mScale = element->FloatAttribute("Scale");
+		data.mEnableFlipped = element->BoolAttribute("EnableFlipped");
+		{
+			const char* Collider = element->Attribute("Collider");
+			std::vector<std::string> vecCollider;
+			boost::split(vecCollider, Collider, boost::is_any_of(","));
+			float temp;
+			for (unsigned int i = 0; i < vecCollider.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToFloat(vecCollider[i].c_str(), &temp))
+				{
+					data.mCollider.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* AttachArmatures = element->Attribute("AttachArmatures");
+			std::vector<std::string> vecAttachArmatures;
+			boost::split(vecAttachArmatures, AttachArmatures, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecAttachArmatures.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecAttachArmatures[i].c_str(), &temp))
+				{
+					data.mAttachArmatures.push_back(temp);
+				}
+			}
+		}
+		data.mFixFlag = element->Attribute("FixFlag");
+		{
+			const char* Circles = element->Attribute("Circles");
+			std::vector<std::string> vecCircles;
+			boost::split(vecCircles, Circles, boost::is_any_of(","));
+			for (unsigned int i = 0; i < vecCircles.size(); i++)
+			{
+				data.mCircles.push_back(vecCircles[i]);
+			}
+		}
+		{
+			const char* AttachParticles = element->Attribute("AttachParticles");
+			std::vector<std::string> vecAttachParticles;
+			boost::split(vecAttachParticles, AttachParticles, boost::is_any_of(","));
+			for (unsigned int i = 0; i < vecAttachParticles.size(); i++)
+			{
+				data.mAttachParticles.push_back(vecAttachParticles[i]);
+			}
+		}
+		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("Fish_ArmatureCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ArmatureCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_ArmatureCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_ArmatureCFG");
+	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");
+		Fish_ArmatureCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readInt(L, "ResType", data.mResType);
+		LuaCfgHelper::readString(L, "ResName", data.mResName);
+		LuaCfgHelper::readString(L, "ResPath", data.mResPath);
+		LuaCfgHelper::readString(L, "MoveAction", data.mMoveAction);
+		LuaCfgHelper::readString(L, "DieAction", data.mDieAction);
+		LuaCfgHelper::readInt(L, "Color", data.mColor);
+		LuaCfgHelper::readFloat(L, "Scale", data.mScale);
+		LuaCfgHelper::readBool(L, "EnableFlipped", data.mEnableFlipped);
+		LuaCfgHelper::readVectorFloat(L, "Collider", data.mCollider);
+		LuaCfgHelper::readVectorInt(L, "AttachArmatures", data.mAttachArmatures);
+		LuaCfgHelper::readString(L, "FixFlag", data.mFixFlag);
+		LuaCfgHelper::readVectorString(L, "Circles", data.mCircles);
+		LuaCfgHelper::readVectorString(L, "AttachParticles", data.mAttachParticles);
+		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("Fish_ArmatureCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ArmatureCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_ArmatureCFG* Fish_ArmatureCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_ArmatureCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_ArmatureCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 53 - 0
FishConfig/Code/Client/Fish_ArmatureCFG.h

@@ -0,0 +1,53 @@
+#pragma once
+#include <map>
+struct Fish_ArmatureCFGData
+{
+	//模型ID
+	int mID;
+	//名字
+	std::string mName;
+	//资源类型
+	int mResType;
+	//资源名字
+	std::string mResName;
+	//资源路径
+	std::string mResPath;
+	//移动动作
+	std::string mMoveAction;
+	//死亡动作
+	std::string mDieAction;
+	//颜色
+	int mColor;
+	//缩放
+	float mScale;
+	//固定方向
+	bool mEnableFlipped;
+	//碰撞数据
+	std::vector<float> mCollider;
+	//附加动画
+	std::vector<int> mAttachArmatures;
+	//标记
+	std::string mFixFlag;
+	//光圈
+	std::vector<std::string> mCircles;
+	//附加粒子
+	std::vector<std::string> mAttachParticles;
+};
+
+class Fish_ArmatureCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_ArmatureCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_ArmatureCFGData* GetData(int ID);
+	const std::map<int, Fish_ArmatureCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_ArmatureCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_ArmatureCFGData> mMapData;
+};

+ 103 - 0
FishConfig/Code/Client/Fish_BaseInfo.cpp

@@ -0,0 +1,103 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_BaseInfo.h"
+std::auto_ptr<Fish_BaseInfo> Fish_BaseInfo::msSingleton(nullptr);
+
+int Fish_BaseInfo::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_BaseInfoData* Fish_BaseInfo::GetData(std::string Key)
+{
+	auto it = mMapData.find(Key);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<std::string, Fish_BaseInfoData>& Fish_BaseInfo::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_BaseInfo::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_BaseInfo.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)
+	{
+		Fish_BaseInfoData data;
+		data.mKey = element->Attribute("Key");
+		data.mValue = element->IntAttribute("Value");
+		if (mMapData.find(data.mKey) != mMapData.end())std::cout <<"data refind:" << data.mKey << std::endl;
+		CCASSERT(mMapData.find(data.mKey) == mMapData.end(), "data.mKey is exists");
+		mMapData.insert(std::make_pair(data.mKey, data));
+		element = element->NextSiblingElement();
+	}
+	CCLOG("Fish_BaseInfo Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_BaseInfo::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_BaseInfo");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_BaseInfo");
+	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");
+		Fish_BaseInfoData data;
+		LuaCfgHelper::readString(L, "Key", data.mKey);
+		LuaCfgHelper::readInt(L, "Value", data.mValue);
+		if (mMapData.find(data.mKey) != mMapData.end())std::cout <<"data refind:" << data.mKey << std::endl;
+		CCASSERT(mMapData.find(data.mKey) == mMapData.end(), "data.mKey is exists");
+		mMapData.insert(std::make_pair(data.mKey, data));
+		lua_pop(L, 1);
+	}
+	lua_settop(L, 0);
+	CCLOG("Fish_BaseInfo Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_BaseInfo::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_BaseInfo* Fish_BaseInfo::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_BaseInfo());
+	}
+	return msSingleton.get();
+}
+
+void Fish_BaseInfo::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 27 - 0
FishConfig/Code/Client/Fish_BaseInfo.h

@@ -0,0 +1,27 @@
+#pragma once
+#include <map>
+struct Fish_BaseInfoData
+{
+	//key
+	std::string mKey;
+	//ÊýÖµ
+	int mValue;
+};
+
+class Fish_BaseInfo
+{
+public:
+private:
+	static std::auto_ptr<Fish_BaseInfo> msSingleton;
+public:
+	int GetCount();
+	const Fish_BaseInfoData* GetData(std::string Key);
+	const std::map<std::string, Fish_BaseInfoData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_BaseInfo* GetSingleton();
+	static void Release();
+private:
+	std::map<std::string, Fish_BaseInfoData> mMapData;
+};

+ 133 - 0
FishConfig/Code/Client/Fish_BuffCFG.cpp

@@ -0,0 +1,133 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_BuffCFG.h"
+std::auto_ptr<Fish_BuffCFG> Fish_BuffCFG::msSingleton(nullptr);
+
+int Fish_BuffCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_BuffCFGData* Fish_BuffCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_BuffCFGData>& Fish_BuffCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_BuffCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_BuffCFG.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)
+	{
+		Fish_BuffCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mBuffName = element->Attribute("BuffName");
+		data.mBuffIcon = element->Attribute("BuffIcon");
+		data.mBuffType = element->IntAttribute("BuffType");
+		data.mDuration = element->IntAttribute("Duration");
+		data.mNeedVIP = element->IntAttribute("NeedVIP");
+		data.mBulletType = element->IntAttribute("BulletType");
+		data.mBulletCount = element->IntAttribute("BulletCount");
+		{
+			const char* Param = element->Attribute("Param");
+			std::vector<std::string> vecParam;
+			boost::split(vecParam, Param, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecParam.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecParam[i].c_str(), &temp))
+				{
+					data.mParam.push_back(temp);
+				}
+			}
+		}
+		data.mGuideImage = element->Attribute("GuideImage");
+		data.mGuideInfo = element->Attribute("GuideInfo");
+		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("Fish_BuffCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_BuffCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_BuffCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_BuffCFG");
+	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");
+		Fish_BuffCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "BuffName", data.mBuffName);
+		LuaCfgHelper::readString(L, "BuffIcon", data.mBuffIcon);
+		LuaCfgHelper::readInt(L, "BuffType", data.mBuffType);
+		LuaCfgHelper::readInt(L, "Duration", data.mDuration);
+		LuaCfgHelper::readInt(L, "NeedVIP", data.mNeedVIP);
+		LuaCfgHelper::readInt(L, "BulletType", data.mBulletType);
+		LuaCfgHelper::readInt(L, "BulletCount", data.mBulletCount);
+		LuaCfgHelper::readVectorInt(L, "Param", data.mParam);
+		LuaCfgHelper::readString(L, "GuideImage", data.mGuideImage);
+		LuaCfgHelper::readString(L, "GuideInfo", data.mGuideInfo);
+		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("Fish_BuffCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_BuffCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_BuffCFG* Fish_BuffCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_BuffCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_BuffCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 45 - 0
FishConfig/Code/Client/Fish_BuffCFG.h

@@ -0,0 +1,45 @@
+#pragma once
+#include <map>
+struct Fish_BuffCFGData
+{
+	//key
+	int mID;
+	//效果名字
+	std::string mBuffName;
+	//效果ICON
+	std::string mBuffIcon;
+	//效果类型1普通,2大招
+	int mBuffType;
+	//限时(秒)
+	int mDuration;
+	//vip限制
+	int mNeedVIP;
+	//对应子弹类型
+	int mBulletType;
+	//最大子弹数
+	int mBulletCount;
+	//参数
+	std::vector<int> mParam;
+	//提示图片
+	std::string mGuideImage;
+	//提示信息
+	std::string mGuideInfo;
+};
+
+class Fish_BuffCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_BuffCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_BuffCFGData* GetData(int ID);
+	const std::map<int, Fish_BuffCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_BuffCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_BuffCFGData> mMapData;
+};

+ 163 - 0
FishConfig/Code/Client/Fish_BulletCFG.cpp

@@ -0,0 +1,163 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_BulletCFG.h"
+std::auto_ptr<Fish_BulletCFG> Fish_BulletCFG::msSingleton(nullptr);
+
+int Fish_BulletCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_BulletCFGData* Fish_BulletCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_BulletCFGData>& Fish_BulletCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_BulletCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_BulletCFG.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)
+	{
+		Fish_BulletCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mBulletType = element->IntAttribute("BulletType");
+		data.mResType = element->IntAttribute("ResType");
+		data.mResName = element->Attribute("ResName");
+		data.mColor = element->IntAttribute("Color");
+		data.mScale = element->FloatAttribute("Scale");
+		{
+			const char* Collider = element->Attribute("Collider");
+			std::vector<std::string> vecCollider;
+			boost::split(vecCollider, Collider, boost::is_any_of(","));
+			float temp;
+			for (unsigned int i = 0; i < vecCollider.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToFloat(vecCollider[i].c_str(), &temp))
+				{
+					data.mCollider.push_back(temp);
+				}
+			}
+		}
+		data.mBulletCount = element->IntAttribute("BulletCount");
+		data.mHitType = element->IntAttribute("HitType");
+		data.mHitEffectID = element->IntAttribute("HitEffectID");
+		data.mHitSoundID = element->IntAttribute("HitSoundID");
+		data.mNetEffect = element->IntAttribute("NetEffect");
+		data.mNetSize = element->IntAttribute("NetSize");
+		data.mNetScale = element->FloatAttribute("NetScale");
+		data.mNetCount = element->IntAttribute("NetCount");
+		data.mNetHitCount = element->IntAttribute("NetHitCount");
+		data.mSpeed = element->IntAttribute("Speed");
+		{
+			const char* Param = element->Attribute("Param");
+			std::vector<std::string> vecParam;
+			boost::split(vecParam, Param, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecParam.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecParam[i].c_str(), &temp))
+				{
+					data.mParam.push_back(temp);
+				}
+			}
+		}
+		data.mRadius = element->FloatAttribute("Radius");
+		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("Fish_BulletCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_BulletCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_BulletCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_BulletCFG");
+	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");
+		Fish_BulletCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readInt(L, "BulletType", data.mBulletType);
+		LuaCfgHelper::readInt(L, "ResType", data.mResType);
+		LuaCfgHelper::readString(L, "ResName", data.mResName);
+		LuaCfgHelper::readInt(L, "Color", data.mColor);
+		LuaCfgHelper::readFloat(L, "Scale", data.mScale);
+		LuaCfgHelper::readVectorFloat(L, "Collider", data.mCollider);
+		LuaCfgHelper::readInt(L, "BulletCount", data.mBulletCount);
+		LuaCfgHelper::readInt(L, "HitType", data.mHitType);
+		LuaCfgHelper::readInt(L, "HitEffectID", data.mHitEffectID);
+		LuaCfgHelper::readInt(L, "HitSoundID", data.mHitSoundID);
+		LuaCfgHelper::readInt(L, "NetEffect", data.mNetEffect);
+		LuaCfgHelper::readInt(L, "NetSize", data.mNetSize);
+		LuaCfgHelper::readFloat(L, "NetScale", data.mNetScale);
+		LuaCfgHelper::readInt(L, "NetCount", data.mNetCount);
+		LuaCfgHelper::readInt(L, "NetHitCount", data.mNetHitCount);
+		LuaCfgHelper::readInt(L, "Speed", data.mSpeed);
+		LuaCfgHelper::readVectorInt(L, "Param", data.mParam);
+		LuaCfgHelper::readFloat(L, "Radius", data.mRadius);
+		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("Fish_BulletCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_BulletCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_BulletCFG* Fish_BulletCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_BulletCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_BulletCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 63 - 0
FishConfig/Code/Client/Fish_BulletCFG.h

@@ -0,0 +1,63 @@
+#pragma once
+#include <map>
+struct Fish_BulletCFGData
+{
+	//ID
+	int mID;
+	//子弹名字
+	std::string mName;
+	//子弹类型
+	int mBulletType;
+	//资源类型
+	int mResType;
+	//资源名字
+	std::string mResName;
+	//颜色
+	int mColor;
+	//缩放
+	float mScale;
+	//碰撞数据
+	std::vector<float> mCollider;
+	//子弹数量
+	int mBulletCount;
+	//击中类型
+	int mHitType;
+	//击中特效
+	int mHitEffectID;
+	//声音ID
+	int mHitSoundID;
+	//渔网特效
+	int mNetEffect;
+	//渔网直径
+	int mNetSize;
+	//渔网大小
+	float mNetScale;
+	//渔网数量
+	int mNetCount;
+	//渔网击中鱼次数
+	int mNetHitCount;
+	//子弹速度
+	int mSpeed;
+	//参数
+	std::vector<int> mParam;
+	//半径
+	float mRadius;
+};
+
+class Fish_BulletCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_BulletCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_BulletCFGData* GetData(int ID);
+	const std::map<int, Fish_BulletCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_BulletCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_BulletCFGData> mMapData;
+};

+ 177 - 0
FishConfig/Code/Client/Fish_BulletHeadCFG.cpp

@@ -0,0 +1,177 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_BulletHeadCFG.h"
+std::auto_ptr<Fish_BulletHeadCFG> Fish_BulletHeadCFG::msSingleton(nullptr);
+
+int Fish_BulletHeadCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_BulletHeadCFGData* Fish_BulletHeadCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_BulletHeadCFGData>& Fish_BulletHeadCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_BulletHeadCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_BulletHeadCFG.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)
+	{
+		Fish_BulletHeadCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mAttackMode = element->IntAttribute("AttackMode");
+		data.mGemPrice = element->IntAttribute("GemPrice");
+		data.mBallPrice = element->IntAttribute("BallPrice");
+		data.mGoldKillMin = element->IntAttribute("GoldKillMin");
+		data.mGoldKillMax = element->IntAttribute("GoldKillMax");
+		data.mThreshold = element->IntAttribute("Threshold");
+		{
+			const char* RandParam = element->Attribute("RandParam");
+			std::vector<std::string> vecRandParam;
+			boost::split(vecRandParam, RandParam, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRandParam.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRandParam[i].c_str(), &temp))
+				{
+					data.mRandParam.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* NoContributeRandParam = element->Attribute("NoContributeRandParam");
+			std::vector<std::string> vecNoContributeRandParam;
+			boost::split(vecNoContributeRandParam, NoContributeRandParam, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecNoContributeRandParam.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecNoContributeRandParam[i].c_str(), &temp))
+				{
+					data.mNoContributeRandParam.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* EverydayBuff = element->Attribute("EverydayBuff");
+			std::vector<std::string> vecEverydayBuff;
+			boost::split(vecEverydayBuff, EverydayBuff, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecEverydayBuff.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecEverydayBuff[i].c_str(), &temp))
+				{
+					data.mEverydayBuff.push_back(temp);
+				}
+			}
+		}
+		data.mGoldUseMin = element->IntAttribute("GoldUseMin");
+		data.mGoldUseMax = element->IntAttribute("GoldUseMax");
+		{
+			const char* TelephoneDrop = element->Attribute("TelephoneDrop");
+			std::vector<std::string> vecTelephoneDrop;
+			boost::split(vecTelephoneDrop, TelephoneDrop, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecTelephoneDrop.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecTelephoneDrop[i].c_str(), &temp))
+				{
+					data.mTelephoneDrop.push_back(temp);
+				}
+			}
+		}
+		data.mNotifyMsgCond = element->IntAttribute("NotifyMsgCond");
+		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("Fish_BulletHeadCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_BulletHeadCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_BulletHeadCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_BulletHeadCFG");
+	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");
+		Fish_BulletHeadCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readInt(L, "AttackMode", data.mAttackMode);
+		LuaCfgHelper::readInt(L, "GemPrice", data.mGemPrice);
+		LuaCfgHelper::readInt(L, "BallPrice", data.mBallPrice);
+		LuaCfgHelper::readInt(L, "GoldKillMin", data.mGoldKillMin);
+		LuaCfgHelper::readInt(L, "GoldKillMax", data.mGoldKillMax);
+		LuaCfgHelper::readInt(L, "Threshold", data.mThreshold);
+		LuaCfgHelper::readVectorInt(L, "RandParam", data.mRandParam);
+		LuaCfgHelper::readVectorInt(L, "NoContributeRandParam", data.mNoContributeRandParam);
+		LuaCfgHelper::readVectorInt(L, "EverydayBuff", data.mEverydayBuff);
+		LuaCfgHelper::readInt(L, "GoldUseMin", data.mGoldUseMin);
+		LuaCfgHelper::readInt(L, "GoldUseMax", data.mGoldUseMax);
+		LuaCfgHelper::readVectorInt(L, "TelephoneDrop", data.mTelephoneDrop);
+		LuaCfgHelper::readInt(L, "NotifyMsgCond", data.mNotifyMsgCond);
+		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("Fish_BulletHeadCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_BulletHeadCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_BulletHeadCFG* Fish_BulletHeadCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_BulletHeadCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_BulletHeadCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 53 - 0
FishConfig/Code/Client/Fish_BulletHeadCFG.h

@@ -0,0 +1,53 @@
+#pragma once
+#include <map>
+struct Fish_BulletHeadCFGData
+{
+	//对应道具表id
+	int mID;
+	//名字
+	std::string mName;
+	//攻击模式
+	int mAttackMode;
+	//钻石价格
+	int mGemPrice;
+	//碎片价格
+	int mBallPrice;
+	//场景内使用鱼雷获取金币下限
+	int mGoldKillMin;
+	//场景内使用鱼雷获取金币上限
+	int mGoldKillMax;
+	//贡献阈值
+	int mThreshold;
+	//场景内使用鱼雷获取金币概率(有贡献值)
+	std::vector<int> mRandParam;
+	//场景内使用鱼雷获取金币概率
+	std::vector<int> mNoContributeRandParam;
+	//每日鱼雷buff
+	std::vector<int> mEverydayBuff;
+	//背包内使用鱼雷获取金币下限
+	int mGoldUseMin;
+	//背包内使用鱼雷获取金币上限
+	int mGoldUseMax;
+	//掉落话费数量
+	std::vector<int> mTelephoneDrop;
+	//发送跑马灯的条件,0表示不用发送
+	int mNotifyMsgCond;
+};
+
+class Fish_BulletHeadCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_BulletHeadCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_BulletHeadCFGData* GetData(int ID);
+	const std::map<int, Fish_BulletHeadCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_BulletHeadCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_BulletHeadCFGData> mMapData;
+};

+ 107 - 0
FishConfig/Code/Client/Fish_ChatCFG.cpp

@@ -0,0 +1,107 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_ChatCFG.h"
+std::auto_ptr<Fish_ChatCFG> Fish_ChatCFG::msSingleton(nullptr);
+
+int Fish_ChatCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_ChatCFGData* Fish_ChatCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_ChatCFGData>& Fish_ChatCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_ChatCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_ChatCFG.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)
+	{
+		Fish_ChatCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mChatInfo = element->Attribute("ChatInfo");
+		data.mDuration = element->FloatAttribute("Duration");
+		data.mSoundID = element->IntAttribute("SoundID");
+		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("Fish_ChatCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ChatCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_ChatCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_ChatCFG");
+	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");
+		Fish_ChatCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "ChatInfo", data.mChatInfo);
+		LuaCfgHelper::readFloat(L, "Duration", data.mDuration);
+		LuaCfgHelper::readInt(L, "SoundID", data.mSoundID);
+		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("Fish_ChatCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_ChatCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_ChatCFG* Fish_ChatCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_ChatCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_ChatCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 31 - 0
FishConfig/Code/Client/Fish_ChatCFG.h

@@ -0,0 +1,31 @@
+#pragma once
+#include <map>
+struct Fish_ChatCFGData
+{
+	//声音ID
+	int mID;
+	//声音名字
+	std::string mChatInfo;
+	//持续时间
+	float mDuration;
+	//声音ID
+	int mSoundID;
+};
+
+class Fish_ChatCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_ChatCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_ChatCFGData* GetData(int ID);
+	const std::map<int, Fish_ChatCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_ChatCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_ChatCFGData> mMapData;
+};

+ 105 - 0
FishConfig/Code/Client/Fish_DiceFishCFG.cpp

@@ -0,0 +1,105 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_DiceFishCFG.h"
+std::auto_ptr<Fish_DiceFishCFG> Fish_DiceFishCFG::msSingleton(nullptr);
+
+int Fish_DiceFishCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_DiceFishCFGData* Fish_DiceFishCFG::GetData(int Rotation)
+{
+	auto it = mMapData.find(Rotation);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_DiceFishCFGData>& Fish_DiceFishCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_DiceFishCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_DiceFishCFG.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)
+	{
+		Fish_DiceFishCFGData data;
+		data.mRotation = element->IntAttribute("Rotation");
+		data.mMagnification = element->IntAttribute("Magnification");
+		data.mProbability = element->IntAttribute("Probability");
+		if (mMapData.find(data.mRotation) != mMapData.end())std::cout <<"data refind:" << data.mRotation << std::endl;
+		CCASSERT(mMapData.find(data.mRotation) == mMapData.end(), "data.mRotation is exists");
+		mMapData.insert(std::make_pair(data.mRotation, data));
+		element = element->NextSiblingElement();
+	}
+	CCLOG("Fish_DiceFishCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_DiceFishCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_DiceFishCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_DiceFishCFG");
+	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");
+		Fish_DiceFishCFGData data;
+		LuaCfgHelper::readInt(L, "Rotation", data.mRotation);
+		LuaCfgHelper::readInt(L, "Magnification", data.mMagnification);
+		LuaCfgHelper::readInt(L, "Probability", data.mProbability);
+		if (mMapData.find(data.mRotation) != mMapData.end())std::cout <<"data refind:" << data.mRotation << std::endl;
+		CCASSERT(mMapData.find(data.mRotation) == mMapData.end(), "data.mRotation is exists");
+		mMapData.insert(std::make_pair(data.mRotation, data));
+		lua_pop(L, 1);
+	}
+	lua_settop(L, 0);
+	CCLOG("Fish_DiceFishCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_DiceFishCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_DiceFishCFG* Fish_DiceFishCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_DiceFishCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_DiceFishCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 29 - 0
FishConfig/Code/Client/Fish_DiceFishCFG.h

@@ -0,0 +1,29 @@
+#pragma once
+#include <map>
+struct Fish_DiceFishCFGData
+{
+	//ÂÖ´Î
+	int mRotation;
+	//±¶ÂÊ
+	int mMagnification;
+	//¸ÅÂÊ
+	int mProbability;
+};
+
+class Fish_DiceFishCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_DiceFishCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_DiceFishCFGData* GetData(int Rotation);
+	const std::map<int, Fish_DiceFishCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_DiceFishCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_DiceFishCFGData> mMapData;
+};

+ 127 - 0
FishConfig/Code/Client/Fish_DragonPalace.cpp

@@ -0,0 +1,127 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_DragonPalace.h"
+std::auto_ptr<Fish_DragonPalace> Fish_DragonPalace::msSingleton(nullptr);
+
+int Fish_DragonPalace::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_DragonPalaceData* Fish_DragonPalace::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_DragonPalaceData>& Fish_DragonPalace::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_DragonPalace::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_DragonPalace.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)
+	{
+		Fish_DragonPalaceData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mIcon = element->Attribute("Icon");
+		data.mString1 = element->Attribute("String1");
+		{
+			const char* String2 = element->Attribute("String2");
+			std::vector<std::string> vecString2;
+			boost::split(vecString2, String2, boost::is_any_of(","));
+			for (unsigned int i = 0; i < vecString2.size(); i++)
+			{
+				data.mString2.push_back(vecString2[i]);
+			}
+		}
+		{
+			const char* String3 = element->Attribute("String3");
+			std::vector<std::string> vecString3;
+			boost::split(vecString3, String3, boost::is_any_of(","));
+			for (unsigned int i = 0; i < vecString3.size(); i++)
+			{
+				data.mString3.push_back(vecString3[i]);
+			}
+		}
+		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("Fish_DragonPalace Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_DragonPalace::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_DragonPalace");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_DragonPalace");
+	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");
+		Fish_DragonPalaceData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readString(L, "Icon", data.mIcon);
+		LuaCfgHelper::readString(L, "String1", data.mString1);
+		LuaCfgHelper::readVectorString(L, "String2", data.mString2);
+		LuaCfgHelper::readVectorString(L, "String3", data.mString3);
+		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("Fish_DragonPalace Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_DragonPalace::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_DragonPalace* Fish_DragonPalace::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_DragonPalace());
+	}
+	return msSingleton.get();
+}
+
+void Fish_DragonPalace::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 35 - 0
FishConfig/Code/Client/Fish_DragonPalace.h

@@ -0,0 +1,35 @@
+#pragma once
+#include <map>
+struct Fish_DragonPalaceData
+{
+	//ID
+	int mID;
+	//ÓãÃû×Ö
+	std::string mName;
+	//ͼƬ×ÊÔ´
+	std::string mIcon;
+	//½éÉÜ1
+	std::string mString1;
+	//½éÉÜ2
+	std::vector<std::string> mString2;
+	//½éÉÜ3
+	std::vector<std::string> mString3;
+};
+
+class Fish_DragonPalace
+{
+public:
+private:
+	static std::auto_ptr<Fish_DragonPalace> msSingleton;
+public:
+	int GetCount();
+	const Fish_DragonPalaceData* GetData(int ID);
+	const std::map<int, Fish_DragonPalaceData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_DragonPalace* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_DragonPalaceData> mMapData;
+};

+ 113 - 0
FishConfig/Code/Client/Fish_DropGoldCFG.cpp

@@ -0,0 +1,113 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_DropGoldCFG.h"
+std::auto_ptr<Fish_DropGoldCFG> Fish_DropGoldCFG::msSingleton(nullptr);
+
+int Fish_DropGoldCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_DropGoldCFGData* Fish_DropGoldCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_DropGoldCFGData>& Fish_DropGoldCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_DropGoldCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_DropGoldCFG.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)
+	{
+		Fish_DropGoldCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mResType = element->IntAttribute("ResType");
+		data.mResName = element->Attribute("ResName");
+		data.mResPath = element->Attribute("ResPath");
+		data.mWidth = element->IntAttribute("Width");
+		data.mHeight = element->IntAttribute("Height");
+		data.mScale = element->FloatAttribute("Scale");
+		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("Fish_DropGoldCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_DropGoldCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_DropGoldCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_DropGoldCFG");
+	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");
+		Fish_DropGoldCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "ResType", data.mResType);
+		LuaCfgHelper::readString(L, "ResName", data.mResName);
+		LuaCfgHelper::readString(L, "ResPath", data.mResPath);
+		LuaCfgHelper::readInt(L, "Width", data.mWidth);
+		LuaCfgHelper::readInt(L, "Height", data.mHeight);
+		LuaCfgHelper::readFloat(L, "Scale", data.mScale);
+		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("Fish_DropGoldCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_DropGoldCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_DropGoldCFG* Fish_DropGoldCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_DropGoldCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_DropGoldCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 37 - 0
FishConfig/Code/Client/Fish_DropGoldCFG.h

@@ -0,0 +1,37 @@
+#pragma once
+#include <map>
+struct Fish_DropGoldCFGData
+{
+	//ID
+	int mID;
+	//资源类型
+	int mResType;
+	//资源名字
+	std::string mResName;
+	//资源路径
+	std::string mResPath;
+	//宽度
+	int mWidth;
+	//高度
+	int mHeight;
+	//缩放
+	float mScale;
+};
+
+class Fish_DropGoldCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_DropGoldCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_DropGoldCFGData* GetData(int ID);
+	const std::map<int, Fish_DropGoldCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_DropGoldCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_DropGoldCFGData> mMapData;
+};

+ 117 - 0
FishConfig/Code/Client/Fish_EffectCFG.cpp

@@ -0,0 +1,117 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_EffectCFG.h"
+std::auto_ptr<Fish_EffectCFG> Fish_EffectCFG::msSingleton(nullptr);
+
+int Fish_EffectCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_EffectCFGData* Fish_EffectCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_EffectCFGData>& Fish_EffectCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_EffectCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_EffectCFG.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)
+	{
+		Fish_EffectCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mEffectType = element->IntAttribute("EffectType");
+		{
+			const char* ResParams = element->Attribute("ResParams");
+			std::vector<std::string> vecResParams;
+			boost::split(vecResParams, ResParams, boost::is_any_of(","));
+			for (unsigned int i = 0; i < vecResParams.size(); i++)
+			{
+				data.mResParams.push_back(vecResParams[i]);
+			}
+		}
+		data.mDuration = element->FloatAttribute("Duration");
+		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("Fish_EffectCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_EffectCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_EffectCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_EffectCFG");
+	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");
+		Fish_EffectCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readInt(L, "EffectType", data.mEffectType);
+		LuaCfgHelper::readVectorString(L, "ResParams", data.mResParams);
+		LuaCfgHelper::readFloat(L, "Duration", data.mDuration);
+		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("Fish_EffectCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_EffectCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_EffectCFG* Fish_EffectCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_EffectCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_EffectCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 33 - 0
FishConfig/Code/Client/Fish_EffectCFG.h

@@ -0,0 +1,33 @@
+#pragma once
+#include <map>
+struct Fish_EffectCFGData
+{
+	//ID
+	int mID;
+	//效果名字
+	std::string mName;
+	//效果类型(1骨骼动画,2多个粒子,3帧动画,4精灵,5组合,6转盘,7延迟)
+	int mEffectType;
+	//参数
+	std::vector<std::string> mResParams;
+	//持续时间
+	float mDuration;
+};
+
+class Fish_EffectCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_EffectCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_EffectCFGData* GetData(int ID);
+	const std::map<int, Fish_EffectCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_EffectCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_EffectCFGData> mMapData;
+};

+ 111 - 0
FishConfig/Code/Client/Fish_FieldParameter.cpp

@@ -0,0 +1,111 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_FieldParameter.h"
+std::auto_ptr<Fish_FieldParameter> Fish_FieldParameter::msSingleton(nullptr);
+
+int Fish_FieldParameter::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_FieldParameterData* Fish_FieldParameter::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_FieldParameterData>& Fish_FieldParameter::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_FieldParameter::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_FieldParameter.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)
+	{
+		Fish_FieldParameterData data;
+		data.mID = element->IntAttribute("ID");
+		data.mRoomId = element->IntAttribute("RoomId");
+		data.mBuffType = element->IntAttribute("BuffType");
+		data.mNumber = element->IntAttribute("Number");
+		data.mRateOfReturn = element->IntAttribute("RateOfReturn");
+		data.mProbability = element->IntAttribute("Probability");
+		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("Fish_FieldParameter Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FieldParameter::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_FieldParameter");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_FieldParameter");
+	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");
+		Fish_FieldParameterData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "RoomId", data.mRoomId);
+		LuaCfgHelper::readInt(L, "BuffType", data.mBuffType);
+		LuaCfgHelper::readInt(L, "Number", data.mNumber);
+		LuaCfgHelper::readInt(L, "RateOfReturn", data.mRateOfReturn);
+		LuaCfgHelper::readInt(L, "Probability", data.mProbability);
+		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("Fish_FieldParameter Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FieldParameter::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_FieldParameter* Fish_FieldParameter::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_FieldParameter());
+	}
+	return msSingleton.get();
+}
+
+void Fish_FieldParameter::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 35 - 0
FishConfig/Code/Client/Fish_FieldParameter.h

@@ -0,0 +1,35 @@
+#pragma once
+#include <map>
+struct Fish_FieldParameterData
+{
+	//ID
+	int mID;
+	//房间号
+	int mRoomId;
+	//BUFF类型
+	int mBuffType;
+	//奖罚人数(百分比)
+	int mNumber;
+	//偏差(百分比)
+	int mRateOfReturn;
+	//命中调整(百分比)
+	int mProbability;
+};
+
+class Fish_FieldParameter
+{
+public:
+private:
+	static std::auto_ptr<Fish_FieldParameter> msSingleton;
+public:
+	int GetCount();
+	const Fish_FieldParameterData* GetData(int ID);
+	const std::map<int, Fish_FieldParameterData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_FieldParameter* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_FieldParameterData> mMapData;
+};

+ 283 - 0
FishConfig/Code/Client/Fish_FishCFG.cpp

@@ -0,0 +1,283 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_FishCFG.h"
+std::auto_ptr<Fish_FishCFG> Fish_FishCFG::msSingleton(nullptr);
+
+int Fish_FishCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_FishCFGData* Fish_FishCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_FishCFGData>& Fish_FishCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_FishCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_FishCFG.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)
+	{
+		Fish_FishCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mFishName = element->Attribute("FishName");
+		data.mModelID = element->IntAttribute("ModelID");
+		data.mScore = element->IntAttribute("Score");
+		data.mFishPoints = element->IntAttribute("FishPoints");
+		{
+			const char* Dimensity = element->Attribute("Dimensity");
+			std::vector<std::string> vecDimensity;
+			boost::split(vecDimensity, Dimensity, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecDimensity.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecDimensity[i].c_str(), &temp))
+				{
+					data.mDimensity.push_back(temp);
+				}
+			}
+		}
+		data.mType = element->IntAttribute("Type");
+		data.mDropGem = element->IntAttribute("DropGem");
+		data.mShowRadius = element->IntAttribute("ShowRadius");
+		data.mLayer = element->IntAttribute("Layer");
+		data.mCanNetHit = element->BoolAttribute("CanNetHit");
+		{
+			const char* ServerDieParam = element->Attribute("ServerDieParam");
+			std::vector<std::string> vecServerDieParam;
+			boost::split(vecServerDieParam, ServerDieParam, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecServerDieParam.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecServerDieParam[i].c_str(), &temp))
+				{
+					data.mServerDieParam.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* DieEffectParam = element->Attribute("DieEffectParam");
+			std::vector<std::string> vecDieEffectParam;
+			boost::split(vecDieEffectParam, DieEffectParam, boost::is_any_of(","));
+			float temp;
+			for (unsigned int i = 0; i < vecDieEffectParam.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToFloat(vecDieEffectParam[i].c_str(), &temp))
+				{
+					data.mDieEffectParam.push_back(temp);
+				}
+			}
+		}
+		data.mDieEffect = element->IntAttribute("DieEffect");
+		data.mShockScreen = element->BoolAttribute("ShockScreen");
+		data.mDropGold = element->IntAttribute("DropGold");
+		data.mEffectType = element->IntAttribute("EffectType");
+		data.mGoldPlate = element->IntAttribute("GoldPlate");
+		data.mScreenPlate = element->IntAttribute("ScreenPlate");
+		{
+			const char* DieSoundID = element->Attribute("DieSoundID");
+			std::vector<std::string> vecDieSoundID;
+			boost::split(vecDieSoundID, DieSoundID, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecDieSoundID.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecDieSoundID[i].c_str(), &temp))
+				{
+					data.mDieSoundID.push_back(temp);
+				}
+			}
+		}
+		data.mShowBook = element->BoolAttribute("ShowBook");
+		data.mBookIcon = element->Attribute("BookIcon");
+		data.mBookScale = element->FloatAttribute("BookScale");
+		data.mBookName = element->Attribute("BookName");
+		data.mBookInfo = element->Attribute("BookInfo");
+		data.mIsBOSS = element->BoolAttribute("IsBOSS");
+		data.mIsFrozen = element->BoolAttribute("IsFrozen");
+		data.mIsLottery = element->BoolAttribute("IsLottery");
+		data.mShowStar = element->BoolAttribute("ShowStar");
+		data.mRadius = element->FloatAttribute("Radius");
+		data.mDisplayItem = element->IntAttribute("DisplayItem");
+		{
+			const char* ItemBubble = element->Attribute("ItemBubble");
+			std::vector<std::string> vecItemBubble;
+			boost::split(vecItemBubble, ItemBubble, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecItemBubble.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecItemBubble[i].c_str(), &temp))
+				{
+					data.mItemBubble.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* ChatBubble = element->Attribute("ChatBubble");
+			std::vector<std::string> vecChatBubble;
+			boost::split(vecChatBubble, ChatBubble, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecChatBubble.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecChatBubble[i].c_str(), &temp))
+				{
+					data.mChatBubble.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* ChatOffset = element->Attribute("ChatOffset");
+			std::vector<std::string> vecChatOffset;
+			boost::split(vecChatOffset, ChatOffset, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecChatOffset.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecChatOffset[i].c_str(), &temp))
+				{
+					data.mChatOffset.push_back(temp);
+				}
+			}
+		}
+		data.mItemBubbleScale = element->FloatAttribute("ItemBubbleScale");
+		data.mCanBomb = element->BoolAttribute("CanBomb");
+		data.mShowIndex = element->IntAttribute("ShowIndex");
+		data.mShowType = element->IntAttribute("ShowType");
+		data.mShowScore = element->Attribute("ShowScore");
+		data.mBombRange = element->IntAttribute("BombRange");
+		data.mCanHitByBulletHead = element->Attribute("CanHitByBulletHead");
+		data.mScoreType = element->IntAttribute("ScoreType");
+		{
+			const char* TimesRange = element->Attribute("TimesRange");
+			std::vector<std::string> vecTimesRange;
+			boost::split(vecTimesRange, TimesRange, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecTimesRange.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecTimesRange[i].c_str(), &temp))
+				{
+					data.mTimesRange.push_back(temp);
+				}
+			}
+		}
+		data.mKillAndSendScore = element->IntAttribute("KillAndSendScore");
+		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("Fish_FishCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FishCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_FishCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_FishCFG");
+	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");
+		Fish_FishCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "FishName", data.mFishName);
+		LuaCfgHelper::readInt(L, "ModelID", data.mModelID);
+		LuaCfgHelper::readInt(L, "Score", data.mScore);
+		LuaCfgHelper::readInt(L, "FishPoints", data.mFishPoints);
+		LuaCfgHelper::readVectorInt(L, "Dimensity", data.mDimensity);
+		LuaCfgHelper::readInt(L, "Type", data.mType);
+		LuaCfgHelper::readInt(L, "DropGem", data.mDropGem);
+		LuaCfgHelper::readInt(L, "ShowRadius", data.mShowRadius);
+		LuaCfgHelper::readInt(L, "Layer", data.mLayer);
+		LuaCfgHelper::readBool(L, "CanNetHit", data.mCanNetHit);
+		LuaCfgHelper::readVectorInt(L, "ServerDieParam", data.mServerDieParam);
+		LuaCfgHelper::readVectorFloat(L, "DieEffectParam", data.mDieEffectParam);
+		LuaCfgHelper::readInt(L, "DieEffect", data.mDieEffect);
+		LuaCfgHelper::readBool(L, "ShockScreen", data.mShockScreen);
+		LuaCfgHelper::readInt(L, "DropGold", data.mDropGold);
+		LuaCfgHelper::readInt(L, "EffectType", data.mEffectType);
+		LuaCfgHelper::readInt(L, "GoldPlate", data.mGoldPlate);
+		LuaCfgHelper::readInt(L, "ScreenPlate", data.mScreenPlate);
+		LuaCfgHelper::readVectorInt(L, "DieSoundID", data.mDieSoundID);
+		LuaCfgHelper::readBool(L, "ShowBook", data.mShowBook);
+		LuaCfgHelper::readString(L, "BookIcon", data.mBookIcon);
+		LuaCfgHelper::readFloat(L, "BookScale", data.mBookScale);
+		LuaCfgHelper::readString(L, "BookName", data.mBookName);
+		LuaCfgHelper::readString(L, "BookInfo", data.mBookInfo);
+		LuaCfgHelper::readBool(L, "IsBOSS", data.mIsBOSS);
+		LuaCfgHelper::readBool(L, "IsFrozen", data.mIsFrozen);
+		LuaCfgHelper::readBool(L, "IsLottery", data.mIsLottery);
+		LuaCfgHelper::readBool(L, "ShowStar", data.mShowStar);
+		LuaCfgHelper::readFloat(L, "Radius", data.mRadius);
+		LuaCfgHelper::readInt(L, "DisplayItem", data.mDisplayItem);
+		LuaCfgHelper::readVectorInt(L, "ItemBubble", data.mItemBubble);
+		LuaCfgHelper::readVectorInt(L, "ChatBubble", data.mChatBubble);
+		LuaCfgHelper::readVectorInt(L, "ChatOffset", data.mChatOffset);
+		LuaCfgHelper::readFloat(L, "ItemBubbleScale", data.mItemBubbleScale);
+		LuaCfgHelper::readBool(L, "CanBomb", data.mCanBomb);
+		LuaCfgHelper::readInt(L, "ShowIndex", data.mShowIndex);
+		LuaCfgHelper::readInt(L, "ShowType", data.mShowType);
+		LuaCfgHelper::readString(L, "ShowScore", data.mShowScore);
+		LuaCfgHelper::readInt(L, "BombRange", data.mBombRange);
+		LuaCfgHelper::readString(L, "CanHitByBulletHead", data.mCanHitByBulletHead);
+		LuaCfgHelper::readInt(L, "ScoreType", data.mScoreType);
+		LuaCfgHelper::readVectorInt(L, "TimesRange", data.mTimesRange);
+		LuaCfgHelper::readInt(L, "KillAndSendScore", data.mKillAndSendScore);
+		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("Fish_FishCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FishCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_FishCFG* Fish_FishCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_FishCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_FishCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 111 - 0
FishConfig/Code/Client/Fish_FishCFG.h

@@ -0,0 +1,111 @@
+#pragma once
+#include <map>
+struct Fish_FishCFGData
+{
+	//key
+	int mID;
+	//鱼名字
+	std::string mFishName;
+	//模型ID
+	int mModelID;
+	//分数
+	int mScore;
+	//玩法鱼分值
+	int mFishPoints;
+	//魔石
+	std::vector<int> mDimensity;
+	//鱼类型
+	int mType;
+	//掉落钻石
+	int mDropGem;
+	//显示半径
+	int mShowRadius;
+	//层
+	int mLayer;
+	//渔网能击中
+	bool mCanNetHit;
+	//死亡效果
+	std::vector<int> mServerDieParam;
+	//死亡效果参数
+	std::vector<float> mDieEffectParam;
+	//死亡特效
+	int mDieEffect;
+	//屏幕震动
+	bool mShockScreen;
+	//掉落金币(ID,数量)
+	int mDropGold;
+	//效果类型
+	int mEffectType;
+	//金币转盘
+	int mGoldPlate;
+	//全屏转盘
+	int mScreenPlate;
+	//死亡声音
+	std::vector<int> mDieSoundID;
+	//显示图鉴
+	bool mShowBook;
+	//图鉴图标
+	std::string mBookIcon;
+	//图鉴比例
+	float mBookScale;
+	//图片名字
+	std::string mBookName;
+	//图鉴信息
+	std::string mBookInfo;
+	//是否boss
+	bool mIsBOSS;
+	//是否可被冰冻
+	bool mIsFrozen;
+	//是否话费鱼
+	bool mIsLottery;
+	//显示星星
+	bool mShowStar;
+	//半径
+	float mRadius;
+	//显示道具
+	int mDisplayItem;
+	//道具泡泡偏移
+	std::vector<int> mItemBubble;
+	//聊天泡泡
+	std::vector<int> mChatBubble;
+	//泡泡偏移
+	std::vector<int> mChatOffset;
+	//道具泡泡缩放
+	float mItemBubbleScale;
+	//能否被炸弹击中
+	bool mCanBomb;
+	//显示序号
+	int mShowIndex;
+	//显示类型1-普通鱼 2-黄金 3-特殊 4-boss 5-玩法鱼
+	int mShowType;
+	//显示分数
+	std::string mShowScore;
+	//红鱼,全屏炸弹随机范围
+	int mBombRange;
+	//能否被被弹头击中
+	std::string mCanHitByBulletHead;
+	//鱼分数类型:1正常分数,取Score字段;2浮动倍率,取BombRange,Score字段;3变倍鱼取TimesRange字段;4钻头虾变倍
+	int mScoreType;
+	//变倍鱼倍数以及概率
+	std::vector<int> mTimesRange;
+	//点杀点送分值
+	int mKillAndSendScore;
+};
+
+class Fish_FishCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_FishCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_FishCFGData* GetData(int ID);
+	const std::map<int, Fish_FishCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_FishCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_FishCFGData> mMapData;
+};

+ 129 - 0
FishConfig/Code/Client/Fish_FishChuBaoCFG.cpp

@@ -0,0 +1,129 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_FishChuBaoCFG.h"
+std::auto_ptr<Fish_FishChuBaoCFG> Fish_FishChuBaoCFG::msSingleton(nullptr);
+
+int Fish_FishChuBaoCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_FishChuBaoCFGData* Fish_FishChuBaoCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_FishChuBaoCFGData>& Fish_FishChuBaoCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_FishChuBaoCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_FishChuBaoCFG.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)
+	{
+		Fish_FishChuBaoCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mFishId = element->IntAttribute("FishId");
+		data.mTurretMin = element->IntAttribute("TurretMin");
+		data.mTurretMax = element->IntAttribute("TurretMax");
+		data.mScore = element->IntAttribute("Score");
+		data.mWeight = element->IntAttribute("Weight");
+		data.mGold = element->IntAttribute("Gold");
+		{
+			const char* GivenReward = element->Attribute("GivenReward");
+			std::vector<std::string> vecGivenReward;
+			boost::split(vecGivenReward, GivenReward, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecGivenReward.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecGivenReward[i].c_str(), &temp))
+				{
+					data.mGivenReward.push_back(temp);
+				}
+			}
+		}
+		data.mGearName = element->Attribute("GearName");
+		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("Fish_FishChuBaoCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FishChuBaoCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_FishChuBaoCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_FishChuBaoCFG");
+	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");
+		Fish_FishChuBaoCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "FishId", data.mFishId);
+		LuaCfgHelper::readInt(L, "TurretMin", data.mTurretMin);
+		LuaCfgHelper::readInt(L, "TurretMax", data.mTurretMax);
+		LuaCfgHelper::readInt(L, "Score", data.mScore);
+		LuaCfgHelper::readInt(L, "Weight", data.mWeight);
+		LuaCfgHelper::readInt(L, "Gold", data.mGold);
+		LuaCfgHelper::readVectorInt(L, "GivenReward", data.mGivenReward);
+		LuaCfgHelper::readString(L, "GearName", data.mGearName);
+		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("Fish_FishChuBaoCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FishChuBaoCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_FishChuBaoCFG* Fish_FishChuBaoCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_FishChuBaoCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_FishChuBaoCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 41 - 0
FishConfig/Code/Client/Fish_FishChuBaoCFG.h

@@ -0,0 +1,41 @@
+#pragma once
+#include <map>
+struct Fish_FishChuBaoCFGData
+{
+	//编号
+	int mID;
+	//鱼ID
+	int mFishId;
+	//最小炮倍
+	int mTurretMin;
+	//最大炮倍
+	int mTurretMax;
+	//分值
+	int mScore;
+	//权重
+	int mWeight;
+	//金币(百分比)
+	int mGold;
+	//特定奖励
+	std::vector<int> mGivenReward;
+	//档位名称
+	std::string mGearName;
+};
+
+class Fish_FishChuBaoCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_FishChuBaoCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_FishChuBaoCFGData* GetData(int ID);
+	const std::map<int, Fish_FishChuBaoCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_FishChuBaoCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_FishChuBaoCFGData> mMapData;
+};

+ 171 - 0
FishConfig/Code/Client/Fish_FishRankCFG.cpp

@@ -0,0 +1,171 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_FishRankCFG.h"
+std::auto_ptr<Fish_FishRankCFG> Fish_FishRankCFG::msSingleton(nullptr);
+
+int Fish_FishRankCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_FishRankCFGData* Fish_FishRankCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_FishRankCFGData>& Fish_FishRankCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_FishRankCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_FishRankCFG.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)
+	{
+		Fish_FishRankCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mRankName = element->Attribute("RankName");
+		data.mIntegral = element->Attribute("Integral");
+		data.mStars1 = element->Attribute("Stars1");
+		data.mStars2 = element->Attribute("Stars2");
+		data.mStars3 = element->Attribute("Stars3");
+		{
+			const char* RankRewardId = element->Attribute("RankRewardId");
+			std::vector<std::string> vecRankRewardId;
+			boost::split(vecRankRewardId, RankRewardId, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRankRewardId.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRankRewardId[i].c_str(), &temp))
+				{
+					data.mRankRewardId.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* RankRewardCount = element->Attribute("RankRewardCount");
+			std::vector<std::string> vecRankRewardCount;
+			boost::split(vecRankRewardCount, RankRewardCount, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRankRewardCount.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRankRewardCount[i].c_str(), &temp))
+				{
+					data.mRankRewardCount.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* SeaGodRewardId = element->Attribute("SeaGodRewardId");
+			std::vector<std::string> vecSeaGodRewardId;
+			boost::split(vecSeaGodRewardId, SeaGodRewardId, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecSeaGodRewardId.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecSeaGodRewardId[i].c_str(), &temp))
+				{
+					data.mSeaGodRewardId.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* SeaGodRewardCount = element->Attribute("SeaGodRewardCount");
+			std::vector<std::string> vecSeaGodRewardCount;
+			boost::split(vecSeaGodRewardCount, SeaGodRewardCount, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecSeaGodRewardCount.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecSeaGodRewardCount[i].c_str(), &temp))
+				{
+					data.mSeaGodRewardCount.push_back(temp);
+				}
+			}
+		}
+		data.mGiftId = element->IntAttribute("GiftId");
+		data.mResources = element->Attribute("Resources");
+		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("Fish_FishRankCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FishRankCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_FishRankCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_FishRankCFG");
+	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");
+		Fish_FishRankCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "RankName", data.mRankName);
+		LuaCfgHelper::readString(L, "Integral", data.mIntegral);
+		LuaCfgHelper::readString(L, "Stars1", data.mStars1);
+		LuaCfgHelper::readString(L, "Stars2", data.mStars2);
+		LuaCfgHelper::readString(L, "Stars3", data.mStars3);
+		LuaCfgHelper::readVectorInt(L, "RankRewardId", data.mRankRewardId);
+		LuaCfgHelper::readVectorInt(L, "RankRewardCount", data.mRankRewardCount);
+		LuaCfgHelper::readVectorInt(L, "SeaGodRewardId", data.mSeaGodRewardId);
+		LuaCfgHelper::readVectorInt(L, "SeaGodRewardCount", data.mSeaGodRewardCount);
+		LuaCfgHelper::readInt(L, "GiftId", data.mGiftId);
+		LuaCfgHelper::readString(L, "Resources", data.mResources);
+		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("Fish_FishRankCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FishRankCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_FishRankCFG* Fish_FishRankCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_FishRankCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_FishRankCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 47 - 0
FishConfig/Code/Client/Fish_FishRankCFG.h

@@ -0,0 +1,47 @@
+#pragma once
+#include <map>
+struct Fish_FishRankCFGData
+{
+	//编号
+	int mID;
+	//段位名称
+	std::string mRankName;
+	//所需积分
+	std::string mIntegral;
+	//星级1
+	std::string mStars1;
+	//星级2
+	std::string mStars2;
+	//星级3
+	std::string mStars3;
+	//段位奖励
+	std::vector<int> mRankRewardId;
+	//段位奖励数量
+	std::vector<int> mRankRewardCount;
+	//海神奖励
+	std::vector<int> mSeaGodRewardId;
+	//海神奖励数量
+	std::vector<int> mSeaGodRewardCount;
+	//礼包ID
+	int mGiftId;
+	//段位资源
+	std::string mResources;
+};
+
+class Fish_FishRankCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_FishRankCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_FishRankCFGData* GetData(int ID);
+	const std::map<int, Fish_FishRankCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_FishRankCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_FishRankCFGData> mMapData;
+};

+ 133 - 0
FishConfig/Code/Client/Fish_FishRankRankingCFG.cpp

@@ -0,0 +1,133 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_FishRankRankingCFG.h"
+std::auto_ptr<Fish_FishRankRankingCFG> Fish_FishRankRankingCFG::msSingleton(nullptr);
+
+int Fish_FishRankRankingCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_FishRankRankingCFGData* Fish_FishRankRankingCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_FishRankRankingCFGData>& Fish_FishRankRankingCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_FishRankRankingCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_FishRankRankingCFG.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)
+	{
+		Fish_FishRankRankingCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mStartRank = element->IntAttribute("StartRank");
+		data.mEndRank = element->IntAttribute("EndRank");
+		{
+			const char* RewardItme = element->Attribute("RewardItme");
+			std::vector<std::string> vecRewardItme;
+			boost::split(vecRewardItme, RewardItme, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRewardItme.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRewardItme[i].c_str(), &temp))
+				{
+					data.mRewardItme.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* RewardCount = element->Attribute("RewardCount");
+			std::vector<std::string> vecRewardCount;
+			boost::split(vecRewardCount, RewardCount, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRewardCount.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRewardCount[i].c_str(), &temp))
+				{
+					data.mRewardCount.push_back(temp);
+				}
+			}
+		}
+		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("Fish_FishRankRankingCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FishRankRankingCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_FishRankRankingCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_FishRankRankingCFG");
+	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");
+		Fish_FishRankRankingCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "StartRank", data.mStartRank);
+		LuaCfgHelper::readInt(L, "EndRank", data.mEndRank);
+		LuaCfgHelper::readVectorInt(L, "RewardItme", data.mRewardItme);
+		LuaCfgHelper::readVectorInt(L, "RewardCount", data.mRewardCount);
+		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("Fish_FishRankRankingCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FishRankRankingCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_FishRankRankingCFG* Fish_FishRankRankingCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_FishRankRankingCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_FishRankRankingCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 33 - 0
FishConfig/Code/Client/Fish_FishRankRankingCFG.h

@@ -0,0 +1,33 @@
+#pragma once
+#include <map>
+struct Fish_FishRankRankingCFGData
+{
+	//긍뵀
+	int mID;
+	//역迦탤츰
+	int mStartRank;
+	//써監탤츰
+	int mEndRank;
+	//쉽쟨돛야
+	std::vector<int> mRewardItme;
+	//쉽쟨鑒좆
+	std::vector<int> mRewardCount;
+};
+
+class Fish_FishRankRankingCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_FishRankRankingCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_FishRankRankingCFGData* GetData(int ID);
+	const std::map<int, Fish_FishRankRankingCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_FishRankRankingCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_FishRankRankingCFGData> mMapData;
+};

+ 167 - 0
FishConfig/Code/Client/Fish_FreeLotteryCFG.cpp

@@ -0,0 +1,167 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_FreeLotteryCFG.h"
+std::auto_ptr<Fish_FreeLotteryCFG> Fish_FreeLotteryCFG::msSingleton(nullptr);
+
+int Fish_FreeLotteryCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_FreeLotteryCFGData* Fish_FreeLotteryCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_FreeLotteryCFGData>& Fish_FreeLotteryCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_FreeLotteryCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_FreeLotteryCFG.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)
+	{
+		Fish_FreeLotteryCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mInfo = element->Attribute("Info");
+		data.mBaseGold = element->IntAttribute("BaseGold");
+		data.mLotteryValue = element->IntAttribute("LotteryValue");
+		{
+			const char* AwardItem1 = element->Attribute("AwardItem1");
+			std::vector<std::string> vecAwardItem1;
+			boost::split(vecAwardItem1, AwardItem1, boost::is_any_of(","));
+			for (unsigned int i = 0; i < vecAwardItem1.size(); i++)
+			{
+				data.mAwardItem1.push_back(vecAwardItem1[i]);
+			}
+		}
+		{
+			const char* AwardItem2 = element->Attribute("AwardItem2");
+			std::vector<std::string> vecAwardItem2;
+			boost::split(vecAwardItem2, AwardItem2, boost::is_any_of(","));
+			for (unsigned int i = 0; i < vecAwardItem2.size(); i++)
+			{
+				data.mAwardItem2.push_back(vecAwardItem2[i]);
+			}
+		}
+		{
+			const char* AwardItem3 = element->Attribute("AwardItem3");
+			std::vector<std::string> vecAwardItem3;
+			boost::split(vecAwardItem3, AwardItem3, boost::is_any_of(","));
+			for (unsigned int i = 0; i < vecAwardItem3.size(); i++)
+			{
+				data.mAwardItem3.push_back(vecAwardItem3[i]);
+			}
+		}
+		{
+			const char* AwardItem4 = element->Attribute("AwardItem4");
+			std::vector<std::string> vecAwardItem4;
+			boost::split(vecAwardItem4, AwardItem4, boost::is_any_of(","));
+			for (unsigned int i = 0; i < vecAwardItem4.size(); i++)
+			{
+				data.mAwardItem4.push_back(vecAwardItem4[i]);
+			}
+		}
+		{
+			const char* AwardItem5 = element->Attribute("AwardItem5");
+			std::vector<std::string> vecAwardItem5;
+			boost::split(vecAwardItem5, AwardItem5, boost::is_any_of(","));
+			for (unsigned int i = 0; i < vecAwardItem5.size(); i++)
+			{
+				data.mAwardItem5.push_back(vecAwardItem5[i]);
+			}
+		}
+		{
+			const char* AwardItem6 = element->Attribute("AwardItem6");
+			std::vector<std::string> vecAwardItem6;
+			boost::split(vecAwardItem6, AwardItem6, boost::is_any_of(","));
+			for (unsigned int i = 0; i < vecAwardItem6.size(); i++)
+			{
+				data.mAwardItem6.push_back(vecAwardItem6[i]);
+			}
+		}
+		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("Fish_FreeLotteryCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FreeLotteryCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_FreeLotteryCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_FreeLotteryCFG");
+	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");
+		Fish_FreeLotteryCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Info", data.mInfo);
+		LuaCfgHelper::readInt(L, "BaseGold", data.mBaseGold);
+		LuaCfgHelper::readInt(L, "LotteryValue", data.mLotteryValue);
+		LuaCfgHelper::readVectorString(L, "AwardItem1", data.mAwardItem1);
+		LuaCfgHelper::readVectorString(L, "AwardItem2", data.mAwardItem2);
+		LuaCfgHelper::readVectorString(L, "AwardItem3", data.mAwardItem3);
+		LuaCfgHelper::readVectorString(L, "AwardItem4", data.mAwardItem4);
+		LuaCfgHelper::readVectorString(L, "AwardItem5", data.mAwardItem5);
+		LuaCfgHelper::readVectorString(L, "AwardItem6", data.mAwardItem6);
+		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("Fish_FreeLotteryCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_FreeLotteryCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_FreeLotteryCFG* Fish_FreeLotteryCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_FreeLotteryCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_FreeLotteryCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 43 - 0
FishConfig/Code/Client/Fish_FreeLotteryCFG.h

@@ -0,0 +1,43 @@
+#pragma once
+#include <map>
+struct Fish_FreeLotteryCFGData
+{
+	//key
+	int mID;
+	//说明
+	std::string mInfo;
+	//最小奖池
+	int mBaseGold;
+	//可抽彩券价值
+	int mLotteryValue;
+	//奖励物品1
+	std::vector<std::string> mAwardItem1;
+	//奖励物品2
+	std::vector<std::string> mAwardItem2;
+	//奖励物品3
+	std::vector<std::string> mAwardItem3;
+	//奖励物品4
+	std::vector<std::string> mAwardItem4;
+	//奖励物品5
+	std::vector<std::string> mAwardItem5;
+	//奖励物品6
+	std::vector<std::string> mAwardItem6;
+};
+
+class Fish_FreeLotteryCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_FreeLotteryCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_FreeLotteryCFGData* GetData(int ID);
+	const std::map<int, Fish_FreeLotteryCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_FreeLotteryCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_FreeLotteryCFGData> mMapData;
+};

+ 119 - 0
FishConfig/Code/Client/Fish_GeneratorCFG.cpp

@@ -0,0 +1,119 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GeneratorCFG.h"
+std::auto_ptr<Fish_GeneratorCFG> Fish_GeneratorCFG::msSingleton(nullptr);
+
+int Fish_GeneratorCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GeneratorCFGData* Fish_GeneratorCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GeneratorCFGData>& Fish_GeneratorCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GeneratorCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GeneratorCFG.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)
+	{
+		Fish_GeneratorCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mType = element->IntAttribute("Type");
+		{
+			const char* Param = element->Attribute("Param");
+			std::vector<std::string> vecParam;
+			boost::split(vecParam, Param, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecParam.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecParam[i].c_str(), &temp))
+				{
+					data.mParam.push_back(temp);
+				}
+			}
+		}
+		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("Fish_GeneratorCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GeneratorCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GeneratorCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GeneratorCFG");
+	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");
+		Fish_GeneratorCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readInt(L, "Type", data.mType);
+		LuaCfgHelper::readVectorInt(L, "Param", data.mParam);
+		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("Fish_GeneratorCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GeneratorCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GeneratorCFG* Fish_GeneratorCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GeneratorCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GeneratorCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 31 - 0
FishConfig/Code/Client/Fish_GeneratorCFG.h

@@ -0,0 +1,31 @@
+#pragma once
+#include <map>
+struct Fish_GeneratorCFGData
+{
+	//key
+	int mID;
+	//ÓãÕóÃû×Ö
+	std::string mName;
+	//ÓãÕóÀàÐÍ
+	int mType;
+	//²ÎÊý
+	std::vector<int> mParam;
+};
+
+class Fish_GeneratorCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_GeneratorCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_GeneratorCFGData* GetData(int ID);
+	const std::map<int, Fish_GeneratorCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GeneratorCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GeneratorCFGData> mMapData;
+};

+ 109 - 0
FishConfig/Code/Client/Fish_GetTelephoneBill.cpp

@@ -0,0 +1,109 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GetTelephoneBill.h"
+std::auto_ptr<Fish_GetTelephoneBill> Fish_GetTelephoneBill::msSingleton(nullptr);
+
+int Fish_GetTelephoneBill::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GetTelephoneBillData* Fish_GetTelephoneBill::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GetTelephoneBillData>& Fish_GetTelephoneBill::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GetTelephoneBill::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GetTelephoneBill.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)
+	{
+		Fish_GetTelephoneBillData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mDesc = element->Attribute("Desc");
+		data.mBookIcon = element->Attribute("BookIcon");
+		data.mGoTo = element->IntAttribute("GoTo");
+		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("Fish_GetTelephoneBill Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GetTelephoneBill::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GetTelephoneBill");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GetTelephoneBill");
+	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");
+		Fish_GetTelephoneBillData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readString(L, "Desc", data.mDesc);
+		LuaCfgHelper::readString(L, "BookIcon", data.mBookIcon);
+		LuaCfgHelper::readInt(L, "GoTo", data.mGoTo);
+		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("Fish_GetTelephoneBill Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GetTelephoneBill::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GetTelephoneBill* Fish_GetTelephoneBill::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GetTelephoneBill());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GetTelephoneBill::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 33 - 0
FishConfig/Code/Client/Fish_GetTelephoneBill.h

@@ -0,0 +1,33 @@
+#pragma once
+#include <map>
+struct Fish_GetTelephoneBillData
+{
+	//key
+	int mID;
+	//Ãû×Ö
+	std::string mName;
+	//ÃèÊö
+	std::string mDesc;
+	//ͼ¼øÍ¼±ê
+	std::string mBookIcon;
+	//ǰÍù
+	int mGoTo;
+};
+
+class Fish_GetTelephoneBill
+{
+public:
+private:
+	static std::auto_ptr<Fish_GetTelephoneBill> msSingleton;
+public:
+	int GetCount();
+	const Fish_GetTelephoneBillData* GetData(int ID);
+	const std::map<int, Fish_GetTelephoneBillData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GetTelephoneBill* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GetTelephoneBillData> mMapData;
+};

+ 191 - 0
FishConfig/Code/Client/Fish_GiantSharkBomber.cpp

@@ -0,0 +1,191 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GiantSharkBomber.h"
+std::auto_ptr<Fish_GiantSharkBomber> Fish_GiantSharkBomber::msSingleton(nullptr);
+
+int Fish_GiantSharkBomber::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GiantSharkBomberData* Fish_GiantSharkBomber::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GiantSharkBomberData>& Fish_GiantSharkBomber::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GiantSharkBomber::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GiantSharkBomber.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)
+	{
+		Fish_GiantSharkBomberData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mConsumeEnergy = element->IntAttribute("ConsumeEnergy");
+		data.mGoldBombardment = element->IntAttribute("GoldBombardment");
+		{
+			const char* GoldWeight = element->Attribute("GoldWeight");
+			std::vector<std::string> vecGoldWeight;
+			boost::split(vecGoldWeight, GoldWeight, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecGoldWeight.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecGoldWeight[i].c_str(), &temp))
+				{
+					data.mGoldWeight.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* GoldFloat = element->Attribute("GoldFloat");
+			std::vector<std::string> vecGoldFloat;
+			boost::split(vecGoldFloat, GoldFloat, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecGoldFloat.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecGoldFloat[i].c_str(), &temp))
+				{
+					data.mGoldFloat.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* PointWeight = element->Attribute("PointWeight");
+			std::vector<std::string> vecPointWeight;
+			boost::split(vecPointWeight, PointWeight, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecPointWeight.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecPointWeight[i].c_str(), &temp))
+				{
+					data.mPointWeight.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* PointFloat = element->Attribute("PointFloat");
+			std::vector<std::string> vecPointFloat;
+			boost::split(vecPointFloat, PointFloat, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecPointFloat.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecPointFloat[i].c_str(), &temp))
+				{
+					data.mPointFloat.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* GiftPointWeight = element->Attribute("GiftPointWeight");
+			std::vector<std::string> vecGiftPointWeight;
+			boost::split(vecGiftPointWeight, GiftPointWeight, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecGiftPointWeight.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecGiftPointWeight[i].c_str(), &temp))
+				{
+					data.mGiftPointWeight.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* GiftPointFloat = element->Attribute("GiftPointFloat");
+			std::vector<std::string> vecGiftPointFloat;
+			boost::split(vecGiftPointFloat, GiftPointFloat, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecGiftPointFloat.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecGiftPointFloat[i].c_str(), &temp))
+				{
+					data.mGiftPointFloat.push_back(temp);
+				}
+			}
+		}
+		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("Fish_GiantSharkBomber Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkBomber::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GiantSharkBomber");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GiantSharkBomber");
+	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");
+		Fish_GiantSharkBomberData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readInt(L, "ConsumeEnergy", data.mConsumeEnergy);
+		LuaCfgHelper::readInt(L, "GoldBombardment", data.mGoldBombardment);
+		LuaCfgHelper::readVectorInt(L, "GoldWeight", data.mGoldWeight);
+		LuaCfgHelper::readVectorInt(L, "GoldFloat", data.mGoldFloat);
+		LuaCfgHelper::readVectorInt(L, "PointWeight", data.mPointWeight);
+		LuaCfgHelper::readVectorInt(L, "PointFloat", data.mPointFloat);
+		LuaCfgHelper::readVectorInt(L, "GiftPointWeight", data.mGiftPointWeight);
+		LuaCfgHelper::readVectorInt(L, "GiftPointFloat", data.mGiftPointFloat);
+		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("Fish_GiantSharkBomber Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkBomber::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GiantSharkBomber* Fish_GiantSharkBomber::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GiantSharkBomber());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GiantSharkBomber::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 43 - 0
FishConfig/Code/Client/Fish_GiantSharkBomber.h

@@ -0,0 +1,43 @@
+#pragma once
+#include <map>
+struct Fish_GiantSharkBomberData
+{
+	//ID
+	int mID;
+	//名称
+	std::string mName;
+	//消耗能量数
+	int mConsumeEnergy;
+	//金币轰炸消耗金币
+	int mGoldBombardment;
+	//权重
+	std::vector<int> mGoldWeight;
+	//金币浮动
+	std::vector<int> mGoldFloat;
+	//积分权重
+	std::vector<int> mPointWeight;
+	//普通积分浮动
+	std::vector<int> mPointFloat;
+	//积分权重
+	std::vector<int> mGiftPointWeight;
+	//礼包积分浮动
+	std::vector<int> mGiftPointFloat;
+};
+
+class Fish_GiantSharkBomber
+{
+public:
+private:
+	static std::auto_ptr<Fish_GiantSharkBomber> msSingleton;
+public:
+	int GetCount();
+	const Fish_GiantSharkBomberData* GetData(int ID);
+	const std::map<int, Fish_GiantSharkBomberData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GiantSharkBomber* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GiantSharkBomberData> mMapData;
+};

+ 109 - 0
FishConfig/Code/Client/Fish_GiantSharkCardReward.cpp

@@ -0,0 +1,109 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GiantSharkCardReward.h"
+std::auto_ptr<Fish_GiantSharkCardReward> Fish_GiantSharkCardReward::msSingleton(nullptr);
+
+int Fish_GiantSharkCardReward::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GiantSharkCardRewardData* Fish_GiantSharkCardReward::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GiantSharkCardRewardData>& Fish_GiantSharkCardReward::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GiantSharkCardReward::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GiantSharkCardReward.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)
+	{
+		Fish_GiantSharkCardRewardData data;
+		data.mID = element->IntAttribute("ID");
+		data.mKeyType = element->IntAttribute("KeyType");
+		data.mMinGold = element->IntAttribute("MinGold");
+		data.mMaxGold = element->IntAttribute("MaxGold");
+		data.mWeight = element->IntAttribute("Weight");
+		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("Fish_GiantSharkCardReward Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkCardReward::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GiantSharkCardReward");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GiantSharkCardReward");
+	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");
+		Fish_GiantSharkCardRewardData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "KeyType", data.mKeyType);
+		LuaCfgHelper::readInt(L, "MinGold", data.mMinGold);
+		LuaCfgHelper::readInt(L, "MaxGold", data.mMaxGold);
+		LuaCfgHelper::readInt(L, "Weight", data.mWeight);
+		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("Fish_GiantSharkCardReward Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkCardReward::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GiantSharkCardReward* Fish_GiantSharkCardReward::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GiantSharkCardReward());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GiantSharkCardReward::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 33 - 0
FishConfig/Code/Client/Fish_GiantSharkCardReward.h

@@ -0,0 +1,33 @@
+#pragma once
+#include <map>
+struct Fish_GiantSharkCardRewardData
+{
+	//ID
+	int mID;
+	//钥匙类型
+	int mKeyType;
+	//最低金币数量
+	int mMinGold;
+	//最高金币数
+	int mMaxGold;
+	//权重
+	int mWeight;
+};
+
+class Fish_GiantSharkCardReward
+{
+public:
+private:
+	static std::auto_ptr<Fish_GiantSharkCardReward> msSingleton;
+public:
+	int GetCount();
+	const Fish_GiantSharkCardRewardData* GetData(int ID);
+	const std::map<int, Fish_GiantSharkCardRewardData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GiantSharkCardReward* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GiantSharkCardRewardData> mMapData;
+};

+ 119 - 0
FishConfig/Code/Client/Fish_GiantSharkImmediateDecapitation.cpp

@@ -0,0 +1,119 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GiantSharkImmediateDecapitation.h"
+std::auto_ptr<Fish_GiantSharkImmediateDecapitation> Fish_GiantSharkImmediateDecapitation::msSingleton(nullptr);
+
+int Fish_GiantSharkImmediateDecapitation::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GiantSharkImmediateDecapitationData* Fish_GiantSharkImmediateDecapitation::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GiantSharkImmediateDecapitationData>& Fish_GiantSharkImmediateDecapitation::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GiantSharkImmediateDecapitation::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GiantSharkImmediateDecapitation.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)
+	{
+		Fish_GiantSharkImmediateDecapitationData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mMinimumIntegral = element->IntAttribute("MinimumIntegral");
+		data.mMaximumIntegral = element->IntAttribute("MaximumIntegral");
+		data.mDismantlingWeight = element->IntAttribute("DismantlingWeight");
+		data.mLeopardWeight = element->IntAttribute("LeopardWeight");
+		data.mGold = element->IntAttribute("Gold");
+		data.mAdditionalRewards = element->IntAttribute("AdditionalRewards");
+		data.mRewardCard = element->IntAttribute("RewardCard");
+		data.mDisplayCardType = element->Attribute("DisplayCardType");
+		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("Fish_GiantSharkImmediateDecapitation Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkImmediateDecapitation::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GiantSharkImmediateDecapitation");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GiantSharkImmediateDecapitation");
+	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");
+		Fish_GiantSharkImmediateDecapitationData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readInt(L, "MinimumIntegral", data.mMinimumIntegral);
+		LuaCfgHelper::readInt(L, "MaximumIntegral", data.mMaximumIntegral);
+		LuaCfgHelper::readInt(L, "DismantlingWeight", data.mDismantlingWeight);
+		LuaCfgHelper::readInt(L, "LeopardWeight", data.mLeopardWeight);
+		LuaCfgHelper::readInt(L, "Gold", data.mGold);
+		LuaCfgHelper::readInt(L, "AdditionalRewards", data.mAdditionalRewards);
+		LuaCfgHelper::readInt(L, "RewardCard", data.mRewardCard);
+		LuaCfgHelper::readString(L, "DisplayCardType", data.mDisplayCardType);
+		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("Fish_GiantSharkImmediateDecapitation Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkImmediateDecapitation::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GiantSharkImmediateDecapitation* Fish_GiantSharkImmediateDecapitation::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GiantSharkImmediateDecapitation());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GiantSharkImmediateDecapitation::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 43 - 0
FishConfig/Code/Client/Fish_GiantSharkImmediateDecapitation.h

@@ -0,0 +1,43 @@
+#pragma once
+#include <map>
+struct Fish_GiantSharkImmediateDecapitationData
+{
+	//ID
+	int mID;
+	//牌型名
+	std::string mName;
+	//最低牌型积分
+	int mMinimumIntegral;
+	//最高牌型积分
+	int mMaximumIntegral;
+	//前6次拆解权重
+	int mDismantlingWeight;
+	//第7次拆解权重
+	int mLeopardWeight;
+	//基础金币
+	int mGold;
+	//额外奖励物品ID
+	int mAdditionalRewards;
+	//奖励数量
+	int mRewardCard;
+	//显示牌型
+	std::string mDisplayCardType;
+};
+
+class Fish_GiantSharkImmediateDecapitation
+{
+public:
+private:
+	static std::auto_ptr<Fish_GiantSharkImmediateDecapitation> msSingleton;
+public:
+	int GetCount();
+	const Fish_GiantSharkImmediateDecapitationData* GetData(int ID);
+	const std::map<int, Fish_GiantSharkImmediateDecapitationData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GiantSharkImmediateDecapitation* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GiantSharkImmediateDecapitationData> mMapData;
+};

+ 141 - 0
FishConfig/Code/Client/Fish_GiantSharkIntegral.cpp

@@ -0,0 +1,141 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GiantSharkIntegral.h"
+std::auto_ptr<Fish_GiantSharkIntegral> Fish_GiantSharkIntegral::msSingleton(nullptr);
+
+int Fish_GiantSharkIntegral::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GiantSharkIntegralData* Fish_GiantSharkIntegral::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GiantSharkIntegralData>& Fish_GiantSharkIntegral::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GiantSharkIntegral::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GiantSharkIntegral.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)
+	{
+		Fish_GiantSharkIntegralData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mMinimumIntegral = element->IntAttribute("MinimumIntegral");
+		data.mMaximumIntegral = element->IntAttribute("MaximumIntegral");
+		data.mGold = element->IntAttribute("Gold");
+		data.mAdditionalRewards = element->IntAttribute("AdditionalRewards");
+		data.mRewardCard = element->IntAttribute("RewardCard");
+		data.mDisplaySort = element->IntAttribute("DisplaySort");
+		data.mDisplayCardType = element->Attribute("DisplayCardType");
+		data.mNewGiftWeight = element->IntAttribute("NewGiftWeight");
+		data.mNewWeight = element->IntAttribute("NewWeight");
+		data.mGiftWeight = element->IntAttribute("GiftWeight");
+		data.mComWeight = element->IntAttribute("ComWeight");
+		data.mNorWeight = element->IntAttribute("NorWeight");
+		data.mOnListWeight = element->IntAttribute("OnListWeight");
+		data.mNewGiftWeight1 = element->IntAttribute("NewGiftWeight1");
+		data.mNewWeight1 = element->IntAttribute("NewWeight1");
+		data.mGiftWeight1 = element->IntAttribute("GiftWeight1");
+		data.mComWeight1 = element->IntAttribute("ComWeight1");
+		data.mNorWeight1 = element->IntAttribute("NorWeight1");
+		data.mOnListWeight1 = element->IntAttribute("OnListWeight1");
+		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("Fish_GiantSharkIntegral Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkIntegral::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GiantSharkIntegral");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GiantSharkIntegral");
+	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");
+		Fish_GiantSharkIntegralData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readInt(L, "MinimumIntegral", data.mMinimumIntegral);
+		LuaCfgHelper::readInt(L, "MaximumIntegral", data.mMaximumIntegral);
+		LuaCfgHelper::readInt(L, "Gold", data.mGold);
+		LuaCfgHelper::readInt(L, "AdditionalRewards", data.mAdditionalRewards);
+		LuaCfgHelper::readInt(L, "RewardCard", data.mRewardCard);
+		LuaCfgHelper::readInt(L, "DisplaySort", data.mDisplaySort);
+		LuaCfgHelper::readString(L, "DisplayCardType", data.mDisplayCardType);
+		LuaCfgHelper::readInt(L, "NewGiftWeight", data.mNewGiftWeight);
+		LuaCfgHelper::readInt(L, "NewWeight", data.mNewWeight);
+		LuaCfgHelper::readInt(L, "GiftWeight", data.mGiftWeight);
+		LuaCfgHelper::readInt(L, "ComWeight", data.mComWeight);
+		LuaCfgHelper::readInt(L, "NorWeight", data.mNorWeight);
+		LuaCfgHelper::readInt(L, "OnListWeight", data.mOnListWeight);
+		LuaCfgHelper::readInt(L, "NewGiftWeight1", data.mNewGiftWeight1);
+		LuaCfgHelper::readInt(L, "NewWeight1", data.mNewWeight1);
+		LuaCfgHelper::readInt(L, "GiftWeight1", data.mGiftWeight1);
+		LuaCfgHelper::readInt(L, "ComWeight1", data.mComWeight1);
+		LuaCfgHelper::readInt(L, "NorWeight1", data.mNorWeight1);
+		LuaCfgHelper::readInt(L, "OnListWeight1", data.mOnListWeight1);
+		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("Fish_GiantSharkIntegral Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkIntegral::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GiantSharkIntegral* Fish_GiantSharkIntegral::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GiantSharkIntegral());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GiantSharkIntegral::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 65 - 0
FishConfig/Code/Client/Fish_GiantSharkIntegral.h

@@ -0,0 +1,65 @@
+#pragma once
+#include <map>
+struct Fish_GiantSharkIntegralData
+{
+	//ID
+	int mID;
+	//牌型名
+	std::string mName;
+	//最低牌型积分
+	int mMinimumIntegral;
+	//最高牌型积分
+	int mMaximumIntegral;
+	//基础金币
+	int mGold;
+	//额外奖励物品ID
+	int mAdditionalRewards;
+	//奖励数量
+	int mRewardCard;
+	//显示排序
+	int mDisplaySort;
+	//显示牌型
+	std::string mDisplayCardType;
+	//新手礼包积分(海豹)
+	int mNewGiftWeight;
+	//新手权重(海豹)
+	int mNewWeight;
+	//礼包权重(海豹)
+	int mGiftWeight;
+	//消耗权重(海豹)
+	int mComWeight;
+	//普通权重(海豹)
+	int mNorWeight;
+	//不上榜权重(海豹)
+	int mOnListWeight;
+	//新手礼包权重(巨蟹)
+	int mNewGiftWeight1;
+	//新手权重(巨蟹)
+	int mNewWeight1;
+	//礼包权重(巨蟹)
+	int mGiftWeight1;
+	//消耗权重(巨蟹)
+	int mComWeight1;
+	//普通权重(巨蟹)
+	int mNorWeight1;
+	//不上榜权重(巨蟹)
+	int mOnListWeight1;
+};
+
+class Fish_GiantSharkIntegral
+{
+public:
+private:
+	static std::auto_ptr<Fish_GiantSharkIntegral> msSingleton;
+public:
+	int GetCount();
+	const Fish_GiantSharkIntegralData* GetData(int ID);
+	const std::map<int, Fish_GiantSharkIntegralData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GiantSharkIntegral* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GiantSharkIntegralData> mMapData;
+};

+ 123 - 0
FishConfig/Code/Client/Fish_GiantSharkLevel.cpp

@@ -0,0 +1,123 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GiantSharkLevel.h"
+std::auto_ptr<Fish_GiantSharkLevel> Fish_GiantSharkLevel::msSingleton(nullptr);
+
+int Fish_GiantSharkLevel::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GiantSharkLevelData* Fish_GiantSharkLevel::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GiantSharkLevelData>& Fish_GiantSharkLevel::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GiantSharkLevel::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GiantSharkLevel.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)
+	{
+		Fish_GiantSharkLevelData data;
+		data.mID = element->IntAttribute("ID");
+		{
+			const char* Level = element->Attribute("Level");
+			std::vector<std::string> vecLevel;
+			boost::split(vecLevel, Level, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecLevel.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecLevel[i].c_str(), &temp))
+				{
+					data.mLevel.push_back(temp);
+				}
+			}
+		}
+		data.mBasicRewards = element->IntAttribute("BasicRewards");
+		data.mBrandProbability = element->IntAttribute("BrandProbability");
+		data.mNumberCards = element->IntAttribute("NumberCards");
+		data.mIntegralAddition = element->IntAttribute("IntegralAddition");
+		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("Fish_GiantSharkLevel Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkLevel::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GiantSharkLevel");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GiantSharkLevel");
+	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");
+		Fish_GiantSharkLevelData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readVectorInt(L, "Level", data.mLevel);
+		LuaCfgHelper::readInt(L, "BasicRewards", data.mBasicRewards);
+		LuaCfgHelper::readInt(L, "BrandProbability", data.mBrandProbability);
+		LuaCfgHelper::readInt(L, "NumberCards", data.mNumberCards);
+		LuaCfgHelper::readInt(L, "IntegralAddition", data.mIntegralAddition);
+		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("Fish_GiantSharkLevel Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkLevel::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GiantSharkLevel* Fish_GiantSharkLevel::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GiantSharkLevel());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GiantSharkLevel::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 35 - 0
FishConfig/Code/Client/Fish_GiantSharkLevel.h

@@ -0,0 +1,35 @@
+#pragma once
+#include <map>
+struct Fish_GiantSharkLevelData
+{
+	//ID
+	int mID;
+	//炮倍区间
+	std::vector<int> mLevel;
+	//玩家炮倍金币奖励基础倍率
+	int mBasicRewards;
+	//牌型概率
+	int mBrandProbability;
+	//牌型数量
+	int mNumberCards;
+	//炮倍对牌型积分加成
+	int mIntegralAddition;
+};
+
+class Fish_GiantSharkLevel
+{
+public:
+private:
+	static std::auto_ptr<Fish_GiantSharkLevel> msSingleton;
+public:
+	int GetCount();
+	const Fish_GiantSharkLevelData* GetData(int ID);
+	const std::map<int, Fish_GiantSharkLevelData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GiantSharkLevel* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GiantSharkLevelData> mMapData;
+};

+ 121 - 0
FishConfig/Code/Client/Fish_GiantSharkRanking.cpp

@@ -0,0 +1,121 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GiantSharkRanking.h"
+std::auto_ptr<Fish_GiantSharkRanking> Fish_GiantSharkRanking::msSingleton(nullptr);
+
+int Fish_GiantSharkRanking::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GiantSharkRankingData* Fish_GiantSharkRanking::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GiantSharkRankingData>& Fish_GiantSharkRanking::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GiantSharkRanking::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GiantSharkRanking.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)
+	{
+		Fish_GiantSharkRankingData data;
+		data.mID = element->IntAttribute("ID");
+		data.mStartRank = element->IntAttribute("StartRank");
+		data.mEndRank = element->IntAttribute("EndRank");
+		{
+			const char* RewardList = element->Attribute("RewardList");
+			std::vector<std::string> vecRewardList;
+			boost::split(vecRewardList, RewardList, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRewardList.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRewardList[i].c_str(), &temp))
+				{
+					data.mRewardList.push_back(temp);
+				}
+			}
+		}
+		data.mLimit = element->IntAttribute("Limit");
+		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("Fish_GiantSharkRanking Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkRanking::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GiantSharkRanking");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GiantSharkRanking");
+	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");
+		Fish_GiantSharkRankingData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "StartRank", data.mStartRank);
+		LuaCfgHelper::readInt(L, "EndRank", data.mEndRank);
+		LuaCfgHelper::readVectorInt(L, "RewardList", data.mRewardList);
+		LuaCfgHelper::readInt(L, "Limit", data.mLimit);
+		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("Fish_GiantSharkRanking Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiantSharkRanking::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GiantSharkRanking* Fish_GiantSharkRanking::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GiantSharkRanking());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GiantSharkRanking::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 33 - 0
FishConfig/Code/Client/Fish_GiantSharkRanking.h

@@ -0,0 +1,33 @@
+#pragma once
+#include <map>
+struct Fish_GiantSharkRankingData
+{
+	//ID
+	int mID;
+	//开始排名
+	int mStartRank;
+	//结束排名
+	int mEndRank;
+	//奖励道具列表,填写M_ItemCFG中的道具ID
+	std::vector<int> mRewardList;
+	//上榜限制
+	int mLimit;
+};
+
+class Fish_GiantSharkRanking
+{
+public:
+private:
+	static std::auto_ptr<Fish_GiantSharkRanking> msSingleton;
+public:
+	int GetCount();
+	const Fish_GiantSharkRankingData* GetData(int ID);
+	const std::map<int, Fish_GiantSharkRankingData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GiantSharkRanking* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GiantSharkRankingData> mMapData;
+};

+ 105 - 0
FishConfig/Code/Client/Fish_GiftCFG.cpp

@@ -0,0 +1,105 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GiftCFG.h"
+std::auto_ptr<Fish_GiftCFG> Fish_GiftCFG::msSingleton(nullptr);
+
+int Fish_GiftCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GiftCFGData* Fish_GiftCFG::GetData(int Turret)
+{
+	auto it = mMapData.find(Turret);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GiftCFGData>& Fish_GiftCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GiftCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GiftCFG.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)
+	{
+		Fish_GiftCFGData data;
+		data.mTurret = element->IntAttribute("Turret");
+		data.mItemID = element->IntAttribute("ItemID");
+		data.mItemCount = element->IntAttribute("ItemCount");
+		if (mMapData.find(data.mTurret) != mMapData.end())std::cout <<"data refind:" << data.mTurret << std::endl;
+		CCASSERT(mMapData.find(data.mTurret) == mMapData.end(), "data.mTurret is exists");
+		mMapData.insert(std::make_pair(data.mTurret, data));
+		element = element->NextSiblingElement();
+	}
+	CCLOG("Fish_GiftCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiftCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GiftCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GiftCFG");
+	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");
+		Fish_GiftCFGData data;
+		LuaCfgHelper::readInt(L, "Turret", data.mTurret);
+		LuaCfgHelper::readInt(L, "ItemID", data.mItemID);
+		LuaCfgHelper::readInt(L, "ItemCount", data.mItemCount);
+		if (mMapData.find(data.mTurret) != mMapData.end())std::cout <<"data refind:" << data.mTurret << std::endl;
+		CCASSERT(mMapData.find(data.mTurret) == mMapData.end(), "data.mTurret is exists");
+		mMapData.insert(std::make_pair(data.mTurret, data));
+		lua_pop(L, 1);
+	}
+	lua_settop(L, 0);
+	CCLOG("Fish_GiftCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GiftCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GiftCFG* Fish_GiftCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GiftCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GiftCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 29 - 0
FishConfig/Code/Client/Fish_GiftCFG.h

@@ -0,0 +1,29 @@
+#pragma once
+#include <map>
+struct Fish_GiftCFGData
+{
+	//ÅŲ́ÀàÐÍ
+	int mTurret;
+	//ÎïÆ·ID
+	int mItemID;
+	//ÎïÆ·ÊýÁ¿
+	int mItemCount;
+};
+
+class Fish_GiftCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_GiftCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_GiftCFGData* GetData(int Turret);
+	const std::map<int, Fish_GiftCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GiftCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GiftCFGData> mMapData;
+};

+ 111 - 0
FishConfig/Code/Client/Fish_GoldenTurtleFishCFG.cpp

@@ -0,0 +1,111 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GoldenTurtleFishCFG.h"
+std::auto_ptr<Fish_GoldenTurtleFishCFG> Fish_GoldenTurtleFishCFG::msSingleton(nullptr);
+
+int Fish_GoldenTurtleFishCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GoldenTurtleFishCFGData* Fish_GoldenTurtleFishCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GoldenTurtleFishCFGData>& Fish_GoldenTurtleFishCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GoldenTurtleFishCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GoldenTurtleFishCFG.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)
+	{
+		Fish_GoldenTurtleFishCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mFishId = element->IntAttribute("FishId");
+		data.mMinimumScore = element->IntAttribute("MinimumScore");
+		data.mMaximumScore = element->IntAttribute("MaximumScore");
+		data.mTelephoneScore = element->IntAttribute("TelephoneScore");
+		data.mweight = element->IntAttribute("weight");
+		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("Fish_GoldenTurtleFishCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GoldenTurtleFishCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GoldenTurtleFishCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GoldenTurtleFishCFG");
+	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");
+		Fish_GoldenTurtleFishCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "FishId", data.mFishId);
+		LuaCfgHelper::readInt(L, "MinimumScore", data.mMinimumScore);
+		LuaCfgHelper::readInt(L, "MaximumScore", data.mMaximumScore);
+		LuaCfgHelper::readInt(L, "TelephoneScore", data.mTelephoneScore);
+		LuaCfgHelper::readInt(L, "weight", data.mweight);
+		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("Fish_GoldenTurtleFishCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GoldenTurtleFishCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GoldenTurtleFishCFG* Fish_GoldenTurtleFishCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GoldenTurtleFishCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GoldenTurtleFishCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 35 - 0
FishConfig/Code/Client/Fish_GoldenTurtleFishCFG.h

@@ -0,0 +1,35 @@
+#pragma once
+#include <map>
+struct Fish_GoldenTurtleFishCFGData
+{
+	//编号
+	int mID;
+	//鱼ID
+	int mFishId;
+	//最小分值
+	int mMinimumScore;
+	//最大分值
+	int mMaximumScore;
+	//话费分值
+	int mTelephoneScore;
+	//权重
+	int mweight;
+};
+
+class Fish_GoldenTurtleFishCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_GoldenTurtleFishCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_GoldenTurtleFishCFGData* GetData(int ID);
+	const std::map<int, Fish_GoldenTurtleFishCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GoldenTurtleFishCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GoldenTurtleFishCFGData> mMapData;
+};

+ 109 - 0
FishConfig/Code/Client/Fish_GoldenTurtleHitCFG.cpp

@@ -0,0 +1,109 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GoldenTurtleHitCFG.h"
+std::auto_ptr<Fish_GoldenTurtleHitCFG> Fish_GoldenTurtleHitCFG::msSingleton(nullptr);
+
+int Fish_GoldenTurtleHitCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GoldenTurtleHitCFGData* Fish_GoldenTurtleHitCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GoldenTurtleHitCFGData>& Fish_GoldenTurtleHitCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GoldenTurtleHitCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GoldenTurtleHitCFG.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)
+	{
+		Fish_GoldenTurtleHitCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mType = element->IntAttribute("Type");
+		data.mMinimumvalue = element->IntAttribute("Minimumvalue");
+		data.mMaximumvalue = element->IntAttribute("Maximumvalue");
+		data.mCoefficient = element->IntAttribute("Coefficient");
+		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("Fish_GoldenTurtleHitCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GoldenTurtleHitCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GoldenTurtleHitCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GoldenTurtleHitCFG");
+	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");
+		Fish_GoldenTurtleHitCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "Type", data.mType);
+		LuaCfgHelper::readInt(L, "Minimumvalue", data.mMinimumvalue);
+		LuaCfgHelper::readInt(L, "Maximumvalue", data.mMaximumvalue);
+		LuaCfgHelper::readInt(L, "Coefficient", data.mCoefficient);
+		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("Fish_GoldenTurtleHitCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GoldenTurtleHitCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GoldenTurtleHitCFG* Fish_GoldenTurtleHitCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GoldenTurtleHitCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GoldenTurtleHitCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 33 - 0
FishConfig/Code/Client/Fish_GoldenTurtleHitCFG.h

@@ -0,0 +1,33 @@
+#pragma once
+#include <map>
+struct Fish_GoldenTurtleHitCFGData
+{
+	//编号
+	int mID;
+	//类型
+	int mType;
+	//最小值
+	int mMinimumvalue;
+	//最大值
+	int mMaximumvalue;
+	//系数(0-1)
+	int mCoefficient;
+};
+
+class Fish_GoldenTurtleHitCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_GoldenTurtleHitCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_GoldenTurtleHitCFGData* GetData(int ID);
+	const std::map<int, Fish_GoldenTurtleHitCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GoldenTurtleHitCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GoldenTurtleHitCFGData> mMapData;
+};

+ 113 - 0
FishConfig/Code/Client/Fish_GoldenTurtleTaskCFG.cpp

@@ -0,0 +1,113 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GoldenTurtleTaskCFG.h"
+std::auto_ptr<Fish_GoldenTurtleTaskCFG> Fish_GoldenTurtleTaskCFG::msSingleton(nullptr);
+
+int Fish_GoldenTurtleTaskCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GoldenTurtleTaskCFGData* Fish_GoldenTurtleTaskCFG::GetData(int Id)
+{
+	auto it = mMapData.find(Id);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GoldenTurtleTaskCFGData>& Fish_GoldenTurtleTaskCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GoldenTurtleTaskCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GoldenTurtleTaskCFG.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)
+	{
+		Fish_GoldenTurtleTaskCFGData data;
+		data.mId = element->IntAttribute("Id");
+		data.mDesc = element->Attribute("Desc");
+		data.mCompleteType = element->IntAttribute("CompleteType");
+		data.mCompleteParam = element->IntAttribute("CompleteParam");
+		data.mCompleteCount = element->IntAttribute("CompleteCount");
+		data.mAwardItemIDs = element->IntAttribute("AwardItemIDs");
+		data.mAwardItemCounts = element->IntAttribute("AwardItemCounts");
+		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("Fish_GoldenTurtleTaskCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GoldenTurtleTaskCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GoldenTurtleTaskCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GoldenTurtleTaskCFG");
+	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");
+		Fish_GoldenTurtleTaskCFGData data;
+		LuaCfgHelper::readInt(L, "Id", data.mId);
+		LuaCfgHelper::readString(L, "Desc", data.mDesc);
+		LuaCfgHelper::readInt(L, "CompleteType", data.mCompleteType);
+		LuaCfgHelper::readInt(L, "CompleteParam", data.mCompleteParam);
+		LuaCfgHelper::readInt(L, "CompleteCount", data.mCompleteCount);
+		LuaCfgHelper::readInt(L, "AwardItemIDs", data.mAwardItemIDs);
+		LuaCfgHelper::readInt(L, "AwardItemCounts", data.mAwardItemCounts);
+		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("Fish_GoldenTurtleTaskCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GoldenTurtleTaskCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GoldenTurtleTaskCFG* Fish_GoldenTurtleTaskCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GoldenTurtleTaskCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GoldenTurtleTaskCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 37 - 0
FishConfig/Code/Client/Fish_GoldenTurtleTaskCFG.h

@@ -0,0 +1,37 @@
+#pragma once
+#include <map>
+struct Fish_GoldenTurtleTaskCFGData
+{
+	//任务ID
+	int mId;
+	//任务描述
+	std::string mDesc;
+	//完成条件类型
+	int mCompleteType;
+	//特殊参数,填0不生效。对任务捕获指定鱼需要填写
+	int mCompleteParam;
+	//完成计数
+	int mCompleteCount;
+	//奖励物品ID
+	int mAwardItemIDs;
+	//奖励物品数量
+	int mAwardItemCounts;
+};
+
+class Fish_GoldenTurtleTaskCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_GoldenTurtleTaskCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_GoldenTurtleTaskCFGData* GetData(int Id);
+	const std::map<int, Fish_GoldenTurtleTaskCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GoldenTurtleTaskCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GoldenTurtleTaskCFGData> mMapData;
+};

+ 121 - 0
FishConfig/Code/Client/Fish_GrandPrixRankingCFG.cpp

@@ -0,0 +1,121 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GrandPrixRankingCFG.h"
+std::auto_ptr<Fish_GrandPrixRankingCFG> Fish_GrandPrixRankingCFG::msSingleton(nullptr);
+
+int Fish_GrandPrixRankingCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GrandPrixRankingCFGData* Fish_GrandPrixRankingCFG::GetData(int Id)
+{
+	auto it = mMapData.find(Id);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GrandPrixRankingCFGData>& Fish_GrandPrixRankingCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GrandPrixRankingCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GrandPrixRankingCFG.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)
+	{
+		Fish_GrandPrixRankingCFGData data;
+		data.mId = element->IntAttribute("Id");
+		data.mRankingType = element->IntAttribute("RankingType");
+		data.mStartRank = element->IntAttribute("StartRank");
+		data.mEndRank = element->IntAttribute("EndRank");
+		{
+			const char* RewardList = element->Attribute("RewardList");
+			std::vector<std::string> vecRewardList;
+			boost::split(vecRewardList, RewardList, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRewardList.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRewardList[i].c_str(), &temp))
+				{
+					data.mRewardList.push_back(temp);
+				}
+			}
+		}
+		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("Fish_GrandPrixRankingCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GrandPrixRankingCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GrandPrixRankingCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GrandPrixRankingCFG");
+	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");
+		Fish_GrandPrixRankingCFGData data;
+		LuaCfgHelper::readInt(L, "Id", data.mId);
+		LuaCfgHelper::readInt(L, "RankingType", data.mRankingType);
+		LuaCfgHelper::readInt(L, "StartRank", data.mStartRank);
+		LuaCfgHelper::readInt(L, "EndRank", data.mEndRank);
+		LuaCfgHelper::readVectorInt(L, "RewardList", data.mRewardList);
+		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("Fish_GrandPrixRankingCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GrandPrixRankingCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GrandPrixRankingCFG* Fish_GrandPrixRankingCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GrandPrixRankingCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GrandPrixRankingCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 33 - 0
FishConfig/Code/Client/Fish_GrandPrixRankingCFG.h

@@ -0,0 +1,33 @@
+#pragma once
+#include <map>
+struct Fish_GrandPrixRankingCFGData
+{
+	//긍뵀
+	int mId;
+	//탤츰잚謹
+	int mRankingType;
+	//역迦탤츰
+	int mStartRank;
+	//써監탤츰
+	int mEndRank;
+	//쉽쟨돛야
+	std::vector<int> mRewardList;
+};
+
+class Fish_GrandPrixRankingCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_GrandPrixRankingCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_GrandPrixRankingCFGData* GetData(int Id);
+	const std::map<int, Fish_GrandPrixRankingCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GrandPrixRankingCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GrandPrixRankingCFGData> mMapData;
+};

+ 107 - 0
FishConfig/Code/Client/Fish_GuideCFG.cpp

@@ -0,0 +1,107 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_GuideCFG.h"
+std::auto_ptr<Fish_GuideCFG> Fish_GuideCFG::msSingleton(nullptr);
+
+int Fish_GuideCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_GuideCFGData* Fish_GuideCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_GuideCFGData>& Fish_GuideCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_GuideCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_GuideCFG.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)
+	{
+		Fish_GuideCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mNeedLevel = element->IntAttribute("NeedLevel");
+		data.mTipsInfo = element->Attribute("TipsInfo");
+		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("Fish_GuideCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GuideCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_GuideCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_GuideCFG");
+	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");
+		Fish_GuideCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readInt(L, "NeedLevel", data.mNeedLevel);
+		LuaCfgHelper::readString(L, "TipsInfo", data.mTipsInfo);
+		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("Fish_GuideCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_GuideCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_GuideCFG* Fish_GuideCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_GuideCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_GuideCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 31 - 0
FishConfig/Code/Client/Fish_GuideCFG.h

@@ -0,0 +1,31 @@
+#pragma once
+#include <map>
+struct Fish_GuideCFGData
+{
+	//ID
+	int mID;
+	//Ãû×Ö
+	std::string mName;
+	//ÐèÒªµÈ¼¶
+	int mNeedLevel;
+	//ÌáʾÐÅÏ¢
+	std::string mTipsInfo;
+};
+
+class Fish_GuideCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_GuideCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_GuideCFGData* GetData(int ID);
+	const std::map<int, Fish_GuideCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_GuideCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_GuideCFGData> mMapData;
+};

+ 257 - 0
FishConfig/Code/Client/Fish_IntermediateExchange.cpp

@@ -0,0 +1,257 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_IntermediateExchange.h"
+std::auto_ptr<Fish_IntermediateExchange> Fish_IntermediateExchange::msSingleton(nullptr);
+
+int Fish_IntermediateExchange::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_IntermediateExchangeData* Fish_IntermediateExchange::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_IntermediateExchangeData>& Fish_IntermediateExchange::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_IntermediateExchange::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_IntermediateExchange.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)
+	{
+		Fish_IntermediateExchangeData data;
+		data.mID = element->IntAttribute("ID");
+		data.mname = element->Attribute("name");
+		{
+			const char* itemId = element->Attribute("itemId");
+			std::vector<std::string> vecitemId;
+			boost::split(vecitemId, itemId, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecitemId.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecitemId[i].c_str(), &temp))
+				{
+					data.mitemId.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* itemcount = element->Attribute("itemcount");
+			std::vector<std::string> vecitemcount;
+			boost::split(vecitemcount, itemcount, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecitemcount.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecitemcount[i].c_str(), &temp))
+				{
+					data.mitemcount.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* fixedReward = element->Attribute("fixedReward");
+			std::vector<std::string> vecfixedReward;
+			boost::split(vecfixedReward, fixedReward, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecfixedReward.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecfixedReward[i].c_str(), &temp))
+				{
+					data.mfixedReward.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* probabilityReward = element->Attribute("probabilityReward");
+			std::vector<std::string> vecprobabilityReward;
+			boost::split(vecprobabilityReward, probabilityReward, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecprobabilityReward.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecprobabilityReward[i].c_str(), &temp))
+				{
+					data.mprobabilityReward.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* primaryFubao = element->Attribute("primaryFubao");
+			std::vector<std::string> vecprimaryFubao;
+			boost::split(vecprimaryFubao, primaryFubao, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecprimaryFubao.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecprimaryFubao[i].c_str(), &temp))
+				{
+					data.mprimaryFubao.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* NewGiftIntegral = element->Attribute("NewGiftIntegral");
+			std::vector<std::string> vecNewGiftIntegral;
+			boost::split(vecNewGiftIntegral, NewGiftIntegral, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecNewGiftIntegral.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecNewGiftIntegral[i].c_str(), &temp))
+				{
+					data.mNewGiftIntegral.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* NewIntegral = element->Attribute("NewIntegral");
+			std::vector<std::string> vecNewIntegral;
+			boost::split(vecNewIntegral, NewIntegral, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecNewIntegral.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecNewIntegral[i].c_str(), &temp))
+				{
+					data.mNewIntegral.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* GiftIntegral = element->Attribute("GiftIntegral");
+			std::vector<std::string> vecGiftIntegral;
+			boost::split(vecGiftIntegral, GiftIntegral, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecGiftIntegral.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecGiftIntegral[i].c_str(), &temp))
+				{
+					data.mGiftIntegral.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* ComIntegral = element->Attribute("ComIntegral");
+			std::vector<std::string> vecComIntegral;
+			boost::split(vecComIntegral, ComIntegral, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecComIntegral.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecComIntegral[i].c_str(), &temp))
+				{
+					data.mComIntegral.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* NorIntegral = element->Attribute("NorIntegral");
+			std::vector<std::string> vecNorIntegral;
+			boost::split(vecNorIntegral, NorIntegral, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecNorIntegral.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecNorIntegral[i].c_str(), &temp))
+				{
+					data.mNorIntegral.push_back(temp);
+				}
+			}
+		}
+		{
+			const char* OnListWeight = element->Attribute("OnListWeight");
+			std::vector<std::string> vecOnListWeight;
+			boost::split(vecOnListWeight, OnListWeight, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecOnListWeight.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecOnListWeight[i].c_str(), &temp))
+				{
+					data.mOnListWeight.push_back(temp);
+				}
+			}
+		}
+		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("Fish_IntermediateExchange Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_IntermediateExchange::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_IntermediateExchange");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_IntermediateExchange");
+	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");
+		Fish_IntermediateExchangeData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "name", data.mname);
+		LuaCfgHelper::readVectorInt(L, "itemId", data.mitemId);
+		LuaCfgHelper::readVectorInt(L, "itemcount", data.mitemcount);
+		LuaCfgHelper::readVectorInt(L, "fixedReward", data.mfixedReward);
+		LuaCfgHelper::readVectorInt(L, "probabilityReward", data.mprobabilityReward);
+		LuaCfgHelper::readVectorInt(L, "primaryFubao", data.mprimaryFubao);
+		LuaCfgHelper::readVectorInt(L, "NewGiftIntegral", data.mNewGiftIntegral);
+		LuaCfgHelper::readVectorInt(L, "NewIntegral", data.mNewIntegral);
+		LuaCfgHelper::readVectorInt(L, "GiftIntegral", data.mGiftIntegral);
+		LuaCfgHelper::readVectorInt(L, "ComIntegral", data.mComIntegral);
+		LuaCfgHelper::readVectorInt(L, "NorIntegral", data.mNorIntegral);
+		LuaCfgHelper::readVectorInt(L, "OnListWeight", data.mOnListWeight);
+		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("Fish_IntermediateExchange Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_IntermediateExchange::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_IntermediateExchange* Fish_IntermediateExchange::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_IntermediateExchange());
+	}
+	return msSingleton.get();
+}
+
+void Fish_IntermediateExchange::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 49 - 0
FishConfig/Code/Client/Fish_IntermediateExchange.h

@@ -0,0 +1,49 @@
+#pragma once
+#include <map>
+struct Fish_IntermediateExchangeData
+{
+	//编号
+	int mID;
+	//鱼名
+	std::string mname;
+	//道具
+	std::vector<int> mitemId;
+	//数量
+	std::vector<int> mitemcount;
+	//基础奖励
+	std::vector<int> mfixedReward;
+	//概率奖励
+	std::vector<int> mprobabilityReward;
+	//福袋奖励
+	std::vector<int> mprimaryFubao;
+	//新手礼包积分
+	std::vector<int> mNewGiftIntegral;
+	//新手积分
+	std::vector<int> mNewIntegral;
+	//礼包积分
+	std::vector<int> mGiftIntegral;
+	//消耗权重
+	std::vector<int> mComIntegral;
+	//普通积分
+	std::vector<int> mNorIntegral;
+	//不上榜权重
+	std::vector<int> mOnListWeight;
+};
+
+class Fish_IntermediateExchange
+{
+public:
+private:
+	static std::auto_ptr<Fish_IntermediateExchange> msSingleton;
+public:
+	int GetCount();
+	const Fish_IntermediateExchangeData* GetData(int ID);
+	const std::map<int, Fish_IntermediateExchangeData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_IntermediateExchange* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_IntermediateExchangeData> mMapData;
+};

+ 123 - 0
FishConfig/Code/Client/Fish_IntermediateRanking.cpp

@@ -0,0 +1,123 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_IntermediateRanking.h"
+std::auto_ptr<Fish_IntermediateRanking> Fish_IntermediateRanking::msSingleton(nullptr);
+
+int Fish_IntermediateRanking::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_IntermediateRankingData* Fish_IntermediateRanking::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_IntermediateRankingData>& Fish_IntermediateRanking::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_IntermediateRanking::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_IntermediateRanking.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)
+	{
+		Fish_IntermediateRankingData data;
+		data.mID = element->IntAttribute("ID");
+		data.mType = element->IntAttribute("Type");
+		data.mStartRank = element->IntAttribute("StartRank");
+		data.mEndRank = element->IntAttribute("EndRank");
+		{
+			const char* RewardList = element->Attribute("RewardList");
+			std::vector<std::string> vecRewardList;
+			boost::split(vecRewardList, RewardList, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecRewardList.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecRewardList[i].c_str(), &temp))
+				{
+					data.mRewardList.push_back(temp);
+				}
+			}
+		}
+		data.mLimit = element->IntAttribute("Limit");
+		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("Fish_IntermediateRanking Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_IntermediateRanking::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_IntermediateRanking");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_IntermediateRanking");
+	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");
+		Fish_IntermediateRankingData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "Type", data.mType);
+		LuaCfgHelper::readInt(L, "StartRank", data.mStartRank);
+		LuaCfgHelper::readInt(L, "EndRank", data.mEndRank);
+		LuaCfgHelper::readVectorInt(L, "RewardList", data.mRewardList);
+		LuaCfgHelper::readInt(L, "Limit", data.mLimit);
+		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("Fish_IntermediateRanking Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_IntermediateRanking::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_IntermediateRanking* Fish_IntermediateRanking::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_IntermediateRanking());
+	}
+	return msSingleton.get();
+}
+
+void Fish_IntermediateRanking::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 35 - 0
FishConfig/Code/Client/Fish_IntermediateRanking.h

@@ -0,0 +1,35 @@
+#pragma once
+#include <map>
+struct Fish_IntermediateRankingData
+{
+	//񅧏
+	int mID;
+	//ÀàÐÍ
+	int mType;
+	//¿ªÊ¼ÅÅÃû
+	int mStartRank;
+	//½áÊøÅÅÃû
+	int mEndRank;
+	//½±Àø1
+	std::vector<int> mRewardList;
+	//ÉϰñÏÞÖÆ
+	int mLimit;
+};
+
+class Fish_IntermediateRanking
+{
+public:
+private:
+	static std::auto_ptr<Fish_IntermediateRanking> msSingleton;
+public:
+	int GetCount();
+	const Fish_IntermediateRankingData* GetData(int ID);
+	const std::map<int, Fish_IntermediateRankingData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_IntermediateRanking* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_IntermediateRankingData> mMapData;
+};

+ 109 - 0
FishConfig/Code/Client/Fish_IntermediateVipExchange.cpp

@@ -0,0 +1,109 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_IntermediateVipExchange.h"
+std::auto_ptr<Fish_IntermediateVipExchange> Fish_IntermediateVipExchange::msSingleton(nullptr);
+
+int Fish_IntermediateVipExchange::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_IntermediateVipExchangeData* Fish_IntermediateVipExchange::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_IntermediateVipExchangeData>& Fish_IntermediateVipExchange::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_IntermediateVipExchange::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_IntermediateVipExchange.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)
+	{
+		Fish_IntermediateVipExchangeData data;
+		data.mID = element->IntAttribute("ID");
+		data.mVipLevel = element->IntAttribute("VipLevel");
+		data.mExperience = element->IntAttribute("Experience");
+		data.mBasicProbability = element->IntAttribute("BasicProbability");
+		data.mItemcount = element->IntAttribute("Itemcount");
+		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("Fish_IntermediateVipExchange Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_IntermediateVipExchange::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_IntermediateVipExchange");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_IntermediateVipExchange");
+	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");
+		Fish_IntermediateVipExchangeData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "VipLevel", data.mVipLevel);
+		LuaCfgHelper::readInt(L, "Experience", data.mExperience);
+		LuaCfgHelper::readInt(L, "BasicProbability", data.mBasicProbability);
+		LuaCfgHelper::readInt(L, "Itemcount", data.mItemcount);
+		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("Fish_IntermediateVipExchange Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_IntermediateVipExchange::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_IntermediateVipExchange* Fish_IntermediateVipExchange::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_IntermediateVipExchange());
+	}
+	return msSingleton.get();
+}
+
+void Fish_IntermediateVipExchange::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 33 - 0
FishConfig/Code/Client/Fish_IntermediateVipExchange.h

@@ -0,0 +1,33 @@
+#pragma once
+#include <map>
+struct Fish_IntermediateVipExchangeData
+{
+	//编号
+	int mID;
+	//Vip等级
+	int mVipLevel;
+	//获得vip经验上限
+	int mExperience;
+	//基础VIP概率
+	int mBasicProbability;
+	//每次衰减
+	int mItemcount;
+};
+
+class Fish_IntermediateVipExchange
+{
+public:
+private:
+	static std::auto_ptr<Fish_IntermediateVipExchange> msSingleton;
+public:
+	int GetCount();
+	const Fish_IntermediateVipExchangeData* GetData(int ID);
+	const std::map<int, Fish_IntermediateVipExchangeData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_IntermediateVipExchange* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_IntermediateVipExchangeData> mMapData;
+};

+ 105 - 0
FishConfig/Code/Client/Fish_JuKunCardCFG.cpp

@@ -0,0 +1,105 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_JuKunCardCFG.h"
+std::auto_ptr<Fish_JuKunCardCFG> Fish_JuKunCardCFG::msSingleton(nullptr);
+
+int Fish_JuKunCardCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_JuKunCardCFGData* Fish_JuKunCardCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_JuKunCardCFGData>& Fish_JuKunCardCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_JuKunCardCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_JuKunCardCFG.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)
+	{
+		Fish_JuKunCardCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mWeight = element->IntAttribute("Weight");
+		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("Fish_JuKunCardCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JuKunCardCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_JuKunCardCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_JuKunCardCFG");
+	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");
+		Fish_JuKunCardCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readInt(L, "Weight", data.mWeight);
+		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("Fish_JuKunCardCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JuKunCardCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_JuKunCardCFG* Fish_JuKunCardCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_JuKunCardCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_JuKunCardCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 29 - 0
FishConfig/Code/Client/Fish_JuKunCardCFG.h

@@ -0,0 +1,29 @@
+#pragma once
+#include <map>
+struct Fish_JuKunCardCFGData
+{
+	//񅧏
+	int mID;
+	//Ãû³Æ
+	std::string mName;
+	//È¨ÖØ
+	int mWeight;
+};
+
+class Fish_JuKunCardCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_JuKunCardCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_JuKunCardCFGData* GetData(int ID);
+	const std::map<int, Fish_JuKunCardCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_JuKunCardCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_JuKunCardCFGData> mMapData;
+};

+ 115 - 0
FishConfig/Code/Client/Fish_JuKunEggCFG.cpp

@@ -0,0 +1,115 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_JuKunEggCFG.h"
+std::auto_ptr<Fish_JuKunEggCFG> Fish_JuKunEggCFG::msSingleton(nullptr);
+
+int Fish_JuKunEggCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_JuKunEggCFGData* Fish_JuKunEggCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_JuKunEggCFGData>& Fish_JuKunEggCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_JuKunEggCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_JuKunEggCFG.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)
+	{
+		Fish_JuKunEggCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mType = element->IntAttribute("Type");
+		data.mMinimumScore = element->IntAttribute("MinimumScore");
+		data.mMaximumScore = element->IntAttribute("MaximumScore");
+		data.mRandomMinimum = element->IntAttribute("RandomMinimum");
+		data.mRandomMaximum = element->IntAttribute("RandomMaximum");
+		data.mweight = element->IntAttribute("weight");
+		data.mResource = element->Attribute("Resource");
+		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("Fish_JuKunEggCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JuKunEggCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_JuKunEggCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_JuKunEggCFG");
+	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");
+		Fish_JuKunEggCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "Type", data.mType);
+		LuaCfgHelper::readInt(L, "MinimumScore", data.mMinimumScore);
+		LuaCfgHelper::readInt(L, "MaximumScore", data.mMaximumScore);
+		LuaCfgHelper::readInt(L, "RandomMinimum", data.mRandomMinimum);
+		LuaCfgHelper::readInt(L, "RandomMaximum", data.mRandomMaximum);
+		LuaCfgHelper::readInt(L, "weight", data.mweight);
+		LuaCfgHelper::readString(L, "Resource", data.mResource);
+		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("Fish_JuKunEggCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JuKunEggCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_JuKunEggCFG* Fish_JuKunEggCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_JuKunEggCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_JuKunEggCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 39 - 0
FishConfig/Code/Client/Fish_JuKunEggCFG.h

@@ -0,0 +1,39 @@
+#pragma once
+#include <map>
+struct Fish_JuKunEggCFGData
+{
+	//编号
+	int mID;
+	//类型
+	int mType;
+	//最小分值
+	int mMinimumScore;
+	//最大分值
+	int mMaximumScore;
+	//随机最小鲲币(百分比)
+	int mRandomMinimum;
+	//随机最大币(百分比)
+	int mRandomMaximum;
+	//权重
+	int mweight;
+	//显示图片
+	std::string mResource;
+};
+
+class Fish_JuKunEggCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_JuKunEggCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_JuKunEggCFGData* GetData(int ID);
+	const std::map<int, Fish_JuKunEggCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_JuKunEggCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_JuKunEggCFGData> mMapData;
+};

+ 121 - 0
FishConfig/Code/Client/Fish_JuKunFuHuaJiFenCFG.cpp

@@ -0,0 +1,121 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_JuKunFuHuaJiFenCFG.h"
+std::auto_ptr<Fish_JuKunFuHuaJiFenCFG> Fish_JuKunFuHuaJiFenCFG::msSingleton(nullptr);
+
+int Fish_JuKunFuHuaJiFenCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_JuKunFuHuaJiFenCFGData* Fish_JuKunFuHuaJiFenCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_JuKunFuHuaJiFenCFGData>& Fish_JuKunFuHuaJiFenCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_JuKunFuHuaJiFenCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_JuKunFuHuaJiFenCFG.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)
+	{
+		Fish_JuKunFuHuaJiFenCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mIntegralLower = element->IntAttribute("IntegralLower");
+		data.mIntegralUpper = element->IntAttribute("IntegralUpper");
+		data.mWeight = element->IntAttribute("Weight");
+		{
+			const char* BonusPoints = element->Attribute("BonusPoints");
+			std::vector<std::string> vecBonusPoints;
+			boost::split(vecBonusPoints, BonusPoints, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecBonusPoints.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecBonusPoints[i].c_str(), &temp))
+				{
+					data.mBonusPoints.push_back(temp);
+				}
+			}
+		}
+		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("Fish_JuKunFuHuaJiFenCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JuKunFuHuaJiFenCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_JuKunFuHuaJiFenCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_JuKunFuHuaJiFenCFG");
+	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");
+		Fish_JuKunFuHuaJiFenCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "IntegralLower", data.mIntegralLower);
+		LuaCfgHelper::readInt(L, "IntegralUpper", data.mIntegralUpper);
+		LuaCfgHelper::readInt(L, "Weight", data.mWeight);
+		LuaCfgHelper::readVectorInt(L, "BonusPoints", data.mBonusPoints);
+		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("Fish_JuKunFuHuaJiFenCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JuKunFuHuaJiFenCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_JuKunFuHuaJiFenCFG* Fish_JuKunFuHuaJiFenCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_JuKunFuHuaJiFenCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_JuKunFuHuaJiFenCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 33 - 0
FishConfig/Code/Client/Fish_JuKunFuHuaJiFenCFG.h

@@ -0,0 +1,33 @@
+#pragma once
+#include <map>
+struct Fish_JuKunFuHuaJiFenCFGData
+{
+	//编号
+	int mID;
+	//孵化积分下限
+	int mIntegralLower;
+	//孵化积分上限
+	int mIntegralUpper;
+	//权重
+	int mWeight;
+	//积分奖励
+	std::vector<int> mBonusPoints;
+};
+
+class Fish_JuKunFuHuaJiFenCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_JuKunFuHuaJiFenCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_JuKunFuHuaJiFenCFGData* GetData(int ID);
+	const std::map<int, Fish_JuKunFuHuaJiFenCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_JuKunFuHuaJiFenCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_JuKunFuHuaJiFenCFGData> mMapData;
+};

+ 123 - 0
FishConfig/Code/Client/Fish_JuKunPaiHangCFG.cpp

@@ -0,0 +1,123 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_JuKunPaiHangCFG.h"
+std::auto_ptr<Fish_JuKunPaiHangCFG> Fish_JuKunPaiHangCFG::msSingleton(nullptr);
+
+int Fish_JuKunPaiHangCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_JuKunPaiHangCFGData* Fish_JuKunPaiHangCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_JuKunPaiHangCFGData>& Fish_JuKunPaiHangCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_JuKunPaiHangCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_JuKunPaiHangCFG.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)
+	{
+		Fish_JuKunPaiHangCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mType = element->IntAttribute("Type");
+		data.mTime = element->IntAttribute("Time");
+		data.mStartRank = element->IntAttribute("StartRank");
+		data.mEndRank = element->IntAttribute("EndRank");
+		{
+			const char* Reward = element->Attribute("Reward");
+			std::vector<std::string> vecReward;
+			boost::split(vecReward, Reward, boost::is_any_of(","));
+			int temp;
+			for (unsigned int i = 0; i < vecReward.size(); i++)
+			{
+				if (tinyxml2::XMLUtil::ToInt(vecReward[i].c_str(), &temp))
+				{
+					data.mReward.push_back(temp);
+				}
+			}
+		}
+		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("Fish_JuKunPaiHangCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JuKunPaiHangCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_JuKunPaiHangCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_JuKunPaiHangCFG");
+	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");
+		Fish_JuKunPaiHangCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "Type", data.mType);
+		LuaCfgHelper::readInt(L, "Time", data.mTime);
+		LuaCfgHelper::readInt(L, "StartRank", data.mStartRank);
+		LuaCfgHelper::readInt(L, "EndRank", data.mEndRank);
+		LuaCfgHelper::readVectorInt(L, "Reward", data.mReward);
+		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("Fish_JuKunPaiHangCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JuKunPaiHangCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_JuKunPaiHangCFG* Fish_JuKunPaiHangCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_JuKunPaiHangCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_JuKunPaiHangCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 35 - 0
FishConfig/Code/Client/Fish_JuKunPaiHangCFG.h

@@ -0,0 +1,35 @@
+#pragma once
+#include <map>
+struct Fish_JuKunPaiHangCFGData
+{
+	//编号
+	int mID;
+	//类型
+	int mType;
+	//时间
+	int mTime;
+	//开始排名
+	int mStartRank;
+	//结束排名
+	int mEndRank;
+	//奖励
+	std::vector<int> mReward;
+};
+
+class Fish_JuKunPaiHangCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_JuKunPaiHangCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_JuKunPaiHangCFGData* GetData(int ID);
+	const std::map<int, Fish_JuKunPaiHangCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_JuKunPaiHangCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_JuKunPaiHangCFGData> mMapData;
+};

+ 113 - 0
FishConfig/Code/Client/Fish_JuKunShopCFG.cpp

@@ -0,0 +1,113 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_JuKunShopCFG.h"
+std::auto_ptr<Fish_JuKunShopCFG> Fish_JuKunShopCFG::msSingleton(nullptr);
+
+int Fish_JuKunShopCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_JuKunShopCFGData* Fish_JuKunShopCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_JuKunShopCFGData>& Fish_JuKunShopCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_JuKunShopCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_JuKunShopCFG.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)
+	{
+		Fish_JuKunShopCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mType = element->IntAttribute("Type");
+		data.mShopName = element->Attribute("ShopName");
+		data.mShopItem = element->IntAttribute("ShopItem");
+		data.mShopNumber = element->IntAttribute("ShopNumber");
+		data.mNeedKunCoin = element->IntAttribute("NeedKunCoin");
+		data.mWeight = element->IntAttribute("Weight");
+		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("Fish_JuKunShopCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JuKunShopCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_JuKunShopCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_JuKunShopCFG");
+	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");
+		Fish_JuKunShopCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "Type", data.mType);
+		LuaCfgHelper::readString(L, "ShopName", data.mShopName);
+		LuaCfgHelper::readInt(L, "ShopItem", data.mShopItem);
+		LuaCfgHelper::readInt(L, "ShopNumber", data.mShopNumber);
+		LuaCfgHelper::readInt(L, "NeedKunCoin", data.mNeedKunCoin);
+		LuaCfgHelper::readInt(L, "Weight", data.mWeight);
+		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("Fish_JuKunShopCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JuKunShopCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_JuKunShopCFG* Fish_JuKunShopCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_JuKunShopCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_JuKunShopCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 37 - 0
FishConfig/Code/Client/Fish_JuKunShopCFG.h

@@ -0,0 +1,37 @@
+#pragma once
+#include <map>
+struct Fish_JuKunShopCFGData
+{
+	//编号
+	int mID;
+	//类型
+	int mType;
+	//商品名称
+	std::string mShopName;
+	//商品id
+	int mShopItem;
+	//商品数量
+	int mShopNumber;
+	//需要鲲币
+	int mNeedKunCoin;
+	//权重
+	int mWeight;
+};
+
+class Fish_JuKunShopCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_JuKunShopCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_JuKunShopCFGData* GetData(int ID);
+	const std::map<int, Fish_JuKunShopCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_JuKunShopCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_JuKunShopCFGData> mMapData;
+};

+ 111 - 0
FishConfig/Code/Client/Fish_JumpCFG.cpp

@@ -0,0 +1,111 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_JumpCFG.h"
+std::auto_ptr<Fish_JumpCFG> Fish_JumpCFG::msSingleton(nullptr);
+
+int Fish_JumpCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_JumpCFGData* Fish_JumpCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_JumpCFGData>& Fish_JumpCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_JumpCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_JumpCFG.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)
+	{
+		Fish_JumpCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mType = element->IntAttribute("Type");
+		data.mͼ±ê1 = element->Attribute("ͼ±ê1");
+		data.mͼ±ê2 = element->Attribute("ͼ±ê2");
+		data.mͼ±ê3 = element->Attribute("ͼ±ê3");
+		data.mͼ±ê4 = element->Attribute("ͼ±ê4");
+		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("Fish_JumpCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JumpCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_JumpCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_JumpCFG");
+	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");
+		Fish_JumpCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readInt(L, "Type", data.mType);
+		LuaCfgHelper::readString(L, "ͼ±ê1", data.mͼ±ê1);
+		LuaCfgHelper::readString(L, "ͼ±ê2", data.mͼ±ê2);
+		LuaCfgHelper::readString(L, "ͼ±ê3", data.mͼ±ê3);
+		LuaCfgHelper::readString(L, "ͼ±ê4", data.mͼ±ê4);
+		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("Fish_JumpCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_JumpCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_JumpCFG* Fish_JumpCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_JumpCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_JumpCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

+ 35 - 0
FishConfig/Code/Client/Fish_JumpCFG.h

@@ -0,0 +1,35 @@
+#pragma once
+#include <map>
+struct Fish_JumpCFGData
+{
+	//key
+	int mID;
+	//ÀàÐÍ
+	int mType;
+	//Icon1
+	std::string mͼ±ê1;
+	//Icon2
+	std::string mͼ±ê2;
+	//Icon3
+	std::string mͼ±ê3;
+	//Icon4
+	std::string mͼ±ê4;
+};
+
+class Fish_JumpCFG
+{
+public:
+private:
+	static std::auto_ptr<Fish_JumpCFG> msSingleton;
+public:
+	int GetCount();
+	const Fish_JumpCFGData* GetData(int ID);
+	const std::map<int, Fish_JumpCFGData>& GetMapData();
+	void Load();
+	void LoadLua();
+	void Reload();
+	static Fish_JumpCFG* GetSingleton();
+	static void Release();
+private:
+	std::map<int, Fish_JumpCFGData> mMapData;
+};

+ 121 - 0
FishConfig/Code/Client/Fish_LargeFishCFG.cpp

@@ -0,0 +1,121 @@
+#include "stdafx.h"
+#include "tinyxml2/tinyxml2.h"
+#include "LuaCfgHelper.h"
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+#include "Fish_LargeFishCFG.h"
+std::auto_ptr<Fish_LargeFishCFG> Fish_LargeFishCFG::msSingleton(nullptr);
+
+int Fish_LargeFishCFG::GetCount()
+{
+	return (int)mMapData.size();
+}
+
+const Fish_LargeFishCFGData* Fish_LargeFishCFG::GetData(int ID)
+{
+	auto it = mMapData.find(ID);
+	if (it != mMapData.end())
+	{
+		return &it->second;
+	}
+	return NULL;
+}
+
+const std::map<int, Fish_LargeFishCFGData>& Fish_LargeFishCFG::GetMapData()
+{
+	return mMapData;
+}
+
+void Fish_LargeFishCFG::Load()
+{
+	tinyxml2::XMLDocument xmlDoc;
+	std::string content = FileUtils::getInstance()->getStringFromFile("Config/Fish_LargeFishCFG.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)
+	{
+		Fish_LargeFishCFGData data;
+		data.mID = element->IntAttribute("ID");
+		data.mName = element->Attribute("Name");
+		data.mGeneratorID = element->IntAttribute("GeneratorID");
+		data.mFishID = element->IntAttribute("FishID");
+		data.mImageInfo = element->Attribute("ImageInfo");
+		data.mIsBoss = element->BoolAttribute("IsBoss");
+		data.mBackSound = element->Attribute("BackSound");
+		data.mDuration = element->IntAttribute("Duration");
+		data.mWarnTime = element->IntAttribute("WarnTime");
+		data.mFlashTime = element->IntAttribute("FlashTime");
+		data.mDieTime = element->IntAttribute("DieTime");
+		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("Fish_LargeFishCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_LargeFishCFG::LoadLua()
+{
+	LuaEngine::getInstance()->executeScriptFile("config/Fish_LargeFishCFG");
+	lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState();
+	lua_getglobal(L, "Fish_LargeFishCFG");
+	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");
+		Fish_LargeFishCFGData data;
+		LuaCfgHelper::readInt(L, "ID", data.mID);
+		LuaCfgHelper::readString(L, "Name", data.mName);
+		LuaCfgHelper::readInt(L, "GeneratorID", data.mGeneratorID);
+		LuaCfgHelper::readInt(L, "FishID", data.mFishID);
+		LuaCfgHelper::readString(L, "ImageInfo", data.mImageInfo);
+		LuaCfgHelper::readBool(L, "IsBoss", data.mIsBoss);
+		LuaCfgHelper::readString(L, "BackSound", data.mBackSound);
+		LuaCfgHelper::readInt(L, "Duration", data.mDuration);
+		LuaCfgHelper::readInt(L, "WarnTime", data.mWarnTime);
+		LuaCfgHelper::readInt(L, "FlashTime", data.mFlashTime);
+		LuaCfgHelper::readInt(L, "DieTime", data.mDieTime);
+		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("Fish_LargeFishCFG Loaded. Load Data:%u", mMapData.size());
+}
+
+void Fish_LargeFishCFG::Reload()
+{
+	mMapData.clear();
+	Load();
+}
+
+Fish_LargeFishCFG* Fish_LargeFishCFG::GetSingleton()
+{
+	if (msSingleton.get() == nullptr)
+	{
+		msSingleton.reset(new Fish_LargeFishCFG());
+	}
+	return msSingleton.get();
+}
+
+void Fish_LargeFishCFG::Release()
+{
+	msSingleton.reset(nullptr);
+}

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно