Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[Development] Community Edition Season6 Episode3 z-Team

Junior Spellweaver
Joined
Jan 23, 2007
Messages
173
Reaction score
5
Here you can find latest z-Team Server Files with latest fixes from Community !
Why I'm creating this topic ? Because I've seen alot of people that are asking for Latest Fixes in Source and Server Files aswell !

Now with the help of all MuOnline RageZone Community Developers and Testers we can make the best Season 6 Episode 3 Files yet . Maybe we can do something good together !

Remember ! I will update thread with Server Files/Client Fixes aswell Source Code with all Fixes !

Below you can find Community Edition Package .


What it contains ?
-Latest Updated Server Files so far !
-Latest Updated Source Files for DataServer and GameServer so far !
-Client Patch
-Tools

Community Project Changelog

Code:
Date : 08.07.2014
-Applied all Community Fixes so far

Date : 09.07.2014 -> v.0.1
ServerFiles :
-Corrected Server/Data/Item/SocketItem.txt
-Added Server/Data/Custom/CommunityEdition.ini
-Added NewJewelsMix in Server/Data/Custom/CommunityEdition.ini
-Added Server/Data/Item/OfflineTrade.txt -> Now you can set your OfflineShop Type

SourceCode :
-GameServer : 
Coded NewJewelsMix (Disabled for the moment)
Changes to Offtrade.cpp and Offtrade.h to set type of OfflineShop
Added Offtrade.cpp and Offtrade.h in Package so you can add to your existing Source Code 

-DataServer : None

ClientFiles :
-None

Date : 20.07.2014 -> v0.2
ServerFiles :
-Added Lucky Coin Event in Server/Data/Custom/CommunityEdition.ini
-Added Lucky Items Settings in Server/Data/Custom/CommunityEdition
-Corrected Server/Data/Event/IllusionTemple.dat to allow Event Running with 1 Player
-Added RageFighter SQL Query Fix in Server/Database/SQL Fixes
-Enabled ShopPointEx in Server/Data/Customs/ShopPointEx.txt


SourceCode :
-GameServer : 
Minor Changes in GameMain.cpp
Fixed DevilLizard King,Golden Tantallos and Golden Iron Wheel
Fixed Double Goer Event running with 1 Player
Enabled ShopPointEx
Enabled Quest System (In next update I will post Configs aswell)
Fixed MailSystem
-DataServer : None


ClientFiles :
-None

Download Link Community Edition Package :
-
Download Link Working Client :
-
Download Link Community Edition Package v0.1 :
-
Download Link Community Edition Package v0.2 :
-
Credits :
Webzen
z-Team
All Ragezone Community who Tested/Reported/Fixed this files so far !


How about uploading the source of this project to github or something similar? So that if other great coders out there who want to contribute a bugfix or new feature they will just have to send a patch.

Thanks for sharing this great project.
 
Newbie Spellweaver
Joined
Nov 25, 2012
Messages
64
Reaction score
21
ItemDropEx fix:

Code:
#include "StdAfx.h"
#include "DropEx.h"
#include "logproc.h"
#include "..\include\readscript.h"
#include "DSProtocol.h"
#include "gObjMonster.h"
#include "GameMain.h"
// -------------------------------------------------------------------------

DropEx	g_DropEx;
// -------------------------------------------------------------------------------

DropEx::DropEx()
{
	this->Init();
}
// -------------------------------------------------------------------------

DropEx::~DropEx()
{
	// ----
}
// -------------------------------------------------------------------------

void DropEx::Init()
{
	this->m_Data.clear();
#ifdef __ALIEN__
	this->m_NonDrop.clear();
#endif
}
// -------------------------------------------------------------------------

void DropEx::Load()
{
	this->Init();
	this->ReadData(gDirPath.GetNewPath("Custom\\ItemDropEx.txt"));
#ifdef __ALIEN__
	this->ReadBlockData(gDirPath.GetNewPath("Custom\\ItemDropBlock.txt"));
#endif
}
// -------------------------------------------------------------------------

void DropEx::ReadData(char * File)
{
	__try
	{
		SMDFile = fopen(File, "r");
		// ----
		while(true)
		{
			SMDToken Token = GetToken();
			// ----
			if( Token == END )
			{
				break;
			}
			// ----
			DROPEX_DATA List;
			// ----
			List.ItemType			= TokenNumber;
			// ----
			GetToken();
			List.ItemIndex			= TokenNumber;
			// ----
			GetToken();
			List.ItemMinLevel		= TokenNumber;
			// ----
			GetToken();
			List.ItemMaxLevel		= TokenNumber;
			// ----
			GetToken();
			List.ItemMaxOption		= TokenNumber;
/*
#ifdef __ALIEN__
			GetToken();
			List.ItemOptRate		= TokenNumber;
#endif
*/
			// ----
			GetToken();
			List.ItemLuck			= TokenNumber;
			// ----
/*
#ifdef __ALIEN__
			GetToken();
			List.ItemLuckRate		= TokenNumber;
#endif
*/
			GetToken();
			List.ItemSkill			= TokenNumber;
			// ----
/*
#ifdef __ALIEN__
			GetToken();
			List.ItemSkillRate		= TokenNumber;
#endif
			*/
			GetToken();
			List.ItemExcellent		= TokenNumber;
			// ----
			/*
#ifdef __ALIEN__
			GetToken();
			List.ItemMaxExc			= TokenNumber;

			GetToken();
			List.ItemExcRate		= TokenNumber;
			// ----
			GetToken();
			List.ItemAncent			= TokenNumber;
			// ----
			GetToken();
			List.ItemAncRate		= TokenNumber;
#endif
			*/
			GetToken();
			List.ItemDur			= TokenNumber;
			// ----
			GetToken();
			List.ItemDropRate		= TokenNumber;
			// ----
			GetToken();
			List.MonsterMinLevel	= TokenNumber;
			// ----
			GetToken();
			List.MonsterMaxLevel	= TokenNumber;
			// ----
			GetToken();
			List.MonsterMap			= TokenNumber;
			// ----
			this->m_Data.push_back(List);
		}
	}
	// ----
	__finally
	{
		if( SMDFile != NULL )
		{
			LogAdd(lMsg.Get(MSGGET(1, 198)), File);
			fclose(SMDFile);
		}
		// ----
		SMDFile = NULL;
	}
}
// -------------------------------------------------------------------------

#ifdef __ALIEN__
void DropEx::ReadBlockData(char * File)
{
	__try
	{
		SMDFile = fopen(File, "r");
		// ----
		while(true)
		{
			SMDToken Token = GetToken();
			// ----
			if( Token == END )
			{
				break;
			}
			// ----
			DROPBLOCK_DATA List;
			// ----
			List.ItemType	= TokenNumber;
			// ----
			GetToken();
			List.ItemIndex	= TokenNumber;
			// ----
			this->m_NonDrop.push_back(List);
		}
	}
	// ----
	__finally
	{
		if( SMDFile != NULL )
		{
			LogAdd(lMsg.Get(MSGGET(1, 198)), File);
			fclose(SMDFile);
		}
		// ----
		SMDFile = NULL;
	}
}

// -------------------------------------------------------------------------

bool DropEx::IsBlockItem(int ItemID)
{
	for( int i = 0; i < this->m_NonDrop.size(); i++ )
	{
		DROPBLOCK_DATA & Drop = this->m_NonDrop[i];
		// ----
		if( ItemID == ITEMGET(Drop.ItemType, Drop.ItemIndex) )
		{
			return true;
		}
	}
	// ----
	return false;
}
#endif
// -------------------------------------------------------------------------

bool DropEx::DropItem(LPOBJ lpObj, LPOBJ lpTargetObj)
{
	switch(lpObj->Class)
	{
	case 78:	//-> Golden Goblin
	case 53:	//-> Golden Titan
	case 79:	//-> Golden Dragon
	case 80:	//-> Golden Lizard
	case 82:	//-> Golden Tantalos
	case 502:	//-> Golden Rabbit
	case 493:	//-> Golden Dark Knight
	case 494:	//-> Golden Devil
	case 495:	//-> ???
	case 496:	//-> Golden Crust
	case 497:	//-> Golden Satiros
	case 498:	//-> Golden Twintail
	case 499:	//-> Golden Iron Knight
	case 500:	//-> Golden Neipin
	case 501:	//-> Golden Great Dragon
		{
			return false;
		}
		break;
	}
	// ----
	for( int i = 0; i < this->m_Data.size(); i++ )
	{
		DROPEX_DATA & Drop = this->m_Data[i];
		// ----
		if( lpObj->Level >= Drop.MonsterMinLevel && lpObj->Level <= Drop.MonsterMaxLevel )
		{
			if( lpObj->MapNumber == Drop.MonsterMap || Drop.MonsterMap == -1 )
			{
				if( rand() % 10000 < Drop.ItemDropRate )
				{
					int iLuck	= 0;
					int iSkill	= 0;
					int iOption	= 0;
					int iLevel	= 0;

					// ----
					if( Drop.ItemMaxLevel == Drop.ItemMinLevel )
					{
						iLevel = Drop.ItemMinLevel;
					}
					else
					{
						iLevel = Drop.ItemMinLevel + (rand() % (Drop.ItemMaxLevel - Drop.ItemMinLevel + 1));
					}
#if __ALIEN__
					if( Drop.ItemLuck == 1 )
					{
						if( rand() % 100 < Drop.ItemLuckRate )
						{
							iLuck = 1;
						}
					}

					if( Drop.ItemSkill == 1 )
					{
						if( rand() % 100 < Drop.ItemSkillRate )
						{
							iSkill = 1;
						}
					}

					if( Drop.ItemMaxOption != 0 )
					{
						if( rand() % 100 < Drop.ItemOptRate )
						{
							iOption = rand() % Drop.ItemMaxOption + 1;
						}
					}

					int iExlOpt = 0;

					if(Drop.ItemExcellent)
					{
						if( rand() % 100 < Drop.ItemExcRate )
						{
							iExlOpt = this->GenExcOption(Drop.ItemMaxExc);
						}
					}

					int iAnc = 0;

					if(Drop.ItemAncent == 5 || Drop.ItemAncent == 10)
					{
						if( rand() % 100 < Drop.ItemAncRate )
						{
							iAnc = Drop.ItemAncent;
						}
					}

					ItemSerialCreateSend(lpObj->m_Index, lpObj->MapNumber, lpObj->X, lpObj->Y, ITEMGET(Drop.ItemType, Drop.ItemIndex), iLevel, Drop.ItemDur, iOption, iLuck, iSkill, gObjMonsterTopHitDamageUser(lpObj), iExlOpt, iAnc);
#else
					// ----
					if( Drop.ItemLuck == 1 )
					{
						if( rand() % 100 < 50 )
						{
							iLuck = 1;
						}
					}
					// ----
					if( Drop.ItemSkill == 1 )
					{
						if( rand() % 100 < 50 )
						{
							iSkill = 1;
						}
					}
					// ----
					if( Drop.ItemMaxOption != 0 )
					{
						if( rand() % 100 < 50 )
						{
							iOption = rand() % Drop.ItemMaxOption + 1;
						}
					}

					ItemSerialCreateSend(lpObj->m_Index, lpObj->MapNumber, lpObj->X, lpObj->Y, ITEMGET(Drop.ItemType, Drop.ItemIndex), iLevel, Drop.ItemDur, iOption, iLuck, iSkill, gObjMonsterTopHitDamageUser(lpObj), Drop.ItemExcellent, 0);
#endif
					
					return true;
				}
			}
		}
	}
	// ----
	return false;
}

int DropEx::GenExcOption(int amount)
{
	if (amount > 6) amount = 6;
	if (amount < 1) amount = 1;
	
	srand(time(NULL));

	amount = rand() % amount + 1;

	int opt_db[6]  = {1, 2, 4, 8, 16, 32};
	int exc = 0;
	
	int opt_done[6] = { 0 };

	for(int n=0; n < amount; n++)
	{
		int SearchExc = 0;

		srand(time(NULL));

		if( n == 0 )
		{
			SearchExc = opt_db[rand()%6];
			opt_done[n] = SearchExc;
		}
		else
		{
			while(true)
			{
				SearchExc = opt_db[rand()%6];
				bool bOpt = true;

				for(int i=0;i<amount;i++)
				{
					if(SearchExc == opt_done[i])
					{
						bOpt = false;
					}
				}

				if(bOpt == true)
				{
					opt_done[n] = SearchExc;
					break;
				}
			}
		}
		
		exc += SearchExc;
	}

	return exc;
}
// -------------------------------------------------------------------------
 
Experienced Elementalist
Joined
Jan 28, 2013
Messages
275
Reaction score
52
ItemDropEx fix:

Code:
#include "StdAfx.h"
#include "DropEx.h"
#include "logproc.h"
#include "..\include\readscript.h"
#include "DSProtocol.h"
#include "gObjMonster.h"
#include "GameMain.h"
// -------------------------------------------------------------------------

DropEx    g_DropEx;
// -------------------------------------------------------------------------------

DropEx::DropEx()
{
    this->Init();
}
// -------------------------------------------------------------------------

DropEx::~DropEx()
{
    // ----
}
// -------------------------------------------------------------------------

void DropEx::Init()
{
    this->m_Data.clear();
#ifdef __ALIEN__
    this->m_NonDrop.clear();
#endif
}
// -------------------------------------------------------------------------

void DropEx::Load()
{
    this->Init();
    this->ReadData(gDirPath.GetNewPath("Custom\\ItemDropEx.txt"));
#ifdef __ALIEN__
    this->ReadBlockData(gDirPath.GetNewPath("Custom\\ItemDropBlock.txt"));
#endif
}
// -------------------------------------------------------------------------

void DropEx::ReadData(char * File)
{
    __try
    {
        SMDFile = fopen(File, "r");
        // ----
        while(true)
        {
            SMDToken Token = GetToken();
            // ----
            if( Token == END )
            {
                break;
            }
            // ----
            DROPEX_DATA List;
            // ----
            List.ItemType            = TokenNumber;
            // ----
            GetToken();
            List.ItemIndex            = TokenNumber;
            // ----
            GetToken();
            List.ItemMinLevel        = TokenNumber;
            // ----
            GetToken();
            List.ItemMaxLevel        = TokenNumber;
            // ----
            GetToken();
            List.ItemMaxOption        = TokenNumber;
/*
#ifdef __ALIEN__
            GetToken();
            List.ItemOptRate        = TokenNumber;
#endif
*/
            // ----
            GetToken();
            List.ItemLuck            = TokenNumber;
            // ----
/*
#ifdef __ALIEN__
            GetToken();
            List.ItemLuckRate        = TokenNumber;
#endif
*/
            GetToken();
            List.ItemSkill            = TokenNumber;
            // ----
/*
#ifdef __ALIEN__
            GetToken();
            List.ItemSkillRate        = TokenNumber;
#endif
            */
            GetToken();
            List.ItemExcellent        = TokenNumber;
            // ----
            /*
#ifdef __ALIEN__
            GetToken();
            List.ItemMaxExc            = TokenNumber;

            GetToken();
            List.ItemExcRate        = TokenNumber;
            // ----
            GetToken();
            List.ItemAncent            = TokenNumber;
            // ----
            GetToken();
            List.ItemAncRate        = TokenNumber;
#endif
            */
            GetToken();
            List.ItemDur            = TokenNumber;
            // ----
            GetToken();
            List.ItemDropRate        = TokenNumber;
            // ----
            GetToken();
            List.MonsterMinLevel    = TokenNumber;
            // ----
            GetToken();
            List.MonsterMaxLevel    = TokenNumber;
            // ----
            GetToken();
            List.MonsterMap            = TokenNumber;
            // ----
            this->m_Data.push_back(List);
        }
    }
    // ----
    __finally
    {
        if( SMDFile != NULL )
        {
            LogAdd(lMsg.Get(MSGGET(1, 198)), File);
            fclose(SMDFile);
        }
        // ----
        SMDFile = NULL;
    }
}
// -------------------------------------------------------------------------

#ifdef __ALIEN__
void DropEx::ReadBlockData(char * File)
{
    __try
    {
        SMDFile = fopen(File, "r");
        // ----
        while(true)
        {
            SMDToken Token = GetToken();
            // ----
            if( Token == END )
            {
                break;
            }
            // ----
            DROPBLOCK_DATA List;
            // ----
            List.ItemType    = TokenNumber;
            // ----
            GetToken();
            List.ItemIndex    = TokenNumber;
            // ----
            this->m_NonDrop.push_back(List);
        }
    }
    // ----
    __finally
    {
        if( SMDFile != NULL )
        {
            LogAdd(lMsg.Get(MSGGET(1, 198)), File);
            fclose(SMDFile);
        }
        // ----
        SMDFile = NULL;
    }
}

// -------------------------------------------------------------------------

bool DropEx::IsBlockItem(int ItemID)
{
    for( int i = 0; i < this->m_NonDrop.size(); i++ )
    {
        DROPBLOCK_DATA & Drop = this->m_NonDrop[i];
        // ----
        if( ItemID == ITEMGET(Drop.ItemType, Drop.ItemIndex) )
        {
            return true;
        }
    }
    // ----
    return false;
}
#endif
// -------------------------------------------------------------------------

bool DropEx::DropItem(LPOBJ lpObj, LPOBJ lpTargetObj)
{
    switch(lpObj->Class)
    {
    case 78:    //-> Golden Goblin
    case 53:    //-> Golden Titan
    case 79:    //-> Golden Dragon
    case 80:    //-> Golden Lizard
    case 82:    //-> Golden Tantalos
    case 502:    //-> Golden Rabbit
    case 493:    //-> Golden Dark Knight
    case 494:    //-> Golden Devil
    case 495:    //-> ???
    case 496:    //-> Golden Crust
    case 497:    //-> Golden Satiros
    case 498:    //-> Golden Twintail
    case 499:    //-> Golden Iron Knight
    case 500:    //-> Golden Neipin
    case 501:    //-> Golden Great Dragon
        {
            return false;
        }
        break;
    }
    // ----
    for( int i = 0; i < this->m_Data.size(); i++ )
    {
        DROPEX_DATA & Drop = this->m_Data[i];
        // ----
        if( lpObj->Level >= Drop.MonsterMinLevel && lpObj->Level <= Drop.MonsterMaxLevel )
        {
            if( lpObj->MapNumber == Drop.MonsterMap || Drop.MonsterMap == -1 )
            {
                if( rand() % 10000 < Drop.ItemDropRate )
                {
                    int iLuck    = 0;
                    int iSkill    = 0;
                    int iOption    = 0;
                    int iLevel    = 0;

                    // ----
                    if( Drop.ItemMaxLevel == Drop.ItemMinLevel )
                    {
                        iLevel = Drop.ItemMinLevel;
                    }
                    else
                    {
                        iLevel = Drop.ItemMinLevel + (rand() % (Drop.ItemMaxLevel - Drop.ItemMinLevel + 1));
                    }
#if __ALIEN__
                    if( Drop.ItemLuck == 1 )
                    {
                        if( rand() % 100 < Drop.ItemLuckRate )
                        {
                            iLuck = 1;
                        }
                    }

                    if( Drop.ItemSkill == 1 )
                    {
                        if( rand() % 100 < Drop.ItemSkillRate )
                        {
                            iSkill = 1;
                        }
                    }

                    if( Drop.ItemMaxOption != 0 )
                    {
                        if( rand() % 100 < Drop.ItemOptRate )
                        {
                            iOption = rand() % Drop.ItemMaxOption + 1;
                        }
                    }

                    int iExlOpt = 0;

                    if(Drop.ItemExcellent)
                    {
                        if( rand() % 100 < Drop.ItemExcRate )
                        {
                            iExlOpt = this->GenExcOption(Drop.ItemMaxExc);
                        }
                    }

                    int iAnc = 0;

                    if(Drop.ItemAncent == 5 || Drop.ItemAncent == 10)
                    {
                        if( rand() % 100 < Drop.ItemAncRate )
                        {
                            iAnc = Drop.ItemAncent;
                        }
                    }

                    ItemSerialCreateSend(lpObj->m_Index, lpObj->MapNumber, lpObj->X, lpObj->Y, ITEMGET(Drop.ItemType, Drop.ItemIndex), iLevel, Drop.ItemDur, iOption, iLuck, iSkill, gObjMonsterTopHitDamageUser(lpObj), iExlOpt, iAnc);
#else
                    // ----
                    if( Drop.ItemLuck == 1 )
                    {
                        if( rand() % 100 < 50 )
                        {
                            iLuck = 1;
                        }
                    }
                    // ----
                    if( Drop.ItemSkill == 1 )
                    {
                        if( rand() % 100 < 50 )
                        {
                            iSkill = 1;
                        }
                    }
                    // ----
                    if( Drop.ItemMaxOption != 0 )
                    {
                        if( rand() % 100 < 50 )
                        {
                            iOption = rand() % Drop.ItemMaxOption + 1;
                        }
                    }

                    ItemSerialCreateSend(lpObj->m_Index, lpObj->MapNumber, lpObj->X, lpObj->Y, ITEMGET(Drop.ItemType, Drop.ItemIndex), iLevel, Drop.ItemDur, iOption, iLuck, iSkill, gObjMonsterTopHitDamageUser(lpObj), Drop.ItemExcellent, 0);
#endif
                    
                    return true;
                }
            }
        }
    }
    // ----
    return false;
}

int DropEx::GenExcOption(int amount)
{
    if (amount > 6) amount = 6;
    if (amount < 1) amount = 1;
    
    srand(time(NULL));

    amount = rand() % amount + 1;

    int opt_db[6]  = {1, 2, 4, 8, 16, 32};
    int exc = 0;
    
    int opt_done[6] = { 0 };

    for(int n=0; n < amount; n++)
    {
        int SearchExc = 0;

        srand(time(NULL));

        if( n == 0 )
        {
            SearchExc = opt_db[rand()%6];
            opt_done[n] = SearchExc;
        }
        else
        {
            while(true)
            {
                SearchExc = opt_db[rand()%6];
                bool bOpt = true;

                for(int i=0;i<amount;i++)
                {
                    if(SearchExc == opt_done[i])
                    {
                        bOpt = false;
                    }
                }

                if(bOpt == true)
                {
                    opt_done[n] = SearchExc;
                    break;
                }
            }
        }
        
        exc += SearchExc;
    }

    return exc;
}
// -------------------------------------------------------------------------
lol its not fix.
Dude add new colomn in your current file, not needed make this.^
 
Newbie Spellweaver
Joined
Jan 16, 2011
Messages
20
Reaction score
0
Guys, what about 3rd class qvest? NPC Teleport Werewolf Quarrel dont work!
 
Experienced Elementalist
Joined
Nov 26, 2013
Messages
270
Reaction score
90
where in client i can find this texture to resize for my own width?
PnVuzOt - [Development] Community Edition Season6 Episode3 z-Team - RaGEZONE Forums
 

Attachments

You must be registered for see attachments list
Newbie Spellweaver
Joined
Jan 16, 2011
Messages
20
Reaction score
0
Guys, what about 3rd class qvest? NPC Teleport Werewolf Quarrel dont work!
can anyone had this problem? seems to me it's not a GS in the Data except that I do not understand where exactly? verevolf simply does not respond to me
 
Experienced Elementalist
Joined
Nov 26, 2013
Messages
270
Reaction score
90
interface.cpp

Nope) Data\Interface ) already found it. there is another question. i started remake hp bar:
I3sqMQH - [Development] Community Edition Season6 Episode3 z-Team - RaGEZONE Forums


so for now question is: how to make the hp bar is displayed above each monster?
 

Attachments

You must be registered for see attachments list
selling server files is against RZ rules
Joined
Feb 26, 2013
Messages
542
Reaction score
131
Nope) Data\Interface ) already found it. there is another question. i started remake hp bar:
I3sqMQH - [Development] Community Edition Season6 Episode3 z-Team - RaGEZONE Forums


so for now question is: how to make the hp bar is displayed above each monster?

Do it by analogy with the Party Bar.
It is enough to find the number of mobs on the screen.
 

Attachments

You must be registered for see attachments list
Experienced Elementalist
Joined
Sep 20, 2012
Messages
288
Reaction score
74
Do it by analogy with the Party Bar.
It is enough to find the number of mobs on the screen.

nope that wont work, I've been trying for some time now to make it work but it just doesnt
if anyone has offsets responsible for showing monster name though we could be on to something
 
Joined
Jun 27, 2010
Messages
940
Reaction score
1,195
nope that wont work, I've been trying for some time now to make it work but it just doesnt
if anyone has offsets responsible for showing monster name though we could be on to something

well for show monster name.
main 1.03.28 season 5.4
char TargetName[30];
sprintf(TargetName, "%s", (char*)(*(DWORD*)0x7B521B4 + 1304 * *(DWORD*)0x91F820 + 56));
// ----
gInterface.SetTextColor(255, 255, 255, 200);
gInterface.DrawTextOut((MAX_WIDTH / 2) - (strlen((char*)(*(DWORD*)0x7B521B4 + 1304 * *(DWORD*)0x91F820 + 56)) + 6.5), 3.2, (char*)(*(DWORD*)0x7B521B4 + 1304 * *(DWORD*)0x91F820 + 56));

the result is something like this
OKImvaL - [Development] Community Edition Season6 Episode3 z-Team - RaGEZONE Forums
 

Attachments

You must be registered for see attachments list
Last edited:
Experienced Elementalist
Joined
Sep 20, 2012
Messages
288
Reaction score
74
Nope) Data\Interface ) already found it. there is another question. i started remake hp bar:
I3sqMQH - [Development] Community Edition Season6 Episode3 z-Team - RaGEZONE Forums


so for now question is: how to make the hp bar is displayed above each monster?

any tips on how you managed to get the bar on that position?
cause Im trying to use the getpositionfromangle(...) function but it refuses to work, no bar shown at all
 

Attachments

You must be registered for see attachments list
Experienced Elementalist
Joined
Nov 26, 2013
Messages
270
Reaction score
90
any tips on how you managed to get the bar on that position?
cause Im trying to use the getpositionfromangle(...) function but it refuses to work, no bar shown at all

i just rewrited User::DrawSome() function and hooked it like DrawPartyHp, like this: SetOp((LPVOID)0x005B96E8, (LPVOID)this->DrawSome, ASM::CALL);

and for now it looks like this:
Av0jQ4O - [Development] Community Edition Season6 Episode3 z-Team - RaGEZONE Forums
 

Attachments

You must be registered for see attachments list
Experienced Elementalist
Joined
Sep 20, 2012
Messages
288
Reaction score
74
i just rewrited User::DrawSome() function and hooked it like DrawPartyHp, like this: SetOp((LPVOID)0x005B96E8, (LPVOID)this->DrawSome, ASM::CALL);

and for now it looks like this:
Av0jQ4O - [Development] Community Edition Season6 Episode3 z-Team - RaGEZONE Forums

ok, everything's working perfect now, but how to disable the monster name on top of the screen? I see mobs name x2
 

Attachments

You must be registered for see attachments list
Back
Top