Advertisement
Guest User

Untitled

a guest
May 26th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.20 KB | None | 0 0
  1. char_item.cpp
  2.  
  3. #########
  4. #ifdef USE_CHANGE_ATTRIBUTE_PLUSPLUS
  5.                             case HIERZAHLEINFÜGEN: // ÁøÀç°æ
  6.                             {
  7.  
  8.                                 LPITEM item2;
  9.  
  10.                                 if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
  11.                                     return false;
  12.                                
  13.                                 if (ITEM_COSTUME == item2->GetType()) // 6/7 Check auf Costüme, da Kostüme ja solche Bonis nicht nutzen. Stimmts Phil!?
  14.                                     {
  15.                                         ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Du kannst dem Kostüm kein Bonus hinzufügen."));
  16.                                         return false;
  17.                                     }
  18.  
  19.                                 if (item2->IsExchanging() || item2->IsEquipped())
  20.                                     return false;
  21.  
  22.                                 if (item2->GetAttributeSetIndex() == -1)
  23.                                 {
  24.                                     ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Fehler! Bonus konnte nicht hinzugefuegt werden."));
  25.                                     return false;
  26.                                 }
  27.  
  28.                                 if (item2->ChangePlusPlusAttribute() == true)
  29.                                 {
  30.                                     char buf[21];
  31.                                     snprintf(buf, sizeof(buf), "%u", item2->GetID());
  32.                                     LogManager::instance().ItemLog(this, item, "CHANGE_PLUSPLUS_ATTR", buf);
  33.  
  34.                                     item->SetCount(item->GetCount() - 1);
  35.                                 }
  36.                                 else
  37.                                 {
  38.                                     ChatPacket(CHAT_TYPE_INFO, LC_TEXT("FEHLER. BONUS KONNTE NICHT ADOLF"));
  39.                                 }
  40.                             }
  41.                                 break;
  42. #endif
  43. ________________________________________
  44. Item.h
  45. ________________________________________
  46.  
  47. #ifdef USE_ATTRIBUTE_PLUSPLUS
  48.         bool        HasPlusPlusAttr(BYTE bApply);
  49. #endif
  50.  
  51. #ifdef USE_ATTRIBUTE_PLUSPLUS
  52.         bool        ChangePlusPlusAttribute();
  53.         bool        AddPlusPlusAttribute();
  54.         int         GetPlusPlusAttCount();
  55. #endif
  56. ________________________________________
  57. item_lenght.h
  58. ________________________________________
  59.  
  60. #ifdef USE_ATTRIBUTE_PLUSPLUS
  61.     USE_CHANGE_ATTRIBUTE6,
  62.     USE_ADD_ATTRIBUTE6,
  63. #endif
  64.  
  65. #ifdef USE_ATTRIBUTE_PLUSPLUS
  66.     ITEM_ATTRIBUTE_PLUSPLUS_START   = ITEM_ATTRIBUTE_RARE_END,
  67.     ITEM_ATTRIBUTE_PLUSPLUS_END     = ITEM_ATTRIBUTE_PLUSPLUS_START + ITEM_ATTRIBUTE_PLUSPLUS_NUM,
  68. #endif
  69.  
  70. #ifdef USE_ATTRIBUTE_PLUSPLUS
  71.     ITEM_ATTRIBUTE_MAX_NUM =    ITEM_ATTRIBUTE_PLUSPLUS_END, // 8
  72. #else
  73.     ITEM_ATTRIBUTE_MAX_NUM =    ITEM_ATTRIBUTE_RARE_END, // 7
  74. #endif
  75.  
  76. constants.cpp
  77.  
  78. #ifdef USE_ATTRIBUTE_PLUSPLUS
  79.     TItemAttrMap g_map_itemPlusPlusAttr;
  80. #endif
  81.  
  82. constants.h
  83. #ifdef USE_ATTRIBUTE_PLUSPLUS
  84.     extern TItemAttrMap g_map_itemPlusPlusAttr;
  85. #endif
  86.  
  87. input_db.cpp
  88.  
  89. #ifdef USE_ATTRIBUTE_PLUSPLUS
  90.  
  91.     if (decode_2bytes(data) != sizeof(TItemAttrTable))
  92.     {
  93.         sys_err("item PlusPlusRare table size error");
  94.         thecore_shutdown();
  95.         return;
  96.     }
  97.     data += 2;
  98.  
  99.     size = decode_2bytes(data);
  100.     data += 2;
  101.     sys_log(0, "BOOT: PLUSPLUS_ATTR: %d", size);
  102.  
  103.     if (size)
  104.     {
  105.         TItemAttrTable * p = (TItemAttrTable *) data;
  106.  
  107.         for (int i = 0; i < size; ++i, ++p)
  108.         {
  109.             if (p->dwApplyIndex >= MAX_APPLY_NUM)
  110.                 continue;
  111.  
  112.             g_map_itemRare[p->dwApplyIndex] = *p;
  113.             sys_log(0, "PLUSPLUS_ATTR[%d]: %s %u", p->dwApplyIndex, p->szApply, p->dwProb);
  114.         }
  115.     }
  116.  
  117.     data += size * sizeof(TItemAttrTable);
  118.  
  119. #endif
  120.  
  121. #ifdef USE_ATTRIBUTE_PLUSPLUS
  122.     sys_log(0, "sizeof(TItemPlusPlusTable) = %d", sizeof(TItemAttrTable));
  123. #endif
  124.  
  125. item_attribute.cpp
  126.  
  127. #ifdef USE_ATTRIBUTE_PLUSPLUS
  128. int CItem::GetPlusPlusAttCount()
  129. {
  130.     int ret = 0;
  131.  
  132.     for (DWORD dwIdx = ITEM_ATTRIBUTE_PLUSPLUS_START; dwIdx < ITEM_ATTRIBUTE_PLUSPLUS_END; dwIdx++)
  133.     {
  134.         if (m_aAttr[dwIdx].bType != 0)
  135.             ret++;
  136.     }
  137.  
  138.     return ret;
  139. }
  140. #endif
  141.  
  142. #ifdef USE_ATTRIBUTE_PLUSPLUS
  143. bool CItem::AddPlusPlusAttribute()
  144. {
  145.     int count = GetPlusPlusAttCount();
  146.  
  147.     if (count >= ITEM_ATTRIBUTE_PLUSPLUS_NUM)
  148.         return false;
  149.  
  150.     int pos = count + ITEM_ATTRIBUTE_PLUSPLUS_START;
  151.     TPlayerItemAttribute & attr = m_aAttr[pos];
  152.  
  153.     int nAttrSet = GetAttributeSetIndex();
  154.     std::vector<int> avail;
  155.  
  156.     for (int i = 0; i < MAX_APPLY_NUM; ++i)
  157.     {
  158.         const TItemAttrTable & r = g_map_itemPlusPlusAttr[i];
  159.  
  160.         if (r.dwApplyIndex != 0 && r.bMaxLevelBySet[nAttrSet] > 0 && HasPlusPlusAttr(i) != true)
  161.         {
  162.             avail.push_back(i);
  163.         }
  164.     }
  165.  
  166.     const TItemAttrTable& r = g_map_itemPlusPlusAttr[avail[number(0, avail.size() - 1)]];
  167.     int nAttrLevel = 5;
  168.  
  169.     if (nAttrLevel > r.bMaxLevelBySet[nAttrSet])
  170.         nAttrLevel = r.bMaxLevelBySet[nAttrSet];
  171.  
  172.     attr.bType = r.dwApplyIndex;
  173.     attr.sValue = r.lValues[nAttrLevel - 1];
  174.  
  175.     UpdatePacket();
  176.  
  177.     Save();
  178.  
  179.     const char * pszIP = NULL;
  180.  
  181.     if (GetOwner() && GetOwner()->GetDesc())
  182.         pszIP = GetOwner()->GetDesc()->GetHostName();
  183.  
  184.     LOG_LEVEL_CHECK(LOG_LEVEL_MAX, LogManager::instance().ItemLog(pos, attr.bType, attr.sValue, GetID(), "SET_PLUSPLUS_ATTR", "", pszIP ? pszIP : "", GetOriginalVnum()));
  185.     return true;
  186. }
  187. #endif
  188.  
  189. #ifdef USE_ATTRIBUTE_PLUSPLUS
  190. bool CItem::ChangePlusPlusAttribute()
  191. {
  192.     if (GetPlusPlusAttCount() == 0)
  193.         return false;
  194.  
  195.     int cnt = GetPlusPlusAttCount();
  196.  
  197.     for (int i = 0; i < cnt; ++i)
  198.     {
  199.         m_aAttr[i + ITEM_ATTRIBUTE_PLUSPLUS_START].bType = 0;
  200.         m_aAttr[i + ITEM_ATTRIBUTE_PLUSPLUS_START].sValue = 0;
  201.     }
  202.  
  203.     if (GetOwner() && GetOwner()->GetDesc())
  204.         LOG_LEVEL_CHECK(LOG_LEVEL_MAX, LogManager::instance().ItemLog(GetOwner(), this, "SET_PLUSPLUS_ATTR_CHANGE", ""))
  205.     else
  206.     LOG_LEVEL_CHECK(LOG_LEVEL_MAX, LogManager::instance().ItemLog(0, 0, 0, GetID(), "SET_PLUSPLUS_ATTR_CHANGE", "", "", GetOriginalVnum()))
  207.  
  208.     for (int i = 0; i < cnt; ++i)
  209.     {
  210.         AddPlusPlusAttribute();
  211.     }
  212.  
  213.     return true;
  214. }
  215. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement