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!

Evolution Season 3 Episode 1

Status
Not open for further replies.
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
! Hello all !
! Here i will share information about this project !

! GameServer Version !
! 1.0.18.0 !

! Protocol !
! JPN , KOR !

>> Getting Started Basic <<
1. ConnectServer - v1.0.10.995
2. EDataServer - Pre-Coded
3. JoinServer - Pre-Coded
<< End of Basic >>

Hint:
1. Red - Old Update
2.
Green - Last Update
3.
Orange - Test

>>Update 1:<<
- Added SQL Connection
- Added Win XP,Vista,7,Server Support
- x64 bit OS Support
- Created ESQL.ini file for config
- Added GameServer Reload Options
- Added Error System Message
- Added Check File Exist
- Created information read from Folder EData
- GameServer files read re-maked
- Rebuild Information's in one DB
<< End Update 1 >>

>>Update 2:<<
- Added Question Event
- Added Question Configs
- Added Question Commands
- Added Question Reload Options
- Added Game Masters File
- Added Game Masters Privileges
- Added Game Masters Commands
- Added Kill Event
- Added Kill Event Configs
- Added Kill Event Reload Options
- Added Zen Event
- Added Zen Event Reload Options
- Added Zen Event Configs
- Added Timer to Events
- Fix Time End error
>> End Update 2 <<

>>Update 3:<<
- Added VIP Option
- Added VIP Update
- Added VIP Exp
- Added VIP Drop
- Read Info MEMB_INFO > VIP
- Added Login Information
- Added Messages
- Added ACC Info
- Added MaxOnline Info
>> End Update 3 <<

>>Update 4:<<
- Added Ecoins System
- Added Ecoins Options
-Added Ecoins DB Tables
- Added Reset System
- Added Custom Class Reset Options
- Added Reset Options
- Added DB Info Update
- Added Team vs Team Event
- Added Team vs Team Options
- Added Team vs Team Info
(Map 40)
(Random X Y)
(Random Time)
- Added New GM commands
- Added Jewels Pack System
- Added Monster Spawn Command
- Added OffTrade
- Added New Columns in ECommands.ini
- Added Messages display
<< End Update 4 >>

>>Update 5:<<
- Added /online
- Added /post
- Added /add
- Added /offzen
- Added /offcoin
- Added /skin
- Added /clearpk
- Added /status
- Added /reset
- Added /question
- Added /packlife
- Added /unpacklife
- Added /packchaos
- Added /unpackchaos
- Added /packcreation
- Added /unpackcreation
- Added /packharmony
- Added /unpackharmony
- Added /packguardian
- Added /unpackguardian
GM
- Added /mute (GM)
- Added /unmute (GM)
- Added /mob (GM)
- Added /gmove (GM)
- Added /setzen (GM)
- Added /pkclear (GM)
- Added /setpk (GM)
- Added /gg (GM)
- Added /trace (GM)
- Added /item (GM)
<< End Update 5 >>

>>Update 6:<<
- Added Guild System
- Added Guild Options
- Added EGuilds.ini Configs
- Added Golden Archer System
- Added Golden Archer Options
- Added Jewel Prices
- Added Jewel Rates
- Added Chaos Machine Mixes
- Added Chaos Machine Rates
- Added Anti-Dupe Lahap
- Added GS_CS in GS (2 in 1)
- Added Default Server Settings
(LevelUp,Skills,Options..etc..)
- Added Zen Drop Custom Configs
<< End Update 6 >>

>>Client Build 1.0<<
- Fixed Font
- New Interface
- Items Increased
- Glow
- Minimap
- Master Level Display
- Fix Master Level Enter Events
- LevelUp Message
- All Maps Corrected (no missing parts,no bugs)
- All Items,Options,SetType Corrected
- MoveReq corrected
- Gates corrected
- New Jewels Support
- CashShop Support
- New Wings Support
- Monster HP Bar (In progress)
- 3D Camera (In progress)
- Exp bar fixed
<< End Client Update >>

ScreenShots:

- Guild System
Th3AnG3L - Evolution Season 3 Episode 1 - RaGEZONE Forums

- NPC Buff System
Th3AnG3L - Evolution Season 3 Episode 1 - RaGEZONE Forums

- Items Info
Th3AnG3L - Evolution Season 3 Episode 1 - RaGEZONE Forums

Th3AnG3L - Evolution Season 3 Episode 1 - RaGEZONE Forums

- Client Infos Display
Th3AnG3L - Evolution Season 3 Episode 1 - RaGEZONE Forums

- CashShop Info
Th3AnG3L - Evolution Season 3 Episode 1 - RaGEZONE Forums

- Chaos Mix Illusion Temple
Th3AnG3L - Evolution Season 3 Episode 1 - RaGEZONE Forums
 
Last edited:
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
yes it already has quest system
when will be released don't know for sure true date, still has more work to do its not so easy to build it for 1 day you know that ^^
 
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
someone has a /bau source to share?

Code:
void TrocaBau(short aIndex,char * Cod){


OBJECTSTRUCT *lpObj = (OBJECTSTRUCT*) OBJECT_POINTER(aIndex);
OBJECTSTRUCT * gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);


int BauCod = atoi(Cod);
char QueryBau[200],mensagem[200];


int TotalBau = SQL.GetFieldInt("MuOnline.dbo.MEMB_INFO","BausExtra", "WHERE Memb___id = '%s'",lpObj->AccountID);
    if (BauCod < 0 ){
        GCServerMsgStringSend("Error Syntax : /bau <number>",aIndex,1);
        return ;    
    }
    else if(TotalBau < BauCod){
        sprintf(mensagem,"[Error] : You have reached the limit %d baus!",TotalBau);
        GCServerMsgStringSend(mensagem,aIndex,1);
        return;
    } else {
        if( gObj->WarehouseSave == 0 )
    {
      sprintf(QueryBau,"EXEC MuOnline.dbo.MUDAR_BAU %d,%s",BauCod,lpObj->AccountID);
      SQL.Execute(QueryBau);
      sprintf(mensagem,"Chest changed successfully! You are using the chest %d",BauCod);
    }
     else
    {
     GCServerMsgStringSend("[Error] : Close warehouse to use this command!",aIndex,1);
    }
    }
}

Code:
CREATE TABLE [VaultsExtra] (
    [login] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [bauCod] [int] IDENTITY (1, 1) NOT NULL ,
    [items] [varbinary] (1200) NULL ,
    [money] [int] NULL ,
    [pw] [smallint] NULL ,
    [IdAcc] [int] NOT NULL 
) ON [PRIMARY]
GO

Code:
ALTER TABLE dbo.warehouse ADD
    [BauUso] [int] NOT NULL CONSTRAINT [DF_warehouse_BauUso] DEFAULT (0)
GO

Code:
ALTER TABLE dbo.MEMB_INFO ADD
    BausExtra int NOT NULL DEFAULT 
GO



Code:
CREATE PROCEDURE [dbo].[MUDAR_BAU]  [USER=9983]bau[/USER]Cod INT [USER=1333401102]LogiN[/USER] varchar(10)) AS
BEGIN
    DECLARE [USER=9983]bau[/USER]USO1 int
    set [USER=9983]bau[/USER]USO1 = (SELECT BauUso  FROM warehouse WHERE AccountID = [USER=1333401102]LogiN[/USER])
    IF ( EXISTS ( SELECT * FROM VaultsExtra WHERE [IdAcc] = [USER=9983]bau[/USER]Cod ) ) and  [USER=9983]bau[/USER]USO1 != [USER=9983]bau[/USER]Cod)
    BEGIN
        DECLARE  @itemback varbinary(1200)
        DECLARE  [USER=448126]Money[/USER] int
        set [USER=448126]Money[/USER] = (SELECT [Money] FROM warehouse WHERE AccountID = [USER=1333401102]LogiN[/USER])
        set @itemback = (SELECT Items FROM warehouse WHERE AccountID = [USER=1333401102]LogiN[/USER])
        IF  [USER=9983]bau[/USER]Cod > 0) AND  [USER=9983]bau[/USER]USO1 = 0)
        BEGIN
            UPDATE VaultsExtra SET Items = @itemback,[Money] [USER=448126]Money[/USER] WHERE login = [USER=1333401102]LogiN[/USER] AND IdAcc = 0
        END        
        UPDATE warehouse SET Items = (SELECT Items FROM VaultsExtra WHERE Login = [USER=1333401102]LogiN[/USER] AND  IDAcc = [USER=9983]bau[/USER]Cod),[Money] = (SELECT [Money] FROM VaultsExtra WHERE Login = [USER=1333401102]LogiN[/USER] AND  IDAcc = [USER=9983]bau[/USER]Cod),BauUso = [USER=9983]bau[/USER]Cod  WHERE AccountID = [USER=1333401102]LogiN[/USER]
        UPDATE VaultsExtra SET Items = @itemback,[Money] [USER=448126]Money[/USER] WHERE login = [USER=1333401102]LogiN[/USER] AND IDAcc = [USER=9983]bau[/USER]USO1
    END
END
GO

Code:
CREATE PROCEDURE [dbo].[CRIAR_BAU]  [USER=1333401102]LogiN[/USER] varchar(10)) AS
BEGIN
    DECLARE @IDProce int
    set @IDProce = (select count(items) FROM VaultsExtra Where login = [USER=1333401102]LogiN[/USER])
    IF (EXISTS ( SELECT * FROM VaultsExtra WHERE [bauCod] = 0 ))
    BEGIN
    set @IDProce = 0
    END
    INSERT INTO VaultsExtra (login,items,[money],pw,IdAcc) VALUES  [USER=1333401102]LogiN[/USER],0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,0,1,@IDProce)
    UPDATE MEMB_INFO set BausExtra=BausExtra+1 Where memb___id = [USER=1333401102]LogiN[/USER]
END
GO


Code:
if (!memcmp(&Protocol[13],CommandBau,strlen(CommandBau)))
	{
		TrocaBau(gObjId,(char*)Protocol+13+strlen(CommandBau));
		//TrocaBau(short aIndex);
	}
 
Last edited:
Experienced Elementalist
Joined
Jul 29, 2012
Messages
286
Reaction score
265
Code:
bool cChat::WareCommand(LPOBJ gObj, char *Msg)
{
    if (CheckCommand(gObj, Configs.Commands.IsMultyVault, GmSystem.NONE, Configs.Commands.ZenForChange, Configs.Commands.PcPointForChange, Configs.Commands.WCoinForChange, Configs.Commands.WebPointsForChange, 0, 1, 0, "Ware", "/ware <num>", Msg))
        return true;

    if (gObj->WarehouseSave != 0 && gObj->m_IfState.use != 0 && gObj->m_IfState.state != 0 && gObj->m_bMapSvrMoveReq != false && gObj->m_bMapSvrMoveQuit != false && gObj->m_State != 1)
    {
        MessageLog(1, c_Red, t_COMMANDS, gObj, "[Ware] Stop all you actions and try again!");
        return true;
    }

    int WantSlot = 0;
    int UsedSlot = 0;
    sscanf(Msg, "%d", &WantSlot);

    if (MuOnlineQuery.ExecQuery("SELECT UsedSlot FROM warehouse WHERE AccountID = '%s'", gObj->AccountID) == TRUE)
    {
        short result = MuOnlineQuery.Fetch();
        if (result != SQL_NO_DATA && result != SQL_NULL_DATA)
        {
            UsedSlot = MuOnlineQuery.GetAsInteger("UsedSlot");
        }
    }
    MuOnlineQuery.Close();

    if (UsedSlot <= 0)
    {
        MuOnlineQuery.ExecQuery("UPDATE warehouse SET Items01 = Items, UsedSlot = 1 WHERE AccountID = '%s'", gObj->AccountID);
        MuOnlineQuery.Close();
        MessageLog(1, c_Red, t_COMMANDS, gObj, "[Ware] something went wrong please try again!");
        return true;
    }
    else
    {
        if (WantSlot < 1 || WantSlot > Configs.Commands.NumberOfVaults)
        {
            MessageLog(1, c_Red, t_COMMANDS, gObj, "[Ware] You can use from 1 to %d ware!", Configs.Commands.NumberOfVaults);
            return true;
        }

        if (UsedSlot == WantSlot)
        {
            MessageLog(1, c_Red, t_COMMANDS, gObj, "[Ware] You need to chose other vault number!");
            return true;
        }

        TakeCommand(gObj, Configs.Commands.ZenForChange, Configs.Commands.PcPointForChange, Configs.Commands.WCoinForChange, Configs.Commands.WebPointsForChange, "Ware");

        if (MuOnlineQuery.ExecQuery("UPDATE warehouse SET Items%02d = Items, Items = Items%02d, UsedSlot = %d WHERE AccountID = '%s'", UsedSlot, WantSlot, WantSlot, gObj->AccountID) == TRUE)
            MessageLog(1, c_Red, t_COMMANDS, gObj, "[Ware] You successfully change vault from %d to %d!", UsedSlot, WantSlot);
        else
            MessageLog(1, c_Red, t_COMMANDS, gObj, "[Ware] something went wrong please try again!", UsedSlot, WantSlot);

        MuOnlineQuery.Close();
    }

    return true;
}
i edit IA Julia code to make it more secure and friendly BTW the code its not tested but should work good

*code updated*
 
Last edited:
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
with this code i need to rebuild everything to declare , not good option
maybe other information is welcomed
 
Experienced Elementalist
Joined
Jul 29, 2012
Messages
286
Reaction score
265
with this code i need to rebuild everything to declare , not good option
maybe other information is welcomed

mhm i updated the code anyway what declare are you talking about? the only "new" i see its CheckCommand and TakeCommand all other are regular
 
Custom Title Activated
Loyal Member
Joined
Apr 6, 2007
Messages
1,806
Reaction score
483
maybe you can send/post some testserver info ? so we can test them and help you find bugs or errors =).

Oh, and Good Luck with this, looks pretty nice so far.
 
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
maybe someone can help me here where i make mistake, cause i need sleep ^^
Exchange.cpp
Code:
#include "StdAfx.h"
#include "MSSQL.h"




pChatTargetSend ChatTargetSend = (pChatTargetSend) 0x0054E510; // OK
int OnlineStatus(int aIndex)
{
	if(aIndex >= OBJECT_MIN && aIndex < OBJECT_MAX)
	{
		if(gObj[aIndex].Connected == 3)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return false;
	}
}


// Stone Exchanger
CExchanger Exchanger;


void CExchanger::Init()
{
	this->m_Enabled = GetPrivateProfileInt("StoneExchanger","Enabled",1,"..\\EData\\ESQL.ini");
	this->m_Count = GetPrivateProfileInt("StoneExchanger","StonesCount",3,"..\\EData\\ESQL.ini");
}


int CExchanger::CheckStones(int aIndex)
{
	int Count = 0;


	for(int i = 12; i < 76; i++)
	{
		if(gObj[aIndex].pInventory[i].m_Type == 0x1C15 && gObj[aIndex].pInventory[i].m_Level == 1)
		{
			Count++;
		}
	}


	return Count;
}


void CExchanger::Talk(int aIndex,int Monster)
{
	if(gObj[Monster].Class == 501) // Stone Exchanger
	{
		ChatTargetSend(&gObj[Monster],"I am collecting Stones, bring them to me if you find one.",aIndex);


		if(this->m_Enabled == 0)
		{
			return;
		}


		if(OnlineStatus(aIndex) == 0)
		{
			return;
		}
		
		int Stones = CheckStones(aIndex);


		if(Stones < this->m_Count)
		{
			char Need[50];
			sprintf(Need,"You neeed more %d Stones to exchange.", this->m_Count - Stones);
			ChatTargetSend(&gObj[Monster],Need,aIndex);
			return;
		}


		int Count = 1;


		for(int i = 12; i < 76; i++)
		{


			if(gObj[aIndex].pInventory[i].m_Type == 0x1C15 && gObj[aIndex].pInventory[i].m_Level == 1)
			{
				if(Count <= 3)
				{
					Count += 1;
					gObjInventoryDeleteItem(aIndex, i);
					GCInventoryItemDeleteSend(aIndex, i, 1);
				}
			}
		}


		GCLevelUpMsgSend(aIndex,1);
		ChatTargetSend(&gObj[Monster], "Thank you for stones! Take my credit.", aIndex);
		MySQL.Execute("UPDATE [MuOnline].[dbo].[MEMB_CREDITS] SET Credits = Credits + 1  WHERE memb___id = '%s'", gObj[aIndex].AccountID);
		Log.AddTime("[StoneExchanger] (%s)(%s) Exchanged Stones, Map:[%d]", gObj[aIndex].AccountID, gObj[aIndex].Name, gObj[aIndex].MapNumber);
	}
}
.h
Code:
#include "USER.h"
#include "StdAfx.h"
#ifndef __STONEEXCHANGER_H__
#define __STONEEXCHANGER_H__


typedef void (*pChatTargetSend) (OBJECTSTRUCT*,char*,int);
extern pChatTargetSend ChatTargetSend;


// Stone Exchanger
class CExchanger
{
public:


	void Init();
	int CheckStones(int aIndex);
	void Talk(int aIndex,int Monster);


private:


	int m_Enabled;
	int m_Count;
};


extern CExchanger Exchanger;


#endif

Error:
Error 1 error LNK2001: unresolved external symbol "struct OBJECTSTRUCT * gObj" (?gObj@@3PAUOBJECTSTRUCT@@A)
 
Experienced Elementalist
Joined
Jul 29, 2012
Messages
286
Reaction score
265
maybe someone can help me here where i make mistake, cause i need sleep ^^
Exchange.cpp
Code:
#include "StdAfx.h"
#include "MSSQL.h"




pChatTargetSend ChatTargetSend = (pChatTargetSend) 0x0054E510; // OK
int OnlineStatus(int aIndex)
{
	if(aIndex >= OBJECT_MIN && aIndex < OBJECT_MAX)
	{
		if(gObj[aIndex].Connected == 3)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return false;
	}
}


// Stone Exchanger
CExchanger Exchanger;


void CExchanger::Init()
{
	this->m_Enabled = GetPrivateProfileInt("StoneExchanger","Enabled",1,"..\\EData\\ESQL.ini");
	this->m_Count = GetPrivateProfileInt("StoneExchanger","StonesCount",3,"..\\EData\\ESQL.ini");
}


int CExchanger::CheckStones(int aIndex)
{
	int Count = 0;


	for(int i = 12; i < 76; i++)
	{
		if(gObj[aIndex].pInventory[i].m_Type == 0x1C15 && gObj[aIndex].pInventory[i].m_Level == 1)
		{
			Count++;
		}
	}


	return Count;
}


void CExchanger::Talk(int aIndex,int Monster)
{
	if(gObj[Monster].Class == 501) // Stone Exchanger
	{
		ChatTargetSend(&gObj[Monster],"I am collecting Stones, bring them to me if you find one.",aIndex);


		if(this->m_Enabled == 0)
		{
			return;
		}


		if(OnlineStatus(aIndex) == 0)
		{
			return;
		}
		
		int Stones = CheckStones(aIndex);


		if(Stones < this->m_Count)
		{
			char Need[50];
			sprintf(Need,"You neeed more %d Stones to exchange.", this->m_Count - Stones);
			ChatTargetSend(&gObj[Monster],Need,aIndex);
			return;
		}


		int Count = 1;


		for(int i = 12; i < 76; i++)
		{


			if(gObj[aIndex].pInventory[i].m_Type == 0x1C15 && gObj[aIndex].pInventory[i].m_Level == 1)
			{
				if(Count <= 3)
				{
					Count += 1;
					gObjInventoryDeleteItem(aIndex, i);
					GCInventoryItemDeleteSend(aIndex, i, 1);
				}
			}
		}


		GCLevelUpMsgSend(aIndex,1);
		ChatTargetSend(&gObj[Monster], "Thank you for stones! Take my credit.", aIndex);
		MySQL.Execute("UPDATE [MuOnline].[dbo].[MEMB_CREDITS] SET Credits = Credits + 1  WHERE memb___id = '%s'", gObj[aIndex].AccountID);
		Log.AddTime("[StoneExchanger] (%s)(%s) Exchanged Stones, Map:[%d]", gObj[aIndex].AccountID, gObj[aIndex].Name, gObj[aIndex].MapNumber);
	}
}
.h
Code:
#include "USER.h"
#include "StdAfx.h"
#ifndef __STONEEXCHANGER_H__
#define __STONEEXCHANGER_H__


typedef void (*pChatTargetSend) (OBJECTSTRUCT*,char*,int);
extern pChatTargetSend ChatTargetSend;


// Stone Exchanger
class CExchanger
{
public:


	void Init();
	int CheckStones(int aIndex);
	void Talk(int aIndex,int Monster);


private:


	int m_Enabled;
	int m_Count;
};


extern CExchanger Exchanger;


#endif

Error:
Error 1 error LNK2001: unresolved external symbol "struct OBJECTSTRUCT * gObj" (?gObj@@3PAUOBJECTSTRUCT@@A)
extern?
 
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
added some screenshots in first post



Please try fix a agi bug in main(evil spirit, inferno etc.)

if someone has fixed player.bmd for 32k stats to share
or editor for player.bmd

Th3AnG3L - Evolution Season 3 Episode 1 - RaGEZONE Forums
 
Last edited:
Skilled Illusionist
Joined
Aug 20, 2007
Messages
374
Reaction score
80
server have jpn and kor protocols, if you need, you can user kor
 
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
so this is JPN, KOR or both protocols? Because JPN has problems with video cards ;/
already fixed problem with video cards ATI = 100% , GeForce series = 100%
 
Status
Not open for further replies.
Back
Top