Welcome, Guest
You have to register before you can post on our site.

Username/Email:
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 3,905
» Latest member: charleslitleo6773
» Forum threads: 5,153
» Forum posts: 41,375

Full Statistics

Online Users
There are currently 59 online users.
» 0 Member(s) | 58 Guest(s)
Bing

Latest Threads
Last Chaos Server Sale
Forum: The Black Market (Buy, Sell, Trade)
Last Post: XWrongX2
01-26-2026, 11:07 PM
» Replies: 3
» Views: 609
All in One Exporter
Forum: Tools
Last Post: Kain88
01-25-2026, 07:04 AM
» Replies: 4
» Views: 425
HELP! ReZasCashServer It ...
Forum: Ep4 Support
Last Post: Kain88
01-24-2026, 03:24 PM
» Replies: 2
» Views: 163
Hi, does anyone know the ...
Forum: Help
Last Post: Desarija
01-21-2026, 11:29 AM
» Replies: 1
» Views: 112
LastChaos Nemesis
Forum: Server Advertising
Last Post: Desarija
01-20-2026, 04:06 PM
» Replies: 3
» Views: 236
Looking for EP4 Guidance
Forum: General Discussion
Last Post: xHypnosiaa
01-19-2026, 08:33 AM
» Replies: 1
» Views: 171
We're in need of creative...
Forum: Project Recruitment
Last Post: RGT
01-16-2026, 12:48 AM
» Replies: 0
» Views: 117
Last Chaos build deployme...
Forum: Ep4 Guides
Last Post: xHypnosiaa
01-08-2026, 11:14 AM
» Replies: 0
» Views: 74
Last Chaos global server ...
Forum: Ep4 Guides
Last Post: xHypnosiaa
01-07-2026, 07:01 PM
» Replies: 0
» Views: 32
EP-2/EP-3 Mixed files
Forum: Archived General Server Releases
Last Post: TeKnodE
01-06-2026, 09:53 PM
» Replies: 1
» Views: 296

 
  Server Patcher
Posted by: Scura - 05-15-2021, 11:10 AM - Forum: Ep4 Guides - Replies (2)


Since i'm using my own script from a while and i think it could be useful to everybody, I've decided to release it for everybody :3 

 

1) PatchMaker:

This script will allow you to easy create a zip file ready to upload to your server, which contain all the files compilated needed for patch your server. After every compilation, when you have to apply the changes in the server side for test, you can simply use this script for create a Build.zip files

1. Copy the PatchMaker code and paste in notepad

2. Save it as sh file

3. Put the bat file in the ServerRelease folder (as image)

PatchMaker:

rm -rf ./Build
rm Build.zip
mkdir Build
cd Build
mkdir GameServer
mkdir Login
mkdir Helper
mkdir SubHelper
mkdir Connector
mkdir Messenger
cd ../
cp ./GameServer/GameServer.exe ./Build/GameServer/GameServer.exe
cp ./Login/LoginServer.exe ./Build/Login/LoginServer.exe
cp ./Helper/Helper.exe ./Build/Helper/Helper.exe
cp ./SubHelper/SubHelper.exe ./Build/SubHelper/SubHelper.exe
cp ./Connector/Connector.exe ./Build/Connector/Connector.exe
cp ./Messenger/Messenger.exe ./Build/Messenger/Messenger.exe
tar.exe -a -c -f Build.zip Build

 

/monthly_2021_05/image.png.dfa27c3b9b30b4aa65ed88eae4c84a0c.png" />

After compiled the server, open the bat file, it will create a build.zip file ready for upload on to your server which contain all the files compiled. The script remove the old Build/Build.zip folder so you don't have to do it manually!

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2)PatchApply

After have created a Build.zip files with Patchmaker, you can easy unpack it (and apply the server's changes) with this script!

1. Copy the PatchApply code and paste in notepad

2. Save it as sh file

3. Put the bat file near ServerRelease in serverside (as image)

PatchApply:

echo "Scura - Apply Server Patch [v1.1]"
echo ""

tar -xvf Build.zip

echo ""
echo "Loading..."

cp Build/GameServer/GameServer.exe ServerRelease/GameServer/GameServer.exe
cp Build/Login/LoginServer.exe ServerRelease/Login/LoginServer.exe
cp Build/Helper/Helper.exe ServerRelease/Helper/Helper.exe
cp Build/SubHelper/SubHelper.exe ServerRelease/SubHelper/SubHelper.exe
cp Build/Connector/Connector.exe ServerRelease/Connector/Connector.exe
cp Build/Messenger/Messenger.exe ServerRelease/Messenger/Messenger.exe

/monthly_2021_05/image.png.d1268cf76e838b507af7c0deaa7aa81e.png" />

The script will unpack the Build.zip files created with "PatchMaker" script, and patch the ServerRelease folder. So you don't have to manually patch the server each time you compile something ... cause i think 99% of the dev don't put the source code on the server side but left it on their pc, this scripts should be useful :3 

 

All of those script are written in sh. You can easy run sh files on windows by Downloading 2 or by Enabling the "2

 

 

Bonus:

Start server (windows):

As I seen, Reza have release a "start" and "stop" bat script in to the Reza 1776, however I think is really boring minimize all the consoles each time you start the server. I've added a little params which allow you to start all the files in minimize mode:

StartServer:

cd .\Messenger\
start /MIN .\Messenger.exe
cd ..\
cd .\Helper\
start /MIN .\Helper.exe
cd ..\
cd .\SubHelper\
start /MIN SubHelper.exe
cd ..\
cd .\Connector\
start /MIN .\Connector.exe
cd ..\
cd .\Login\
start /MIN LoginServer.exe
cd ..\
cd .\Gameserver\
start Gameserver.exe

 

That's all... guess many devs already have those kind of script, however i think it could be usefull for some newbie :3

 

Print this item

  November Source Bug/ Dupe Fix Release
Posted by: dethunter12 - 05-15-2021, 02:53 AM - Forum: Ep4 Guides - Replies (34)


2Here is all known fixes that i have for dupes. and other additional fixes. If you have any other fixes and chose to share them it would be appreciated. 

 I do apologize ahead of time for anyone this may upset by releasing these fixes. 

I think everyone in lc likes to keep all these fixes private  and by doing this anyone who wants to create a server can't really.

credits: rrkbmz,reza (whoever else i missed)



these fixes are from 1 (source i paid for and 2 reza's source leak)



1.mysterious statue dupe (negative gold value)

Server/GameServer/doFuncExpressSystem.cpp


after void process_use_unsearchable_stonestatue(CPC* ch, CNetMsg::SP& msg)

put this :

//change this:
if (sendItem->Count() < packet->itemCount)

//to this:
if (sendItem->Count() < packet->itemCount || packet->itemCount <= 0)



2. drop item dupe (negative value)

Server/GameServer/DoFuncItem.cpp

after void do_ItemThrow(CPC* ch, CNetMsg::SP& msg)



put this:

 

// you will see somthing like this in your code.
ArtifactManager::instance()->item_drop(item);
}

CItem* dropitem = NULL;

// new code will look like this:

ArtifactManager::instance()->item_drop(item);
}

if (packet->count <= 0) {
CNetMsg::SP rmsg(new CNetMsg);
SysMsg(rmsg, MSG_SYS_FULL_INVENTORY);
SEND_Q(rmsg, ch->m_desc);
return;
}
CItem* dropitem = NULL;



3. guild storage dupe



this is a little to big to write in a couple lines ill just link the fixes:

gameserver/pc.cpp

gameserver/ProcHelperMsg.cpp

gameserver/Character.h

gameserver/DoFuncGuild.cpp


2

2

2

2

 

 

 

here is an example of what you're looking for :

2

2

2

2

4. double login dupe (here their might be more then 1 fix for this method might not full fix it) 

 Server/GameServer/Descriptor.cpp


in void CDescriptor::operate( rnSocketIOService* service )

put this:

 

// you'll see this code (just search it)
packet->subType = MSG_RETURN_TO_SELECT_CHANNEL;
rmsg->setSize(sizeof(pTypeBase));
SEND_Q(rmsg, this);
}
break;
default:

//replace that code with this:
packet->subType = MSG_RETURN_TO_SELECT_CHANNEL;
rmsg->setSize(sizeof(pTypeBase));
SEND_Q(rmsg, this);
this->Close("");
return;
}
break;
default:

//next you'll see this
LOG_ERROR("Invalid packet. type[%d] / now is character select screen. user_index",
msg->m_mtype, this->m_index);
this->Close("Invalid packet. now is character select screen");
return;
}
break;

//replace it with this

LOG_ERROR("Invalid packet. type[%d] / now is character select screen. user_index",
msg->m_mtype, this->m_index);
//this->Close("Invalid packet. now is character select screen");
GAMELOG << init("INVALID_PACKET")
<< "user_index" << delim
<< this->m_index << delim
<< end;
return;
}
break;





5. Quest Exploit (dupe)

Server/GameServer/DoFuncQuest.cpp


after void do_Quest(CPC* ch, CNetMsg::SP& msg)



put this:

// you'll see this
case MSG_QUEST_RESTORE_ABANDON:
do_QuestRestoreAbandon(ch, msg); // 포기 퀘스트 복구
break;
case MSG_QUEST_ITEM_REQ:
do_QuestItemReq(ch, msg); // 완료한 퀘스트중 퀘스트 아이템 받기
break;

//change it to this
case MSG_QUEST_RESTORE_ABANDON:
do_QuestRestoreAbandon(ch, msg); // 포기 퀘스트 복구
break;

Next we'll want to disable the function too 

after void do_QuestRestoreAbandon(CPC* ch, CNetMsg::SP& msg)|



put this:

 

//the deefault code
void do_QuestItemReq(CPC* ch, CNetMsg::SP& msg)

//disable this whole function or delete it

// this disables


6. Gold Dupe

Server/GameServer/DoFuncEtc.cpp

put this:

 

//search for this MSG_MANAGEMENT_STATE_CHANGE
if(ch->m_inventory.getMoney() < needMoney)
{
// ERROR 돈 없음
CNetMsg::SP rmsg(new CNetMsg);
DVDManagementMsg( rmsg, MSG_MANAGEMENT_ENV_CHANGE );
RefMsg(rmsg) << (unsigned char) MSG_DVD_ERROR_MONEY;
SEND_Q( rmsg, ch->m_desc );
return;
}
else
//modify this
if(ch->m_inventory.getMoney() < needMoney)

//to this
if( ch->m_inventory.getMoney() < needMoney || needMoney <= 0)

//next in case MSG_MANAGEMENT_ENV_CHANGE :
//find this
if( ch->m_inventory.getMoney() < needMoney)
{
// ERROR �� ����
CNetMsg::SP rmsg(new CNetMsg);
DVDManagementMsg( rmsg, MSG_MANAGEMENT_ENV_CHANGE );
RefMsg(rmsg) << (unsigned char) MSG_DVD_ERROR_MONEY;
SEND_Q( rmsg, ch->m_desc );
return;
}
else
//change it to this
if( ch->m_inventory.getMoney() < needMoney || needMoney <=0)





Additionally here are some secondary crash fixes:



Area.cpp:

 

//after this
for (; it != endit; ++it)
{
CNPCRegenInfo* p = *(it);
p->m_lastDieTime = gserver->m_pulse + GetRandom(1, p->m_regenSec / 2);
p->m_bAlive = false;
}

//add this
if (this->m_RaidDifficulty > 2 || this->m_RaidDifficulty <= -1)
{
this->m_RaidDifficulty = 0;
}



Raidata.cpp:

2



DoFuncExpedtion.cpp:

// in this function
void do_ExpedChangeTypeReq(CPC* ch, CNetMsg::SP& msg)
{

//after this value
GAMELOG << init("EXPED DEBUG CHANGETYPE REQ", ch)
<< "EXPEDTYPE" << delim << cExpedType << delim
<< "DIVITYPE" << delim << cDiviType << delim
<< end;
// add this

if (cExpedType > MSG_EXPED_TYPE_OPENBOX || cDiviType > MSG_DIVITYPE_SP)
{
CNetMsg::SP rmsg(new CNetMsg);
ExpedErrorMsg(rmsg, MSG_EXPED_ERROR_NOT_EXPED);
SEND_Q(rmsg, ch->m_desc);
return;
}

//next we add somthing here
void do_ExpedMoveGroupReq(CPC* ch, CNetMsg::SP& msg)
//after this
GAMELOG << init("EXPED DEBUG MOVEGROUP REQ", ch)
<< "SOURCE GROUP" << delim << nMoveCharIndex << delim
<< "MOVE CHAR INDEX" << delim << nMoveCharIndex << delim
<< "TARGET GROUP" << delim << nTargetGroup << delim
<< "TARGET CHAR INDEX" << delim << nTargetListindex
<< end;
//add this
if (nSourceGroup >= MSG_EXPED_GROUP_COUNT || nTargetGroup >= MSG_EXPED_GROUP_COUNT)
{
LOG_INFO("Crash teste ????????");
return;
}

//next we add a fix here
void do_ExpendOffline(CPC* ch, CNetMsg::SP& msg)
{
//add this
if( !ch || ch->m_Exped == NULL || ch->m_bProcDisconnect == 0)
{
return;
}



DoFuncParty.cpp:

 

//in this function
void do_PartyChangeType(CPC* ch, CNetMsg::SP& msg)
{
//after this
RefMsg(msg) >> cPartyType // ÀϹÝ(±Õµî),ÀÔŒö¿ìŒ±,ÀüÅõÇü,»óÀÚ¿­±â ±žºÐ
>> cDiviType // °æÇèÄ¡,ŸÆÀÌÅÛ,œºÆäŒÈ ŸÆÀÌÅÛ ±žºÐ
>> cAllOneSet;
//add this
if (cPartyType > MSG_PARTY_TYPE_OPENBOX ||cDiviType > MSG_DIVITYPE_SPECIAL || cAllOneSet > MSG_PARTY_SETALLONE_ONE)
{
CNetMsg::SP rmsg(new CNetMsg);
PartyErrorMsg(rmsg, MSG_PARTY_ERROR_NOT_PARTY);
SEND_Q(rmsg, ch->m_desc);
return;
}
//next fix in this function
void do_PartyOffline(CPC* ch, CNetMsg::SP& msg)
{
//add this
if ( ( !ch && (ch->m_party != NULL)) || (ch->m_party == NULL) || (ch->m_bProcDisconnect == 0))
{
return;
}





warehouse save: ( DBManager_SaveCharacterInfo.cpp)

 

//replace this
std:Confusedtring deleteQuery = boost:Confusedtr(boost::format(
"DELETE FROM t_stash%02d WHERE a_user_idx=%d") % stashIndex % pChar->m_index);
//change to this
std:Confusedtring deleteQuery = boost:Confusedtr(boost::format(
"DELETE FROM t_stash%02d WHERE a_user_idx=%d") % stashIndex % pChar->m_desc->m_index);



DoFuncEtc.cpp (castle crystal outside area)

 

//after this
{
CNetMsg::SP rmsg(new CNetMsg);
CastleErrorMsg(rmsg, MSG_EX_CASTLE_ERROR_MEM_5_FAIL);
SEND_Q(rmsg, ch->m_desc);
return;
}
//add this
CNPC* pLordSymbol = pCastle->GetLordSymbol();
if (pLordSymbol && (GetDistance(GET_X(pLordSymbol), GET_Z(pLordSymbol), GET_H(pLordSymbol), ch) > 12
|| GET_YLAYER(ch) != GET_YLAYER(pLordSymbol)))
{
CNetMsg::SP rmsg(new CNetMsg);
CastleErrorMsg(rmsg, MSG_EX_CASTLE_ERROR_POS_FAIL);
SEND_Q(rmsg, ch->m_desc);
ch->m_desc->IncreaseHackCount(3);
return;
}

Engine/Contents/Base/ChattingUI.cpp

//replace this
int nIndexBuf[32];

//with this
int nIndexBuf[256];



Chat input crash fix.

Engine/Interface/UITextBoxEx.cpp

// in function void CUITextBoxEx:Confusedplit(std:Confusedtring str, CItems* item, int countItems)

//your code will look like this
else
strText = strSyntax;

switch(m_eSplitType)
{
case SPLIT_NONE:

//change it to this
else
strText = strSyntax;

if (strText.empty()) break;

switch(m_eSplitType)
{
case SPLIT_NONE:

//next function we will modify is void CUITextBoxEx::insertBtn( CUITextEx* pTextEx, vecValcont& val, std:Confusedtring&
//you will e looking for this
int nCmd = -1;
int nIndex = -1;
if (nSize >= eTVCMD_INDEX)
{
nCmd = atoi(val[eTVCMD_CMD].c_str());
nIndex = atoi(val[eTVCMD_INDEX].c_str());
//modify the line nSize >= eTVCMD_INDEX
//change it to this
if (nSize > eTVCMD_INDEX)

 

Print this item

  How to show HP points and HP life bar on Monster?
Posted by: Andrein95 - 05-14-2021, 07:16 PM - Forum: Ep4 Support - Replies (23)


Hello.

I'd like to show current mob hp (example fox has 150 hp) such as : 150/150, like a life searcher for mobs.

This for EP4, June source.

Anyone know how to do it or how to starts?



Thanks in advance.

Print this item

  how to add GS font june
Posted by: netoforlan2 - 05-13-2021, 10:47 PM - Forum: Ep4 Support - No Replies


how to add GS font June already I tested 1 2 3 4 5 6 7 8 9 level and not working ?

Print this item

  Add new Pos to t_zonedata
Posted by: Scura - 05-13-2021, 08:58 PM - Forum: Server Side - Replies (4)


Hi guys,

I've take a look inside t_zonedata and i found that:



seems "a_poscount" count the max subzone, and then there are all the "a_pos x","y"... this value should be used when admins use /go_zone command, I was looking for a way to add a new zone here: I didn't understood which coordinates I should input, I tried to take the t_characters cords without success ? 

 

Print this item

  World editor
Posted by: Scura - 05-12-2021, 04:46 PM - Forum: Ep4 Support - Replies (1)


Hey guys,

Today I've take a look in World editor, but I am not really expert with 3d modeling so I met some problems:

1) I've removed some models in an area along with the invisible wall, and then I've exported the sat/[CeNsOrEd] files, but the invisible wall are still there... is world editor bug or I've probably miss something ?

2) I was looking for create a new pvp area. I know there is a tool (sat editor) which is a little more simple than world editor, but it is not enough precise in that case, so I'm forced to draw it directly in the world editor. I've take a look in Juno arena, and seems is possible create a "Touch Field" model and then add some kind of event, but is beyond my knowledge...

Someone know who to fix the first case, or create the second one??

 

Print this item

  Timed out on client.
Posted by: Hanji - 05-12-2021, 04:55 AM - Forum: Ep4 Support - Replies (2)


Hello, when I try to log into the client (server compiled and running) I get timed out.

This is the GS log file which I believe is the problem.

Also the connector log which says 

2021-05-11 21:47:31,769 INFO  [             Log.cpp :    86] - LOGIN_FAIL > test : From : 1 : 2

2021-05-11 21:47:31,770 INFO  [             Log.cpp :    86] - SYS_ERR > test : From : 1 : Not Found User

2021-05-11 21:47:34,200 INFO  [             Log.cpp :    86] - LOGIN_FAIL > test : From : 1 : 2

2021-05-11 21:47:34,201 INFO  [             Log.cpp :    86] - SYS_ERR > test : From : 1 : Not Found User

2021-05-11 21:47:52,178 ERROR [           DBCmd.cpp :   113] - query error (mysql_real_query) : error[The user specified as a definer ('root'@'%') does not exist] query[UPDATE t_users SET a_end_date=NOW(), a_server_num = 1, a_subnum = 1, a_zone_num = 0, a_timestamp = a_timestamp + 0  WHERE a_portal_index = 1  AND a_zone_num=-1]

2021-05-11 21:47:52,178 INFO  [             Log.cpp :    86] - LOGIN_FAIL > test : From : 1 : 1

2021-05-11 21:47:52,179 INFO  [             Log.cpp :    86] - SYS_ERR > test : From : 1 : Not Found User

2021-05-11 21:47:54,824 INFO  [             Log.cpp :    86] - LOGIN_FAIL > test : From : 1 : 3

2021-05-11 21:47:54,825 INFO  [             Log.cpp :    86] - SYS_ERR > test : From : 1 : Not Found User

Can someone help me with this?

22

Print this item

  SEARCH NOVEMEBER Client
Posted by: coolerdude - 05-11-2021, 04:04 PM - Forum: Client Side - Replies (5)


SEARCH NOVEMEBER Client

Print this item

  error LNK1104: cannot open 'Sharelib.lib'
Posted by: Hanji - 05-11-2021, 03:14 PM - Forum: Ep4 Support - Replies (10)


Hi guys, when I try to compile server I get this error on the project Authentication.

2

Do you know how to solve this?

Thank you.

Print this item

  Auto Moonstone System
Posted by: XTheReturnX - 05-11-2021, 12:20 PM - Forum: Ep4 Support - No Replies


Hey Guys, 

does anyone know How to Create a Funktion for an automatic Moonstone System so i press 1 time and it uses my moonstones After and After ?  

thank you in advance ? 

Print this item