KFaction.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:3k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 2002 by Kingsoft
  3. //
  4. // File: KFaction.cpp
  5. // Date: 2002.09.26
  6. // Code: 边城浪子
  7. // Desc: Faction Class
  8. //---------------------------------------------------------------------------
  9. #include "KCore.h"
  10. //#include "MyAssert.h"
  11. #include "KIniFile.h"
  12. #include "KSkills.h"
  13. #include "KFaction.h"
  14. #include "CoreUseNameDef.h"
  15. KFaction g_Faction;
  16. //---------------------------------------------------------------------------
  17. // 功能:初始化,载入门派说明文件
  18. //---------------------------------------------------------------------------
  19. BOOL KFaction::Init()
  20. {
  21. KIniFile Ini;
  22. char szSection[80], szBuffer[32];
  23. char szSeries[series_num][16] = {"金", "木", "水", "火", "土"};
  24. char szCamp[camp_num][16] = {"新手", "正派", "邪派", "中立", "杀手", "野兽", "路人"};
  25. int i, j, k, nArrayPos;
  26. // 清空
  27. for (i = 0; i < MAX_FACTION; i++)
  28. {
  29. m_sAttribute[i].m_nIndex = i;
  30. m_sAttribute[i].m_nSeries = series_metal;
  31. m_sAttribute[i].m_nCamp = camp_justice;
  32. m_sAttribute[i].m_szName[0] = 0;
  33. }
  34. if ( !Ini.Load(FACTION_FILE) )
  35. return FALSE;
  36. // 读入每一个门派数据
  37. for (i = 0; i < MAX_FACTION; i++)
  38. {
  39. sprintf(szSection, "%d", i);
  40. Ini.GetString(szSection, "Series", "金", szBuffer, sizeof(szBuffer));
  41. // 找到阵营数组中的相应位置
  42. for (j = 0; j < series_num; j++)
  43. {
  44. if (strcmp(szBuffer, szSeries[j]) != 0)
  45. continue;
  46. for (k = 0; k < FACTIONS_PRR_SERIES; k++)
  47. {
  48. if (m_sAttribute[j * FACTIONS_PRR_SERIES + k].m_szName[0] == 0)
  49. {
  50. nArrayPos = j * FACTIONS_PRR_SERIES + k;
  51. m_sAttribute[nArrayPos].m_nSeries = j;
  52. break;
  53. }
  54. }
  55. break;
  56. }
  57. _ASSERT(j < series_num);
  58. Ini.GetString(szSection, "Name", "少林派", m_sAttribute[nArrayPos].m_szName, sizeof(m_sAttribute[nArrayPos].m_szName));
  59. Ini.GetString(szSection, "Camp", "正义", szBuffer, sizeof(szBuffer));
  60. for (j = 0; j < camp_num; j++)
  61. {
  62. if (strcmp(szBuffer, szCamp[j]) == 0)
  63. {
  64. m_sAttribute[nArrayPos].m_nCamp = j;
  65. break;
  66. }
  67. }
  68. _ASSERT(j < camp_num);
  69. }
  70. return TRUE;
  71. }
  72. //---------------------------------------------------------------------------
  73. // 功能:根据五行属性和本属性第几个门派得到门派编号
  74. //---------------------------------------------------------------------------
  75. int KFaction::GetID(int nSeries, int nNo)
  76. {
  77. if (nSeries < series_metal || nSeries >= series_num || nNo < 0 || nNo >= FACTIONS_PRR_SERIES)
  78. return -1;
  79. return nSeries * FACTIONS_PRR_SERIES + nNo;
  80. }
  81. //---------------------------------------------------------------------------
  82. // 功能:根据五行属性和门派名得到门派编号
  83. //---------------------------------------------------------------------------
  84. int KFaction::GetID(int nSeries, char *lpszName)
  85. {
  86. if (nSeries < series_metal || nSeries >= series_num)
  87. return -1;
  88. if ( !lpszName || !lpszName[0])
  89. return -1;
  90. for (int i = nSeries * FACTIONS_PRR_SERIES; i < (nSeries + 1) * FACTIONS_PRR_SERIES; i++)
  91. {
  92. if (strcmp(lpszName, m_sAttribute[i].m_szName) == 0)
  93. return i;
  94. }
  95. return -1;
  96. }
  97. //---------------------------------------------------------------------------
  98. // 功能:获得某个门派的阵营
  99. //---------------------------------------------------------------------------
  100. int KFaction::GetCamp(int nFactionID)
  101. {
  102. if (nFactionID < 0 || nFactionID >= MAX_FACTION)
  103. return -1;
  104. return m_sAttribute[nFactionID].m_nCamp;
  105. }