Advertisement
Guest User

Untitled

a guest
May 7th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.20 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "constants.h"
  3. #include "config.h"
  4. #include "questmanager.h"
  5. #include "start_position.h"
  6. #include "packet.h"
  7. #include "buffer_manager.h"
  8. #include "log.h"
  9. #include "char.h"
  10. #include "char_manager.h"
  11. #include "OXEvent.h"
  12. #include "desc.h"
  13.  
  14. bool COXEventManager::Initialize()
  15. {
  16. m_timedEvent = NULL;
  17. m_map_char.clear();
  18. m_map_attender.clear();
  19. m_vec_quiz.clear();
  20. m_list_iplist.clear();
  21.  
  22. SetStatus(OXEVENT_FINISH);
  23.  
  24. return true;
  25. }
  26.  
  27. void COXEventManager::Destroy()
  28. {
  29. CloseEvent();
  30.  
  31. m_map_char.clear();
  32. m_map_attender.clear();
  33. m_vec_quiz.clear();
  34. m_list_iplist.clear();
  35.  
  36. SetStatus(OXEVENT_FINISH);
  37. }
  38.  
  39. OXEventStatus COXEventManager::GetStatus()
  40. {
  41. BYTE ret = quest::CQuestManager::instance().GetEventFlag("oxevent_status");
  42.  
  43. switch (ret)
  44. {
  45. case 0 :
  46. return OXEVENT_FINISH;
  47.  
  48. case 1 :
  49. return OXEVENT_OPEN;
  50.  
  51. case 2 :
  52. return OXEVENT_CLOSE;
  53.  
  54. case 3 :
  55. return OXEVENT_QUIZ;
  56.  
  57. default :
  58. return OXEVENT_ERR;
  59. }
  60.  
  61. return OXEVENT_ERR;
  62. }
  63.  
  64. void COXEventManager::SetStatus(OXEventStatus status)
  65. {
  66. BYTE val = 0;
  67.  
  68. switch (status)
  69. {
  70. case OXEVENT_OPEN :
  71. val = 1;
  72. break;
  73.  
  74. case OXEVENT_CLOSE :
  75. val = 2;
  76. break;
  77.  
  78. case OXEVENT_QUIZ :
  79. val = 3;
  80. break;
  81.  
  82. case OXEVENT_FINISH :
  83. case OXEVENT_ERR :
  84. default :
  85. val = 0;
  86. break;
  87. }
  88. quest::CQuestManager::instance().RequestSetEventFlag("oxevent_status", val);
  89. }
  90.  
  91. bool COXEventManager::Enter(LPCHARACTER pkChar)
  92. {
  93. if (GetStatus() == OXEVENT_FINISH)
  94. {
  95. sys_log(0, "OXEVENT : map finished. but char enter. %s", pkChar->GetName());
  96. return false;
  97. }
  98.  
  99. PIXEL_POSITION pos = pkChar->GetXYZ();
  100.  
  101. if (pos.x == 896500 && pos.y == 24600)
  102. {
  103. return EnterAttender(pkChar);
  104. }
  105. else if (pos.x == 896300 && pos.y == 28900)
  106. {
  107. return EnterAudience(pkChar);
  108. }
  109. else
  110. {
  111. sys_log(0, "OXEVENT : wrong pos enter %d %d", pos.x, pos.y);
  112. return false;
  113. }
  114.  
  115. return false;
  116. }
  117.  
  118. void COXEventManager::RemoveFromIpList(const char* gelenip){
  119. std::string silinecekip = gelenip;
  120. m_list_iplist.erase(silinecekip);
  121. }
  122.  
  123. void COXEventManager::CheckIpAdr(DWORD pidm){
  124. LPCHARACTER pkMyChar = CHARACTER_MANAGER::instance().FindByPID(pidm);
  125.  
  126. char pkChrIP[250];
  127. snprintf(pkChrIP, sizeof(pkChrIP), "%s", pkMyChar->GetDesc()->GetHostName());
  128.  
  129. for (itertype(m_list_iplist) it = m_list_iplist.begin(); it != m_list_iplist.end(); ++it)
  130. {
  131. const std::string& loopdaki_ip = *it;
  132. if (loopdaki_ip.empty()) return;
  133.  
  134. char listdekiIp[250];
  135. snprintf(listdekiIp, sizeof(listdekiIp), "%s", loopdaki_ip.c_str());
  136.  
  137. if (!strcmp(listdekiIp, pkChrIP)) {
  138. pkMyChar->GetDesc()->DelayedDisconnect(5);
  139. pkMyChar->ChatPacket(CHAT_TYPE_INFO, "[TWIX_Work] > Mai multe IP-uri au fost detectate!");
  140. }
  141. }
  142. }
  143.  
  144. bool COXEventManager::EnterAttender(LPCHARACTER pkChar)
  145. {
  146. DWORD pid = pkChar->GetPlayerID();
  147.  
  148. m_map_char.insert(std::make_pair(pid, pid));
  149. m_map_attender.insert(std::make_pair(pid, pid));
  150.  
  151. CheckIpAdr(pid);
  152. m_list_iplist.insert(pkChar->GetDesc()->GetHostName());
  153.  
  154. return true;
  155. }
  156.  
  157. bool COXEventManager::EnterAudience(LPCHARACTER pkChar)
  158. {
  159. DWORD pid = pkChar->GetPlayerID();
  160.  
  161. m_map_char.insert(std::make_pair(pid, pid));
  162.  
  163. return true;
  164. }
  165.  
  166. bool COXEventManager::AddQuiz(unsigned char level, const char* pszQuestion, bool answer)
  167. {
  168. if (m_vec_quiz.size() < (size_t) level + 1)
  169. m_vec_quiz.resize(level + 1);
  170.  
  171. struct tag_Quiz tmpQuiz;
  172.  
  173. tmpQuiz.level = level;
  174. strlcpy(tmpQuiz.Quiz, pszQuestion, sizeof(tmpQuiz.Quiz));
  175. tmpQuiz.answer = answer;
  176.  
  177. m_vec_quiz[level].push_back(tmpQuiz);
  178. return true;
  179. }
  180.  
  181. bool COXEventManager::ShowQuizList(LPCHARACTER pkChar)
  182. {
  183. int c = 0;
  184.  
  185. for (size_t i = 0; i < m_vec_quiz.size(); ++i)
  186. {
  187. for (size_t j = 0; j < m_vec_quiz[i].size(); ++j, ++c)
  188. {
  189. pkChar->ChatPacket(CHAT_TYPE_INFO, "%d %s %s", m_vec_quiz[i][j].level, m_vec_quiz[i][j].Quiz, m_vec_quiz[i][j].answer ? LC_TEXT("Âü") : LC_TEXT("°ÅÁþ"));
  190. }
  191. }
  192.  
  193. pkChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÃÑ ÄûÁî ¼ö: %d"), c);
  194. return true;
  195. }
  196.  
  197. void COXEventManager::ClearQuiz()
  198. {
  199. for (unsigned int i = 0; i < m_vec_quiz.size(); ++i)
  200. {
  201. m_vec_quiz[i].clear();
  202. }
  203.  
  204. m_vec_quiz.clear();
  205. }
  206.  
  207. EVENTINFO(OXEventInfoData)
  208. {
  209. bool answer;
  210.  
  211. OXEventInfoData()
  212. : answer( false )
  213. {
  214. }
  215. };
  216.  
  217. EVENTFUNC(oxevent_timer)
  218. {
  219. static BYTE flag = 0;
  220. OXEventInfoData* info = dynamic_cast<OXEventInfoData*>(event->info);
  221.  
  222. if ( info == NULL )
  223. {
  224. sys_err( "oxevent_timer> <Factor> Null pointer" );
  225. return 0;
  226. }
  227.  
  228. switch (flag)
  229. {
  230. case 0:
  231. SendNoticeMap(LC_TEXT("10ÃÊµÚ ÆÇÁ¤ÇÏ°Ú½À´Ï´Ù."), OXEVENT_MAP_INDEX, true);
  232. flag++;
  233. return PASSES_PER_SEC(10);
  234.  
  235. case 1:
  236. SendNoticeMap(LC_TEXT("Á¤´äÀº"), OXEVENT_MAP_INDEX, true);
  237.  
  238. if (info->answer == true)
  239. {
  240. COXEventManager::instance().CheckAnswer(true);
  241. SendNoticeMap(LC_TEXT("O ÀÔ´Ï´Ù"), OXEVENT_MAP_INDEX, true);
  242. }
  243. else
  244. {
  245. COXEventManager::instance().CheckAnswer(false);
  246. SendNoticeMap(LC_TEXT("X ÀÔ´Ï´Ù"), OXEVENT_MAP_INDEX, true);
  247. }
  248.  
  249. if (LC_IsJapan())
  250. {
  251. SendNoticeMap("Š?????X‚?O‚
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement