|
You last visited: Today at 05:03
Advertisement
NGemity - An Open Source Rappelz Emulator
Discussion on NGemity - An Open Source Rappelz Emulator within the Rappelz Private Server forum part of the Rappelz category.
01/28/2018, 19:50
|
#46
|
elite*gold: 0
Join Date: May 2011
Posts: 5,084
Received Thanks: 3,458
|
I put the source on , please feel free to contribute
If you're interested in joining the public Testserver, feel free to join us on
|
|
|
01/28/2018, 20:22
|
#47
|
elite*gold: 182
Join Date: Mar 2011
Posts: 258
Received Thanks: 340
|
Just an FYI the "Taming Fix" isn't really a fix rather an adjustment. Back in E4 not all mobs were tamable, only those specified on the card could be tamed. x.x
Other than that great work!
|
|
|
01/28/2018, 20:26
|
#48
|
elite*gold: 0
Join Date: May 2011
Posts: 5,084
Received Thanks: 3,458
|
Quote:
Originally Posted by xXExiledXx
Just an FYI the "Taming Fix" isn't really a fix rather an adjustment. Back in E4 not all mobs were tamable, only those specified on the card could be tamed. x.x
Other than that great work!
|
To be fair, I'm using the Arcadia from your 5.2 Release as a base because I was too lazy to import every rdb yet, so....
|
|
|
01/28/2018, 20:29
|
#49
|
elite*gold: 182
Join Date: Mar 2011
Posts: 258
Received Thanks: 340
|
Quote:
Originally Posted by Xijezu
To be fair, I'm using the Arcadia from your 5.2 Release as a base because I was too lazy to import every rdb yet, so....
|
Ok lol
Just wanted to let you know.
I know at some point I gave someone the work on E4 I did, it may have been Raskim :x, but they tried to fix the taming because they thought it was broken and I was like NO it was like that back in the day. xD
Anyway, keep up the great work! I am excited to see what the end result will be.
Also I still have some of the RDB plugins for glandus tool for E4 if you're interested.
|
|
|
01/28/2018, 20:42
|
#50
|
elite*gold: 0
Join Date: May 2011
Posts: 5,084
Received Thanks: 3,458
|
Quote:
Originally Posted by xXExiledXx
Also I still have some of the RDB plugins for glandus tool for E4 if you're interested.
|
That'd be pretty awesome!
So far I got the ItemResource, SkillResource and SkillTreeResource.
Would be really cool to generate an almost full Epic 4 Database from the rdb files.
What I'd really like to have would be the Quest & QuestLink one because I may think the 5.2 ones cause some trouble, but nothing to rush for
|
|
|
01/28/2018, 20:49
|
#51
|
elite*gold: 182
Join Date: Mar 2011
Posts: 258
Received Thanks: 340
|
I don't have a plugin for quest or questlink, but here are the ones I do have.
Edit: Those should be the ones. If not I will have to go dig for them. lol
|
|
|
01/29/2018, 00:00
|
#52
|
Moderator
elite*gold: 1
Join Date: Dec 2012
Posts: 4,779
Received Thanks: 1,461
|
Quote:
Originally Posted by xXExiledXx
Just an FYI the "Taming Fix" isn't really a fix rather an adjustment. Back in E4 not all mobs were tamable, only those specified on the card could be tamed. x.x
Other than that great work!
|
Yeah I remember this...when each taming card had like 3 mob names listed on it and those were the only ones you could target with the card.
|
|
|
02/01/2018, 02:20
|
#53
|
elite*gold: 0
Join Date: Jan 2012
Posts: 410
Received Thanks: 33
|
I have the the 5.2 that's been full down graded to 4.2 well most of it anyway skills taming and what not are all 4.2 items are a mix but working to get it fully 4.2 but I need to fix the mobs going into walls all the time
|
|
|
02/01/2018, 03:17
|
#54
|
elite*gold: 0
Join Date: Jul 2015
Posts: 477
Received Thanks: 633
|
Quote:
Originally Posted by mlejnek2
I have the the 5.2 that's been full down graded to 4.2 well most of it anyway skills taming and what not are all 4.2 items are a mix but working to get it fully 4.2 but I need to fix the mobs going into walls all the time
|
Stop spawning via lua, .nfs is the answer.
I'd love to help but c++ is outside my scope. GL
|
|
|
02/01/2018, 04:24
|
#55
|
elite*gold: 182
Join Date: Mar 2011
Posts: 258
Received Thanks: 340
|
Quote:
Originally Posted by SilentWisdom
Stop spawning via lua, .nfs is the answer.
I'd love to help but c++ is outside my scope. GL
|
C++ isn't that hard really.
Also below should be able to load quest rdbs for E4. Either that or E3/2 I don't remember which client they are for. xD
QuestResource.cpp
#include "DataType.h"
#include "ExportDLL.h"
#include "IRowManipulator.h"
#ifdef __cplusplus
extern "C" {
#endif
static FieldDescriptor df[] =
{ { 1, TYPE_INT32, "id" },
{ 1, TYPE_INT32, "text_id_quest" },
{ 1, TYPE_INT32, "text_id_summary" },
{ 1, TYPE_INT32, "text_id_status" },
{ 1, TYPE_INT32, "limit_level" },
{ 1, TYPE_INT32, "limit_job_level" },
{ 1, TYPE_BIT, "limit_quest_indication" },
{ 1, TYPE_BIT, "limit_deva" },
{ 1, TYPE_BIT, "limit_asura" },
{ 1, TYPE_BIT, "limit_gaia" },
{ 1, TYPE_BIT, "limit_fighter" },
{ 1, TYPE_BIT, "limit_hunter" },
{ 1, TYPE_BIT, "limit_magician" },
{ 1, TYPE_BIT, "limit_summoner" },
{ 1, TYPE_INT8 | TYPE_SQLIGNORE | TYPE_CSVIGNORE, "nv" },
{ 1, TYPE_INT8 | TYPE_SQLIGNORE | TYPE_CSVIGNORE, "nv" },
{ 1, TYPE_INT8 | TYPE_SQLIGNORE | TYPE_CSVIGNORE, "nv" },
{ 1, TYPE_INT32, "limit_job" },
{ 1, TYPE_INT32, "limit_favor" },
{ 1, TYPE_INT32, "repeatable" },
{ 1, TYPE_INT32, "invoke_condition" },
{ 1, TYPE_INT32, "invoke_value" },
{ 1, TYPE_INT32, "type" },
{ 1, TYPE_INT32, "value1" },
{ 1, TYPE_INT32, "value2" },
{ 1, TYPE_INT32, "value3" },
{ 1, TYPE_INT32, "value4" },
{ 1, TYPE_INT32, "value5" },
{ 1, TYPE_INT32, "value6" },
{ 1, TYPE_INT32, "value7" },
{ 1, TYPE_INT32, "value8" },
{ 1, TYPE_INT32, "value9" },
{ 1, TYPE_INT32, "value10" },
{ 1, TYPE_INT32, "value11" },
{ 1, TYPE_INT32, "value12" },
{ 1, TYPE_INT32, "drop_group_id" },
{ 1, TYPE_INT32, "quest_difficulty" },
{ 1, TYPE_INT32, "favor" },
{ 1, TYPE_INT32, "exp" },
{ 1, TYPE_INT32, "jp" },
{ 1, TYPE_INT32, "gold" },
{ 1, TYPE_INT32, "default_reward_id" },
{ 1, TYPE_INT32, "default_reward_level" },
{ 1, TYPE_INT32, "default_reward_quantity" },
{ 1, TYPE_INT32, "optional_reward_id1" },
{ 1, TYPE_INT32, "optional_reward_level1" },
{ 1, TYPE_INT32, "optional_reward_quantity1" },
{ 1, TYPE_INT32, "optional_reward_id2" },
{ 1, TYPE_INT32, "optional_reward_level2" },
{ 1, TYPE_INT32, "optional_reward_quantity2" },
{ 1, TYPE_INT32, "optional_reward_id3" },
{ 1, TYPE_INT32, "optional_reward_level3" },
{ 1, TYPE_INT32, "optional_reward_quantity3" },
{ 1, TYPE_INT32, "forequest1" },
{ 1, TYPE_INT32, "forequest2" },
{ 1, TYPE_INT32, "forequest3" },
{ 1, TYPE_INT32, "or_flag" },
{ 512, TYPE_CHAR | TYPE_RDBIGNORE, "script_start_text" },
{ 512, TYPE_CHAR | TYPE_RDBIGNORE, "script_end_text" },
{ 512, TYPE_CHAR | TYPE_RDBIGNORE, "script_text" } };
#pragma comment(linker, "/EXPORT:registerDBStructure=_registerDBStructure@8" )
void EDATABASEDLL DLLCALLCONV registerDBStructure(FieldDescriptor **dfmPtr, int *sizePtr)
{
*dfmPtr = df;
*sizePtr = sizeof(df) / sizeof(FieldDescriptor);
}
#pragma comment(linker, "/EXPORT:convertData=_convertData@16")
void EDATABASEDLL DLLCALLCONV convertData(eDataFormat dst, eDataConvertionType mode, IRowManipulator *row, unsigned int rowNum)
{
if (mode == DCT_Read && dst == DF_RDB)
{
if (*static_cast<int*>(row->getValuePtr("or_flag")) == 11599872)
{
*static_cast<int*>(row->getValuePtr("or_flag")) = 0;
}
else if (*static_cast<int*>(row->getValuePtr("or_flag")) == 11665407)
{
*static_cast<int*>(row->getValuePtr("or_flag")) = 1;
}
}
else if (mode == DCT_Write && dst == DF_RDB)
{
if (*static_cast<int*>(row->getValuePtr("or_flag")))
{
*static_cast<int*>(row->getValuePtr("or_flag")) = 11665407;
}
else
{
*static_cast<int*>(row->getValuePtr("or_flag")) = 11599872;
}
}
}
#pragma comment(linker, "/EXPORT:getDefaultFileName=_getDefaultFileName@0")
EDATABASEDLL const char* DLLCALLCONV getDefaultFileName()
{
return "db_quest";
}
#pragma comment(linker, "/EXPORT:getDefaultTableName=_getDefaultTableName@0" )
EDATABASEDLL const char* DLLCALLCONV getDefaultTableName()
{
return "QuestResource";
}
#pragma comment(linker, "/EXPORT:getSQLColumnOrder=_getSQLColumnOrder@0")
EDATABASEDLL const char* DLLCALLCONV getSQLColumnOrder()
{
return "id\0"
"text_id_quest\0"
"text_id_summary\0"
"text_id_status\0"
"limit_level\0"
"limit_job_level\0"
"limit_quest_indication\0"
"limit_deva\0"
"limit_asura\0"
"limit_gaia\0"
"limit_fighter\0"
"limit_hunter\0"
"limit_magician\0"
"limit_summoner\0"
"limit_job\0"
"limit_favor\0"
"repeatable\0"
"invoke_condition\0"
"invoke_value\0"
"type\0"
"value1\0"
"value2\0"
"value3\0"
"value4\0"
"value5\0"
"value6\0"
"value7\0"
"value8\0"
"value9\0"
"value10\0"
"value11\0"
"value12\0"
"drop_group_id\0"
"quest_difficulty\0"
"favor\0"
"exp\0"
"jp\0"
"gold\0"
"default_reward_id\0"
"default_reward_level\0"
"default_reward_quantity\0"
"optional_reward_id1\0"
"optional_reward_level1\0"
"optional_reward_quantity1\0"
"optional_reward_id2\0"
"optional_reward_level2\0"
"optional_reward_quantity2\0"
"optional_reward_id3\0"
"optional_reward_level3\0"
"optional_reward_quantity3\0"
"forequest1\0"
"forequest2\0"
"forequest3\0"
"or_flag\0"
"script_start_text\0"
"script_end_text\0"
"script_text\0";
}
#pragma comment(linker, "/EXPORT:getCSVColumnOrder=_getCSVColumnOrder@0")
EDATABASEDLL const char* DLLCALLCONV getCSVColumnOrder()
{
return getSQLColumnOrder();
}
#ifdef __cplusplus
}
#endif
Edit: Did they have quest link back then?
|
|
|
02/01/2018, 09:34
|
#56
|
elite*gold: 0
Join Date: May 2011
Posts: 5,084
Received Thanks: 3,458
|
Quote:
Originally Posted by xXExiledXx
Edit: Did they have quest link back then?
|
Server sided, yes, as RDB apparentely not. Neither the first, nor mid-epic4 client has it. Surprises me to be honest
|
|
|
02/08/2018, 17:38
|
#57
|
elite*gold: 0
Join Date: May 2011
Posts: 5,084
Received Thanks: 3,458
|
Pushing this once again:
Since the last update we made a bit of progress, including: - Monster wandering & auto aggro
- Base implemention of trading
- Various bug fixes
- More enhancing
- Better stat support
- A few more skill implementations
- Better support for platform independent compiling (a.k.a.: Fixed dependencies & CMake)
By now I'm not the only one working on it, besides me there are working on the Emulator.
Feel free to join us on our Testserver to play around a bit and discover (hopefully not so few ) bugs or even contribute to the project!
Once again:
Github link to the full source code: Discord server including Testserver access:
|
|
|
02/09/2018, 02:55
|
#58
|
elite*gold: 0
Join Date: Jul 2015
Posts: 477
Received Thanks: 633
|
Hmn it really makes me want to take a stab at actor management, how are you currently handling actors? In sub-types by like NPC/PC/Monster/Summon/Looter? Or by base-type actor?
Damnit, now you make me wanna learn c++ (which I would honestly guess isn't too far out from c#)
|
|
|
02/09/2018, 11:40
|
#59
|
elite*gold: 0
Join Date: May 2011
Posts: 5,084
Received Thanks: 3,458
|
Quote:
Originally Posted by SilentWisdom
Hmn it really makes me want to take a stab at actor management, how are you currently handling actors? In sub-types by like NPC/PC/Monster/Summon/Looter? Or by base-type actor?
|
Pretty similar to Pyrok and Skyfire (the project I'm basing the Emu on).
The absolute base class is an "Object", which has a pretty neat and extendable system for storing member variables, independent on what the child class is gonna be.
"Over" the Object we have the WorldObject, which is the base for all movement- and position based things. The reason for doing a subclass for this is for cases like Fieldprops or Items (yes, Items as worlddrops are technically WorldObjects in this case - not a fan of that tho. Thanks Gala.), those, that don't need to be some kind of Unit.
Now as the base for everything that's somehow able to fight, have equipment or skills or whatever, we have the Unit class. As mentioned before, this one contains like everything from stat calculations to damage calculations and so on.
And then, finally, we have the classes per se: Players, Monsters, NPCs, etc.
So it pretty much looks like this:
Player/Monster/NPC/Summon > Unit > WorldObject > Object
or
FieldProp/Item > WorldObject > Object
I'd highly recommend checking out the Object class, I took that idea from Skyfire as well because that's something you don't see every day and is hella smart design imho
Quote:
Originally Posted by SilentWisdom
Damnit, now you make me wanna learn c++ (which I would honestly guess isn't too far out from c#)
|
Technically it isn't - if you understand C# you should understand like at least 90% of the Emulator.
As mentioned in the readme and the edited original post (check history), I took Pyroks Emulator as a reference for a ton of things and keep working with the Pseudocode we got from IDA, so you probably see tons of similarities here.
Also, besides having pointers now, I tried to keep the code as simple as possible, because a) I'm not a veteran C++ developer and b) what's the point if you open source it and people can't understand your code?
If you wanna mess around with it, just join us on Discord, clone/fork the repository and feel free to ask if there's something you don't understand.
|
|
|
02/20/2018, 00:13
|
#60
|
elite*gold: 0
Join Date: May 2011
Posts: 5,084
Received Thanks: 3,458
|
I revamped the original post, should be better now.
So far on the progress:
- Trading has been (almost) implemented
- Revamped tons of code (***, I love saying this )
- Started support for riding
- Tons of bug fixes and of course more bug additions for later fixes
- More skill support
|
|
|
All times are GMT +2. The time now is 05:03.
|
|