Advertisement
Guest User

Channel Switcher Fix

a guest
Mar 26th, 2020
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.61 KB | None | 0 0
  1. Hi mate,
  2.  
  3. [char.cpp]
  4. --------------------------------------------------------------------
  5.  
  6. Search:
  7. m_pkChangeChannelEvent = NULL;
  8.  
  9. Replace:
  10. //m_pkChangeChannelEvent = NULL;
  11.  
  12. Search:
  13. event_cancel(&m_pkChangeChannelEvent);
  14.  
  15. Replace:
  16. //event_cancel(&m_pkChangeChannelEvent);
  17.  
  18. Search:
  19. void CHARACTER::ChangeChannel(DWORD channelId)
  20.  
  21. Replace:
  22. void CHARACTER::ChangeChannel(int channelId)
  23.  
  24. --------------------------------------------------------------------
  25.  
  26. [char.h]
  27. --------------------------------------------------------------------
  28.  
  29. Search:
  30. void            ChangeChannel(DWORD channelId);
  31.  
  32. Replace:
  33. void            ChangeChannel(int channelId);
  34.  
  35. Search:
  36. LPEVENT             m_pkChangeChannelEvent;
  37.  
  38. Replace:
  39. //LPEVENT               m_pkChangeChannelEvent;
  40.  
  41. --------------------------------------------------------------------
  42.  
  43. [cmd_general.cpp]
  44. --------------------------------------------------------------------
  45.  
  46. Search:
  47. extern int g_nPortalLimitTime;
  48.  
  49. After this add:
  50. #ifdef ENABLE_CHANGE_CHANNEL
  51. int new_ch;
  52. #endif
  53.  
  54. Search this function:
  55. EVENTINFO(ChangeChannelEventInfo)
  56.  
  57. Add to comment this function:
  58. /*EVENTINFO(ChangeChannelEventInfo)
  59. {
  60.     DynamicCharacterPtr ch;
  61.     int             channel_number;
  62.     int             left_second;
  63.  
  64.     ChangeChannelEventInfo()
  65.     : ch()
  66.     , channel_number( 0 )
  67.     , left_second( 0 )
  68.     {
  69.     }
  70. };*/
  71.  
  72. Search this function:
  73. EVENTFUNC(change_channel_event)
  74.  
  75. Replace:
  76. EVENTFUNC(channel_event)
  77. {
  78.     TimedEventInfo * info = dynamic_cast<TimedEventInfo *>( event->info );
  79.  
  80.     if (info == NULL)
  81.     {
  82.         sys_err("timed_event> <Factor> Null pointer in CHANNEL_EVENT [cmd_general.cpp]");
  83.         return 0;
  84.     }
  85.  
  86.     LPCHARACTER ch = info->ch;
  87.     if (ch == NULL)
  88.     {
  89.         return 0;
  90.     }
  91.     LPDESC d = ch->GetDesc();
  92.  
  93.     if (info->left_second <= 0)
  94.     {
  95.         ch->m_pkTimedEvent = NULL;
  96.  
  97.         TPacketNeedLoginLogInfo acc_info;
  98.         acc_info.dwPlayerID = ch->GetDesc()->GetAccountTable().id;
  99.  
  100.         db_clientdesc->DBPacket( HEADER_GD_VALID_LOGOUT, 0, &acc_info, sizeof(acc_info) );
  101.  
  102.         LogManager::instance().DetailLoginLog( false, ch );
  103.  
  104.         ch->ChangeChannel(new_ch);
  105.  
  106.         return 0;
  107.     }
  108.     else
  109.     {
  110.         ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Change channel in %d seconds."), info->left_second);
  111.     }
  112.  
  113.     return PASSES_PER_SEC(1);
  114. }
  115.  
  116. Search:
  117. ACMD(do_change_channel)
  118.  
  119. Replace:
  120. CMD(do_change_channel)
  121. {
  122.     char arg1[256];
  123.     one_argument(argument, arg1, sizeof(arg1));
  124.  
  125.     if (!*arg1)
  126.         return;
  127.  
  128.     str_to_number(new_ch, arg1);
  129.  
  130.     if (new_ch < 1 || new_ch > 4)
  131.         return;
  132.  
  133.     if (new_ch == g_bChannel)
  134.     {
  135.         ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You are already in this channel."));
  136.         return;  
  137.     }
  138.  
  139.     if (!ch->IsPC())
  140.         return;
  141.  
  142.     if (ch->IsDead() || !ch->CanWarp())
  143.     {
  144.         ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't do that now. Wait 10 seconds and try again."));
  145.         return;
  146.     }
  147.  
  148.     if (new_ch == 99 || g_bChannel == 99)
  149.     {
  150.         ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You are already in this channel."));
  151.         return;
  152.     }
  153.  
  154.     ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("WAIT_NEW_CHANNEL"));
  155.  
  156.     int nExitLimitTime = 10;
  157.  
  158.     if (ch->IsHack(false, true, nExitLimitTime) && false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()) && (!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG))
  159.         return;
  160.  
  161.     TimedEventInfo* info = AllocEventInfo<TimedEventInfo>();
  162.     {
  163.         if (ch->IsPosition(POS_FIGHTING))
  164.             info->left_second = 10;
  165.         else
  166.             info->left_second = 3;
  167.     }
  168.  
  169.     info->ch = ch;
  170.     info->subcmd = subcmd;
  171.     strlcpy(info->szReason, argument, sizeof(info->szReason));
  172.  
  173.     ch->m_pkTimedEvent = event_create(channel_event, info, 1);
  174.  
  175. }
  176.  
  177. --------------------------------------------------------------------
  178.  
  179. Good luck mate :)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement