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

    Mai jos vei afla cum sa faci un NPC (sau orice mob) sa atace alt mob sau un jucator.

    Functiile sunt deja bagate in sursa oricarui serverfiles, deoarece ymir a vrut sa faca ceva cu acestea - dar s-a razgandit eventual (evident :ymsigh:)

    Cum functioneaza sistemul gandit de ymir?
    - Acestia voiau sa puna gardieni in mapele de la regate ca sa "apere regatul".
    - De exemplu, daca erai in Regatul Albastru si puneai un NPC Gardian (11004) sau / Administratorul Luptelor (11005), iar un jucator din Regatul Galben venea in regatul tau, acesta era omorat instant de acesti NPC. (One hit kill)

    De aceea avem 3 variante de gardieni pentru fiecare regat, cu alt cod.

    Va las varianta originala unde NPC va omori instant jucatorul/mob-ul

    Si o varianta cu damage setat de voi.

    Puteti modifica singuri sa ia DMG-ul din mob_proto.

    *Poze / Video:
    [C++] Tutorial NPC ataca alt mob/player - Mesaj 1 - Imagine 1
    *Link download / Code:
    Inainte de toate mergeti la npc/mob in mob_proto.txt si scoateti flag-ul NOMOVE!
    Ca sa adaugam un mob care sa atace mergem in char.cpp si cautam:
    Code:
    bool CHARACTER::IsGuardNPC() const
    {
        return IsNPC() && (GetRaceNum() == 11000 || GetRaceNum() == 11001 || GetRaceNum() == 11002 || GetRaceNum() == 11003 || GetRaceNum() == 11004 || GetRaceNum() == 11005);
    }
    Nota! Aici adaugam in lista mobii/npc care vrei sa atace alti mobi/playeri.

    Dupa care mergem in char_state.cpp si cautam:
    Code:
    void CHARACTER::__StateIdle_NPC()
    Adaugam deasupra:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Acum cautam:
    Code:
    	else if (IsGuardNPC())
    	{
    		if (!quest::CQuestManager::instance().GetEventFlag("noguard"))
    		{
    			FuncFindGuardVictim f(this, 50000);
    
    			if (GetSectree())
    				GetSectree()->ForEachAround(f);
    
    			LPCHARACTER victim = f.GetVictim();
    
    			if (victim)
    			{
    				m_dwStateDuration = passes_per_sec/2;
    
    				if (CanBeginFight())
    					BeginFight(victim);
    			}
    		}
    	}
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Daca vrem ca NPC/Mob sa atace alti mobi, cautam in char_state.cpp:
    Code:
    if (pkChr->IsPC() && pkChr->GetEmpire() != m_pkChr->GetEmpire())
    Modificam asa:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Va jucati cu functia asta si o modificati dupa bunul plac.. puteti folosi argumente specifice precum:
    Code:
    (GetRaceNum() == cod mob aici
    si multe altele - aici tine de imaginatia voastra!

    Acum cauta si comenteaza ca mai jos:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Daca vrem ca damage-ul sa nu fie 100% (insta kill) mergem in char_battle.cpp si cautam:
    Code:
            else if (pAttacker->IsGuardNPC())
            {
                SET_BIT (m_pointsInstant.instant_flag, INSTANT_FLAG_NO_REWARD);
                Stun();
                return true;
            }
    Modificam cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Asa setam 10k atacu la acesti NPC/Mobi.

    Putet modifica sa citeasca dmg din mob_proto.txt, adaptati voi :)

    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

    🔥 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: 1
  • Reacții: 0
  • Mesaje utile: 0
  • Status: Pierd vremea ^.^
  • Regat: Chunjo
  • Medalii

    Mesaj de Nazox96 »

    Thanks, but it doesn't work for me, I've tried changing the mob to NPC but it doesn't attack me either, it even has AGGR, I also deleted the empire thing so it attacks independently of the kingdom and tried both with is->Monster to kill all the mobs on the map and using unique ids of specific mobs, does it only work with guardians or will I have to create a similar function for mobs? Thank you very much for the post and your time :ymhug:

    📢 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ț
    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: aometaphor, felsman_n_, gamer6661102, gpss și 7 vizitatori

    Discord ID copiat: