Guest User

Untitled

a guest
Apr 5th, 2025
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "switchbonus.h"
  3. #include "char.h"
  4. #include "locale_service.h"
  5. #include "packet.h"
  6. #include "desc_client.h"
  7. #include "item_manager.h"
  8. #include "item.h"
  9. #include "item_manager.h"
  10. #include "locale_service.h"
  11. #include "config.h"
  12. #include "questmanager.h"
  13.  
  14. CSwitchBonus::CSwitchBonus()
  15. {
  16. }
  17.  
  18. CSwitchBonus::~CSwitchBonus()
  19. {
  20.  
  21. }
  22.  
  23. bool CSwitchBonus::CheckElementsSB(LPCHARACTER ch){
  24. if (ch->GetExchange() || ch->GetShop() || ch->GetMyShop() || ch->IsOpenSafebox() || ch->IsCubeOpen())
  25. return true;
  26. return false;
  27. }
  28.  
  29. bool CSwitchBonus::CanMoveIntoSB(LPITEM item)
  30. {
  31. if(!item){return false;}
  32. if(item->GetType()==ITEM_WEAPON && item->GetSubType() != WEAPON_ARROW){return true;}
  33. if(item->GetType()==ITEM_ARMOR){return true;}
  34. return false;
  35. }
  36.  
  37. void CSwitchBonus::OpenSB(LPCHARACTER ch)
  38. {
  39. if (ch->IsSBOpen()){
  40. return;
  41. }
  42.  
  43. ch->SetSBOpen(true);
  44. SendSBPackets(ch,SWITCH_RECEIVE_OPEN);
  45.  
  46. LPITEM item = ch->GetSwitchBotItem(0);
  47. if(item){
  48. SendSBItem(ch,item);
  49. }
  50. }
  51.  
  52. void CSwitchBonus::CloseSB(LPCHARACTER ch)
  53. {
  54. ch->SetSBOpen(false);
  55. }
  56.  
  57. void CSwitchBonus::ClearSB(LPCHARACTER ch)
  58. {
  59. SendSBPackets(ch,SWITCH_RECEIVE_CLEAR_INFO);
  60. }
  61.  
  62. void CSwitchBonus::SendSBItem(LPCHARACTER ch,LPITEM item)
  63. {
  64. if(!item)
  65. return;
  66.  
  67. ClearSB(ch);
  68. int iAttributeSet = item->GetAttributeSetIndex();
  69. for (int b = 0; b < MAX_APPLY_NUM; ++b)
  70. {
  71. const TItemAttrTable & r = g_map_itemAttr[b];
  72. if (r.bMaxLevelBySet[iAttributeSet]){
  73. SendSBPackets(ch,SWITCH_RECEIVE_INFO_BONUS_ITEM, b, r.lValues[0], r.lValues[1], r.lValues[2], r.lValues[3], r.lValues[4]);
  74. }
  75. }
  76.  
  77. TItemTable const * pProto = item->GetProto();
  78. if(pProto && pProto->sAddonType)
  79. {
  80. SendSBPackets(ch,SWITCH_RECEIVE_INFO_EXTRA);
  81. }
  82.  
  83. }
  84.  
  85. void CSwitchBonus::ChangeSB(LPCHARACTER ch,const TPlayerItemAttribute* aAttr)
  86. {
  87. LPITEM item = ch->GetSwitchBotItem(0);
  88.  
  89. if(!item)
  90. return;
  91.  
  92. if (!ch->IsSBOpen()){
  93. return;
  94. }
  95.  
  96. if (item->CheckBonusSwitchBot(aAttr))
  97. {
  98. ch->ChatPacket(CHAT_TYPE_COMMAND, "BINARY_SWITCHBOT_ALREADY");
  99. return;
  100. }
  101.  
  102. int count_change = ch->CountSpecifyItem(VNUM_CHANGE_ITEM);
  103. int remove_total = 0;
  104. int max_changes = COUNT_CHANGE_ITEM;
  105. bool change_succefull = false;
  106.  
  107. if (count_change > 0)
  108. {
  109. if(count_change < max_changes){
  110. remove_total = count_change;
  111. }else{
  112. remove_total = max_changes;
  113. }
  114.  
  115. int result = item->ChangeAttributeSwtichBot(remove_total,aAttr,&change_succefull);
  116. item->UpdatePacket();
  117. item->Save();
  118.  
  119. if(result > 0)
  120. {
  121. if(change_succefull)
  122. {
  123. ch->ChatPacket(CHAT_TYPE_COMMAND, "SWITCHBOT_SUCCESFULL %d",result);
  124. }else{
  125. ch->ChatPacket(CHAT_TYPE_INFO,"[SB]Change Bonus Fail.");
  126. }
  127.  
  128. ch->RemoveSpecifyItem(VNUM_CHANGE_ITEM,result);
  129.  
  130. }else{
  131.  
  132. ch->ChatPacket(CHAT_TYPE_INFO,"[SB]Change Bonus Fail.");
  133. }
  134. }else{
  135. ch->ChatPacket(CHAT_TYPE_INFO,"[SB]Not enough switch items.");
  136. }
  137. }
  138.  
  139. void CSwitchBonus::SendSBPackets(LPCHARACTER ch,BYTE subheader, int id_bonus, int value_bonus_0, int value_bonus_1, int value_bonus_2, int value_bonus_3, int value_bonus_4)
  140. {
  141. TPacketGCSwitchBotReceive pack;
  142. pack.bSubType = subheader;
  143.  
  144.  
  145. if(subheader == SWITCH_RECEIVE_INFO_BONUS_ITEM)
  146. {
  147. pack.id_bonus = id_bonus;
  148. pack.value_bonus_0 = value_bonus_0;
  149. pack.value_bonus_1 = value_bonus_1;
  150. pack.value_bonus_2 = value_bonus_2;
  151. pack.value_bonus_3 = value_bonus_3;
  152. pack.value_bonus_4 = value_bonus_4;
  153.  
  154. }
  155.  
  156. LPDESC d = ch->GetDesc();
  157.  
  158. if (NULL == d)
  159. {
  160. sys_err ("User CSwitchBonus::SendSBPackets (%s)'s DESC is NULL POINT.", ch->GetName());
  161. return ;
  162. }
  163.  
  164. d->Packet(&pack, sizeof(pack));
  165. }
  166.  
Advertisement
Add Comment
Please, Sign In to add comment