LAPTOP-SNT8I5JK\Boounion
2025-06-06 58c44e7934c94f4a2327252fc017c19b9f802491
SourceCode/Bond/Servo/CEquipment.cpp
@@ -335,22 +335,23 @@
         }
         
         // 梳理各玻璃之间的绑定关系
         /*
         Lock();
         std::list<CGlass*> list = m_glassList;
         for (auto item : list) {
            std::string& strBuddyId = item->getBuddyId();
            if (!strBuddyId.empty()) {
               for (auto item2 : m_glassList) {
                  if (strBuddyId.compare(item2->getID()) == 0) {
                     item->setBuddy(item2);
                     TRACE("绑定关系: %s <- %s\n", item->getID().c_str(), item2->getID().c_str());
         for (int i = 0; i < SLOT_MAX; i++) {
            CGlass* pGlass = (CGlass*)m_slot[i].getContext();
            if (pGlass != nullptr) {
               std::string& strBuddyId = pGlass->getBuddyId();
               if (!strBuddyId.empty()) {
                  for (int j = 0; j < SLOT_MAX; j++) {
                     CGlass* pBudy = (CGlass*)m_slot[j].getContext();
                     if (pBudy != nullptr && strBuddyId.compare(pBudy->getID()) == 0) {
                        pGlass->setBuddy(pBudy);
                        TRACE("绑定关系: %s <- %s\n", pGlass->getID().c_str(), pBudy->getID().c_str());
                     }
                  }
               }
            }
         }
         Unlock();
         */
      }
   }
@@ -370,6 +371,7 @@
      for (int i = 0; i < 8; i++) {
         m_bLinkSignal[i][SIGNAL_UPSTREAM_INLINE] = isBitOn(pszData, size, index + 0);
         m_bLinkSignal[i][SIGNAL_UPSTREAM_TROUBLE] = isBitOn(pszData, size, index + 1);
         m_bLinkSignal[i][SIGNAL_INTERLOCK] = isBitOn(pszData, size, index + 2);
         m_bLinkSignal[i][SIGNAL_SEND_ABLE] = isBitOn(pszData, size, index + 3);
         index += 0x40;
      }       
@@ -605,6 +607,14 @@
      if (path >= PATH_MAX) return;
      if (signal >= SIGNAL_MAX) return;
      m_bLinkSignal[path][signal] = bOn;
   }
   void CEquipment::setLinkSignalBlock(unsigned int path, BOOL* pSignal)
   {
      if (path >= PATH_MAX) return;
      for (int i = 0; i < SIGNAL_MAX; i++) {
         m_bLinkSignal[path][i] = pSignal[i];
      }
   }
   int CEquipment::onStepEvent(CStep* pStep, int code)
@@ -1139,11 +1149,14 @@
         if (m_slot[i].isLock()) continue;
         CGlass* pGlass = (CGlass*)m_slot[i].getContext();
         if (pGlass == nullptr) continue;
         if(!m_bLinkSignal[0][SIGNAL_UPSTREAM_INLINE]
            || m_bLinkSignal[0][SIGNAL_UPSTREAM_TROUBLE]
            || !m_bLinkSignal[0][SIGNAL_INTERLOCK]
            || !m_bLinkSignal[0][SIGNAL_SEND_ABLE] ) continue;
         MaterialsType glassType = pGlass->getType();
         if (glassType == MaterialsType::G1 && putSlotType == MaterialsType::G2) continue;
         if (glassType == MaterialsType::G2 && putSlotType == MaterialsType::G1) continue;
         if (!pGlass->isProcessed(m_nID, 0)) continue;
         return &m_slot[i];
      }
@@ -1151,6 +1164,32 @@
      return nullptr;
   }
   CSlot* CEquipment::getProcessedSlot2(MaterialsType putSlotType, const std::vector<int>& candidates)
   {
      for (auto item : candidates) {
         for (int i = 0; i < SLOT_MAX; i++) {
            if (item == i + 1) {
               if (!m_slot[i].isEnable()) continue;
               if (m_slot[i].isLock()) continue;
               CGlass* pGlass = (CGlass*)m_slot[i].getContext();
               if (pGlass == nullptr) continue;
               if (!m_bLinkSignal[0][SIGNAL_UPSTREAM_INLINE]
                  || m_bLinkSignal[0][SIGNAL_UPSTREAM_TROUBLE]
                  || !m_bLinkSignal[0][SIGNAL_INTERLOCK]
                  || !m_bLinkSignal[0][SIGNAL_SEND_ABLE]) continue;
               MaterialsType glassType = pGlass->getType();
               if (glassType == MaterialsType::G1 && putSlotType == MaterialsType::G2) continue;
               if (glassType == MaterialsType::G2 && putSlotType == MaterialsType::G1) continue;
               return &m_slot[i];
            }
         }
      }
      return nullptr;
   }
   CGlass* CEquipment::getGlassFromSlot(int slotNo)
   {
      CSlot* pSlot = nullptr;