Advertisement
Guest User

Untitled

a guest
Mar 24th, 2021
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. #include "StdAfx.h"
  2. #include "PythonRanking.h"
  3. #include "AbstractPlayer.h"
  4. #include <memory>
  5. #include <string>
  6.  
  7. void CPythonRanking::RegisterRankingData(const char* name, int level, BYTE job, BYTE empire, const char* guild)
  8. {
  9. vRankingContainer.emplace_back(std::make_shared<SRankingData>(name, level, job, empire, guild));
  10. }
  11.  
  12. void CPythonRanking::ClearRankData()
  13. {
  14. vRankingContainer.clear();
  15. vRankingContainer.reserve(RANKING_MAX_NUM);
  16. }
  17.  
  18. size_t CPythonRanking::GetRankCount() const
  19. {
  20. return vRankingContainer.size();
  21. }
  22.  
  23. CPythonRanking::SRankingData* CPythonRanking::GetRankByLine(WORD dwArrayIndex) const
  24. {
  25. if (dwArrayIndex >= GetRankCount())
  26. return nullptr;
  27.  
  28. return vRankingContainer.at(dwArrayIndex).get();
  29. }
  30.  
  31. WORD CPythonRanking::GetRankMyLine() const
  32. {
  33. auto it = std::find_if(vRankingContainer.begin(), vRankingContainer.end(), [] { return !r->name.compare(IAbstractPlayer::GetSingleton().GetName()); });
  34. if (it != vRankingContainer.end())
  35. return std::distance(vRankingContainer.begin(), it) + 1;
  36.  
  37. return 0;
  38. }
  39.  
  40. CPythonRanking::CPythonRanking()
  41. {
  42. vRankingContainer.reserve(RANKING_MAX_NUM);
  43. }
  44.  
  45. CPythonRanking::~CPythonRanking()
  46. {
  47. vRankingContainer.clear();
  48. }
  49.  
  50. /*Module*/
  51.  
  52. PyObject * rankingGetRankCount(PyObject * poSelf, PyObject * poArgs)
  53. {
  54. return Py_BuildValue("i", CPythonRanking::Instance().GetRankCount());
  55. }
  56.  
  57. PyObject * rankingGetRankByLine(PyObject * poSelf, PyObject * poArgs)
  58. {
  59. int iIndex;
  60. if (!PyTuple_GetInteger(poArgs, 0, &iIndex))
  61. return Py_BadArgument();
  62.  
  63. const auto Rank = CPythonRanking::Instance().GetRankByLine(iIndex);
  64. if (!Rank)
  65. return Py_BuildException("Failed to find rank by index %d", iIndex);
  66.  
  67. return Py_BuildValue("siiis", Rank->name.c_str(), Rank->level, Rank->job, Rank->empire, Rank->guild.c_str());
  68. }
  69.  
  70. PyObject* rankingGetRankMyLine(PyObject* poSelf, PyObject* poArgs)
  71. {
  72. return Py_BuildValue("i", CPythonRanking::Instance().GetRankMyLine());
  73. }
  74.  
  75. PyObject* rankingClear(PyObject* poSelf, PyObject* poArgs)
  76. {
  77. CPythonRanking::Instance().ClearRankData();
  78. return Py_BuildNone();
  79. }
  80.  
  81. void initranking()
  82. {
  83. static PyMethodDef s_methods[] =
  84. {
  85. { "GetRankCount", rankingGetRankCount, METH_VARARGS },
  86. { "GetRankByLine", rankingGetRankByLine, METH_VARARGS },
  87. { "GetRankMyLine", rankingGetRankMyLine, METH_VARARGS },
  88. { "RankClear", rankingClear, METH_VARARGS },
  89. { NULL, NULL, NULL }
  90. };
  91.  
  92. PyObject * poModule = Py_InitModule("ranking", s_methods);
  93. PyModule_AddIntConstant(poModule, "RANK_PAGE_MAX_NUM", CPythonRanking::RANK_PAGE_MAX_NUM);
  94. PyModule_AddIntConstant(poModule, "RANK_SHOW_COUNT", CPythonRanking::RANK_SHOW_COUNT);
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement