Lucrăm la îmbunătățirea site-ului! Este posibil ca unele module să nu funcționeze corect!
3 mesaje
Avatar utilizator
Administrator
  • Administrator

    Autor subiect

  • Mesaje: 2,607
  • Reacții: 29013
  • Mesaje utile: 17
  • Status: Pierd vremea ^.^
  • Server: Saga2 - Soon
  • Regat: Jinno
  • Discord: [Vezi ID]
  • Contact:
    Avatar utilizator
    Administrator

    Autor subiect

    Administrator
    *Descriere:

    Mareste limita de stack de la obiecte de la 200 -> la cat vrei tu! O:-)

    Cu ajutorul tutorialului de mai jos vei putea sa maresti limita de stack al itemelor din inventar, astfel in loc de standardul de 200 obiecte / stack, vei putea aduna si 10,000 bucati intr-un singur stack.

    Tutorialul este Full si Testat!

    Are adaptare si pentru cei care folosesc serverfiles + sursele de la Martysama! :-*

    *Poze / Video:
    [C++] Mareste limita Stack Iteme (Full) - Mesaj 1 - Imagine 1
    *Link download / Code:
    Deschidem sursa binary si mergem in Packet.h

    Cautam (in typedef struct command_item_drop2):
    Code:
    BYTE count;
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam (in typedef struct command_item_move):
    Code:
    BYTE num;
    
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam (in typedef struct SShopItemTable):
    Code:
    BYTE count;
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam (in typedef struct packet_set_item2):
    Code:
    BYTE count;
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam (in typedef struct packet_update_item):
    Code:
    BYTE count;
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam (in typedef struct SEquipmentItemSet):
    BYTE count;

    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem PythonNetworkPhaseGame.cpp si mergem in functia -> RecvExchangePacket

    Cautam:
    Code:
    CPythonExchange::Instance().SetItemToSelf(iSlotIndex, exchange_packet.arg1, (BYTE) exchange_packet.arg3);
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam:
    Code:
    CPythonExchange::Instance().SetItemToTarget(iSlotIndex, exchange_packet.arg1, (BYTE) exchange_packet.arg3);
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem PythonExchange.cpp: si cautam:
    Code:
    BYTE CPythonExchange::GetItemCountFromTarget(BYTE pos)
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam:
    Code:
    BYTE CPythonExchange::GetItemCountFromSelf(BYTE pos)
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam:
    Code:
    void CPythonExchange::SetItemToTarget(DWORD pos, DWORD vnum, BYTE count)
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam:
    Code:
    void CPythonExchange::SetItemToSelf(DWORD pos, DWORD vnum, BYTE count)
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem PythonExchange.h si cautam:
    Code:
    BYTE GetItemCountFromTarget(BYTE pos);
    BYTE GetItemCountFromSelf(BYTE pos);
    
    void SetItemToTarget(DWORD pos, DWORD vnum, BYTE count);
    void SetItemToSelf(DWORD pos, DWORD vnum, BYTE count);
    
    BYTE item_count[EXCHANGE_ITEM_MAX_NUM];
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem PythonNetworkStreamPhaseGameItem.cpp si cautam:
    Code:
    bool CPythonNetworkStream::SendShopSellPacketNew
    Inlocuim toata functia cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.



    Dupa, cautam:
    Code:
    bool CPythonNetworkStream::SendItemMovePacket(TItemPos pos, TItemPos change_pos, BYTE num)
    bool CPythonNetworkStream::SendSafeBoxItemMovePacket(BYTE bySourcePos, BYTE byTargetPos, BYTE byCount)
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem acum fisierul PythonPlayerModule.cpp si cautam:
    Code:
    PyObject * playerSetItemCount(PyObject* poSelf, PyObject* poArgs)
    Inlocuim toata functia cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.



    Deschidem dupa PythonNetworkStreamModule.cpp si cautam:
    Code:
    PyObject* netSendItemMovePacket(PyObject* poSelf, PyObject* poArgs)
    Inlocuim toata functia cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem acum GameType.h si cautam (in typedef struct packet_item)
    Code:
    BYTE count;
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam (in typedef struct packet_shop_item)
    Code:
    BYTE count;
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem dupa AbstractPlayer.h si cautam:
    Code:
    virtual void SetItemCount(TItemPos itemPos, BYTE byCount) = 0;
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Dupa, deschidem PythonPlayer.cpp si cautam:
    Code:
    void CPythonPlayer::SetItemCount(TItemPos Cell, BYTE byCount)
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.



    Mergem in PythonPlayer.h si cautam:
    Code:
    void SetItemCount(TItemPos Cell, BYTE byCount);
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem fisierul PythonNetworkStream.h si cautam:
    Code:
    bool SendSafeBoxItemMovePacket(BYTE bySourcePos, BYTE byTargetPos, BYTE byCount);
    bool SendShopSellPacketNew(BYTE bySlot, BYTE byCount);
    bool SendItemMovePacket(TItemPos pos, TItemPos change_pos, BYTE num);
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.



    Acum in sursa game, deschidem common/tables.h si cautam:
    Code:
    typedef struct SShopItemTable
    Mai jos gasim:
    Code:
    BYTE count;
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem common/item_lenght.h si aici putem modifica limita de stack cu ce vrem noi: (max ~60k)
    ITEM_MAX_COUNT = 200,

    Deschidem packet.h si cautam (in typedef struct command_item_drop2):
    Code:
    BYTE count;
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam (in typedef struct command_item_move):
    Code:
    BYTE count;
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam (in typedef struct packet_item_set):
    Code:
    BYTE count;
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam (in typedef struct packet_item_update):
    Code:
    BYTE count;
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam (in struct packet_shop_item):
    Code:
    BYTE count;
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam (in typedef struct pakcet_view_equip):
    Code:
    BYTE count;
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Acum mergem in fisierul input_main.cpp si cautam:
    Code:
    int CInputMain::Shop(LPCHARACTER ch, const char * data, size_t uiBytes)
    Inlocuim toata functia cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Mergem acum in shop_manager.cpp si cautam:
    Code:
    void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount)
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem shop.h si cautam (in typedef struct shop_item)
    Code:
    BYTE count;
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem shop_manager.h si cautam:
    Code:
    void Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount=0);
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem fisierul char_item.cpp si cautam:
    Code:
    bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam:
    Code:
    bool CHARACTER::MoveItem(TItemPos Cell, TItemPos DestCell, BYTE count)
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam mai jos:
    Code:
    count = MIN(200 - item2->GetCount(), count);
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam:
    Code:
    LPITEM CHARACTER::AutoGiveItem(DWORD dwItemVnum, BYTE bCount, int iRarePct, bool bMsg)
    Modificam cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Mai jos gasim:
    Code:
    BYTE bCount2 = MIN(200 - item->GetCount(), bCount);
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    In functia PickupItem cautam:
    Code:
    BYTE bCount = item->GetCount();
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Tot in functia asta cautam:
    Code:
    BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem char.h si cautam:
    Code:
    bool DropItem(TItemPos Cell, BYTE bCount=0);
    bool MoveItem(TItemPos pos, TItemPos change_pos, BYTE num);
    LPITEM AutoGiveItem(DWORD dwItemVnum, BYTE bCount=1, int iRarePct = -1, bool bMsg = true);
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem fisierul item.cpp si mergem la functia -> DWORD CItem::GetCount() unde cautam:
    Code:
    return MIN(m_dwCount, 200);
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem safebox.cpp si cautam:
    Code:
    bool CSafebox::MoveItem(BYTE bCell, BYTE bDestCell, BYTE count)
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Mai jos gasim:
    Code:
    count = MIN(200 - item2->GetCount(), count);
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem safebox.h si cautam:
    Code:
    bool MoveItem(BYTE bCell, BYTE bDestCell, BYTE count);
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem oxevent.cpp si cautam:
    Code:
    bool COXEventManager::GiveItemToAttender(DWORD dwItemVnum, BYTE count)
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem OxEvent.h si cautam:
    Code:
    bool GiveItemToAttender(DWORD dwItemVnum, BYTE count);
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Nota! Daca ai Martysama trebuie sa faci si ce e mai jos in Spoiler:

    Modificam fisierul CONFIG din canale:
    Code:
    ITEM_COUNT_LIMIT: 200 in cat va puneti voi
    Deschidem config.h si cautam:
    Code:
    extern BYTE g_bItemCountLimit;
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    In config.cpp cautam:
    Code:
    BYTE g_bItemCountLimit = 5000;
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem char_item.cpp si cautam:
    Code:
    BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam:
    Code:
    BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Cautam:
    Code:
    count = MIN(200 - item2->GetCount(), count);
    Inlocuim cu:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Deschidem fisierul item.cpp si cautam:
    Code:
    return MIN(m_dwCount, 200);
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.


    Acum in safebox.cpp cautam:
    Code:
    count = MIN(200 - item2->GetCount(), count);
    Modificam asa:
    Conținut: Ascuns
    Motiv: Trebuie să reacționezi la mesaj pentru a vedea conținutul.

    Cum descarc de pe TeraBox?

    • Este asemănător cu Mega.nz
    • Instalați-vă clientul lor de Download de aici
    • Faceți-vă un cont (vă puteți loga cu Facebook / Google / etc)
    • Dacă nu vreți să descărcați clientul de Download, folosiți acest site
    • Gata! Acum puteți descărca resursele

    De ce folosim TeraBox?

    • Este gratuit
    • Primești 1TB de spațiu gratuit la orice cont creat!
    • Este ușor de folosit și varianta premium este foarte ieftină
    • Fișierele nu sunt șterse niciodată
    TeraBox logo
    Te asteptam si pe serverul de Discord :p - aici ne-am strans toata comunitatea de Metin2 din Romania.
    Link: https://discord.gg/Kr9nUpWa4X

    Suntem aproape 1000 membri! - Avem chat activ zilnic, support, cereri, resurse.



    See full signature

    🔥 Hai pe Discord! - Chat activ și support direct

    Te așteptăm și pe serverul de Discord - aici ne-am strâns toată comunitatea de Metin2 din România.

    Alătură-te acum!
    1300+ de membri activi!
    Robot Discord
    Roboțelu'
    Anunț
  • Mesaje: 8
  • Reacții: 0
  • Mesaje utile: 0
  • Regat: Chunjo
  • Medalii

    Este compatibil cu Ikarus V2?
    Avatar utilizator
    Administrator
  • Administrator

    Autor subiect

  • Mesaje: 2,607
  • Reacții: 29013
  • Mesaje utile: 17
  • Status: Pierd vremea ^.^
  • Server: Saga2 - Soon
  • Regat: Jinno
  • Discord: [Vezi ID]
  • Contact:
    Avatar utilizator
    Administrator

    Autor subiect

    Administrator
    randomuser1321 scrie: Este compatibil cu Ikarus V2?
    Da, este.
    Te asteptam si pe serverul de Discord :p - aici ne-am strans toata comunitatea de Metin2 din Romania.
    Link: https://discord.gg/Kr9nUpWa4X

    Suntem aproape 1000 membri! - Avem chat activ zilnic, support, cereri, resurse.



    See full signature

    🔥 Hai pe Discord! - Chat activ și support direct

    Te așteptăm și pe serverul de Discord - aici ne-am strâns toată comunitatea de Metin2 din România.

    Alătură-te acum!
    1300+ de membri activi!
    Robot Discord
    Roboțelu'
    Anunț
    Scrie răspuns

    Creează-ți un cont sau autentifică-te pentru a participa la discuție

    Trebuie să fii membru pentru a răspunde

    Creează-ți un cont

    Înregistrează-te și alătură-te comunității noastre

    Membrii pot crea subiecte noi și pot descărca resurse Metin2 Gratuit!


    Te poți înregistra rapid utilizând contul tău de Discord sau Github

    Înregistrare

    Autentifică-te

    Înapoi la “Îmbunătățiri”

    Informații

    Utilizatori ce navighează pe acest forum: root500, szemi3942 și 5 vizitatori