Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include "constants.h"
- #include "config.h"
- #include "questmanager.h"
- #include "start_position.h"
- #include "packet.h"
- #include "buffer_manager.h"
- #include "log.h"
- #include "char.h"
- #include "char_manager.h"
- #include "OXEvent.h"
- #include "desc.h"
- bool COXEventManager::Initialize()
- {
- m_timedEvent = NULL;
- m_map_char.clear();
- m_map_attender.clear();
- m_vec_quiz.clear();
- m_list_iplist.clear();
- SetStatus(OXEVENT_FINISH);
- return true;
- }
- void COXEventManager::Destroy()
- {
- CloseEvent();
- m_map_char.clear();
- m_map_attender.clear();
- m_vec_quiz.clear();
- m_list_iplist.clear();
- SetStatus(OXEVENT_FINISH);
- }
- OXEventStatus COXEventManager::GetStatus()
- {
- BYTE ret = quest::CQuestManager::instance().GetEventFlag("oxevent_status");
- switch (ret)
- {
- case 0 :
- return OXEVENT_FINISH;
- case 1 :
- return OXEVENT_OPEN;
- case 2 :
- return OXEVENT_CLOSE;
- case 3 :
- return OXEVENT_QUIZ;
- default :
- return OXEVENT_ERR;
- }
- return OXEVENT_ERR;
- }
- void COXEventManager::SetStatus(OXEventStatus status)
- {
- BYTE val = 0;
- switch (status)
- {
- case OXEVENT_OPEN :
- val = 1;
- break;
- case OXEVENT_CLOSE :
- val = 2;
- break;
- case OXEVENT_QUIZ :
- val = 3;
- break;
- case OXEVENT_FINISH :
- case OXEVENT_ERR :
- default :
- val = 0;
- break;
- }
- quest::CQuestManager::instance().RequestSetEventFlag("oxevent_status", val);
- }
- bool COXEventManager::Enter(LPCHARACTER pkChar)
- {
- if (GetStatus() == OXEVENT_FINISH)
- {
- sys_log(0, "OXEVENT : map finished. but char enter. %s", pkChar->GetName());
- return false;
- }
- PIXEL_POSITION pos = pkChar->GetXYZ();
- if (pos.x == 896500 && pos.y == 24600)
- {
- return EnterAttender(pkChar);
- }
- else if (pos.x == 896300 && pos.y == 28900)
- {
- return EnterAudience(pkChar);
- }
- else
- {
- sys_log(0, "OXEVENT : wrong pos enter %d %d", pos.x, pos.y);
- return false;
- }
- return false;
- }
- void COXEventManager::RemoveFromIpList(const char* gelenip){
- std::string silinecekip = gelenip;
- m_list_iplist.erase(silinecekip);
- }
- void COXEventManager::CheckIpAdr(DWORD pidm){
- LPCHARACTER pkMyChar = CHARACTER_MANAGER::instance().FindByPID(pidm);
- char pkChrIP[250];
- snprintf(pkChrIP, sizeof(pkChrIP), "%s", pkMyChar->GetDesc()->GetHostName());
- for (itertype(m_list_iplist) it = m_list_iplist.begin(); it != m_list_iplist.end(); ++it)
- {
- const std::string& loopdaki_ip = *it;
- if (loopdaki_ip.empty()) return;
- char listdekiIp[250];
- snprintf(listdekiIp, sizeof(listdekiIp), "%s", loopdaki_ip.c_str());
- if (!strcmp(listdekiIp, pkChrIP)) {
- pkMyChar->GetDesc()->DelayedDisconnect(5);
- pkMyChar->ChatPacket(CHAT_TYPE_INFO, "[TWIX_Work] > Mai multe IP-uri au fost detectate!");
- }
- }
- }
- bool COXEventManager::EnterAttender(LPCHARACTER pkChar)
- {
- DWORD pid = pkChar->GetPlayerID();
- m_map_char.insert(std::make_pair(pid, pid));
- m_map_attender.insert(std::make_pair(pid, pid));
- CheckIpAdr(pid);
- m_list_iplist.insert(pkChar->GetDesc()->GetHostName());
- return true;
- }
- bool COXEventManager::EnterAudience(LPCHARACTER pkChar)
- {
- DWORD pid = pkChar->GetPlayerID();
- m_map_char.insert(std::make_pair(pid, pid));
- return true;
- }
- bool COXEventManager::AddQuiz(unsigned char level, const char* pszQuestion, bool answer)
- {
- if (m_vec_quiz.size() < (size_t) level + 1)
- m_vec_quiz.resize(level + 1);
- struct tag_Quiz tmpQuiz;
- tmpQuiz.level = level;
- strlcpy(tmpQuiz.Quiz, pszQuestion, sizeof(tmpQuiz.Quiz));
- tmpQuiz.answer = answer;
- m_vec_quiz[level].push_back(tmpQuiz);
- return true;
- }
- bool COXEventManager::ShowQuizList(LPCHARACTER pkChar)
- {
- int c = 0;
- for (size_t i = 0; i < m_vec_quiz.size(); ++i)
- {
- for (size_t j = 0; j < m_vec_quiz[i].size(); ++j, ++c)
- {
- 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("°ÅÁþ"));
- }
- }
- pkChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÃÑ ÄûÁî ¼ö: %d"), c);
- return true;
- }
- void COXEventManager::ClearQuiz()
- {
- for (unsigned int i = 0; i < m_vec_quiz.size(); ++i)
- {
- m_vec_quiz[i].clear();
- }
- m_vec_quiz.clear();
- }
- EVENTINFO(OXEventInfoData)
- {
- bool answer;
- OXEventInfoData()
- : answer( false )
- {
- }
- };
- EVENTFUNC(oxevent_timer)
- {
- static BYTE flag = 0;
- OXEventInfoData* info = dynamic_cast<OXEventInfoData*>(event->info);
- if ( info == NULL )
- {
- sys_err( "oxevent_timer> <Factor> Null pointer" );
- return 0;
- }
- switch (flag)
- {
- case 0:
- SendNoticeMap(LC_TEXT("10ÃÊµÚ ÆÇÁ¤ÇÏ°Ú½À´Ï´Ù."), OXEVENT_MAP_INDEX, true);
- flag++;
- return PASSES_PER_SEC(10);
- case 1:
- SendNoticeMap(LC_TEXT("Á¤´äÀº"), OXEVENT_MAP_INDEX, true);
- if (info->answer == true)
- {
- COXEventManager::instance().CheckAnswer(true);
- SendNoticeMap(LC_TEXT("O ÀÔ´Ï´Ù"), OXEVENT_MAP_INDEX, true);
- }
- else
- {
- COXEventManager::instance().CheckAnswer(false);
- SendNoticeMap(LC_TEXT("X ÀÔ´Ï´Ù"), OXEVENT_MAP_INDEX, true);
- }
- if (LC_IsJapan())
- {
- SendNoticeMap("Š?????X‚?O‚
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement