| Welcome, Guest |
You have to register before you can post on our site.
|
| 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
|
|
|
| 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: tring deleteQuery = boost: tr(boost::format(
"DELETE FROM t_stash%02d WHERE a_user_idx=%d") % stashIndex % pChar->m_index);
//change to this
std: tring deleteQuery = boost: tr(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: plit(std: tring 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: tring&
//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)
|
|
|
| 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 ?
|
|
|
| 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??
|
|
|
| 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
|
|
|
| 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 ?
|
|
|
|