arves100

cpp

Jul 28th, 2016
1,056
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "StdAfx.h"
  2. #include "PythonSkillPet.h"
  3.  
  4. #include "../EterBase/Poly/Poly.h"
  5. #include "../EterPack/EterPackManager.h"
  6. #include "InstanceBase.h"
  7. #include "PythonPlayer.h"
  8.  
  9.  
  10.  
  11.  
  12.  
  13. bool CPythonSkillPet::RegisterSkillPet(const char * c_szFileName)
  14. {
  15.     const VOID* pvData;
  16.     CMappedFile kFile;
  17.     if (!CEterPackManager::Instance().Get(kFile, c_szFileName, &pvData))
  18.         return false;
  19.  
  20.     CMemoryTextFileLoader textFileLoader;
  21.     textFileLoader.Bind(kFile.Size(), pvData);
  22.    
  23.     CTokenVector TokenVector;
  24.     for (DWORD i = 0; i < textFileLoader.GetLineCount()-1; ++i)
  25.     {
  26.         if (!textFileLoader.SplitLine(i, &TokenVector, "\t"))
  27.             return false;
  28.         //TraceError("%s ---- %s | %s | %s", c_szFileName, TokenVector[0].c_str(),TokenVector[1].c_str(),TokenVector[2].c_str());
  29.         //TraceError("SkillPetDesc %d %s %s %s %s \n", TokenVector.size(), TokenVector[0], TokenVector[1], TokenVecto[2], TokenVector[3]);
  30.         if (DESCPET_TOKEN_TYPE_MAX_NUM > TokenVector.size())
  31.         {
  32.             //TraceError("SkillPetDesc.line(%d).NO_VNUM_ERROR\n", -1);
  33.             return false;
  34.         }
  35.         //TraceError("SkillPetDesc.line(%d).NO_VNUM_ERROR\n", 3);
  36.         DWORD iSkillIndex = atoi(TokenVector[DESCPET_TOKEN_TYPE_VNUM].c_str());
  37.         if (iSkillIndex == 0)
  38.         {
  39.             //TraceError("SkillPetDesc.line(%d).NO_INDEX_ERROR\n", i + 1);
  40.             continue;
  41.         }
  42.  
  43.        
  44.        
  45.         //TraceError("SkillPetDesc.line(%d).NO_VNUM_ERROR\n", 4);
  46.        
  47.         /*
  48.         std::map<DWORD, TSkillDataPet>::iterator it = m_SkillDataPetMap.find(1);
  49.         if (m_SkillDataPetMap.end() == it)
  50.         {
  51.             TraceError("Arrivato alla fine");
  52.             continue;
  53.         }
  54.         */
  55.         //TraceError("Ciao: %s",m_SkillDataPetMap[1].strIconFileName);
  56.        
  57.         m_SkillDataPetMap.insert(make_pair(iSkillIndex, TSkillDataPet()));
  58.        
  59.        
  60.        
  61.        
  62.        
  63.         //TraceError("SkillPetDesc.line(%d).NO_VNUM_ERROR\n", 5);
  64.         TSkillDataPet & rSkillData = m_SkillDataPetMap[iSkillIndex];
  65.  
  66.         //TraceError("SkillPetDesc.line(%d).NO_VNUM_ERROR\n", 6);
  67.         // Vnum
  68.         rSkillData.dwSkillIndex = iSkillIndex;     
  69.         //TraceError("SkillPetDesc.line(%d).NO_VNUM_ERROR\n", 7);
  70.         // Name
  71.         rSkillData.strName = TokenVector[DESCPET_TOKEN_TYPE_NAME];
  72.         //Icon Name    
  73.         char szIconFileNameHeader[64+1];
  74.         _snprintf(szIconFileNameHeader, sizeof(szIconFileNameHeader), "%sskill/pet/%s.sub", g_strImagePath.c_str(), TokenVector[DESCPET_TOKEN_TYPE_ICON_NAME].c_str());
  75.  
  76.         rSkillData.strIconFileName = szIconFileNameHeader;
  77.  
  78.         //Type
  79.         std::map<std::string, DWORD>::iterator itor = m_SkillPetTypeIndexMap.begin();
  80.         for(; itor != m_SkillPetTypeIndexMap.end(); ++itor){
  81.             if (TokenVector[DESCPET_TOKEN_TYPE].compare(itor->first) == 0)
  82.                     rSkillData.byType = itor->second;
  83.         }
  84.         rSkillData.strDescription = TokenVector[DESCPET_TOKEN_TYPE_DESCRIPTION];
  85.         rSkillData.dwskilldelay = atoi(TokenVector[DESCPET_TOKEN_TYPE_DELAY].c_str());
  86.  
  87.        
  88.         rSkillData.pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(szIconFileNameHeader);        
  89.        
  90.     }
  91.  
  92.     return true;
  93. }
  94.  
  95. void CPythonSkillPet::__RegisterNormalIconImage(TSkillDataPet & rData, const char * c_szHeader, const char * c_szImageName)
  96. {
  97.     std::string strFileName = "";
  98.     strFileName += c_szHeader;
  99.     strFileName += c_szImageName;
  100.     strFileName += ".sub";
  101.     rData.pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(strFileName.c_str());
  102.    
  103. }
  104. void CPythonSkillPet::Destroy()
  105. {
  106.    
  107.     m_SkillDataPetMap.clear(); 
  108. }
  109.  
  110. CPythonSkillPet::SSkillDataPet::SSkillDataPet()
  111. {
  112.  
  113.  
  114.     dwSkillIndex = 0;
  115.     strName = "";
  116.     strIconFileName = "";
  117.     byType = 0;        
  118.     strDescription = "";
  119.     dwskilldelay = 0;
  120.     pImage = NULL; 
  121.    
  122. }
  123.  
  124. CPythonSkillPet::CPythonSkillPet()
  125. {
  126.     /*
  127.     TSkillDataPet SkillDataPet;
  128.     SkillDataPet.dwSkillIndex = 0;
  129.     SkillDataPet.strName = "";
  130.     SkillDataPet.strIconFileName = "";
  131.     SkillDataPet.byType = 0;
  132.     SkillDataPet.strDescription = "";
  133.     SkillDataPet.dwskilldelay = 0;
  134.     SkillDataPet.pImage = NULL;
  135.    
  136.     m_SkillDataPetMap.insert(TSkillDataPetMap::value_type(0, SkillDataPet));
  137.     */
  138.     petslot[0] = 0;
  139.     petslot[1] = 0;
  140.     petslot[2] = 0;
  141.  
  142.     m_SkillPetTypeIndexMap.insert(std::map<std::string, DWORD>::value_type("EMPTY", SKILLPET_TYPE_NONE));
  143.     m_SkillPetTypeIndexMap.insert(std::map<std::string, DWORD>::value_type("PASSIVE", SKILLPET_TYPE_PASSIVE));
  144.     m_SkillPetTypeIndexMap.insert(std::map<std::string, DWORD>::value_type("AUTO", SKILLPET_TYPE_AUTO));
  145.  
  146. }
  147. CPythonSkillPet::~CPythonSkillPet()
  148. {
  149. }
  150.  
  151.  
  152. void CPythonSkillPet:: SetSkillbySlot(int slot, int skillIndex)
  153. {
  154.     //TraceError("Setto lo slot %d --> skill %d", slot, skillIndex);
  155.     petslot[slot] = skillIndex;
  156. }
  157.  
  158. BOOL CPythonSkillPet::GetSkillData(DWORD dwSkillIndex, TSkillDataPet ** ppSkillData)
  159. {
  160.     TSkillDataPetMap::iterator it = m_SkillDataPetMap.find(dwSkillIndex);
  161.  
  162.     if (m_SkillDataPetMap.end() == it)
  163.         return FALSE;
  164.  
  165.     *ppSkillData = &(it->second);
  166.     return TRUE;
  167. }
  168.  
  169. BOOL CPythonSkillPet::GetSkillIndex(int slot, int* skillIndex)
  170. {
  171.     *skillIndex = petslot[slot];
  172.     return TRUE;
  173. }
  174.  
  175. PyObject * petskillSetSkillSlot(PyObject * poSelf, PyObject * poArgs)
  176. {
  177.     int slot;
  178.     int skillIndex;
  179.  
  180.     if (!PyTuple_GetInteger(poArgs, 0, &slot))
  181.         return Py_BadArgument();
  182.     if (!PyTuple_GetInteger(poArgs, 1, &skillIndex))
  183.         return Py_BadArgument();
  184.     CPythonSkillPet::Instance().SetSkillbySlot(slot, skillIndex);
  185.     return Py_BuildValue("i", 0);
  186. }
  187.  
  188. PyObject * petskillGetIconImage(PyObject * poSelf, PyObject * poArgs)
  189. {
  190.     int iSkillIndex;
  191.     if (!PyTuple_GetInteger(poArgs, 0, &iSkillIndex))
  192.         return Py_BadArgument();
  193.  
  194.     CPythonSkillPet::SSkillDataPet * c_pSkillData;
  195.     if (!CPythonSkillPet::Instance().GetSkillData(iSkillIndex, &c_pSkillData))
  196.         return Py_BuildValue("i", 0);   // 익셉션을 내는 대신 0을 리턴한다.
  197.  
  198.     return Py_BuildValue("i", c_pSkillData->pImage);
  199. }
  200.  
  201. PyObject * petskillGetSkillbySlot(PyObject * poSelf, PyObject * poArgs)
  202. {
  203.     int slot;
  204.     int skillIndex;
  205.     if (!PyTuple_GetInteger(poArgs, 0, &slot))
  206.         return Py_BadArgument();
  207.  
  208.     if (slot > 2)
  209.         return Py_BadArgument();
  210.  
  211.     if (!CPythonSkillPet::Instance().GetSkillIndex(slot, &skillIndex))
  212.         return Py_BuildValue("i", 0);
  213.  
  214.     return Py_BuildValue("i", skillIndex);
  215.  
  216. }
  217.  
  218. PyObject * petskillGetEmptySkill(PyObject * poSelf, PyObject * poArgs)
  219. {
  220.     CGraphicImage * noskillbtn;
  221.     char szIconFileNameHeader[64 + 1];
  222.     _snprintf(szIconFileNameHeader, sizeof(szIconFileNameHeader), "d:/ymir work/ui/pet/skill_button/skill_enable_button.sub");
  223.     noskillbtn = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(szIconFileNameHeader);
  224.     return Py_BuildValue("i", noskillbtn);
  225. }
  226.  
  227. void initskillpet()
  228. {
  229.     static PyMethodDef s_methods[] =
  230.     {
  231.         ///Variabili setting //
  232.         { "SetSkillSlot",                   petskillSetSkillSlot,                       METH_VARARGS },
  233.  
  234.  
  235.         //Variabili Get //
  236.        
  237.         { "GetIconImage",                   petskillGetIconImage,                       METH_VARARGS },
  238.         { "GetSkillbySlot",                 petskillGetSkillbySlot ,                    METH_VARARGS },
  239.         { "GetEmptySkill",                  petskillGetEmptySkill,                      METH_VARARGS },
  240.  
  241.         { NULL,                                     NULL,                                       NULL },
  242.     };
  243.  
  244.     PyObject * poModule = Py_InitModule("petskill", s_methods);
  245. }
Add Comment
Please, Sign In to add comment