1. *game.py
  2. Find:
  3. # PRIVATE_SHOP_PRICE_LIST
  4. "MyShopPriceList" : self.__PrivateShop_PriceList,
  5. # END_OF_PRIVATE_SHOP_PRICE_LIST
  6. Add it under:
  7. "MakeVisibleOX" : self.__SetAllPlayersVisible,
  8. "RemoveTitleOX" : self.__ClearPlayersTitle,
  9. Find:
  10. def __InGameShop_Show(self, url):
  11. if constInfo.IN_GAME_SHOP_ENABLE:
  12. self.interface.OpenWebWindow(url)
  13. Add it under:
  14. def __SetAllPlayersVisible(self):
  15. chrmgr.ShowAllPlayers()
  16. def __ClearPlayersTitle(self):
  17. chrmgr.RemoveAllPlayersTitle()
  18. *char.cpp
  19. Add in inculde:
  20. #include "OXEvent.h"
  21. Find:
  22. if (GetGuild())
  23. GetGuild()->LogoutMember(this);
  24. Add it under:
  25. if (IsAffectFlag(AFF_INVISIBILITY) && GetMapIndex() == OXEVENT_MAP_INDEX)
  26. RemoveAffect(AFFECT_INVISIBILITY);
  27. *oxevent.cpp
  28. Find:
  29. if (GetStatus() == OXEVENT_FINISH)
  30. {
  31. sys_log(0, "OXEVENT : map finished. but char enter. %s", pkChar->GetName());
  32. return false;
  33. }
  34. Change:
  35. if (GetStatus() == OXEVENT_FINISH && !pkChar->IsGM())
  36. {
  37. sys_log(0, "OXEVENT : map finished. but char enter. %s", pkChar->GetName());
  38. return false;
  39. }
  40. Find:
  41. else if (pos.x == 896300 && pos.y == 28900)
  42. {
  43. return EnterAudience(pkChar);
  44. }
  45. Change:
  46. else if (pos.x == 896300 && pos.y == 28900 || pkChar->IsGM())
  47. {
  48. return EnterAudience(pkChar);
  49. }
  50. Find:
  51. answer->answer = m_vec_quiz[level][idx].answer;
  52. timelimit -= 15;
  53. m_timedEvent = event_create(oxevent_timer, answer, PASSES_PER_SEC(timelimit));
  54. SetStatus(OXEVENT_QUIZ);
  55. Add it under:
  56. itertype(m_map_attender) iter = m_map_attender.begin();
  57. LPCHARACTER pkChar = NULL;
  58. for (; iter != m_map_attender.end(); ++iter) {
  59. pkChar = CHARACTER_MANAGER::instance().FindByPID(iter->second);
  60. if (pkChar){
  61. if (!pkChar->IsGM()){
  62. if (pkChar->IsAffectFlag(AFF_INVISIBILITY)){
  63. sys_err("%s already invisible", pkChar->GetName());
  64. }
  65. else {
  66. pkChar->AddAffect(AFFECT_INVISIBILITY, POINT_NONE, 0, AFF_INVISIBILITY, 30, 0, true);
  67. pkChar->ChatPacket(CHAT_TYPE_INFO, "You passed the Invisible mode! You will continue this way until you answer the question.");
  68. }
  69. }
  70. }
  71. }
  72. itertype(m_map_char) iter2 = m_map_char.begin();
  73. LPCHARACTER pkChar2 = NULL;
  74. for (; iter2 != m_map_char.end(); ++iter2) {
  75. pkChar2 = CHARACTER_MANAGER::instance().FindByPID(iter2->second);
  76. if (pkChar2){
  77. if (pkChar2->IsGM()){
  78. pkChar2->ChatPacket(CHAT_TYPE_COMMAND, "MakeVisibleOX");
  79. }
  80. }
  81. }
  82. Find:
  83. pos = pkChar->GetXYZ();
  84. if (pos.x < rect[0] || pos.x > rect[2] || pos.y < rect[1] || pos.y > rect[3])
  85. {
  86. pkChar->EffectPacket(SE_FAIL);
  87. iter_tmp = iter;
  88. iter++;
  89. m_map_attender.erase(iter_tmp);
  90. m_map_miss.insert(std::make_pair(pkChar->GetPlayerID(), pkChar->GetPlayerID()));
  91. }
  92. Add it upper:
  93. if (!pkChar->IsGM()){
  94. if (pkChar->IsAffectFlag(AFF_INVISIBILITY)){
  95. pkChar->RemoveAffect(AFFECT_INVISIBILITY);
  96. }
  97. else{
  98. sys_err("%s isn't invisible", pkChar->GetName());
  99. }
  100. }
  101. else {
  102. pkChar->ChatPacket(CHAT_TYPE_COMMAND, "RemoveTitleOX");
  103. }
  104. *PythonCharacterManagerModule.cpp
  105. Find:
  106. PyObject * chrmgrGetPickedVID(PyObject* poSelf, PyObject* poArgs)
  107. {
  108. CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
  109. DWORD dwPickedActorID;
  110. if (rkChrMgr.OLD_GetPickedInstanceVID(&dwPickedActorID))
  111. return Py_BuildValue("i", dwPickedActorID);
  112. else
  113. return Py_BuildValue("i", -1);
  114. }
  115. Add it under:
  116. PyObject * chrmgrShowAllPlayers(PyObject* poSelf, PyObject* poArgs)
  117. {
  118. CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance();
  119. rkChrMgr.ShowAllPlayers();
  120. return Py_BuildNone();
  121. }
  122. PyObject * chrmgrRemoveAllPlayersTitle(PyObject* poSelf, PyObject* poArgs)
  123. {
  124. CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance();
  125. rkChrMgr.RemoveAllPlayersTitle();
  126. return Py_BuildNone();
  127. }
  128. Find:
  129. { "RegisterCacheMotionData", chrmgrRegisterCacheMotionData, METH_VARARGS },
  130. Add it under:
  131. { "ShowAllPlayers", chrmgrShowAllPlayers, METH_VARARGS },
  132. { "RemoveAllPlayersTitle", chrmgrRemoveAllPlayersTitle, METH_VARARGS },
  133. *PythonCharacterManager.h
  134. Find:
  135. void GetInfo(std::string* pstInfo);
  136. Add it under:
  137. void ShowAllPlayers();
  138. void RemoveAllPlayersTitle();
  139. *PythonCharacterManager.cpp
  140. Find:
  141. #include "packet.h"
  142. Add it under:
  143. #include "PythonChat.h"
  144. #include "PythonTextTail.h"
  145. Find:
  146. void CPythonCharacterManager::ChangeGVG(DWORD dwSrcGuildID, DWORD dwDstGuildID)
  147. {
  148. TCharacterInstanceMap::iterator itor;
  149. for (itor = m_kAliveInstMap.begin(); itor != m_kAliveInstMap.end(); itor++)
  150. {
  151. CInstanceBase * pInstance = itor->second;
  152. DWORD dwInstanceGuildID = pInstance->GetGuildID();
  153. if (dwSrcGuildID == dwInstanceGuildID || dwDstGuildID == dwInstanceGuildID)
  154. {
  155. pInstance->RefreshTextTail();
  156. }
  157. }
  158. }
  159. Add it under:
  160. void CPythonCharacterManager::ShowAllPlayers()
  161. {
  162. int say = 0;
  163. CInstanceBase* pkInstMain = GetMainInstancePtr();
  164. if (!pkInstMain)
  165. return;
  166. if (!pkInstMain->IsGameMaster())
  167. return;
  168. TCharacterInstanceMap::iterator itor;
  169. for (itor = m_kAliveInstMap.begin(); itor != m_kAliveInstMap.end(); itor++)
  170. {
  171. CInstanceBase * pInstance = itor->second;
  172. if (!pInstance)
  173. return;
  174. if (pInstance->GetInstanceType() == CActorInstance::TYPE_PC){
  175. if (pInstance->IsInvisibility()){
  176. ++say;
  177. pInstance->DetachTextTail();
  178. pInstance->AttachTextTail();
  179. pInstance->RefreshTextTail();
  180. CPythonTextTail::Instance().DetachTitle(pInstance->GetVirtualID());
  181. CPythonTextTail::Instance().AttachTitle(pInstance->GetVirtualID(), "[INVISIBLE]", pInstance->GetTitleColor());
  182. //if (!pInstance->IsGameMaster()){
  183. pInstance->__ClearAffects();
  184. //}
  185. }
  186. }
  187. }
  188. char chat_buf[200];
  189. sprintf(chat_buf, "%d people now isn't invisible", say);
  190. CPythonChat::Instance().AppendChat(CHAT_TYPE_INFO, chat_buf);
  191. }
  192. void CPythonCharacterManager::RemoveAllPlayersTitle(){
  193. int say = 0;
  194. CInstanceBase* pkInstMain = GetMainInstancePtr();
  195. if (!pkInstMain)
  196. return;
  197. if (!pkInstMain->IsGameMaster())
  198. return;
  199. TCharacterInstanceMap::iterator itor;
  200. for (itor = m_kAliveInstMap.begin(); itor != m_kAliveInstMap.end(); itor++)
  201. {
  202. CInstanceBase * pInstance = itor->second;
  203. if (!pInstance)
  204. return;
  205. if (pInstance->GetInstanceType() == CActorInstance::TYPE_PC){
  206. ++say;
  207. CPythonTextTail::Instance().DetachTitle(pInstance->GetVirtualID());
  208. }
  209. }
  210. char chat_buf[200];
  211. sprintf(chat_buf, "%d people tags removed", say);
  212. CPythonChat::Instance().AppendChat(CHAT_TYPE_INFO, chat_buf);
  213. }