Guest User

PythonNetworkStreamModule.cpp

a guest
May 14th, 2020
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 61.87 KB | None | 0 0
  1. #include "StdAfx.h"
  2. #include "PythonNetworkStream.h"
  3. #include "AccountConnector.h"
  4. #include "PythonGuild.h"
  5. #include "AbstractPlayer.h"
  6.  
  7. #include <windows.h>
  8. #include <string>
  9. bool WrongPathYmir(const std::string& dirName_in)
  10. {
  11.     DWORD type = GetFileAttributesA(dirName_in.c_str());
  12.  
  13.     if (type == INVALID_FILE_ATTRIBUTES)
  14.     {
  15.         return false;
  16.     }
  17.  
  18.     if (type & FILE_ATTRIBUTE_DIRECTORY)
  19.     {
  20.         return true;
  21.     }
  22.  
  23.     return false;
  24. }
  25.  
  26. static std::string gs_stServerInfo;
  27. extern BOOL gs_bEmpireLanuageEnable;
  28. std::list<std::string> g_kList_strCommand;
  29.  
  30. PyObject* netGetBettingGuildWarValue(PyObject* poSelf, PyObject* poArgs)
  31. {
  32.     char* szName;
  33.     if (!PyTuple_GetString(poArgs, 0, &szName))
  34.         return Py_BuildException();
  35.  
  36.    
  37.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  38.     return Py_BuildValue("i", rkNetStream.EXPORT_GetBettingGuildWarValue(szName));
  39. }
  40.  
  41. PyObject* netSetServerInfo(PyObject* poSelf, PyObject* poArgs)
  42. {
  43.     char* szFileName;
  44.     if (!PyTuple_GetString(poArgs, 0, &szFileName))
  45.         return Py_BuildException();
  46.  
  47.     gs_stServerInfo=szFileName;
  48.     return Py_BuildNone();
  49. }
  50.  
  51. PyObject* netGetServerInfo(PyObject* poSelf, PyObject* poArgs)
  52. {
  53.     return Py_BuildValue("s", gs_stServerInfo.c_str());
  54. }
  55.  
  56. PyObject* netPreserveServerCommand(PyObject* poSelf, PyObject* poArgs)
  57. {
  58.     char* szLine;
  59.     if (!PyTuple_GetString(poArgs, 0, &szLine))
  60.         return Py_BuildException();
  61.  
  62.     g_kList_strCommand.push_back(szLine);
  63.  
  64.     return Py_BuildNone();
  65. }
  66.  
  67. PyObject* netGetPreservedServerCommand(PyObject* poSelf, PyObject* poArgs)
  68. {
  69.     if (g_kList_strCommand.empty())
  70.         return Py_BuildValue("s", "");
  71.  
  72.     std::string strCommand = g_kList_strCommand.front();
  73.     g_kList_strCommand.pop_front();
  74.  
  75.     return Py_BuildValue("s", strCommand.c_str());
  76. }
  77.  
  78. PyObject* netStartGame(PyObject* poSelf, PyObject* poArgs)
  79. {
  80.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  81.     rkNetStream.StartGame();
  82.  
  83.     return Py_BuildNone();
  84. }
  85.  
  86. PyObject* netWarp(PyObject* poSelf, PyObject* poArgs)
  87. {
  88.     int nX;
  89.     if (!PyTuple_GetInteger(poArgs, 0, &nX))
  90.         return Py_BuildException();
  91.  
  92.     int nY;
  93.     if (!PyTuple_GetInteger(poArgs, 1, &nY))
  94.         return Py_BuildException();
  95.  
  96.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  97.     rkNetStream.Warp(nX, nY);
  98.  
  99.     return Py_BuildNone();
  100. }
  101.  
  102. PyObject* netLoadInsultList(PyObject* poSelf, PyObject* poArgs)
  103. {
  104.     char* szFileName;
  105.     if (!PyTuple_GetString(poArgs, 0, &szFileName))
  106.         return Py_BuildException();
  107.  
  108.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  109.     return Py_BuildValue("i", rkNetStream.LoadInsultList(szFileName));
  110. }
  111.  
  112. PyObject* netUploadMark(PyObject* poSelf, PyObject* poArgs)
  113. {
  114.     char* szFileName;
  115.     if (!PyTuple_GetString(poArgs, 0, &szFileName))
  116.         return Py_BuildException();
  117.  
  118.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  119.     return Py_BuildValue("i", rkNetStream.UploadMark(szFileName));
  120. }
  121.  
  122. PyObject* netUploadSymbol(PyObject* poSelf, PyObject* poArgs)
  123. {
  124.     char* szFileName;
  125.     if (!PyTuple_GetString(poArgs, 0, &szFileName))
  126.         return Py_BuildException();
  127.  
  128.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  129.     return Py_BuildValue("i", rkNetStream.UploadSymbol(szFileName));
  130. }
  131.  
  132. PyObject* netGetGuildID(PyObject* poSelf, PyObject* poArgs)
  133. {
  134.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  135.     return Py_BuildValue("i", rkNetStream.GetGuildID());
  136. }
  137.  
  138. PyObject* netGetEmpireID(PyObject* poSelf, PyObject* poArgs)
  139. {
  140.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  141.     return Py_BuildValue("i", rkNetStream.GetEmpireID());
  142. }
  143.  
  144. PyObject* netGetMainActorVID(PyObject* poSelf, PyObject* poArgs)
  145. {
  146.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  147.     return Py_BuildValue("i", rkNetStream.GetMainActorVID());
  148. }
  149.  
  150. PyObject* netGetMainActorRace(PyObject* poSelf, PyObject* poArgs)
  151. {
  152.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  153.     return Py_BuildValue("i", rkNetStream.GetMainActorRace());
  154. }
  155.  
  156. PyObject* netGetMainActorEmpire(PyObject* poSelf, PyObject* poArgs)
  157. {
  158.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  159.     return Py_BuildValue("i", rkNetStream.GetMainActorEmpire());
  160. }
  161.  
  162. PyObject* netGetMainActorSkillGroup(PyObject* poSelf, PyObject* poArgs)
  163. {
  164.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  165.     return Py_BuildValue("i", rkNetStream.GetMainActorSkillGroup());
  166. }
  167.  
  168. PyObject* netIsSelectedEmpire(PyObject* poSelf, PyObject* poArgs)
  169. {
  170.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  171.     return Py_BuildValue("i", rkNetStream.IsSelectedEmpire());
  172. }
  173.  
  174.  
  175. PyObject* netGetAccountCharacterSlotDataInteger(PyObject* poSelf, PyObject* poArgs)
  176. {
  177.     int nIndex;
  178.     if (!PyTuple_GetInteger(poArgs, 0, &nIndex))
  179.         return Py_BuildException();
  180.  
  181.     int nType;
  182.     if (!PyTuple_GetInteger(poArgs, 1, &nType))
  183.         return Py_BuildException();
  184.  
  185.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  186.     UINT uResult=rkNetStream.GetAccountCharacterSlotDatau(nIndex, nType);
  187.     return Py_BuildValue("i", uResult);
  188. }
  189.  
  190. PyObject* netGetAccountCharacterSlotDataString(PyObject* poSelf, PyObject* poArgs)
  191. {
  192.     int nIndex;
  193.     if (!PyTuple_GetInteger(poArgs, 0, &nIndex))
  194.         return Py_BuildException();
  195.  
  196.     int nType;
  197.     if (!PyTuple_GetInteger(poArgs, 1, &nType))
  198.         return Py_BuildException();
  199.  
  200.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  201.     return Py_BuildValue("s", rkNetStream.GetAccountCharacterSlotDataz(nIndex, nType));
  202. }
  203.  
  204. // SUPPORT_BGM
  205. PyObject* netGetFieldMusicFileName(PyObject* poSelf, PyObject* poArgs)
  206. {
  207.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  208.     return Py_BuildValue("s", rkNetStream.GetFieldMusicFileName());
  209. }
  210.  
  211. PyObject* netGetFieldMusicVolume(PyObject* poSelf, PyObject* poArgs)
  212. {
  213.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  214.     return Py_BuildValue("f", rkNetStream.GetFieldMusicVolume());
  215. }
  216. // END_OF_SUPPORT_BGM
  217.  
  218. PyObject* netSetPhaseWindow(PyObject* poSelf, PyObject* poArgs)
  219. {
  220.     int ePhaseWnd;
  221.     if (!PyTuple_GetInteger(poArgs, 0, &ePhaseWnd))
  222.         return Py_BuildException();
  223.  
  224.     PyObject* poPhaseWnd;
  225.     if (!PyTuple_GetObject(poArgs, 1, &poPhaseWnd))
  226.         return Py_BuildException();
  227.  
  228.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  229.     rkNetStream.SetPhaseWindow(ePhaseWnd, poPhaseWnd);
  230.     return Py_BuildNone();
  231. }
  232.  
  233. PyObject* netClearPhaseWindow(PyObject* poSelf, PyObject* poArgs)
  234. {
  235.     int ePhaseWnd;
  236.     if (!PyTuple_GetInteger(poArgs, 0, &ePhaseWnd))
  237.         return Py_BuildException();
  238.  
  239.     PyObject* poPhaseWnd;
  240.     if (!PyTuple_GetObject(poArgs, 1, &poPhaseWnd))
  241.         return Py_BuildException();
  242.  
  243.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  244.     rkNetStream.ClearPhaseWindow(ePhaseWnd, poPhaseWnd);
  245.     return Py_BuildNone();
  246. }
  247.  
  248. PyObject* netSetServerCommandParserWindow(PyObject* poSelf, PyObject* poArgs)
  249. {
  250.     PyObject* poPhaseWnd;
  251.     if (!PyTuple_GetObject(poArgs, 0, &poPhaseWnd))
  252.         return Py_BuildException();
  253.  
  254.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  255.     rkNetStream.SetServerCommandParserWindow(poPhaseWnd);
  256.     return Py_BuildNone();
  257. }
  258.  
  259. PyObject* netSetAccountConnectorHandler(PyObject* poSelf, PyObject* poArgs)
  260. {
  261.     PyObject* poPhaseWnd;
  262.     if (!PyTuple_GetObject(poArgs, 0, &poPhaseWnd))
  263.         return Py_BuildException();
  264.  
  265.     CAccountConnector & rkAccountConnector = CAccountConnector::Instance();
  266.     rkAccountConnector.SetHandler(poPhaseWnd);
  267.     return Py_BuildNone();
  268. }
  269.  
  270. PyObject* netSetHandler(PyObject* poSelf, PyObject* poArgs)
  271. {
  272.     PyObject* poHandler;
  273.  
  274.     if (!PyTuple_GetObject(poArgs, 0, &poHandler))
  275.         return Py_BuildException();
  276.  
  277.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  278.     rkNetStream.SetHandler(poHandler);
  279.     return Py_BuildNone();
  280. }
  281.  
  282. PyObject* netSetTCPRecvBufferSize(PyObject* poSelf, PyObject* poArgs)
  283. {
  284.     int bufSize;
  285.     if (!PyTuple_GetInteger(poArgs, 0, &bufSize))
  286.         return Py_BuildException();
  287.  
  288.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  289.     rkNetStream.SetRecvBufferSize(bufSize);
  290.     return Py_BuildNone();
  291. }
  292.  
  293. PyObject* netSetTCPSendBufferSize(PyObject* poSelf, PyObject* poArgs)
  294. {
  295.     int bufSize;
  296.     if (!PyTuple_GetInteger(poArgs, 0, &bufSize))
  297.         return Py_BuildException();
  298.  
  299.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  300.     rkNetStream.SetSendBufferSize(bufSize);
  301.     return Py_BuildNone();
  302. }
  303.  
  304. PyObject* netSetMarkServer(PyObject* poSelf, PyObject* poArgs)
  305. {
  306.     char* szAddr;
  307.     if (!PyTuple_GetString(poArgs, 0, &szAddr))
  308.         return Py_BuildException();
  309.  
  310.     int port;
  311.     if (!PyTuple_GetInteger(poArgs, 1, &port))
  312.         return Py_BuildException();
  313.  
  314.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  315.     rkNetStream.SetMarkServer(szAddr, port);
  316.     return Py_BuildNone();
  317. }
  318.  
  319. PyObject* netConnectTCP(PyObject* poSelf, PyObject* poArgs)
  320. {
  321.     char* szAddr;
  322.     if (!PyTuple_GetString(poArgs, 0, &szAddr))
  323.         return Py_BuildException();
  324.  
  325.     int port;
  326.     if (!PyTuple_GetInteger(poArgs, 1, &port))
  327.         return Py_BuildException();
  328.  
  329.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  330.     rkNetStream.ConnectLoginServer(szAddr, port);
  331.     return Py_BuildNone();
  332. }
  333.  
  334. PyObject* netConnectToAccountServer(PyObject* poSelf, PyObject* poArgs)
  335. {
  336.     char* addr;
  337.     if (!PyTuple_GetString(poArgs, 0, &addr))
  338.         return Py_BuildException();
  339.  
  340.     int port;
  341.     if (!PyTuple_GetInteger(poArgs, 1, &port))
  342.         return Py_BuildException();
  343.  
  344.     char* account_addr;
  345.     if (!PyTuple_GetString(poArgs, 2, &account_addr))
  346.         return Py_BuildException();
  347.  
  348.     int account_port;
  349.     if (!PyTuple_GetInteger(poArgs, 3, &account_port))
  350.         return Py_BuildException();
  351.  
  352.     CAccountConnector & rkAccountConnector = CAccountConnector::Instance();
  353.     rkAccountConnector.Connect(addr, port, account_addr, account_port);
  354.     return Py_BuildNone();
  355. }
  356.  
  357. #ifdef ENABLE_SEND_TARGET_INFO
  358. PyObject* netTargetInfoLoad(PyObject* poSelf, PyObject* poArgs)
  359. {
  360.     DWORD dwVID;
  361.  
  362.     if (!PyArg_ParseTuple(poArgs, "i", &dwVID))
  363.     {
  364.         return Py_BuildException();
  365.     }
  366.     if (dwVID < 0)
  367.     {
  368.         return Py_BuildNone();
  369.     }
  370.  
  371.     CPythonNetworkStream& rns = CPythonNetworkStream::Instance();
  372.     rns.SendTargetInfoLoadPacket(dwVID);
  373.  
  374.     return Py_BuildNone();
  375. }
  376. #endif
  377.  
  378. ///////////////////////////////////////////////////////////////////////////////////////////////////
  379.  
  380. PyObject* netSetLoginInfo(PyObject* poSelf, PyObject* poArgs)
  381. {
  382.     std::string moduleFake = "**D:\\ymir work\\**";
  383.     if (WrongPathYmir(std::string("D") + std::string(":\\") + std::string("ymir") + std::string(" work\\")))
  384.     {
  385.    
  386.         LogBoxf("Sterge folderul ymir work din: Local Disk (D:)");
  387.         TraceError("Sterge folderul ymir work din: Local Disk (D:)");
  388.         ::Sleep(500);
  389.         exit(0);
  390.     }
  391.     char* szName;
  392.  
  393.     if (!PyTuple_GetString(poArgs, 0, &szName))
  394.     {
  395.         return Py_BuildException();
  396.     }
  397.  
  398.     char* szPwd;
  399.  
  400.     if (!PyTuple_GetString(poArgs, 1, &szPwd))
  401.     {
  402.         return Py_BuildException();
  403.     }
  404.  
  405.     CPythonNetworkStream &rkNetStream = CPythonNetworkStream::Instance();
  406.     CAccountConnector &rkAccountConnector = CAccountConnector::Instance();
  407.     rkNetStream.SetLoginInfo(szName, szPwd);
  408.     rkAccountConnector.SetLoginInfo(szName, szPwd);
  409.     return Py_BuildNone();
  410. }
  411.  
  412. PyObject* netSetOfflinePhase(PyObject* poSelf, PyObject* poArgs)
  413. {
  414.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  415.     rkNetStream.SetOffLinePhase();
  416.     return Py_BuildNone();
  417. }
  418.  
  419. PyObject* netSendSelectEmpirePacket(PyObject* poSelf, PyObject* poArgs)
  420. {
  421.     int iEmpireIndex;
  422.     if (!PyTuple_GetInteger(poArgs, 0, &iEmpireIndex))
  423.         return Py_BuildException();
  424.  
  425.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  426.     rkNetStream.SendSelectEmpirePacket(iEmpireIndex);
  427.     return Py_BuildNone();
  428. }
  429.  
  430. PyObject* netSendLoginPacket(PyObject* poSelf, PyObject* poArgs)
  431. {
  432.     char* szName;
  433.     if (!PyTuple_GetString(poArgs, 0, &szName))
  434.         return Py_BuildException();
  435.  
  436.     char* szPwd;
  437.     if (!PyTuple_GetString(poArgs, 1, &szPwd))
  438.         return Py_BuildException();
  439.  
  440.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  441.     rkNetStream.SendLoginPacket(szName, szPwd);
  442.     return Py_BuildNone();
  443. }
  444.  
  445. PyObject* netDirectEnter(PyObject* poSelf, PyObject* poArgs)
  446. {
  447.     int nChrSlot;
  448.     if (!PyTuple_GetInteger(poArgs, 0, &nChrSlot))
  449.         return Py_BuildException();
  450.  
  451.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  452.     rkNetStream.ConnectGameServer(nChrSlot);
  453.     return Py_BuildNone();
  454. }
  455.  
  456. PyObject* netSendSelectCharacterPacket(PyObject* poSelf, PyObject* poArgs)
  457. {
  458.     int Index;
  459.     if (!PyTuple_GetInteger(poArgs, 0, &Index))
  460.         return Py_BuildException();
  461.  
  462.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  463.     rkNetStream.SendSelectCharacterPacket((BYTE) Index);
  464.     return Py_BuildNone();
  465. }
  466.  
  467. PyObject* netSendChangeNamePacket(PyObject* poSelf, PyObject* poArgs)
  468. {
  469.     int iIndex;
  470.     if (!PyTuple_GetInteger(poArgs, 0, &iIndex))
  471.         return Py_BuildException();
  472.     char* szName;
  473.     if (!PyTuple_GetString(poArgs, 1, &szName))
  474.         return Py_BuildException();
  475.  
  476.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  477.     rkNetStream.SendChangeNamePacket((BYTE)iIndex, szName);
  478.     return Py_BuildNone();
  479. }
  480.  
  481. PyObject* netEnableChatInsultFilter(PyObject* poSelf, PyObject* poArgs)
  482. {
  483.     int nEnable;
  484.     if (!PyTuple_GetInteger(poArgs, 0, &nEnable))
  485.         return Py_BuildException();
  486.  
  487.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  488.     rkNetStream.EnableChatInsultFilter(nEnable ? true : false);
  489.     return Py_BuildNone();
  490. }
  491.  
  492. PyObject* netIsChatInsultIn(PyObject* poSelf, PyObject* poArgs)
  493. {
  494.     char* szMsg;
  495.     if (!PyTuple_GetString(poArgs, 0, &szMsg))
  496.         return Py_BuildException();
  497.  
  498.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  499.     return Py_BuildValue("i", rkNetStream.IsChatInsultIn(szMsg));
  500. }
  501.  
  502.  
  503. PyObject* netIsInsultIn(PyObject* poSelf, PyObject* poArgs)
  504. {
  505.     char* szMsg;
  506.     if (!PyTuple_GetString(poArgs, 0, &szMsg))
  507.         return Py_BuildException();
  508.  
  509.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  510.     return Py_BuildValue("i", rkNetStream.IsInsultIn(szMsg));
  511. }
  512.  
  513. PyObject* netSendWhisperPacket(PyObject* poSelf, PyObject* poArgs)
  514. {
  515.     char* szName;
  516.     char* szLine;
  517.  
  518.     if (!PyTuple_GetString(poArgs, 0, &szName))
  519.         return Py_BuildException();
  520.  
  521.     if (!PyTuple_GetString(poArgs, 1, &szLine))
  522.         return Py_BuildException();
  523.  
  524.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  525.     rkNetStream.SendWhisperPacket(szName, szLine);
  526.     return Py_BuildNone();
  527. }
  528.  
  529. PyObject* netSendMobileMessagePacket(PyObject* poSelf, PyObject* poArgs)
  530. {
  531.     char* szName;
  532.     char* szLine;
  533.     if (!PyTuple_GetString(poArgs, 0, &szName))
  534.         return Py_BuildException();
  535.  
  536.     if (!PyTuple_GetString(poArgs, 1, &szLine))
  537.         return Py_BuildException();
  538.  
  539.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  540.     rkNetStream.SendMobileMessagePacket(szName, szLine);
  541.     return Py_BuildNone();
  542. }
  543.  
  544. PyObject* netSendCharacterPositionPacket(PyObject* poSelf, PyObject* poArgs)
  545. {
  546.     int iPosition;
  547.     if (!PyTuple_GetInteger(poArgs, 0, &iPosition))
  548.         return Py_BuildException();
  549.  
  550.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  551.     rkNetStream.SendCharacterPositionPacket((BYTE) iPosition);
  552.     return Py_BuildNone();
  553. }
  554.  
  555. PyObject* netSendChatPacket(PyObject* poSelf, PyObject* poArgs)
  556. {
  557.     char* szLine;
  558.     if (!PyTuple_GetString(poArgs, 0, &szLine))
  559.         return Py_BuildException();
  560.     int iType;
  561.     if (!PyTuple_GetInteger(poArgs, 1, &iType))
  562.     {
  563.         iType = CHAT_TYPE_TALKING;
  564.     }
  565.  
  566.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  567.     rkNetStream.SendChatPacket(szLine, iType);
  568.     return Py_BuildNone();
  569. }
  570.  
  571. PyObject* netSendEmoticon(PyObject* poSelf, PyObject* poArgs)
  572. {
  573.     int eEmoticon;
  574.     if (!PyTuple_GetInteger(poArgs, 0, &eEmoticon))
  575.         return Py_BuildException();
  576.  
  577.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  578.     rkNetStream.SendEmoticon(eEmoticon);
  579.     return Py_BuildNone();
  580. }
  581.  
  582. PyObject* netSendCreateCharacterPacket(PyObject* poSelf, PyObject* poArgs)
  583. {
  584.     int index;
  585.     if (!PyTuple_GetInteger(poArgs, 0, &index))
  586.         return Py_BuildException();
  587.  
  588.     char* name;
  589.     if (!PyTuple_GetString(poArgs, 1, &name))
  590.         return Py_BuildException();
  591.  
  592.     int job;
  593.     if (!PyTuple_GetInteger(poArgs, 2, &job))
  594.         return Py_BuildException();
  595.  
  596.     int shape;
  597.     if (!PyTuple_GetInteger(poArgs, 3, &shape))
  598.         return Py_BuildException();
  599.  
  600.     int stat1;
  601.     if (!PyTuple_GetInteger(poArgs, 4, &stat1))
  602.         return Py_BuildException();
  603.     int stat2;
  604.     if (!PyTuple_GetInteger(poArgs, 5, &stat2))
  605.         return Py_BuildException();
  606.     int stat3;
  607.     if (!PyTuple_GetInteger(poArgs, 6, &stat3))
  608.         return Py_BuildException();
  609.     int stat4;
  610.     if (!PyTuple_GetInteger(poArgs, 7, &stat4))
  611.         return Py_BuildException();
  612.  
  613.     if (index<0 && index>3)
  614.         return Py_BuildException();
  615.  
  616.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  617.     rkNetStream.SendCreateCharacterPacket((BYTE) index, name, (BYTE) job, (BYTE) shape, stat1, stat2, stat3, stat4);
  618.     return Py_BuildNone();
  619. }
  620.  
  621. PyObject* netSendDestroyCharacterPacket(PyObject* poSelf, PyObject* poArgs)
  622. {
  623.     int index;
  624.     if (!PyTuple_GetInteger(poArgs, 0, &index))
  625.         return Py_BuildException();
  626.  
  627.     char * szPrivateCode;
  628.     if (!PyTuple_GetString(poArgs, 1, &szPrivateCode))
  629.         return Py_BuildException();
  630.  
  631.     if (index<0 && index>3)
  632.         return Py_BuildException();
  633.    
  634.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  635.     rkNetStream.SendDestroyCharacterPacket((BYTE) index, szPrivateCode);
  636.     return Py_BuildNone();
  637. }
  638.  
  639. PyObject* netSendEnterGamePacket(PyObject* poSelf, PyObject* poArgs)
  640. {
  641.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  642.     rkNetStream.SendEnterGame();
  643.     return Py_BuildNone();
  644. }
  645.  
  646. PyObject* netOnClickPacket(PyObject* poSelf, PyObject* poArgs)
  647. {
  648.     int index;
  649.     if (!PyTuple_GetInteger(poArgs, 0, &index))
  650.         return Py_BuildException();
  651.  
  652.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  653.     rkNetStream.SendOnClickPacket(index);
  654.  
  655.     return Py_BuildNone();
  656. }
  657.  
  658. PyObject* netSendItemUsePacket(PyObject* poSelf, PyObject* poArgs)
  659. {
  660.     TItemPos Cell;
  661.     switch (PyTuple_Size(poArgs))
  662.     {
  663.     case 1:
  664.         if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
  665.             return Py_BuildException();
  666.         break;
  667.     case 2:
  668.         if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  669.             return Py_BuildException();
  670.         if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  671.             return Py_BuildException();
  672.         break;
  673.     default:
  674.         return Py_BuildException();
  675.     }
  676.  
  677.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  678.     rkNetStream.SendItemUsePacket(Cell);
  679.     return Py_BuildNone();
  680. }
  681.  
  682. PyObject* netSendItemUseToItemPacket(PyObject* poSelf, PyObject* poArgs)
  683. {
  684.     TItemPos SourceCell;
  685.     TItemPos TargetCell;
  686.     switch (PyTuple_Size(poArgs))
  687.     {
  688.     case 2:
  689.         if (!PyTuple_GetInteger(poArgs, 0, &SourceCell.cell))
  690.             return Py_BuildException();
  691.  
  692.         if (!PyTuple_GetInteger(poArgs, 1, &TargetCell.cell))
  693.             return Py_BuildException();
  694.         break;
  695.     case 4:
  696.         if (!PyTuple_GetByte(poArgs, 0, &SourceCell.window_type))
  697.             return Py_BuildException();
  698.  
  699.         if (!PyTuple_GetInteger(poArgs, 1, &SourceCell.cell))
  700.             return Py_BuildException();
  701.  
  702.         if (!PyTuple_GetByte(poArgs, 2, &TargetCell.window_type))
  703.             return Py_BuildException();
  704.  
  705.         if (!PyTuple_GetInteger(poArgs, 3, &TargetCell.cell))
  706.             return Py_BuildException();
  707.         break;
  708.     default:
  709.         return Py_BuildException();
  710.     }
  711.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  712.     rkNetStream.SendItemUseToItemPacket(SourceCell, TargetCell);
  713.     return Py_BuildNone();
  714. }
  715.  
  716. PyObject* netSendItemDropPacket(PyObject* poSelf, PyObject* poArgs)
  717. {
  718.     TItemPos Cell;
  719.     switch (PyTuple_Size(poArgs))
  720.     {
  721.     case 1:
  722.         if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
  723.             return Py_BuildException();
  724.         break;
  725.     case 2:
  726.         if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  727.             return Py_BuildException();
  728.         if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  729.             return Py_BuildException();
  730.         break;
  731.     default:
  732.         return Py_BuildException();
  733.     }
  734.  
  735.  
  736.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  737.     rkNetStream.SendItemDropPacket(Cell, 0);
  738.     return Py_BuildNone();
  739. }
  740.  
  741. PyObject* netSendItemDestroyPacket(PyObject* poSelf, PyObject* poArgs)
  742. {
  743.     TItemPos Cell;
  744.    
  745.     if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
  746.         return Py_BuildException();
  747.     CPythonNetworkStream& rkNetStream = CPythonNetworkStream::Instance();
  748.     rkNetStream.SendItemDestroyPacket(Cell);
  749.     return Py_BuildNone();
  750. }
  751.  
  752. PyObject* netSendItemDropPacketNew(PyObject* poSelf, PyObject* poArgs)
  753. {
  754.     TItemPos Cell;
  755.     int count;
  756.     switch (PyTuple_Size(poArgs))
  757.     {
  758.     case 2:
  759.         if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
  760.             return Py_BuildException();
  761.         if (!PyTuple_GetInteger(poArgs, 1, &count))
  762.             return Py_BuildException();
  763.  
  764.         break;
  765.     case 3:
  766.         if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  767.             return Py_BuildException();
  768.         if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  769.             return Py_BuildException();
  770.         if (!PyTuple_GetInteger(poArgs, 2, &count))
  771.             return Py_BuildException();
  772.        
  773.         break;
  774.     default:
  775.         return Py_BuildException();
  776.     }
  777.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  778.     rkNetStream.SendItemDropPacketNew(Cell, 0, count);
  779.     return Py_BuildNone();
  780. }
  781.  
  782. PyObject* netSendElkDropPacket(PyObject* poSelf, PyObject* poArgs)
  783. {
  784.     int iElk;
  785.     if (!PyTuple_GetInteger(poArgs, 0, &iElk))
  786.         return Py_BuildException();
  787.  
  788.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  789.     rkNetStream.SendItemDropPacket(TItemPos(RESERVED_WINDOW, 0), (DWORD) iElk);
  790.     return Py_BuildNone();
  791. }
  792.  
  793. PyObject* netSendGoldDropPacketNew(PyObject* poSelf, PyObject* poArgs)
  794. {
  795.     int iElk;
  796.     if (!PyTuple_GetInteger(poArgs, 0, &iElk))
  797.         return Py_BuildException();
  798.  
  799.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  800.     rkNetStream.SendItemDropPacketNew(TItemPos (RESERVED_WINDOW, 0), (DWORD) iElk, 0);
  801.     return Py_BuildNone();
  802. }
  803.  
  804. PyObject* netSendItemMovePacket(PyObject* poSelf, PyObject* poArgs)
  805. {
  806.     TItemPos Cell;
  807.     TItemPos ChangeCell;
  808.     int num;
  809.  
  810.     switch (PyTuple_Size(poArgs))
  811.     {
  812.     case 3:
  813.         if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
  814.             return Py_BuildException();
  815.         if (!PyTuple_GetInteger(poArgs, 1, &ChangeCell.cell))
  816.             return Py_BuildException();
  817.         if (!PyTuple_GetInteger(poArgs, 2, &num))
  818.             return Py_BuildException();
  819.         break;
  820.     case 5:
  821.         {
  822.             if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  823.                 return Py_BuildException();
  824.             if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  825.                 return Py_BuildException();
  826.             if (!PyTuple_GetByte(poArgs, 2, &ChangeCell.window_type))
  827.                 return Py_BuildException();
  828.             if (!PyTuple_GetInteger(poArgs, 3, &ChangeCell.cell))
  829.                 return Py_BuildException();
  830.             if (!PyTuple_GetInteger(poArgs, 4, &num))
  831.                 return Py_BuildException();
  832.         }
  833.         break;
  834.     default:
  835.         return Py_BuildException();
  836.     }
  837.  
  838.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  839.     rkNetStream.SendItemMovePacket(Cell, ChangeCell, (WORD) num);
  840.     return Py_BuildNone();
  841. }
  842.  
  843. PyObject* netSendItemPickUpPacket(PyObject* poSelf, PyObject* poArgs)
  844. {
  845.     int vid;
  846.     if (!PyTuple_GetInteger(poArgs, 0, &vid))
  847.         return Py_BuildException();
  848.  
  849.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  850.     rkNetStream.SendItemPickUpPacket(vid);
  851.     return Py_BuildNone();
  852. }
  853.  
  854. PyObject* netSendGiveItemPacket(PyObject* poSelf, PyObject* poArgs)
  855. {
  856.     int iTargetVID;
  857.     TItemPos Cell;
  858.     int iItemCount;
  859.     switch (PyTuple_Size(poArgs))
  860.     {
  861.     case 3:
  862.         if (!PyTuple_GetInteger(poArgs, 0, &iTargetVID))
  863.             return Py_BuildException();
  864.         if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  865.             return Py_BuildException();
  866.         if (!PyTuple_GetInteger(poArgs, 2, &iItemCount))
  867.             return Py_BuildException();
  868.         break;
  869.     case 4:
  870.         if (!PyTuple_GetInteger(poArgs, 0, &iTargetVID))
  871.             return Py_BuildException();
  872.         if (!PyTuple_GetByte(poArgs, 1, &Cell.window_type))
  873.             return Py_BuildException();
  874.         if (!PyTuple_GetInteger(poArgs, 2, &Cell.cell))
  875.             return Py_BuildException();
  876.         if (!PyTuple_GetInteger(poArgs, 3, &iItemCount))
  877.             return Py_BuildException();
  878.         break;
  879.     default:
  880.         break;
  881.     }
  882.  
  883.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  884.     rkNetStream.SendGiveItemPacket(iTargetVID, Cell, iItemCount);
  885.     return Py_BuildNone();
  886. }
  887.  
  888. PyObject* netSendShopEndPacket(PyObject* poSelf, PyObject* poArgs)
  889. {
  890.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  891.     rkNetStream.SendShopEndPacket();
  892.     return Py_BuildNone();
  893. }
  894.  
  895. PyObject* netSendShopBuyPacket(PyObject* poSelf, PyObject* poArgs)
  896. {
  897.     int iCount;
  898.     if (!PyTuple_GetInteger(poArgs, 0, &iCount))
  899.         return Py_BuildException();
  900.  
  901.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  902.     rkNetStream.SendShopBuyPacket(iCount);
  903.     return Py_BuildNone();
  904. }
  905.  
  906. PyObject* netSendShopSellPacket(PyObject* poSelf, PyObject* poArgs)
  907. {
  908.     int iSlotNumber;
  909.     if (!PyTuple_GetInteger(poArgs, 0, &iSlotNumber))
  910.         return Py_BuildException();
  911.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  912.     rkNetStream.SendShopSellPacket(iSlotNumber);
  913.     return Py_BuildNone();
  914. }
  915.  
  916. PyObject* netSendShopSellPacketNew(PyObject* poSelf, PyObject* poArgs)
  917. {
  918.     int iSlotNumber;
  919.     if (!PyTuple_GetInteger(poArgs, 0, &iSlotNumber))
  920.         return Py_BuildException();
  921.     int iCount;
  922.     if (!PyTuple_GetInteger(poArgs, 1, &iCount))
  923.         return Py_BuildException();
  924.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  925.     rkNetStream.SendShopSellPacketNew(iSlotNumber, iCount);
  926.     return Py_BuildNone();
  927. }
  928.  
  929. PyObject* netSendExchangeStartPacket(PyObject* poSelf, PyObject* poArgs)
  930. {
  931.     int vid;
  932.     if (!PyTuple_GetInteger(poArgs, 0, &vid))
  933.         return Py_BuildException();
  934.  
  935.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  936.     rkNetStream.SendExchangeStartPacket(vid);
  937.     return Py_BuildNone();
  938. }
  939.  
  940. PyObject* netSendDiceStartPacket(PyObject* poSelf, PyObject* poArgs)
  941. {
  942.     int vid;
  943.     if (!PyTuple_GetInteger(poArgs, 0, &vid))
  944.         return Py_BuildException();
  945.  
  946.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  947.     rkNetStream.SendDiceStartPacket(vid);
  948.     return Py_BuildNone();
  949. }
  950.  
  951. PyObject* netSendExchangeElkAddPacket(PyObject* poSelf, PyObject* poArgs)
  952. {
  953.     long long iElk;
  954.     if (!PyTuple_GetLongLong(poArgs, 0, &iElk))
  955.         return Py_BuildException();
  956.  
  957.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  958.     rkNetStream.SendExchangeElkAddPacket(iElk);
  959.     return Py_BuildNone();
  960. }
  961.  
  962. PyObject* netSendExchangeItemAddPacket(PyObject* poSelf, PyObject* poArgs)
  963. {
  964.     BYTE bWindowType;
  965.     if (!PyTuple_GetInteger(poArgs, 0, &bWindowType))
  966.         return Py_BuildException();
  967.     WORD wSlotIndex;
  968.     if (!PyTuple_GetInteger(poArgs, 1, &wSlotIndex))
  969.         return Py_BuildException();
  970.     int iDisplaySlotIndex;
  971.     if (!PyTuple_GetInteger(poArgs, 2, &iDisplaySlotIndex))
  972.         return Py_BuildException();
  973.  
  974.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  975.     rkNetStream.SendExchangeItemAddPacket(TItemPos(bWindowType, wSlotIndex), iDisplaySlotIndex);
  976.     return Py_BuildNone();
  977. }
  978.  
  979. PyObject* netSendExchangeItemDelPacket(PyObject* poSelf, PyObject* poArgs)
  980. {
  981.     int pos;
  982.     if (!PyTuple_GetInteger(poArgs, 0, &pos))
  983.         return Py_BuildException();
  984.  
  985.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  986.     rkNetStream.SendExchangeItemDelPacket((BYTE) pos);
  987.     return Py_BuildNone();
  988. }
  989.  
  990. PyObject* netSendExchangeAcceptPacket(PyObject* poSelf, PyObject* poArgs)
  991. {
  992.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  993.     rkNetStream.SendExchangeAcceptPacket();
  994.     return Py_BuildNone();
  995. }
  996.  
  997. PyObject* netSendExchangeExitPacket(PyObject* poSelf, PyObject* poArgs)
  998. {
  999.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  1000.     rkNetStream.SendExchangeExitPacket();
  1001.     return Py_BuildNone();
  1002. }
  1003.  
  1004. PyObject* netExitApplication(PyObject* poSelf, PyObject* poArgs)
  1005. {
  1006.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  1007.     rkNetStream.ExitApplication();
  1008.     return Py_BuildNone();
  1009. }
  1010.  
  1011. PyObject* netExitGame(PyObject* poSelf, PyObject* poArgs)
  1012. {
  1013.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  1014.     rkNetStream.ExitGame();
  1015.     return Py_BuildNone();
  1016. }
  1017.  
  1018. PyObject* netLogOutGame(PyObject* poSelf, PyObject* poArgs)
  1019. {
  1020.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  1021.     rkNetStream.LogOutGame();
  1022.     return Py_BuildNone();
  1023. }
  1024.  
  1025. PyObject* netDisconnect(PyObject* poSelf, PyObject* poArgs)
  1026. {
  1027.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  1028.     rkNetStream.SetOffLinePhase();
  1029.     rkNetStream.Disconnect();
  1030.  
  1031.     return Py_BuildNone();
  1032. }
  1033.  
  1034. PyObject* netIsConnect(PyObject* poSelf, PyObject* poArgs)
  1035. {
  1036.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  1037.     return Py_BuildValue("i", rkNetStream.IsOnline());
  1038. }
  1039.  
  1040. PyObject* netToggleGameDebugInfo(PyObject* poSelf, PyObject* poArgs)
  1041. {
  1042.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  1043.     rkNetStream.ToggleGameDebugInfo();
  1044.     return Py_BuildNone();
  1045. }
  1046.  
  1047. PyObject* netRegisterEmoticonString(PyObject* poSelf, PyObject* poArgs)
  1048. {
  1049.     char * pcEmoticonString;
  1050.     if (!PyTuple_GetString(poArgs, 0, &pcEmoticonString))
  1051.         return Py_BuildException();
  1052.  
  1053.     CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
  1054.     rkNetStream.RegisterEmoticonString(pcEmoticonString);
  1055.     return Py_BuildNone();
  1056. }
  1057.  
  1058. PyObject* netSendMessengerAddByVIDPacket(PyObject* poSelf, PyObject* poArgs)
  1059. {
  1060.     int vid;
  1061.     if (!PyTuple_GetInteger(poArgs, 0, &vid))
  1062.         return Py_BuildException();
  1063.  
  1064.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1065.     rns.SendMessengerAddByVIDPacket(vid);
  1066.    
  1067.     return Py_BuildNone();
  1068. }
  1069.  
  1070. PyObject* netSendMessengerAddByNamePacket(PyObject* poSelf, PyObject* poArgs)
  1071. {
  1072.     char * szName;
  1073.     if (!PyTuple_GetString(poArgs, 0, &szName))
  1074.         return Py_BuildException();
  1075.  
  1076.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1077.     rns.SendMessengerAddByNamePacket(szName);
  1078.    
  1079.     return Py_BuildNone();
  1080. }
  1081.  
  1082. PyObject* netSendMessengerRemovePacket(PyObject* poSelf, PyObject* poArgs)
  1083. {
  1084.     char * szKey;
  1085.     if (!PyTuple_GetString(poArgs, 0, &szKey))
  1086.         return Py_BuildException();
  1087.     char * szName;
  1088.     if (!PyTuple_GetString(poArgs, 1, &szName))
  1089.         return Py_BuildException();
  1090.  
  1091.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1092.     rns.SendMessengerRemovePacket(szKey, szName);
  1093.    
  1094.     return Py_BuildNone();
  1095. }
  1096.  
  1097. PyObject* netSendPartyInvitePacket(PyObject* poSelf, PyObject* poArgs)
  1098. {
  1099.     int vid;
  1100.     if (!PyTuple_GetInteger(poArgs, 0, &vid))
  1101.         return Py_BuildException();
  1102.  
  1103.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1104.     rns.SendPartyInvitePacket(vid);
  1105.  
  1106.     return Py_BuildNone();
  1107. }
  1108.  
  1109. PyObject* netSendPartyInviteAnswerPacket(PyObject* poSelf, PyObject* poArgs)
  1110. {
  1111.     int vid;
  1112.     if (!PyTuple_GetInteger(poArgs, 0, &vid))
  1113.         return Py_BuildException();
  1114.     int answer;
  1115.     if (!PyTuple_GetInteger(poArgs, 1, &answer))
  1116.         return Py_BuildException();
  1117.  
  1118.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1119.     rns.SendPartyInviteAnswerPacket(vid, answer);
  1120.  
  1121.     return Py_BuildNone();
  1122. }
  1123.  
  1124. PyObject* netSendPartyExitPacket(PyObject* poSelf, PyObject* poArgs)
  1125. {
  1126.     IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
  1127.  
  1128.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1129.  
  1130.     DWORD dwVID = rPlayer.GetMainCharacterIndex();
  1131.     DWORD dwPID;
  1132.     if (rPlayer.PartyMemberVIDToPID(dwVID, &dwPID))
  1133.         rns.SendPartyRemovePacket(dwPID);
  1134.  
  1135.     return Py_BuildNone();
  1136. }
  1137.  
  1138. PyObject* netSendPartyRemovePacket(PyObject* poSelf, PyObject* poArgs)
  1139. {
  1140.     int vid;
  1141.     if (!PyTuple_GetInteger(poArgs, 0, &vid))
  1142.         return Py_BuildException();
  1143.  
  1144.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1145.     rns.SendPartyRemovePacket(vid);
  1146.  
  1147.     return Py_BuildNone();
  1148. }
  1149.  
  1150. PyObject* netSendPartySetStatePacket(PyObject* poSelf, PyObject* poArgs)
  1151. {
  1152.     int iVID;
  1153.     if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  1154.         return Py_BuildException();
  1155.     int iState;
  1156.     if (!PyTuple_GetInteger(poArgs, 1, &iState))
  1157.         return Py_BuildException();
  1158.     int iFlag;
  1159.     if (!PyTuple_GetInteger(poArgs, 2, &iFlag))
  1160.         return Py_BuildException();
  1161.  
  1162.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1163.     rns.SendPartySetStatePacket(iVID, iState, iFlag);
  1164.  
  1165.     return Py_BuildNone();
  1166. }
  1167.  
  1168. PyObject* netSendPartyUseSkillPacket(PyObject* poSelf, PyObject* poArgs)
  1169. {
  1170.     int iSkillIndex;
  1171.     if (!PyTuple_GetInteger(poArgs, 0, &iSkillIndex))
  1172.         return Py_BuildException();
  1173.     int iVID;
  1174.     if (!PyTuple_GetInteger(poArgs, 1, &iVID))
  1175.         return Py_BuildException();
  1176.  
  1177.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1178.     rns.SendPartyUseSkillPacket(iSkillIndex, iVID);
  1179.  
  1180.     return Py_BuildNone();
  1181. }
  1182.  
  1183. PyObject* netSendPartyParameterPacket(PyObject* poSelf, PyObject* poArgs)
  1184. {
  1185.     int iMode;
  1186.     if (!PyTuple_GetInteger(poArgs, 0, &iMode))
  1187.         return Py_BuildException();
  1188.  
  1189.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1190.     rns.SendPartyParameterPacket(iMode);
  1191.  
  1192.     return Py_BuildNone();
  1193. }
  1194.  
  1195. PyObject* netSendSafeboxSaveMoneyPacket(PyObject* poSelf, PyObject* poArgs)
  1196. {
  1197.     int iMoney;
  1198.     if (!PyTuple_GetInteger(poArgs, 0, &iMoney))
  1199.         return Py_BuildException();
  1200.  
  1201.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1202.     rns.SendSafeBoxMoneyPacket(SAFEBOX_MONEY_STATE_SAVE, iMoney);
  1203.  
  1204.     return Py_BuildNone();
  1205. }
  1206.  
  1207. PyObject* netSendSafeboxWithdrawMoneyPacket(PyObject* poSelf, PyObject* poArgs)
  1208. {
  1209.     int iMoney;
  1210.     if (!PyTuple_GetInteger(poArgs, 0, &iMoney))
  1211.         return Py_BuildException();
  1212.  
  1213.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1214.     rns.SendSafeBoxMoneyPacket(SAFEBOX_MONEY_STATE_WITHDRAW, iMoney);
  1215.  
  1216.     return Py_BuildNone();
  1217. }
  1218.  
  1219. PyObject* netSendSafeboxCheckinPacket(PyObject* poSelf, PyObject* poArgs)
  1220. {
  1221.     TItemPos InventoryPos;
  1222.     int iSafeBoxPos;
  1223.  
  1224.     switch (PyTuple_Size(poArgs))
  1225.     {
  1226.     case 2:
  1227.         InventoryPos.window_type = INVENTORY;
  1228.         if (!PyTuple_GetInteger(poArgs, 0, &InventoryPos.cell))
  1229.             return Py_BuildException();
  1230.         if (!PyTuple_GetInteger(poArgs, 1, &iSafeBoxPos))
  1231.             return Py_BuildException();
  1232.         break;
  1233.     case 3:
  1234.         if (!PyTuple_GetInteger(poArgs, 0, &InventoryPos.window_type))
  1235.             return Py_BuildException();
  1236.         if (!PyTuple_GetInteger(poArgs, 1, &InventoryPos.cell))
  1237.             return Py_BuildException();
  1238.         if (!PyTuple_GetInteger(poArgs, 2, &iSafeBoxPos))
  1239.             return Py_BuildException();
  1240.         break;
  1241.  
  1242.     }
  1243.  
  1244.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1245.     rns.SendSafeBoxCheckinPacket(InventoryPos, iSafeBoxPos);
  1246.  
  1247.     return Py_BuildNone();
  1248. }
  1249.  
  1250. PyObject* netSendSafeboxCheckoutPacket(PyObject* poSelf, PyObject* poArgs)
  1251. {
  1252.     int iSafeBoxPos;
  1253.     TItemPos InventoryPos;
  1254.    
  1255.     switch (PyTuple_Size(poArgs))
  1256.     {
  1257.     case 2:
  1258.         if (!PyTuple_GetInteger(poArgs, 0, &iSafeBoxPos))
  1259.             return Py_BuildException();
  1260.         if (!PyTuple_GetInteger(poArgs, 1, &InventoryPos.cell))
  1261.             return Py_BuildException();
  1262.         break;
  1263.     case 3:
  1264.         if (!PyTuple_GetInteger(poArgs, 0, &iSafeBoxPos))
  1265.             return Py_BuildException();
  1266.         if (!PyTuple_GetInteger(poArgs, 1, &InventoryPos.window_type))
  1267.             return Py_BuildException();
  1268.         if (!PyTuple_GetInteger(poArgs, 2, &InventoryPos.cell))
  1269.             return Py_BuildException();
  1270.         break;
  1271.     default:
  1272.         break;
  1273.     }
  1274.  
  1275.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1276.     rns.SendSafeBoxCheckoutPacket(iSafeBoxPos, InventoryPos);
  1277.  
  1278.     return Py_BuildNone();
  1279. }
  1280.  
  1281. PyObject* netSendSafeboxItemMovePacket(PyObject* poSelf, PyObject* poArgs)
  1282. {
  1283.     int iSourcePos;
  1284.     if (!PyTuple_GetInteger(poArgs, 0, &iSourcePos))
  1285.         return Py_BuildException();
  1286.     int iTargetPos;
  1287.     if (!PyTuple_GetInteger(poArgs, 1, &iTargetPos))
  1288.         return Py_BuildException();
  1289.     int iCount;
  1290.     if (!PyTuple_GetInteger(poArgs, 2, &iCount))
  1291.         return Py_BuildException();
  1292.  
  1293.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1294.     rns.SendSafeBoxItemMovePacket(iSourcePos, iTargetPos, iCount);
  1295.  
  1296.     return Py_BuildNone();
  1297. }
  1298.  
  1299. PyObject* netSendMallCheckoutPacket(PyObject* poSelf, PyObject* poArgs)
  1300. {
  1301.     int iMallPos;
  1302.     TItemPos InventoryPos;
  1303.  
  1304.     switch (PyTuple_Size(poArgs))
  1305.     {
  1306.     case 2:
  1307.         if (!PyTuple_GetInteger(poArgs, 0, &iMallPos))
  1308.             return Py_BuildException();
  1309.         if (!PyTuple_GetInteger(poArgs, 1, &InventoryPos.cell))
  1310.             return Py_BuildException();
  1311.         break;
  1312.     case 3:
  1313.         if (!PyTuple_GetInteger(poArgs, 0, &iMallPos))
  1314.             return Py_BuildException();
  1315.         if (!PyTuple_GetInteger(poArgs, 1, &InventoryPos.window_type))
  1316.             return Py_BuildException();
  1317.         if (!PyTuple_GetInteger(poArgs, 2, &InventoryPos.cell))
  1318.             return Py_BuildException();
  1319.         break;
  1320.     default:
  1321.         return Py_BuildException();
  1322.     }
  1323.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1324.     rns.SendMallCheckoutPacket(iMallPos, InventoryPos);
  1325.  
  1326.     return Py_BuildNone();
  1327. }
  1328.  
  1329. PyObject* netSendAnswerMakeGuildPacket(PyObject* poSelf, PyObject* poArgs)
  1330. {
  1331.     char * szName;
  1332.     if (!PyTuple_GetString(poArgs, 0, &szName))
  1333.         return Py_BuildException();
  1334.  
  1335.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1336.     rns.SendAnswerMakeGuildPacket(szName);
  1337.  
  1338.     return Py_BuildNone();
  1339. }
  1340.  
  1341. PyObject* netSendQuestInputStringPacket(PyObject* poSelf, PyObject* poArgs)
  1342. {
  1343.     char * szString;
  1344.     if (!PyTuple_GetString(poArgs, 0, &szString))
  1345.         return Py_BuildException();
  1346.  
  1347.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1348.     rns.SendQuestInputStringPacket(szString);
  1349.  
  1350.     return Py_BuildNone();
  1351. }
  1352.  
  1353. PyObject* netSendQuestConfirmPacket(PyObject* poSelf, PyObject* poArgs)
  1354. {
  1355.     int iAnswer;
  1356.     if (!PyTuple_GetInteger(poArgs, 0, &iAnswer))
  1357.         return Py_BuildException();
  1358.     int iPID;
  1359.     if (!PyTuple_GetInteger(poArgs, 1, &iPID))
  1360.         return Py_BuildException();
  1361.  
  1362.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1363.     rns.SendQuestConfirmPacket(iAnswer, iPID);
  1364.  
  1365.     return Py_BuildNone();
  1366. }
  1367.  
  1368. PyObject* netSendGuildAddMemberPacket(PyObject* poSelf, PyObject* poArgs)
  1369. {
  1370.     int iVID;
  1371.     if (!PyTuple_GetInteger(poArgs, 0, &iVID))
  1372.         return Py_BuildException();
  1373.  
  1374.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1375.     rns.SendGuildAddMemberPacket(iVID);
  1376.  
  1377.     return Py_BuildNone();
  1378. }
  1379.  
  1380. PyObject* netSendGuildRemoveMemberPacket(PyObject* poSelf, PyObject* poArgs)
  1381. {
  1382.     char * szKey;
  1383.     if (!PyTuple_GetString(poArgs, 0, &szKey))
  1384.         return Py_BuildException();
  1385.  
  1386.     CPythonGuild::TGuildMemberData * pGuildMemberData;
  1387.     if (!CPythonGuild::Instance().GetMemberDataPtrByName(szKey, &pGuildMemberData))
  1388.     {
  1389.         TraceError("netSendGuildRemoveMemberPacket(szKey=%s) - Can't Find Guild Member\n", szKey);
  1390.         return Py_BuildNone();
  1391.     }
  1392.  
  1393.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1394.     rns.SendGuildRemoveMemberPacket(pGuildMemberData->dwPID);
  1395.  
  1396.     return Py_BuildNone();
  1397. }
  1398.  
  1399. PyObject* netSendGuildChangeGradeNamePacket(PyObject* poSelf, PyObject* poArgs)
  1400. {
  1401.     int iGradeNumber;
  1402.     if (!PyTuple_GetInteger(poArgs, 0, &iGradeNumber))
  1403.         return Py_BuildException();
  1404.     char * szGradeName;
  1405.     if (!PyTuple_GetString(poArgs, 1, &szGradeName))
  1406.         return Py_BuildException();
  1407.  
  1408.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1409.     rns.SendGuildChangeGradeNamePacket(iGradeNumber, szGradeName);
  1410.  
  1411.     return Py_BuildNone();
  1412. }
  1413.  
  1414. PyObject* netSendGuildChangeGradeAuthorityPacket(PyObject* poSelf, PyObject* poArgs)
  1415. {
  1416.     int iGradeNumber;
  1417.     if (!PyTuple_GetInteger(poArgs, 0, &iGradeNumber))
  1418.         return Py_BuildException();
  1419.     int iAuthority;
  1420.     if (!PyTuple_GetInteger(poArgs, 1, &iAuthority))
  1421.         return Py_BuildException();
  1422.  
  1423.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1424.     rns.SendGuildChangeGradeAuthorityPacket(iGradeNumber, iAuthority);
  1425.  
  1426.     return Py_BuildNone();
  1427. }
  1428.  
  1429. PyObject* netSendGuildOfferPacket(PyObject* poSelf, PyObject* poArgs)
  1430. {
  1431.     int iExperience;
  1432.     if (!PyTuple_GetInteger(poArgs, 0, &iExperience))
  1433.         return Py_BuildException();
  1434.  
  1435.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1436.     rns.SendGuildOfferPacket(iExperience);
  1437.  
  1438.     return Py_BuildNone();
  1439. }
  1440.  
  1441. PyObject* netSnedGuildPostCommentPacket(PyObject* poSelf, PyObject* poArgs)
  1442. {
  1443.     char * szComment;
  1444.     if (!PyTuple_GetString(poArgs, 0, &szComment))
  1445.         return Py_BuildException();
  1446.  
  1447.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1448.     rns.SendGuildPostCommentPacket(szComment);
  1449.  
  1450.     return Py_BuildNone();
  1451. }
  1452.  
  1453. PyObject* netSnedGuildDeleteCommentPacket(PyObject* poSelf, PyObject* poArgs)
  1454. {
  1455.     int iIndex;
  1456.     if (!PyTuple_GetInteger(poArgs, 0, &iIndex))
  1457.         return Py_BuildException();
  1458.  
  1459.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1460.     rns.SendGuildDeleteCommentPacket(iIndex);
  1461.  
  1462.     return Py_BuildNone();
  1463. }
  1464.  
  1465. PyObject* netSendGuildRefreshCommentsPacket(PyObject* poSelf, PyObject* poArgs)
  1466. {
  1467.     int iHightestIndex;
  1468.     if (!PyTuple_GetInteger(poArgs, 0, &iHightestIndex))
  1469.         return Py_BuildException();
  1470.  
  1471.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1472.     rns.SendGuildRefreshCommentsPacket(iHightestIndex);
  1473.  
  1474.     return Py_BuildNone();
  1475. }
  1476.  
  1477. PyObject* netSendGuildChangeMemberGradePacket(PyObject* poSelf, PyObject* poArgs)
  1478. {
  1479.     int iPID;
  1480.     if (!PyTuple_GetInteger(poArgs, 0, &iPID))
  1481.         return Py_BuildException();
  1482.     int iGradeNumber;
  1483.     if (!PyTuple_GetInteger(poArgs, 1, &iGradeNumber))
  1484.         return Py_BuildException();
  1485.  
  1486.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1487.     rns.SendGuildChangeMemberGradePacket(iPID, iGradeNumber);
  1488.  
  1489.     return Py_BuildNone();
  1490. }
  1491.  
  1492. PyObject* netSendGuildUseSkillPacket(PyObject* poSelf, PyObject* poArgs)
  1493. {
  1494.     int iSkillID;
  1495.     if (!PyTuple_GetInteger(poArgs, 0, &iSkillID))
  1496.         return Py_BuildException();
  1497.     int iTargetVID;
  1498.     if (!PyTuple_GetInteger(poArgs, 1, &iTargetVID))
  1499.         return Py_BuildException();
  1500.  
  1501.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1502.     rns.SendGuildUseSkillPacket(iSkillID, iTargetVID);
  1503.  
  1504.     return Py_BuildNone();
  1505. }
  1506.  
  1507. PyObject* netSendGuildChangeMemberGeneralPacket(PyObject* poSelf, PyObject* poArgs)
  1508. {
  1509.     int iPID;
  1510.     if (!PyTuple_GetInteger(poArgs, 0, &iPID))
  1511.         return Py_BuildException();
  1512.     int iFlag;
  1513.     if (!PyTuple_GetInteger(poArgs, 1, &iFlag))
  1514.         return Py_BuildException();
  1515.  
  1516.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1517.     rns.SendGuildChangeMemberGeneralPacket(iPID, iFlag);
  1518.  
  1519.     return Py_BuildNone();
  1520. }
  1521.  
  1522. PyObject* netSendGuildInviteAnswerPacket(PyObject* poSelf, PyObject* poArgs)
  1523. {
  1524.     int iGuildID;
  1525.     if (!PyTuple_GetInteger(poArgs, 0, &iGuildID))
  1526.         return Py_BuildException();
  1527.     int iAnswer;
  1528.     if (!PyTuple_GetInteger(poArgs, 1, &iAnswer))
  1529.         return Py_BuildException();
  1530.  
  1531.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1532.     rns.SendGuildInviteAnswerPacket(iGuildID, iAnswer);
  1533.  
  1534.     return Py_BuildNone();
  1535. }
  1536.  
  1537. PyObject* netSendGuildChargeGSPPacket(PyObject* poSelf, PyObject* poArgs)
  1538. {
  1539.     int iGSP;
  1540.     if (!PyTuple_GetInteger(poArgs, 0, &iGSP))
  1541.         return Py_BuildException();
  1542.  
  1543.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1544.     rns.SendGuildChargeGSPPacket(iGSP);
  1545.  
  1546.     return Py_BuildNone();
  1547. }
  1548.  
  1549. PyObject* netSendGuildDepositMoneyPacket(PyObject* poSelf, PyObject* poArgs)
  1550. {
  1551.     int iGSP;
  1552.     if (!PyTuple_GetInteger(poArgs, 0, &iGSP))
  1553.         return Py_BuildException();
  1554.  
  1555.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1556.     rns.SendGuildDepositMoneyPacket(iGSP);
  1557.  
  1558.     return Py_BuildNone();
  1559. }
  1560.  
  1561. PyObject* netSendGuildWithdrawMoneyPacket(PyObject* poSelf, PyObject* poArgs)
  1562. {
  1563.     int iGSP;
  1564.     if (!PyTuple_GetInteger(poArgs, 0, &iGSP))
  1565.         return Py_BuildException();
  1566.  
  1567.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1568.     rns.SendGuildWithdrawMoneyPacket(iGSP);
  1569.  
  1570.     return Py_BuildNone();
  1571. }
  1572.  
  1573. PyObject* netSendRequestRefineInfoPacket(PyObject* poSelf, PyObject* poArgs)
  1574. {
  1575.     int iSlotIndex;
  1576.     if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  1577.         return Py_BuildException();
  1578.  
  1579. //  CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1580. //  rns.SendRequestRefineInfoPacket(iSlotIndex);
  1581.     assert(!"netSendRequestRefineInfoPacket - 더이상 사용하지 않는 함수 입니다");
  1582.  
  1583.     return Py_BuildNone();
  1584. }
  1585.  
  1586. PyObject* netSendRefinePacket(PyObject* poSelf, PyObject* poArgs)
  1587. {
  1588.     int iSlotIndex;
  1589.     if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  1590.         return Py_BuildException();
  1591.     int iType;
  1592.     if (!PyTuple_GetInteger(poArgs, 1, &iType))
  1593.         return Py_BuildException();
  1594.  
  1595.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1596.     rns.SendRefinePacket(iSlotIndex, iType);
  1597.  
  1598.     return Py_BuildNone();
  1599. }
  1600.  
  1601. PyObject* netSendSelectItemPacket(PyObject* poSelf, PyObject* poArgs)
  1602. {
  1603.     int iItemPos;
  1604.     if (!PyTuple_GetInteger(poArgs, 0, &iItemPos))
  1605.         return Py_BuildException();
  1606.  
  1607.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1608.     rns.SendSelectItemPacket(iItemPos);
  1609.  
  1610.     return Py_BuildNone();
  1611. }
  1612.  
  1613. PyObject* netSetPacketSequenceMode(PyObject* poSelf, PyObject* poArgs)
  1614. {
  1615.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1616.     CAccountConnector & rkAccountConnector = CAccountConnector::Instance();
  1617.     rns.SetPacketSequenceMode(true);
  1618.     rkAccountConnector.SetPacketSequenceMode(true);
  1619.  
  1620.     return Py_BuildNone();
  1621. }
  1622.  
  1623. PyObject* netSetEmpireLanguageMode(PyObject* poSelf, PyObject* poArgs)
  1624. {
  1625.     int iMode;
  1626.     if (!PyTuple_GetInteger(poArgs, 0, &iMode))
  1627.         return Py_BuildException();
  1628.  
  1629.     //CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1630.     gs_bEmpireLanuageEnable = iMode;
  1631.  
  1632.     return Py_BuildNone();
  1633. }
  1634.  
  1635. PyObject* netSetSkillGroupFake(PyObject* poSelf, PyObject* poArgs)
  1636. {
  1637.     int iIndex;
  1638.     if (!PyTuple_GetInteger(poArgs, 0, &iIndex))
  1639.         return Py_BuildException();
  1640.  
  1641.     CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
  1642.     rns.__TEST_SetSkillGroupFake(iIndex);
  1643.  
  1644.     return Py_BuildNone();
  1645. }
  1646.  
  1647. #include "GuildMarkUploader.h"
  1648. #include "GuildMarkDownloader.h"
  1649.  
  1650. PyObject* netSendGuildSymbol(PyObject* poSelf, PyObject* poArgs)
  1651. {
  1652.     char * szIP;
  1653.     if (!PyTuple_GetString(poArgs, 0, &szIP))
  1654.         return Py_BuildException();
  1655.     int iPort;
  1656.     if (!PyTuple_GetInteger(poArgs, 1, &iPort))
  1657.         return Py_BuildException();
  1658.     char * szFileName;
  1659.     if (!PyTuple_GetString(poArgs, 2, &szFileName))
  1660.         return Py_BuildException();
  1661.     int iGuildID;
  1662.     if (!PyTuple_GetInteger(poArgs, 3, &iGuildID))
  1663.         return Py_BuildException();
  1664.  
  1665.     CNetworkAddress kAddress;
  1666.     kAddress.Set(szIP, iPort);
  1667.  
  1668.     UINT uiError;
  1669.  
  1670.     CGuildMarkUploader& rkGuildMarkUploader=CGuildMarkUploader::Instance();
  1671.     if (!rkGuildMarkUploader.ConnectToSendSymbol(kAddress, 0, 0, iGuildID, szFileName, &uiError))
  1672.     {
  1673.         assert(!"Failed connecting to send symbol");
  1674.     }
  1675.  
  1676.     return Py_BuildNone();
  1677. }
  1678.  
  1679. PyObject* netDisconnectUploader(PyObject* poSelf, PyObject* poArgs)
  1680. {
  1681.     CGuildMarkUploader& rkGuildMarkUploader=CGuildMarkUploader::Instance();
  1682.     rkGuildMarkUploader.Disconnect();
  1683.     return Py_BuildNone();
  1684. }
  1685.  
  1686. PyObject* netRecvGuildSymbol(PyObject* poSelf, PyObject* poArgs)
  1687. {
  1688.     char * szIP;
  1689.     if (!PyTuple_GetString(poArgs, 0, &szIP))
  1690.         return Py_BuildException();
  1691.     int iPort;
  1692.     if (!PyTuple_GetInteger(poArgs, 1, &iPort))
  1693.         return Py_BuildException();
  1694.     int iGuildID;
  1695.     if (!PyTuple_GetInteger(poArgs, 2, &iGuildID))
  1696.         return Py_BuildException();
  1697.  
  1698.     CNetworkAddress kAddress;
  1699.     kAddress.Set(szIP, iPort);
  1700.  
  1701.     std::vector<DWORD> kVec_dwGuildID;
  1702.     kVec_dwGuildID.clear();
  1703.     kVec_dwGuildID.push_back(iGuildID);
  1704.  
  1705.     CGuildMarkDownloader& rkGuildMarkDownloader=CGuildMarkDownloader::Instance();
  1706.     if (!rkGuildMarkDownloader.ConnectToRecvSymbol(kAddress, 0, 0, kVec_dwGuildID))
  1707.     {
  1708.         assert(!"Failed connecting to recv symbol");
  1709.     }
  1710.  
  1711.     return Py_BuildNone();
  1712. }
  1713.  
  1714. PyObject* netRegisterErrorLog(PyObject* poSelf, PyObject* poArgs)
  1715. {
  1716.     char * szLog;
  1717.     if (!PyTuple_GetString(poArgs, 0, &szLog))
  1718.         return Py_BuildException();
  1719.  
  1720.     return Py_BuildNone();
  1721. }
  1722.  
  1723. #ifdef ENABLE_SHOW_CHEST_DROP
  1724. PyObject* netSendChestDropInfo(PyObject* poSelf, PyObject* poArgs)
  1725. {
  1726.     int iSlotIndex;
  1727.     if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
  1728.         return Py_BadArgument();
  1729.  
  1730.     CPythonNetworkStream& rkNetStream = CPythonNetworkStream::Instance();
  1731.     rkNetStream.SendChestDropInfo(iSlotIndex);
  1732.  
  1733.     return Py_BuildNone();
  1734. }
  1735. #endif
  1736.  
  1737. void initnet()
  1738. {
  1739.     static PyMethodDef s_methods[] =
  1740.     {
  1741.         { "GetBettingGuildWarValue",            netGetBettingGuildWarValue,             METH_VARARGS },
  1742.         { "EnableChatInsultFilter",             netEnableChatInsultFilter,              METH_VARARGS },
  1743.         // { "SetServerInfo",                       netSetServerInfo,                       METH_VARARGS },
  1744.         // { "GetServerInfo",                       netGetServerInfo,                       METH_VARARGS },
  1745.         { "PreserveServerCommand",              netPreserveServerCommand,               METH_VARARGS },
  1746.         { "GetPreservedServerCommand",          netGetPreservedServerCommand,           METH_VARARGS },
  1747.         { "SetGameServInfo",                    netSetServerInfo,                       METH_VARARGS },
  1748.         {"SetGameServInfo", netSetServerInfo, METH_VARARGS },
  1749.         {"GetServerInfoGame", netGetServerInfo, METH_VARARGS },
  1750.  
  1751.         { "StartGame",                          netStartGame,                           METH_VARARGS },
  1752.         { "Warp",                               netWarp,                                METH_VARARGS },
  1753.         { "SetMarkServer",                      netSetMarkServer,                       METH_VARARGS },
  1754.         { "IsChatInsultIn",                     netIsChatInsultIn,                      METH_VARARGS },
  1755.         { "IsInsultIn",                         netIsInsultIn,                          METH_VARARGS },
  1756.         { "LoadInsultList",                     netLoadInsultList,                      METH_VARARGS },
  1757.         { "UploadMark",                         netUploadMark,                          METH_VARARGS },
  1758.         { "UploadSymbol",                       netUploadSymbol,                        METH_VARARGS },
  1759.         { "GetGuildID",                         netGetGuildID,                          METH_VARARGS },
  1760.         { "GetEmpireID",                        netGetEmpireID,                         METH_VARARGS },
  1761.         { "GetMainActorVID",                    netGetMainActorVID,                     METH_VARARGS },
  1762.         { "GetMainActorRace",                   netGetMainActorRace,                    METH_VARARGS },
  1763.         { "GetMainActorEmpire",                 netGetMainActorEmpire,                  METH_VARARGS },
  1764.         { "GetMainActorSkillGroup",             netGetMainActorSkillGroup,              METH_VARARGS },
  1765.         { "GetAccountCharacterSlotDataInteger", netGetAccountCharacterSlotDataInteger,  METH_VARARGS },
  1766.         { "GetAccountCharacterSlotDataString",  netGetAccountCharacterSlotDataString,   METH_VARARGS },
  1767.  
  1768.         // FIELD_MUSIC
  1769.         { "GetFieldMusicFileName",              netGetFieldMusicFileName,               METH_VARARGS },
  1770.         { "GetFieldMusicVolume",                netGetFieldMusicVolume,                 METH_VARARGS },
  1771.         // END_OF_FIELD_MUSIC
  1772.  
  1773.         { "ToggleGameDebugInfo",                netToggleGameDebugInfo,                 METH_VARARGS },
  1774.         { "SetLoginInfo",                       netSetLoginInfo,                        METH_VARARGS },
  1775.         { "SetPhaseWindow",                     netSetPhaseWindow,                      METH_VARARGS },
  1776.         { "ClearPhaseWindow",                   netClearPhaseWindow,                    METH_VARARGS },
  1777.         { "SetServerCommandParserWindow",       netSetServerCommandParserWindow,        METH_VARARGS },
  1778.         { "SetAccountConnectorHandler",         netSetAccountConnectorHandler,          METH_VARARGS },
  1779.         { "SetHandler",                         netSetHandler,                          METH_VARARGS },
  1780.         { "SetTCPRecvBufferSize",               netSetTCPRecvBufferSize,                METH_VARARGS },
  1781.         { "SetTCPSendBufferSize",               netSetTCPSendBufferSize,                METH_VARARGS },
  1782.         { "DirectEnter",                        netDirectEnter,                         METH_VARARGS },
  1783.  
  1784.         { "LogOutGame",                         netLogOutGame,                          METH_VARARGS },
  1785.         { "ExitGame",                           netExitGame,                            METH_VARARGS },
  1786.         { "ExitApplication",                    netExitApplication,                     METH_VARARGS },
  1787.         { "ConnectTCP",                         netConnectTCP,                          METH_VARARGS },
  1788.         { "ConnectToAccountServer",             netConnectToAccountServer,              METH_VARARGS },
  1789. #ifdef ENABLE_SEND_TARGET_INFO
  1790.         { "SendTargetInfoLoad",                 netTargetInfoLoad,                      METH_VARARGS },
  1791. #endif
  1792. #ifdef ENABLE_SHOW_CHEST_DROP
  1793.         { "SendChestDropInfo",                  netSendChestDropInfo,                   METH_VARARGS },
  1794. #endif
  1795.  
  1796.         { "SendLoginPacket",                    netSendLoginPacket,                     METH_VARARGS },
  1797.         { "SendSelectEmpirePacket",             netSendSelectEmpirePacket,              METH_VARARGS },
  1798.         { "SendSelectCharacterPacket",          netSendSelectCharacterPacket,           METH_VARARGS },
  1799.         { "SendChangeNamePacket",               netSendChangeNamePacket,                METH_VARARGS },
  1800.         { "SendCreateCharacterPacket",          netSendCreateCharacterPacket,           METH_VARARGS },
  1801.         { "SendDestroyCharacterPacket",         netSendDestroyCharacterPacket,          METH_VARARGS },
  1802.         { "SendEnterGamePacket",                netSendEnterGamePacket,                 METH_VARARGS },
  1803.  
  1804.         { "SendItemUsePacket",                  netSendItemUsePacket,                   METH_VARARGS },
  1805.         { "SendItemUseToItemPacket",            netSendItemUseToItemPacket,             METH_VARARGS },
  1806.         { "SendItemDropPacket",                 netSendItemDropPacket,                  METH_VARARGS },
  1807.         { "SendItemDropPacketNew",              netSendItemDropPacketNew,               METH_VARARGS },
  1808.         { "SendItemDestroyPacket",              netSendItemDestroyPacket,               METH_VARARGS },
  1809.         { "SendElkDropPacket",                  netSendElkDropPacket,                   METH_VARARGS },
  1810.         { "SendGoldDropPacketNew",              netSendGoldDropPacketNew,               METH_VARARGS },
  1811.         { "SendItemMovePacket",                 netSendItemMovePacket,                  METH_VARARGS },
  1812.         { "SendItemPickUpPacket",               netSendItemPickUpPacket,                METH_VARARGS },
  1813.         { "SendGiveItemPacket",                 netSendGiveItemPacket,                  METH_VARARGS },
  1814.  
  1815.         { "SetOfflinePhase",                    netSetOfflinePhase,                     METH_VARARGS },
  1816.         { "Disconnect",                         netDisconnect,                          METH_VARARGS },
  1817.         { "IsConnect",                          netIsConnect,                           METH_VARARGS },
  1818.  
  1819.         { "SendChatPacket",                     netSendChatPacket,                      METH_VARARGS },
  1820.         { "SendEmoticon",                       netSendEmoticon,                        METH_VARARGS },
  1821.         { "SendWhisperPacket",                  netSendWhisperPacket,                   METH_VARARGS },
  1822.         { "SendMobileMessagePacket",            netSendMobileMessagePacket,             METH_VARARGS },
  1823.  
  1824.         { "SendCharacterPositionPacket",        netSendCharacterPositionPacket,         METH_VARARGS },
  1825.  
  1826.         { "SendShopEndPacket",                  netSendShopEndPacket,                   METH_VARARGS },
  1827.         { "SendShopBuyPacket",                  netSendShopBuyPacket,                   METH_VARARGS },
  1828.         { "SendShopSellPacket",                 netSendShopSellPacket,                  METH_VARARGS },
  1829.         { "SendShopSellPacketNew",              netSendShopSellPacketNew,               METH_VARARGS },
  1830.  
  1831.         { "SendExchangeStartPacket",            netSendExchangeStartPacket,             METH_VARARGS },
  1832.         { "SendDiceStartPacket",                netSendDiceStartPacket,                 METH_VARARGS },
  1833.         { "SendExchangeItemAddPacket",          netSendExchangeItemAddPacket,           METH_VARARGS },
  1834.         { "SendExchangeItemDelPacket",          netSendExchangeItemDelPacket,           METH_VARARGS },
  1835.         { "SendExchangeElkAddPacket",           netSendExchangeElkAddPacket,            METH_VARARGS },
  1836.         { "SendExchangeAcceptPacket",           netSendExchangeAcceptPacket,            METH_VARARGS },
  1837.         { "SendExchangeExitPacket",             netSendExchangeExitPacket,              METH_VARARGS },
  1838.  
  1839.         { "SendOnClickPacket",                  netOnClickPacket,                       METH_VARARGS },
  1840.        
  1841.         // Emoticon String
  1842.         { "RegisterEmoticonString",             netRegisterEmoticonString,              METH_VARARGS },
  1843.  
  1844.         // Messenger
  1845.         { "SendMessengerAddByVIDPacket",        netSendMessengerAddByVIDPacket,         METH_VARARGS },
  1846.         { "SendMessengerAddByNamePacket",       netSendMessengerAddByNamePacket,        METH_VARARGS },
  1847.         { "SendMessengerRemovePacket",          netSendMessengerRemovePacket,           METH_VARARGS },
  1848.  
  1849.         // Party
  1850.         { "SendPartyInvitePacket",              netSendPartyInvitePacket,               METH_VARARGS },
  1851.         { "SendPartyInviteAnswerPacket",        netSendPartyInviteAnswerPacket,         METH_VARARGS },
  1852.         { "SendPartyExitPacket",                netSendPartyExitPacket,                 METH_VARARGS },
  1853.         { "SendPartyRemovePacket",              netSendPartyRemovePacket,               METH_VARARGS },
  1854.         { "SendPartySetStatePacket",            netSendPartySetStatePacket,             METH_VARARGS },
  1855.         { "SendPartyUseSkillPacket",            netSendPartyUseSkillPacket,             METH_VARARGS },
  1856.         { "SendPartyParameterPacket",           netSendPartyParameterPacket,            METH_VARARGS },
  1857.  
  1858.         // Safebox
  1859.         { "SendSafeboxSaveMoneyPacket",         netSendSafeboxSaveMoneyPacket,          METH_VARARGS },
  1860.         { "SendSafeboxWithdrawMoneyPacket",     netSendSafeboxWithdrawMoneyPacket,      METH_VARARGS },
  1861.         { "SendSafeboxCheckinPacket",           netSendSafeboxCheckinPacket,            METH_VARARGS },
  1862.         { "SendSafeboxCheckoutPacket",          netSendSafeboxCheckoutPacket,           METH_VARARGS },
  1863.         { "SendSafeboxItemMovePacket",          netSendSafeboxItemMovePacket,           METH_VARARGS },
  1864.  
  1865.         // Mall
  1866.         { "SendMallCheckoutPacket",             netSendMallCheckoutPacket,              METH_VARARGS },
  1867.  
  1868.         // Guild
  1869.         { "SendAnswerMakeGuildPacket",              netSendAnswerMakeGuildPacket,               METH_VARARGS },
  1870.         { "SendQuestInputStringPacket",             netSendQuestInputStringPacket,              METH_VARARGS },
  1871.         { "SendQuestConfirmPacket",                 netSendQuestConfirmPacket,                  METH_VARARGS },
  1872.         { "SendGuildAddMemberPacket",               netSendGuildAddMemberPacket,                METH_VARARGS },
  1873.         { "SendGuildRemoveMemberPacket",            netSendGuildRemoveMemberPacket,             METH_VARARGS },
  1874.         { "SendGuildChangeGradeNamePacket",         netSendGuildChangeGradeNamePacket,          METH_VARARGS },
  1875.         { "SendGuildChangeGradeAuthorityPacket",    netSendGuildChangeGradeAuthorityPacket,     METH_VARARGS },
  1876.         { "SendGuildOfferPacket",                   netSendGuildOfferPacket,                    METH_VARARGS },
  1877.         { "SendGuildPostCommentPacket",             netSnedGuildPostCommentPacket,              METH_VARARGS },
  1878.         { "SendGuildDeleteCommentPacket",           netSnedGuildDeleteCommentPacket,            METH_VARARGS },
  1879.         { "SendGuildRefreshCommentsPacket",         netSendGuildRefreshCommentsPacket,          METH_VARARGS },
  1880.         { "SendGuildChangeMemberGradePacket",       netSendGuildChangeMemberGradePacket,        METH_VARARGS },
  1881.         { "SendGuildUseSkillPacket",                netSendGuildUseSkillPacket,                 METH_VARARGS },
  1882.         { "SendGuildChangeMemberGeneralPacket",     netSendGuildChangeMemberGeneralPacket,      METH_VARARGS },
  1883.         { "SendGuildInviteAnswerPacket",            netSendGuildInviteAnswerPacket,             METH_VARARGS },
  1884.         { "SendGuildChargeGSPPacket",               netSendGuildChargeGSPPacket,                METH_VARARGS },
  1885.         { "SendGuildDepositMoneyPacket",            netSendGuildDepositMoneyPacket,             METH_VARARGS },
  1886.         { "SendGuildWithdrawMoneyPacket",           netSendGuildWithdrawMoneyPacket,            METH_VARARGS },
  1887.  
  1888.         // Refine
  1889.         { "SendRequestRefineInfoPacket",            netSendRequestRefineInfoPacket,             METH_VARARGS },
  1890.         { "SendRefinePacket",                       netSendRefinePacket,                        METH_VARARGS },
  1891.         { "SendSelectItemPacket",                   netSendSelectItemPacket,                    METH_VARARGS },
  1892.  
  1893.         // SYSTEM
  1894.         { "SetPacketSequenceMode",                  netSetPacketSequenceMode,                   METH_VARARGS },
  1895.         { "SetEmpireLanguageMode",                  netSetEmpireLanguageMode,                   METH_VARARGS },
  1896.  
  1897.         // For Test
  1898.         { "SetSkillGroupFake",                      netSetSkillGroupFake,                       METH_VARARGS },
  1899.  
  1900.         // Guild Symbol
  1901.         { "SendGuildSymbol",                        netSendGuildSymbol,                         METH_VARARGS },
  1902.         { "DisconnectUploader",                     netDisconnectUploader,                      METH_VARARGS },
  1903.         { "RecvGuildSymbol",                        netRecvGuildSymbol,                         METH_VARARGS },
  1904.  
  1905.         // Log
  1906.         { "RegisterErrorLog",                       netRegisterErrorLog,                        METH_VARARGS },
  1907.  
  1908.         { NULL,                                     NULL,                                       NULL },
  1909.     };
  1910.  
  1911.     PyObject* poModule = Py_InitModule("net", s_methods);
  1912.  
  1913.     PyModule_AddIntConstant(poModule, "ERROR_NONE", CPythonNetworkStream::ERROR_NONE);
  1914.     PyModule_AddIntConstant(poModule, "ERROR_CONNECT_MARK_SERVER", CPythonNetworkStream::ERROR_CONNECT_MARK_SERVER);
  1915.     PyModule_AddIntConstant(poModule, "ERROR_LOAD_MARK", CPythonNetworkStream::ERROR_LOAD_MARK);
  1916.     PyModule_AddIntConstant(poModule, "ERROR_MARK_WIDTH", CPythonNetworkStream::ERROR_MARK_WIDTH);
  1917.     PyModule_AddIntConstant(poModule, "ERROR_MARK_HEIGHT", CPythonNetworkStream::ERROR_MARK_HEIGHT);
  1918.  
  1919.     // MARK_BUG_FIX
  1920.     PyModule_AddIntConstant(poModule, "ERROR_MARK_UPLOAD_NEED_RECONNECT", CPythonNetworkStream::ERROR_MARK_UPLOAD_NEED_RECONNECT); 
  1921.     PyModule_AddIntConstant(poModule, "ERROR_MARK_CHECK_NEED_RECONNECT", CPythonNetworkStream::ERROR_MARK_CHECK_NEED_RECONNECT);   
  1922.     // END_OF_MARK_BUG_FIX
  1923.  
  1924.     PyModule_AddIntConstant(poModule, "PHASE_WINDOW_LOGIN", CPythonNetworkStream::PHASE_WINDOW_LOGIN);
  1925.     PyModule_AddIntConstant(poModule, "PHASE_WINDOW_SELECT", CPythonNetworkStream::PHASE_WINDOW_SELECT);
  1926.     PyModule_AddIntConstant(poModule, "PHASE_WINDOW_CREATE", CPythonNetworkStream::PHASE_WINDOW_CREATE);
  1927.     PyModule_AddIntConstant(poModule, "PHASE_WINDOW_LOAD", CPythonNetworkStream::PHASE_WINDOW_LOAD);
  1928.     PyModule_AddIntConstant(poModule, "PHASE_WINDOW_GAME", CPythonNetworkStream::PHASE_WINDOW_GAME);
  1929.     PyModule_AddIntConstant(poModule, "PHASE_WINDOW_EMPIRE", CPythonNetworkStream::PHASE_WINDOW_EMPIRE);
  1930.     PyModule_AddIntConstant(poModule, "PHASE_WINDOW_LOGO", CPythonNetworkStream::PHASE_WINDOW_LOGO);
  1931.  
  1932.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_ID", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_ID);
  1933.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_NAME", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_NAME);
  1934.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_RACE", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_RACE);
  1935.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_LEVEL", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_LEVEL);
  1936.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_STR", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_STR);
  1937.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_DEX", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_DEX);
  1938.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_INT", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_INT);
  1939.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_HTH", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_HTH);
  1940.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_PLAYTIME", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_PLAYTIME);
  1941.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_FORM", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_FORM);
  1942.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_ADDR", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_ADDR);
  1943.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_PORT", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_PORT);
  1944.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_GUILD_ID", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_GUILD_ID);
  1945.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_GUILD_NAME", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_GUILD_NAME);
  1946.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_CHANGE_NAME_FLAG", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_CHANGE_NAME_FLAG);
  1947.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_HAIR", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_HAIR);
  1948. #ifdef ENABLE_SASH_SYSTEM
  1949.     PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_SASH", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_SASH);
  1950. #endif
  1951.  
  1952.     PyModule_AddIntConstant(poModule, "SERVER_COMMAND_LOG_OUT", CPythonNetworkStream::SERVER_COMMAND_LOG_OUT);
  1953.     PyModule_AddIntConstant(poModule, "SERVER_COMMAND_RETURN_TO_SELECT_CHARACTER",  CPythonNetworkStream::SERVER_COMMAND_RETURN_TO_SELECT_CHARACTER);
  1954.     PyModule_AddIntConstant(poModule, "SERVER_COMMAND_QUIT",    CPythonNetworkStream::SERVER_COMMAND_QUIT);
  1955.  
  1956.     PyModule_AddIntConstant(poModule, "EMPIRE_A", 1);
  1957.     PyModule_AddIntConstant(poModule, "EMPIRE_B", 2);
  1958.     PyModule_AddIntConstant(poModule, "EMPIRE_C", 3);
  1959.     PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_REFINE_FAIL", DS_SUB_HEADER_REFINE_FAIL);
  1960.     PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_REFINE_FAIL_MAX_REFINE", DS_SUB_HEADER_REFINE_FAIL_MAX_REFINE);
  1961.     PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL", DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL);
  1962.     PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY", DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY);
  1963.     PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MATERIAL", DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MATERIAL);
  1964.     PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_REFINE_FAIL_TOO_MUCH_MATERIAL", DS_SUB_HEADER_REFINE_FAIL_TOO_MUCH_MATERIAL);
  1965.     PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_REFINE_SUCCEED", DS_SUB_HEADER_REFINE_SUCCEED);
  1966. }
Add Comment
Please, Sign In to add comment