3 mesaje
Administrator Administrator
  • Mesaje: 3449
  • Reacții: 48407
  • Mesaje utile: 29
  • Status: Pe aici.. 🤠
  • Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Contact:
    Avatar utilizator
    Administrator
    Administrator
    *Descriere:

    Adauga pickup la peturi pe serverul tau - cu ajutorul modificarilor de mai jos, pet-ul va aduna drop-ul de pe jos pentru tine automat :)

    *Poze / Video:
    [C++] Pet PickUp - Mesaj 1 - Imagine 1
    *Link download / Code:

    Adaugam in service.h:
    Code:
    #define __PET_PICKUP
    In PetSystem.h cautam:
    Code:
    void			SetSummonItem (LPITEM pItem);
    Adauga:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cauta:
    Code:
    LPCHARACTER		m_pkOwner;
    Adauga jos:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    In char.h cauta :
    Code:
    bool			PickupItem(DWORD vid);
    Adauga jos:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    In char_item.cpp cauta :
    Code:
    bool CHARACTER::PickupItem(DWORD dwVID)
    Adaugi sus:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    In PetSystem.cpp cauta:
    Code:
    bool CPetActor::Follow(float fMinDistance)
    Adaugi sus:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cauta :
    Code:
    if (this->IsSummoned() && HasOption(EPetOption_Followable))
    Adaugi sus:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.

    Cauta:
    Code:
    this->SetSummonItem(NULL);
    Adauga:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cauta:
    Code:
    m_dwSummonItemVID = 0;
    		m_dwSummonItemVnum = 0;
    Adaugi jos:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.

    Cum descarc de pe TeraBox?

    Afișează detalii Ascunde detalii
    • 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/jWxeDSf7HP

    Suntem peste 1700 membri! - Avem chat activ zilnic, support, cereri, resurse. :D :ymcowboy:




    See full signature

    📢 Resurse Metin2 Premium!

    Zeci de resurse Metin2 Premium - exclusive și 100% funcționale începând cu 15.99€!.

    Vezi resursele Cumpără premium
    Premium
    Premium
    Anunț
  • Mesaje: 26
  • Reacții: 197
  • Mesaje utile: 1
  • Status: Pierd vremea ^.^
  • Regat: Jinno
  • Medalii

    vreo idee cum pot seta doar anumite peturi sa faca pickup ?
  • Mesaje: 25
  • Reacții: 21
  • Mesaje utile: 5
  • Status: Pierd vremea ^.^
  • Regat: Jinno
  • Medalii

    Mesaj de Dintisor »

    ShadowsPR0 scrie: struct PetPickUpItemStruct
    Salut,
    Se poate face și prin quest, doar că trebuie să existe în surse un punct unde quest-ul să poată seta o variabilă pentru pet (ex. un flag sau o valoare în affect / quest flag), iar apoi codul pickup să verifice acel flag.

    Ai câteva variante:

    🔹 Varianta 1 – Folosind quest flag global pentru pet

    Poți salva în quest flag dacă un anumit vnum de pet are voie la pickup:
    quest pet_pickup begin
    state start begin
    when 20095.use begin -- exemplu, item de summon pet
    if pc.getqf("allow_pickup") == 1 then
    say("Pet-ul tău are voie să ridice iteme.")
    else
    say("Acest pet nu poate ridica iteme.")
    end
    end

    when 20349.chat."Activează pickup la pet" begin
    say("Acum petul tău va putea ridica iteme.")
    pc.setqf("allow_pickup", 1)
    end

    when 20349.chat."Dezactivează pickup la pet" begin
    say("Petul tău nu mai are voie să ridice iteme.")
    pc.setqf("allow_pickup", 0)
    end
    end
    end
    Apoi, în cod (în PetActor::Follow sau unde faci logica de pickup), verifici flag-ul:
    if (quest::CQuestManager::instance().GetEventFlag("allow_pickup") != 1)
    return false; // nu ridică
    Dar atenție: pc.getqf e pe jucător, nu pe fiecare pet în parte. Deci e global pentru caracter.

    🔹 Varianta 2 – Flag pe fiecare vnum de pet

    Poți face un quest care la spawn setează un affect sau un pet flag în DB:
    quest pet_pickup_config begin
    state start begin
    function can_pickup(vnum)
    -- doar aceste pet-uri au voie
    local allowed = { [53001] = true, [53002] = true, [53007] = true }
    return allowed[vnum] or false
    end

    when login or pet.summon with pet.is_summoned() begin
    local vnum = pet.get_vnum()
    if pet_pickup_config.can_pickup(vnum) then
    pc.setqf("pet_pickup_active", 1)
    else
    pc.setqf("pet_pickup_active", 0)
    end
    end
    end
    end
    Și în cod, verifici pc.getqf("pet_pickup_active").

    🔹 Varianta 3 – Direct în cod, dar configurat prin quest

    Poți face un quest care scrie într-o event flag globală lista de pet-uri ce pot ridica, iar în cod verifici acel flag. Exemplu:
    when 20349.chat."Activează pickup pentru pet 53001" begin
    game.set_event_flag("pet53001_pickup", 1)
    end

    when 20349.chat."Dezactivează pickup pentru pet 53001" begin
    game.set_event_flag("pet53001_pickup", 0)
    end
    Și în cod, când verifici:
    if (quest::CQuestManager::instance().GetEventFlag("pet" + std::to_string(vnum) + "_pickup") == 1)
    {
    // poate ridica
    }
    Dacă vrei să limitezi pickup-ul doar pentru anumite vnum-uri de pet, ai două variante:

    🔹 Varianta 1 (mai curată): direct în surse

    În PetSystem.cpp (sau unde e funcția CPetActor::Follow / Pickup), adaugi o listă cu vnum-urile care pot ridica:
    bool CPetActor::Follow(float fMinDistance)
    {
    static const std::set<DWORD> pickupPets = {53001, 53002, 53007}; // vnum-urile permise

    if (pickupPets.find(GetVnum()) == pickupPets.end()) {
    return false; // dacă nu e în listă, nu ridică
    }

    // codul existent de follow + pickup
    ...
    }
    Asta e metoda recomandată, nu mai depinzi de quest.

    🔹 Varianta 2: prin quest (dacă vrei flexibilitate)

    Poți folosi un quest simplu care verifică la summon dacă petul este „allowed” și setează un flag pentru caracter:
    quest pet_pickup_config begin
    state start begin
    function can_pickup(vnum)
    local allowed = { [53001] = true, [53002] = true, [53007] = true }
    return allowed[vnum] or false
    end

    when login or pet.summon with pet.is_summoned() begin
    local vnum = pet.get_vnum()
    if pet_pickup_config.can_pickup(vnum) then
    pc.setqf("pet_pickup_allowed", 1)
    else
    pc.setqf("pet_pickup_allowed", 0)
    end
    end
    end
    end
    Iar în codul pickup (C++), faci verificarea pe flag:
    if (ch->GetQuestFlag("pet_pickup_allowed") != 1)
    return false;
    Ti-am explicat cam ce ar trebui sa faci, daca intampini probleme lasa REPLY

    Succes !

    🔥 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

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


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

    Înregistrare

    Autentifică-te

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

    Informații

    Utilizatori ce navighează pe acest forum: ethalor2official, keksz021, tutuan982, Zbychu și 8 vizitatori

    Discord ID copiat: