İletişim: [email protected]

1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix

'Kurallara Aykırı Konular' forumunda DarkLenox tarafından 11 Kasım 2015 tarihinde açılan konu

  1. DarkLenox

    DarkLenox New Member

    Katılım:
    29 Ocak 2013
    Mesaj:
    347
    Beğeniler:
    0
    Ödül Puanları:
    0
    [HIDE]
    Kod:
    void CUser::ItemTrade(Packet & pkt){
    
     Packet result(WIZ_ITEM_TRADE);
    
     uint32 transactionPrice;
    
     int itemid = 0, money = 0,totalGold = 0, group = 0;
    
     uint16 npcid;
    
     uint16 count, real_count = 0;
    
     _ITEM_TABLE* pTable = nullptr;
    
     CNpc* pNpc = nullptr;
    
     uint8 type, pos, destpos,NPCTotalPos, NPCPageNum, ItemPosInNPC, errorCode = 1;
    
     bool bSuccess = true;
    
    
    
    
    
     if (isDead())
    
     {
    
      errorCode = 1;
    
      goto send_packet;
    
     }
    
    
    
    
    
     pkt >> type;
    
     // Buy == 1, Sell == 2
    
     if (type == 1 || type == 2 || type == 3)
    
     {
    
      pkt >> group >> npcid >> NPCTotalPos;
    
    
    
    
    
    
    
    
    
      if (!g_pMain->m_bPointCheckFlag
    
       || (pNpc = g_pMain->GetNpcPtr(npcid)) == nullptr
    
       || (pNpc->GetType() != NPC_MERCHANT && pNpc->GetType() != NPC_TINKER)
    
       || pNpc->m_iSellingGroup != group
    
       || !isInRange(pNpc, MAX_NPC_RANGE)
    
       || NPCTotalPos > 14)
    
       goto fail_return;
    
    
    
    
    
     }
    
    
    
    
    
      for(int x = 1;x <= NPCTotalPos;x++)
    
      {
    
    
    
    
    
    	 pkt >> itemid >> pos;
    
    
    
    
    
    	 if (type == 3)  // Move only (this is so useless mgame -- why not just handle it with the CUser::ItemMove(). Gah.)
    
    	  pkt >> destpos;
    
    	 else
    
    	  pkt >> count;
    
      
    
    	 if(type == 1)
    
    		 pkt >> NPCPageNum >> ItemPosInNPC;
    
    
    
    
    
     // Moving an item in the inventory
    
     if (type == 3)
    
     {
    
      if (pos >= HAVE_MAX || destpos >= HAVE_MAX
    
       || itemid != m_sItemArray[SLOT_MAX+pos].nNum)
    
      {
    
       errorCode = 4;
    
       goto send_packet;
    
      }
    
    
    
    
    
      short duration = m_sItemArray[SLOT_MAX+pos].sDuration;
    
      short itemcount = m_sItemArray[SLOT_MAX+pos].sCount;
    
      m_sItemArray[SLOT_MAX+pos].nNum = m_sItemArray[SLOT_MAX+destpos].nNum;
    
      m_sItemArray[SLOT_MAX+pos].sDuration = m_sItemArray[SLOT_MAX+destpos].sDuration;
    
      m_sItemArray[SLOT_MAX+pos].sCount = m_sItemArray[SLOT_MAX+destpos].sCount;
    
      m_sItemArray[SLOT_MAX+destpos].nNum = itemid;
    
      m_sItemArray[SLOT_MAX+destpos].sDuration = duration;
    
      m_sItemArray[SLOT_MAX+destpos].sCount = itemcount;
    
    
    
    
    
      result << uint8(3);
    
      Send(&result);
    
      return;
    
     }
    
    
    
    
    
     if (isTrading()
    
      || (pTable = g_pMain->GetItemPtr(itemid)) == nullptr
    
      || (type == 2 // if we're selling an item...
    
      && (itemid >= ITEM_NO_TRADE // Cannot be traded, sold or stored.
    
      || pTable->m_bRace == RACE_UNTRADEABLE))) // Cannot be traded or sold.
    
      goto fail_return;
    
    
    
    
    
     if (pos >= HAVE_MAX
    
      || count <= 0 || count > MAX_ITEM_COUNT)
    
     {
    
      errorCode = 2;
    
      goto fail_return;
    
     }
    
    
    
    
    
     // Buying from an NPC
    
     if (type == 1)
    
     { 
    
      if (m_sItemArray[SLOT_MAX+pos].nNum != 0)
    
      {
    
       if (m_sItemArray[SLOT_MAX+pos].nNum != itemid)
    
       {
    
        errorCode = 2;
    
        goto fail_return;
    
       }
    
    
    
    
    
       if (!pTable->m_bCountable || count <= 0)
    
       {
    
        errorCode = 2;
    
        goto fail_return;
    
       }
    
    
    
    
    
       if (pTable->m_bCountable 
    
        && (count + m_sItemArray[SLOT_MAX+pos].sCount) > MAX_ITEM_COUNT)
    
       {
    
        errorCode = 4;
    
        goto fail_return;    
    
       }
    
      }
    
    
    
    
    
      transactionPrice = ((uint32)pTable->m_iBuyPrice * count);
    
      if (!hasCoins(transactionPrice))
    
      {
    
       errorCode = 3;
    
       goto fail_return;
    
      }
    
    
    
    
    
      if (((pTable->m_sWeight * count) + m_sItemWeight) > m_sMaxWeight)
    
      {
    
       errorCode = 4;
    
       goto fail_return;
    
      }
    
    
    
    
    
      m_sItemArray[SLOT_MAX+pos].nNum = itemid;
    
      m_sItemArray[SLOT_MAX+pos].sDuration = pTable->m_sDuration;
    
      m_sItemArray[SLOT_MAX+pos].sCount += count;
    
    
    
    
    
      m_iGold -= transactionPrice;
    
    
    
    
    
      if (!pTable->m_bCountable)
    
       m_sItemArray[SLOT_MAX+pos].nSerialNum = g_pMain->GenerateItemSerial();
    
    
    
    
    
     
    
     }
    
     // Selling an item to an NPC
    
     else
    
     {
    
      _ITEM_DATA *pItem = &m_sItemArray[SLOT_MAX+pos];
    
      if (pItem->nNum != itemid
    
       || pItem->isSealed() // need to check the error codes for these
    
       || pItem->isRented())
    
      {
    
       errorCode = 2;
    
       goto fail_return;
    
      }
    
    
    
    
    
      if (pItem->sCount < count)
    
      {
    
       errorCode = 3;
    
       goto fail_return;
    
      }
    
    
    
    
    
      short oldDurability = pItem->sDuration;
    
      if (pTable->m_iSellPrice != SellTypeFullPrice)
    
       transactionPrice = ((pTable->m_iBuyPrice / 6) * count); // /6 is normal, /4 for prem/discount
    
      else
    
       transactionPrice = (pTable->m_iBuyPrice * count);
    
    
    
    
    
      GoldGain(transactionPrice, false);
    
    
    
    
    
      if (count >= pItem->sCount)
    
       memset(pItem, 0, sizeof(_ITEM_DATA));
    
      else
    
       pItem->sCount -= count;
    
    
    
    
    
    
    
    
    
     }
    
      SendItemWeight();
    
      }
    
    
    
    
    
    
    
    
    
     SetUserAbility(false);
    
    
    
    
    
     goto send_packet;
    
    
    
    
    
    
    
    
    
    
    
    
    
    fail_return:
    
     bSuccess = false;
    
     result << uint8(0x00) << bSuccess;
    
    
    
    
    
    send_packet:
    
     
    
      result << uint8(0x01) << m_iGold << transactionPrice; // price bought or sold for
    
    
    
    
    
     Send(&result);
    
    }
    [/HIDE]
     
  2. Terry

    Terry New Member

    Katılım:
    26 Eylül 2014
    Mesaj:
    408
    Beğeniler:
    0
    Ödül Puanları:
    0
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    %100 ? :)
     
  3. DarkLenox

    DarkLenox New Member

    Katılım:
    29 Ocak 2013
    Mesaj:
    347
    Beğeniler:
    0
    Ödül Puanları:
    0
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix





    kısmet fixler var piyasada parayı -ye felan düşürüyor veya yanlış hesaplıyor item silinme sorunları sen bu sözden 5-6 ay önce paylaşıcaktın
     
  4. Ceronimo

    Ceronimo Member

    Katılım:
    7 Temmuz 2013
    Mesaj:
    444
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    bakalım, sen nasil kodlamissin

    Teşekkurler
     
  5. hazif38

    hazif38 Member

    Katılım:
    23 Ağustos 2015
    Mesaj:
    448
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    sagol kanka!!!
     
  6. Direnish

    Direnish Member

    Katılım:
    4 Eylül 2012
    Mesaj:
    497
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    Thanks
     
  7. Christian

    Christian Member

    Katılım:
    22 Ekim 2012
    Mesaj:
    728
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    thnaksssss
     
  8. EmreNyz

    EmreNyz Member

    Katılım:
    25 Eylül 2013
    Mesaj:
    282
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    eline sağlık.
     
  9. Goto566

    Goto566 Active Member

    Katılım:
    8 Nisan 2012
    Mesaj:
    1,092
    Beğeniler:
    0
    Ödül Puanları:
    36
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    teşekkürler
     
  10. guswls1324

    guswls1324 Member

    Katılım:
    24 Ağustos 2012
    Mesaj:
    441
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    Thank you
     
  11. lz2008

    lz2008 Member

    Katılım:
    17 Ağustos 2015
    Mesaj:
    455
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    AAAAAAAAAAAAAAAAA
     
  12. Karaeski

    Karaeski Member

    Katılım:
    8 Mart 2012
    Mesaj:
    392
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    adam darklenox yanlış olmasın :D
     
  13. 21oyuncu

    21oyuncu Member

    Katılım:
    21 Mart 2012
    Mesaj:
    688
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    Teşekkürler.
     
  14. jarmen

    jarmen Member

    Katılım:
    2 Eylül 2012
    Mesaj:
    617
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    Bakalım bir
     
  15. Legends

    Legends Member

    Katılım:
    19 Ekim 2015
    Mesaj:
    131
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    ty kankaaaaaaaa
     
  16. chef

    chef Member

    Katılım:
    11 Aralık 2014
    Mesaj:
    354
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    sagol Kardeşim
     
  17. EvaneScence

    EvaneScence Member

    Katılım:
    10 Eylül 2014
    Mesaj:
    201
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    Teşekkürlerr
     
  18. SANCAKBEY

    SANCAKBEY Member

    Katılım:
    13 Mayıs 2015
    Mesaj:
    115
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    teşekkürler
     
  19. lulianyi

    lulianyi Member

    Katılım:
    1 Ocak 2014
    Mesaj:
    883
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    thank you!
     
  20. J4cKaL

    J4cKaL Member

    Katılım:
    10 Mayıs 2014
    Mesaj:
    424
    Beğeniler:
    0
    Ödül Puanları:
    16
    Cevap: 1975 ve 20xx Serverlerde Npcden İtem Çekme Sorunu 100% Fix



    teşekkürler
     

Bu Sayfayı Paylaş