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

    Sursa metin are nivelul limitat la 255, deoarece se foloseste BYTE pentru variabile. (care are valoarea maxima 255)

    Vom schimba acest lucru si vom muta pe int, astfel nivelul maxim pe care il vei putea seta va fi de: 2147483647

    *Poze / Video:
    [C++] Scoate limita nivel maxim (peste 255) - Mesaj 1 - Imagine 1
    [C++] Scoate limita nivel maxim (peste 255) - Mesaj 1 - Imagine 2
    *Link download / Code:

    Video tutorial implementare (daca nu va descurcati):


    Tutorial:

    Deschidem char.cpp si cautam:
    Code:
    void CHARACTER::SetLevel(BYTE level)
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem char.h si cautam:
    Code:
    void			SetLevel(BYTE level);
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Dupa cautam:
    Code:
    BYTE			level;
    (e sub asta: typedef struct character_point)

    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem party.cpp si cautam:
    Code:
    void CParty::P2PSetMemberLevel(DWORD pid, BYTE level)
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam asta:
    Code:
    BYTE CParty::GetMemberMaxLevel()
    {
    	BYTE bMax = 0;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    BYTE CParty::GetMemberMinLevel()
    {
    	BYTE bMin = PLAYER_MAX_LEVEL_CONST;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    void CParty::RequestSetMemberLevel(DWORD pid, BYTE level)
    Inlocuim cu
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem party.h si cautam:
    Code:
    BYTE	bLevel;
    (este sub: typedef struct SMember)
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    		BYTE		GetMemberMaxLevel();
    		BYTE		GetMemberMinLevel();
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    		void		RequestSetMemberLevel(DWORD pid, BYTE level);
    		void		P2PSetMemberLevel(DWORD pid, BYTE level);
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem char_battle.cpp si cautam:
    Code:
    	struct FPartyTotaler
    	{
    		int		total;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    	struct FPartyDistributor
    	{
    		int		total;
    		LPCHARACTER	c;
    		int		x, y;
    		DWORD		_iExp;
    		int		m_iMode;
    		int		m_iMemberCount;
    
    		FPartyDistributor(LPCHARACTER center, int member_count, int total, DWORD iExp, int iMode) 
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem config.h si cautam:
    Code:
    extern BYTE	PK_PROTECT_LEVEL;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem locale_service.cpp si cautam:
    Code:
    BYTE PK_PROTECT_LEVEL
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem constants.cpp si cautam:
    Code:
    const DWORD exp_table_euckr[PLAYER_EXP_TABLE_MAX + 1]
    const DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1]
    const DWORD exp_table_newcibn[PLAYER_EXP_TABLE_MAX + 1 ]
    const DWORD party_exp_distribute_table[PLAYER_MAX_LEVEL_CONST + 1]
    const int aiExpLossPercents[PLAYER_EXP_TABLE_MAX + 1]
    Completam tabelele cu cat e nivelul maxim. Daca avem nivel maixm 300, punem 300 valori.

    Deschidem log.h si cautam:
    Code:
    void		LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, BYTE bLevel, BYTE bJob, DWORD dwPlayTime);
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem log.cpp si cautam:
    Code:
    void LogManager::LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, BYTE bLevel, BYTE bJob, DWORD dwPlayTime)
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem guild.h si cautam:
    Code:
    typedef struct SGuildMemberPacketData
    {   
    	DWORD pid;
    	BYTE grade;
    	BYTE is_general;
    	BYTE job;
    	BYTE level;
    	DWORD offer;
    	BYTE name_flag;
    	char name[CHARACTER_NAME_MAX_LEN+1];
    } TGuildMemberPacketData;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    void		ChangeMemberData(DWORD pid, DWORD offer, BYTE level, BYTE grade);
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    SGuildMember(DWORD pid, BYTE grade, BYTE is_general, BYTE job, BYTE level, DWORD offer_exp, char* name);
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    	DWORD pid; // player Ĺ×ŔĚşíŔÇ id; primary key
    	BYTE grade; // ±ćµĺ»óŔÇ ÇĂ·ąŔĚľîŔÇ °č±Ţ 1 to 15 (1ŔĚ ÂŻ)
    	BYTE is_general;
    	BYTE job;
    	BYTE level;
    	DWORD offer_exp; // °řÇĺÇŃ °ćÇčġ
    	BYTE _dummy;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    void		LevelChange(DWORD pid, BYTE level);
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem guild.cpp si cautam:
    Code:
    BYTE level = (BYTE)strtoul(row[4], (char**) NULL, 10);
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    sys_log(0, "GUILD: AddMember PID %u, grade %u, job %u, level %u, offer %u, name %s ptr %p",
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    void CGuild::ChangeMemberData(DWORD pid, DWORD offer, BYTE level, BYTE grade)
    Inlocuim toata functia cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    void CGuild::LevelChange(DWORD pid, BYTE level)
    Inlocuim toata functia cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    bool CGuild::OfferExp(LPCHARACTER ch, int amount)
    Inlocuim toata functia cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    void CGuild::SendListPacket(LPCHARACTER ch)
    Inlocuim toata functia cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    void CGuild::SendListOneToAll(DWORD pid)
    Inlocuim toata functia cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    SGuildMember::SGuildMember(DWORD pid, BYTE grade, BYTE is_general, BYTE job, BYTE level, DWORD offer_exp, char* name)
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem tables.h din common si cautam:
    Code:
    BYTE		byLevel;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    BYTE	level;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    BYTE level;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    BYTE	bLevel;
    (este sub: typedef struct SPacketPartySetMemberLevel)

    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    BYTE	bLevel;
    (este sub: typedef struct SPacketDGGuildMember)

    Inlocuim cu:
    Code:
    int	bLevel;
    deschidem lenght.h si aici setam nivelul maxim:
    Code:
    	PLAYER_EXP_TABLE_MAX	= 120,
    	PLAYER_MAX_LEVEL_CONST	= 120,
    Deschidem db/src/ClientManager.h si cautam:
    Code:
    	struct TPartyInfo
    	{
    	    BYTE bRole;
    	    BYTE bLevel;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem ClientManager.cpp si cautam in void CClientManager::SendPartyOnSetup(CPeer* pkPeer):
    Code:
    pkPeer->Encode(&it_member->second.bLevel, sizeof(BYTE));
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem ClientManagerPlayer.cpp si cautam:
    Code:
    "PLAYER_DELETE FAILED LEVEL %u >= DELETE LIMIT %d"
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam (x2):
    Code:
    "PLAYER_DELETE FAILED LEVEL %u >= DELETE LIMIT %d"
    Inlocuim (x2):
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    In sursa binary, deschidem packet.h si cautam:
    Code:
    BYTE                byLevel;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Cautam:
    Code:
    BYTE byLevel;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Deschidem PythonGuild.h si cautam:
    Code:
    BYTE byLevel;
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Si nu in ultimul rand, mergem in Navicat -> player -> player -> Design table -> Editam coloana level si setam din type tinyint in int si la size extindem la 3/4 (in functie de caz)

    Cam atat :)

    Acum va trebui sa editati in constants.cpp EXP pentru fiecare nivel, va las un exemplu atasat mai 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ț

    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: DEVE, rawn3cr0, ZeroS și 4 vizitatori

    Discord ID copiat: