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

Username/Email:
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 3,900
» Latest member: asleypittoz1271
» Forum threads: 5,151
» Forum posts: 41,373

Full Statistics

Online Users
There are currently 37 online users.
» 0 Member(s) | 36 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: 602
All in One Exporter
Forum: Tools
Last Post: Kain88
01-25-2026, 07:04 AM
» Replies: 4
» Views: 424
HELP! ReZasCashServer It ...
Forum: Ep4 Support
Last Post: Kain88
01-24-2026, 03:24 PM
» Replies: 2
» Views: 152
Hi, does anyone know the ...
Forum: Help
Last Post: Desarija
01-21-2026, 11:29 AM
» Replies: 1
» Views: 110
LastChaos Nemesis
Forum: Server Advertising
Last Post: Desarija
01-20-2026, 04:06 PM
» Replies: 3
» Views: 226
Looking for EP4 Guidance
Forum: General Discussion
Last Post: xHypnosiaa
01-19-2026, 08:33 AM
» Replies: 1
» Views: 165
We're in need of creative...
Forum: Project Recruitment
Last Post: RGT
01-16-2026, 12:48 AM
» Replies: 0
» Views: 114
Last Chaos build deployme...
Forum: Ep4 Guides
Last Post: xHypnosiaa
01-08-2026, 11:14 AM
» Replies: 0
» Views: 68
Last Chaos global server ...
Forum: Ep4 Guides
Last Post: xHypnosiaa
01-07-2026, 07:01 PM
» Replies: 0
» Views: 29
EP-2/EP-3 Mixed files
Forum: Archived General Server Releases
Last Post: TeKnodE
01-06-2026, 09:53 PM
» Replies: 1
» Views: 293

 
  (Help) Premium with additional buff
Posted by: ChaosHase - 05-27-2023, 10:42 AM - Forum: Ep4 Support - Replies (2)


Hello community.

I was wondering if it's possible when you activate premium that an additional skill can be performed.

which runs just as long as Premium.

creating the skill is no problem.

Installing it in the premium function is a bit complicated.

Can someone help me with that?

Thanks

Print this item

  add map, minimap
Posted by: kdy - 05-24-2023, 04:51 PM - Forum: Ep4 Support - Replies (2)


hi, does anyone know how i can add map and minimap to the new zones? ?

Print this item

  How to Refresh channel state with button on Channel Select when is Down or Busy?
Posted by: Andrein95 - 05-21-2023, 10:22 AM - Forum: Ep4 Support - Replies (3)


Hello.

I managed to add a button 'Refresh' to update state when a channel is busy or down. 

For example when the game server is still loading obv the client will mark as down. 

Without make Exit and Relog I'd like to reload information.

I did this but does not work:

if (m_pWnd != NULL)
{
switch (m_cmdTpye)
{
case GotoLogin:
m_pWnd->GotoLogin();
break;
case ConnectServer:
m_pWnd->ConnectServer();
break;
case Refresh:
m_pWnd->UpdateServerList();
....

I tried also:

m_pWnd->ResetServerAndChannelData();
m_pWnd->Lock(TRUE);
Sleep(500);
m_pWnd->Lock(FALSE);
m_pWnd->UpdateServerList();

but does not work either.

If toggling m_pWnd->CloseUI() and m_pWnd->OpenUI() the form of selection does not appear anymore.

Does anyone how to fix this or If my approach is totally wrong?

Thanks

Best Regards

Print this item

  discord rich presence
Posted by: kdy - 05-16-2023, 03:19 PM - Forum: Ep4 Support - Replies (3)


hello, someone can send me a guide on how to put discord rich presence? i have tried several times but idk where to put the code, if someone can help me i would appreciate it ❤️

Print this item

  Class change card
Posted by: Desarija - 05-02-2023, 05:56 PM - Forum: Ep4 Support - Replies (1)


Hello, 

I have created an item that allows me to change my main character class at Crean, for example from Knight to Titan. Everything works fine, but apparently the character animations are not changed correctly so the character goes into a broken state like in the image below. As soon as I try to move around my client crashed with Send Error.



I have tried to fix it with the SetAnimation function but that didn't work. Has anyone done this before and can give me a hint?

Of course I could avoid this by forcing a disconnect/relog but that's not my prefered solution.

Print this item

  How to get UV Map from TopUI.tex? In other words how to map different portion of texture and apply in pTextureStock->Ob
Posted by: Andrein95 - 05-01-2023, 10:18 PM - Forum: Ep4 Support - Replies (12)


Hello.

I'd like to take from topUI Mana bar.

From code and various example I can see clearly that:

//rett HP
Rectangle.SetUV(550, 108, 679, 119, fTexWidth, fTexHeight);
//inside recatngle
RectangleFill.SetUV(286, 220, 289, 227, fTexWidth, fTexHeight);

these two vars of type: UIRectUV map HP bar of topUI (second one from the top left).

What I can not understand is, where is the tool to get such informations?

If i want to grab or swap texture with another one, how to map coordinates in here?

Hope that I explained myself.

Best Regards

Print this item

  Hint to implement List of icons under Mob Target of possibles drops.
Posted by: Andrein95 - 04-30-2023, 12:56 PM - Forum: Ep4 Support - Replies (5)


Hello. I'd like to implement a list of icons distributed by line under the Target section with Mob name, Level and HP Bar.

For the icons I can use CUIIcons already implemented class, and I would work on TargetInfoNewUI in case of MOB for rendering this new feature.

The part that I dont know to organize is how to retrieve mob possible drop from its index. 

Anyone has already solved this?

Any hints will be nice.

Thanks in Advanc

Print this item

  Send struct with dinamic size inside of other struct
Posted by: nicolasg - 04-29-2023, 10:24 PM - Forum: Ep4 Support - No Replies


Hello, I am trying to modify the existing merchant system, specifically I want to send an array with some data, in addition to the data that was originally sent...

This is the struct with the changes

// NICOLASG MARK (AUCTIONS) // Testing
struct TradeAgentBiddersList {
int bid_pos;
int bidder_job;
char bidder_charName[MAX_ID_NAME_LENGTH];
int bid_value;

TradeAgentBiddersList() {
bid_pos = 0;
bidder_job = 0;
strcpy(bidder_charName, "\0");
bid_value = 0;
}
};
// NICOLASG MARK END

struct TradeAgentItem {
tradeAgentIndex_t index; // °íÀ¯ ¹øÈ£
int item_index;
unsigned char plus; // °­È­ ¼öÄ¡
unsigned char plus2; // Ãß°¡ ¼öÄ¡
int flag;
char serial[MAX_SERIAL_LENGTH + 1];
int item_jobclass;
int quantity;
int option_count;
int option_type[MAX_ITEM_OPTION];
int option_level[MAX_ITEM_OPTION];
int socketCount;
int socket[MAX_SOCKET_COUNT];
int item_origin[MAX_ORIGIN_OPTION];
GoldType_t nas;
int regist_date;
int expire_date;
int item_num0; //¾ÆÀÌÅÛ ¹°¸®°ø°Ý·Â
int item_num1; //¾ÆÀÌÅÛ ¸¶¹ý°ø°Ý·Â
int item_level;
int rareGrade;
char sell_charName[MAX_ID_NAME_LENGTH]; //MAX_ID_NAME_LENGTH = 64
#ifdef DURABILITY
int now_durability;
int max_durability;
#endif
// NICOLASG MARK (AUCTIONS) // Testing
int bidsListCount;
TradeAgentBiddersList* bidsList;
// NICOLASG MARK END

TradeAgentItem() {
memset(this, 0x00, sizeof(*this));
memset(this->socket, -1, sizeof(this->socket));

#ifdef DURABILITY
now_durability = 0;
max_durability = 0;
#endif
}
};

And this is the part of the code where I populate the package with the information

size_t BidsListSize = 0; // NICOLASG MARK (AUCTIONS)

for (int i = 0; i < packet->count; i++) {
cmd.GetRec("a_index", packet->list.index);
cmd.GetRec("a_item_serial", packet->list[i].item_index);
cmd.GetRec("a_item_plus", packet->list[i].plus);
cmd.GetRec("a_item_plus2", packet->list[i].plus2);
cmd.GetRec("a_item_flag", packet->list[i].flag);
cmd.GetRec("a_option_count", packet->list[i].option_count);
cmd.GetRec("a_option_0_type", packet->list[i].option_type[0]);
cmd.GetRec("a_option_0_level", packet->list[i].option_level[0]);
cmd.GetRec("a_option_1_type", packet->list[i].option_type[1]);
cmd.GetRec("a_option_1_level", packet->list[i].option_level[1]);
cmd.GetRec("a_option_2_type", packet->list[i].option_type[2]);
cmd.GetRec("a_option_2_level", packet->list[i].option_level[2]);
cmd.GetRec("a_option_3_type", packet->list[i].option_type[3]);
cmd.GetRec("a_option_3_level", packet->list[i].option_level[3]);
cmd.GetRec("a_option_4_type", packet->list[i].option_type[4]);
cmd.GetRec("a_option_4_level", packet->list[i].option_level[4]);
cmd.GetRec("a_quantity", packet->list[i].quantity);
cmd.GetRec("a_totalmoney", packet->list[i].nas);
cmd.GetRec("a_item_level", packet->list[i].item_level);
cmd.GetRec("a_item_origin_0", packet->list[i].item_origin[0]);
cmd.GetRec("a_item_origin_1", packet->list[i].item_origin[1]);
cmd.GetRec("a_item_origin_2", packet->list[i].item_origin[2]);
cmd.GetRec("a_item_origin_3", packet->list[i].item_origin[3]);
cmd.GetRec("a_item_origin_4", packet->list[i].item_origin[4]);
cmd.GetRec("a_item_origin_5", packet->list[i].item_origin[5]);
cmd.GetRec("a_socketCount", packet->list[i].socketCount);
cmd.GetRec("a_socket0", packet->list[i].socket[0]);
cmd.GetRec("a_socket1", packet->list[i].socket[1]);
cmd.GetRec("a_socket2", packet->list[i].socket[2]);
cmd.GetRec("a_socket3", packet->list[i].socket[3]);
cmd.GetRec("a_socket4", packet->list[i].socket[4]);
cmd.GetRec("a_socket5", packet->list[i].socket[5]);
cmd.GetRec("a_socket6", packet->list[i].socket[6]);
#ifdef DURABILITY
cmd.GetRec("a_now_dur", packet->list[i].now_durability);
cmd.GetRec("a_max_dur", packet->list[i].max_durability);
#endif
cmd.GetRec("a_num0", packet->list[i].item_num0);
cmd.GetRec("a_num1", packet->list[i].item_num1);
cmd.GetRec("regist_date", packet->list[i].regist_date);
cmd.GetRec("expire_date", packet->list[i].expire_date);

// NICOLASG MARK (AUCTIONS)
if (p->SellType == 1) {
sprintf(sql, "SELECT a_bid_pos, a_bidder_job, a_bidder_name, a_bidder_bid, a_show_name FROM t_tradeagent_auctions_history WHERE a_auction_index=%d", packet->list[i].index);
CDBCmd cmdHistory;
cmdHistory.Init(&gserver.m_dbchar);
cmdHistory.SetQuery(sql);

if (cmdHistory.Open()) {
int ListCount = cmdHistory.m_nrecords;

if (ListCount > 0) {
packet->list[i].bidsListCount = ListCount;
packet->list[i].bidsList = new TradeAgentBiddersList[ListCount];

int k = 0;

while (cmdHistory.MoveNext()) {
cmdHistory.GetRec("a_bid_pos", packet->list[i].bidsList[k].bid_pos);
cmdHistory.GetRec("a_bidder_job", packet->list[i].bidsList[k].bidder_job);

// TODO: if show name is 0
CLCString sell_charName(MAX_ID_NAME_LENGTH);
cmdHistory.GetRec("a_bidder_name", sell_charName);
strcpy(packet->list[i].bidsList[k].bidder_charName, (const char*)sell_charName);

cmdHistory.GetRec("a_bidder_bid", packet->list[i].bidsList[k].bid_value);

k++;
}

BidsListSize += sizeof(TradeAgentBiddersList) * k;
} else {
LOG_INFO("NICOLASG - No bids yet");

packet->list[i].bidsListCount = 0;
//packet->list[i].bidsList = NULL;

BidsListSize += sizeof(TradeAgentBiddersList);
}
} else {
LOG_INFO("NICOLASG - Bids listing for Auction:%d not found", packet->list[i].index);

packet->list[i].bidsListCount = 0;
//packet->list[i].bidsList = NULL;

BidsListSize += sizeof(TradeAgentBiddersList);
}
} else {
LOG_INFO("NICOLASG - Is not Auctions list request");

packet->list[i].bidsListCount = 0;
//packet->list[i].bidsList = NULL;

BidsListSize += sizeof(TradeAgentBiddersList);
}
// NICOLASG MARK END

cmd.MoveNext();
}

rmsg->setSize(sizeof(ResponseClient::TradeAgentSystemList) + (packet->count * sizeof(TradeAgentItem)) + BidsListSize); // NICOLASG MARK (AUCTIONS) OG: rmsg->setSize(sizeof(ResponseClient::TradeAgentSystemList) + (packet->count * sizeof(TradeAgentItem)));
SEND_Q(rmsg, desc);

My question is the following, so far have I done things correctly or am I a disaster? Also, is it possible to "retrieve" the structure: TradeAgentBiddersList once the package is delivered to the client?

To provide more information to contribute to an answer, this is the code I have modified on the client side

ResponseClient::TradeAgentSystemList* pPack = reinterpret_cast<ResponseClient::TradeAgentSystemList*>(istr->GetBuffer());

clearSearchList();

m_sCurPage = pPack->pageNo;
m_ucNextPage = pPack->nextPage;
m_nServerTime = pPack->curServerTime;

if (pPack->count > 0) {
m_nSearchCount = pPack->count;
m_pSearchList = new TradeAgentItem[pPack->count];

// NICOLASG MARK (AUCTIONS)
for (int i = 0; i < pPack->count; i++) {
m_pSearchList[i].index = pPack->list[i].index;
m_pSearchList[i].item_index = pPack->list[i].item_index;
m_pSearchList[i].plus = pPack->list[i].plus;
m_pSearchList[i].plus2 = pPack->list[i].plus2;
m_pSearchList[i].flag = pPack->list[i].flag;
strncpy(m_pSearchList[i].serial, pPack->list[i].serial, MAX_SERIAL_LENGTH);
m_pSearchList[i].item_jobclass = pPack->list[i].item_jobclass;
m_pSearchList[i].quantity = pPack->list[i].quantity;
m_pSearchList[i].option_count = pPack->list[i].option_count;
memcpy(m_pSearchList[i].option_type, pPack->list[i].option_type, sizeof(pPack->list[i].option_type));
memcpy(m_pSearchList[i].option_level, pPack->list[i].option_level, sizeof(pPack->list[i].option_level));
m_pSearchList[i].socketCount = pPack->list[i].socketCount;
memcpy(m_pSearchList[i].socket, pPack->list[i].socket, sizeof(pPack->list[i].socket));
memcpy(m_pSearchList[i].item_origin, pPack->list[i].item_origin, sizeof(pPack->list[i].item_origin));
m_pSearchList[i].nas = pPack->list[i].nas;
m_pSearchList[i].regist_date = pPack->list[i].regist_date;
m_pSearchList[i].expire_date = pPack->list[i].expire_date;
m_pSearchList[i].item_num0 = pPack->list[i].item_num0;
m_pSearchList[i].item_num1 = pPack->list[i].item_num1;
m_pSearchList[i].item_level = pPack->list[i].item_level;
m_pSearchList[i].rareGrade = pPack->list[i].rareGrade;
strncpy(m_pSearchList[i].sell_charName, pPack->list[i].sell_charName, MAX_ID_NAME_LENGTH);
#ifdef DURABILITY
m_pSearchList[i].now_durability = pPack->list[i].now_durability;
m_pSearchList[i].max_durability = pPack->list[i].max_durability;
#endif
int ListCount = pPack->list[i].bidsListCount;

if (ListCount > 0) {
m_pSearchList[i].bidsListCount = ListCount;
m_pSearchList[i].bidsList = new TradeAgentBiddersList[ListCount];
for (int k = 0; k < ListCount; k++) {
m_pSearchList[i].bidsList[k].bid_pos = pPack->list[i].bidsList[k].bid_pos;
m_pSearchList[i].bidsList[k].bidder_job = pPack->list[i].bidsList[k].bidder_job;
//strncpy(m_pSearchList[i].bidsList[k].bidder_charName, pPack->list[i].bidsList[k].bidder_charName, MAX_ID_NAME_LENGTH);
strcpy(m_pSearchList[i].bidsList[k].bidder_charName, pPack->list[i].bidsList[k].bidder_charName);
m_pSearchList[i].bidsList[k].bid_value = pPack->list[i].bidsList[k].bid_value;
}
} else {
m_pSearchList[i].bidsListCount = 0;
m_pSearchList[i].bidsList = new TradeAgentBiddersList;
//m_pSearchList[i].bidsList = NULL;
}
}
// Original
// memcpy(m_pSearchList, pPack->list, sizeof(TradeAgentItem) * pPack->count);
// NICOLASG MARK END

My client crashes when executing the line: m_pSearchList[i].bidsList[k].bidder_job = pPack->list
[i].bidsList[k].bidder_job;, so I understand that something is wrong with the package...
[/i]

[i]
[/i]

Print this item

  show ping under radar
Posted by: deudas2 - 04-29-2023, 10:46 AM - Forum: Ep4 Support - Replies (5)


Hello everyone, could someone send me the system to see the ping under the radar? ?

Print this item

  100% Cooldown not work
Posted by: JLT - 04-25-2023, 04:27 PM - Forum: Ep4 Support - Replies (4)


Hello guys, I can’t solve the problem, when using skills and wearing jewelry at 100% I get errors 5550, I set the DEF_SKILL_SEND_DELAY value to 0, this did not solve the problem, what else can it be connected with?

Print this item