I have no interest in BDO and i don't have these Files. Someone else open a Thread. It's just a repost.
Please stop editing this. Thanks
Printable View
I have no interest in BDO and i don't have these Files. Someone else open a Thread. It's just a repost.
Please stop editing this. Thanks
It's got removed or what?
https://uploads.tapatalk-cdn.com/201...abe62ddd14.jpg
Sent from my SM-N910F using Tapatalk
this is OgreFest emulator
who downloaded the client, please give a link to the client
Java ver.?
requirements to run server and game?
is a java server emulator with source code included
this seems promising
source code of launcher from ogrefest is included on it so suposed to be ogrefest client
server is running OK!
have server api?
and who can build launcher on 127.0.0.1?
Source code from login server was removed, but there is a login.jar with some piece of original code compiled, just have to decompile and rewrite few things.
Server is ON
Use MongoDB
How did you get it running? i'm still trying to get mine up.
as I understand it you need to run mongodb + java 8 150 + vs the 2015 to compile the Launcher, but how to make database data in Mongo is not clear
That part i understand i'm stuck at compiling the launcher cause i use VS2017 and i'm feeling too lazy to compile the launcher since i'm getting a ton of errors.
Set-up Guide: (This is incomplete since i have not been able to connect yet)
1) Download MongoDB google it
2) Navigate to the MongoDB path and create a .bat file or through CMD to run the MongoDB server
3) Once installed and running you can use 2 GUI applications, Robo 3T Mongo or MongoDB Compass Community to connect, once connected create 2 databases "gameserver" & "loginserver"Code:mongod --auth --dbpath "database_save_path"
4) Creating the admin userto create the user admin with password you can execute the following code through Robo MongoDB by right-clicking and select open Shell over gameserver or loginserver or do it by CMD by running CMD through start menu and enter the codes
once you see the message mongo shell or what not enter this code into the shell windowCode:c:\mongodb\mongo.exe <-- path of your mongodb folder targeting mongo.exe
do this for both gameserver and loginserver once this is done for each database you will get a confirmation that the user has been created. Doing this would allow the files to execute data into the database if your getting an error code 13.Code:use database_name
db.createUser(
{
user: "admin",
pwd: "12345",
roles: [ { role: "readWrite", db: "database_name" } ]
}
)
5) Configure the files located in the folder "config/" for both gameserver and loginserver
- Under database.propterties i changed anonymous user to false or else i would get unauthorize code execution errors.
5) Compile launcher (i'm on this part)
6) open the Client path and edit service.ini and change the IP to your IP
7) you could force run the .exe by passing any command line, but it doesn't work anyways so maybe the launcher is needed since i tried to force run the game without launcher.
Extras:
1) there are options to auto register an account in the login.properties and to disable tokens
2) under database.properties you can set debug = true to have the login and game server to display packet information.
if anyone get's their server/client up and running let me know
I also get a lot of errors and can't compile :(
thanks, client - Ogre Fest - Black Desert Online Private Server
the funny thing is the kid talks about a hard-coded backdoor but doesn't he realize the source code is also in there rar and it's not hard to remove a back door if you have code to lol I swear these kids are retarded they just don't want competition
where database
and where client ogrefestbdo is offline can't not download
BDOServer\data\sqlite3\bdo.sqlite3
client install - http://ogrefest.online/download/setup.exe
okay well game server compiles good and source code to login server is missing but was able to decompile and recompile looking for any backdoor now :) if the back door exist I will remove it and repost the files
Did a scan with Smart Security and nothing came up.
Still use at own risk.
(It's in Dutch, but the highlighted part is saying that it found 0 threats.)
https://i.imgur.com/p7rsomu.png
Does it include full sourcecode,if so,that's cool
a good idea is re-download all lib required from same version using maven repo, to replace any bad class inside some lib, this will make any backdoor hidden in libs be disabled, then just have to check ports and server entire code, then everything good to run online.
If PA is after suing, they should approach how they sued PYX Bdo (BDO Bot).
Although JuJu (PYX Maker) handed them the PYX Bot source (to PA).
Maybe this is like what happened to PYX but nonetheless, Juju got away by just handing them over the bot source and paid the lawyer's expenses.
And, the cat is out, good luck preventing any other p.server popping out anytime soon.
Edit:
Mirror the google dl link as it will be removed for sure.
Mirror the working client as well. (Torrent preferable)
This is ogrefest client, I think ogrefest launcher has torrent client built-in.
You can find this file in C:\Program Files\OgreFest Launcher\Temporary Files\client_1.torrent
I can't attach .torrent, so I zip the file.
Attachment 162146
for magnet link
magnet:?xt=urn:btih:c8c0f149973996bf19c15f3c18c2ef6cf07dac43&dn=GameClient&tr=http%3A%2F%2F163.172.106.154%3A6969%2Fannounce
Anyone can reupload?
Sent from my SM-J730G using Tapatalk
where can i download the client?
Can someone teach me how to run this BDO Online server?
someone solved the problem with launcher?
Odd, i cant extract with the Google Link. Even tho anti-virus was turned off during download & extractions.
Will try the Mega Link.
Edit:
Can someone at least upload only the launcher source?
Launcher
https://mega.nz/#!IewS3S5I!zVivWfMBONUcrCi_4r90Ux6FLCHwzz8BQx2YQMU4ELk
Thank you so much for share and happy new year... Anyone tested Gamez BDO client using this server files?
error for compil launcher
https://b.radikal.ru/b11/1712/95/29dbf8e70f91.png
who knows how to make a game account in the database?
Of couse there is error with compile,since launcher source from decompiled launcher and its seems to be completely mess with all links.Anyway its need alot of work for recover links properly,so right now its useless.
it's not a decompiled launcher the source for the launcher is provided in the files.
as far as i know you need the launcher to connect since the files use a key to login, i have tried forcing the client to run but i always get crypt null message or wrong account.
does someone had run on localhost success now??
That's the moment when @lastfun appears and saves the world lol
Sent from my SM-N910F using Tapatalk
yeah was thinking to use the old method like the old src was here around, creating account in the db, the key, then add command to the exe with the key created. But still have no luck to see how to create even the account in the db xd
The mega url for the launcher was removed, pls reup.
the old BD Emu? i tried that src before the last time i used it, it had no packets, crypt functions or database the creator of those files just logged the packets when they were encrypted and when the client would request packets all the server did was relay them.
if you decompiled the login.jar you will see some database structures: (Account.java)
DB structure:Code:package com.bdoemu.login.models.db;
import com.bdoemu.commons.database.mongo.JSONable;
import com.bdoemu.commons.model.enums.EAccessLevel;
import com.bdoemu.commons.model.xmlrpc.XMLRPCable;
import com.bdoemu.commons.model.xmlrpc.XmlRpcMessage;
import com.bdoemu.commons.model.xmlrpc.impl.XmlRpcAccount;
import com.bdoemu.commons.rmi.model.Macros;
import com.bdoemu.login.idfactory.LSIDStorageType;
import com.bdoemu.login.models.db.Account$Account;
import com.bdoemu.login.models.db.Account$Log;
import com.bdoemu.login.models.db.Account$Payment;
import com.bdoemu.login.models.db.Payment$Payment;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DBObject;
import java.lang.invoke.ConstantCallSite;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
public class Account
extends JSONable
implements XMLRPCable {
private final long objectId;
private long cash;
private String password;
private String accountName;
private String email;
private String host;
private EAccessLevel accessLvl = EAccessLevel.USER;
private String family = "";
private String pin = "";
private String confirmationHash = "";
private String changePasswordHash = "";
private long registrationDate;
private int characterSlots;
private Macros[] macroses;
private String gameOption;
private String uiInfo;
private static volatile transient Object[] \u631e;
public Account(BasicDBObject basicDBObject) {
this.objectId = basicDBObject.getLong(Account$Account.\uc7d1("\uee5d\u1da7\u0229"));
this.accountName = basicDBObject.getString(Account$Account.\uc7d1("\uee63\u1dad\u022e\u0fe8\u121a\ue3db\u3225\u42d6\u12fa\u1c7c\u240d"));
this.password = basicDBObject.getString(Account$Account.\uc7d1("\uee72\u1daf\u023e\u0ff4\u1218\ue3da\u3223\u42fc"));
this.pin = basicDBObject.getString(Account$Account.\uc7d1("\uee72\u1da7\u0223"));
this.family = basicDBObject.getString(Account$Account.\uc7d1("\uee64\u1daf\u0220\u0fee\u1203\ue3cc"));
this.host = basicDBObject.getString(Account$Account.\uc7d1("\uee6a\u1da1\u023e\u0ff3"));
this.accessLvl = EAccessLevel.valueOf((int)basicDBObject.getInt(Account$Account.\uc7d1("\uee63\u1dad\u022e\u0fe2\u121c\ue3c6\u321d\u42ee\u12f7")));
this.characterSlots = basicDBObject.getInt(Account$Account.\uc7d1("\uee61\u1da6\u022c\u0ff5\u120e\ue3d6\u3225\u42fd\u12e9\u1c42\u2404\u178e\u8046\u445d"));
this.cash = basicDBObject.getInt(Account$Account.\uc7d1("\uee61\u1daf\u023e\u0fef"));
if (basicDBObject.containsField(Account$Account.\uc7d1("\uee6f\u1daf\u022e\u0ff5\u1200\ue3c6\u3234\u42eb"))) {
BasicDBList basicDBList = (BasicDBList)basicDBObject.get(Account$Account.\uc7d1("\uee6f\u1daf\u022e\u0ff5\u1200\ue3c6\u3234\u42eb"));
this.macroses = new Macros[10];
for (Object e : basicDBList) {
Macros macros;
this.macroses[macros.getIndex()] = macros = new Macros((BasicDBObject)e);
}
}
if (basicDBObject.containsField(Account$Account.\uc7d1("\uee67\u1da3\u022c\u0fee\u1203"))) {
this.email = basicDBObject.getString(Account$Account.\uc7d1("\uee67\u1da3\u022c\u0fee\u1203"));
}
if (basicDBObject.containsField(Account$Account.\uc7d1("\uee65\u1daf\u0220\u0fe2\u1220\ue3c5\u3225\u42f1\u12f4\u1c7f"))) {
this.gameOption = ((BasicDBObject)basicDBObject.get(Account$Account.\uc7d1("\uee65\u1daf\u0220\u0fe2\u1220\ue3c5\u3225\u42f1\u12f4\u1c7f"))).getString(Account$Account.\uc7d1("\uee65\u1daf\u0220\u0fe2\u1220\ue3c5\u3225\u42f1\u12f4\u1c7f\u242c\u1780\u8046\u444f"));
}
if (basicDBObject.containsField(Account$Account.\uc7d1("\uee77\u1da7\u0204\u0fe9\u1209\ue3da"))) {
this.uiInfo = ((BasicDBObject)basicDBObject.get(Account$Account.\uc7d1("\uee77\u1da7\u0204\u0fe9\u1209\ue3da"))).getString(Account$Account.\uc7d1("\uee77\u1da7\u0209\u0fe6\u121b\ue3d4"));
}
if (basicDBObject.containsField(Account$Account.\uc7d1("\uee61\u1da1\u0223\u0fe1\u1206\ue3c7\u323c\u42f9\u12ef\u1c78\u2407\u178f\u807a\u444f\u5707\u35f5"))) {
this.confirmationHash = basicDBObject.getString(Account$Account.\uc7d1("\uee61\u1da1\u0223\u0fe1\u1206\ue3c7\u323c\u42f9\u12ef\u1c78\u2407\u178f\u807a\u444f\u5707\u35f5"));
}
if (basicDBObject.containsField(Account$Account.\uc7d1("\uee61\u1da6\u022c\u0fe9\u1208\ue3d0\u3201\u42f9\u12e8\u1c62\u241f\u178e\u8040\u444a\u573c\u35fc\u8689\uce4c"))) {
this.changePasswordHash = basicDBObject.getString(Account$Account.\uc7d1("\uee61\u1da6\u022c\u0fe9\u1208\ue3d0\u3201\u42f9\u12e8\u1c62\u241f\u178e\u8040\u444a\u573c\u35fc\u8689\uce4c"));
}
this.registrationDate = basicDBObject.getLong(Account$Account.\uc7d1("\uee70\u1dab\u022a\u0fee\u121c\ue3c1\u3223\u42f9\u12ef\u1c78\u2407\u178f\u8076\u444f\u5700\u35f8"), 0);
}
public Account(String string, String string2, String string3) {
this.objectId = Account.\ud3cd(Account.\u9433(), LSIDStorageType.ACCOUNT);
this.accountName = string;
this.email = string2;
this.password = string3;
this.registrationDate = Account.\u76c3();
}
public DBObject toDBObject() {
BasicDBObjectBuilder basicDBObjectBuilder = new BasicDBObjectBuilder();
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf511\uef09\u5c2f"), Account.\ud0a0(this.objectId));
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf52f\uef03\u5c28\ud9d7\ua8f1\u58b2\u2aa0\u9ed4\u8505\uc62d\ue920"), (Object)this.accountName);
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf52b\uef0d\u5c2a\ud9d1\ua8e8"), (Object)this.email);
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf53e\uef01\u5c38\ud9cb\ua8f3\u58b3\u2aa6\u9efe"), (Object)this.password);
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf53e\uef09\u5c25"), (Object)this.pin);
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf528\uef01\u5c26\ud9d1\ua8e8\u58a5"), (Object)this.family);
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf52f\uef03\u5c28\ud9dd\ua8f7\u58af\u2a98\u9eec\u8508"), Account.\u41a3(this.accessLvl.getAccessId()));
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf52d\uef08\u5c2a\ud9ca\ua8e5\u58bf\u2aa0\u9eff\u8516\uc613\ue929\ufdff\ue1d3\u10e1"), Account.\u41a3(this.characterSlots));
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf52d\uef01\u5c38\ud9d0"), Account.\ud0a0(this.cash));
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf52d\uef0f\u5c25\ud9de\ua8ed\u58ae\u2ab9\u9efb\u8510\uc629\ue92a\ufdfe\ue1ef\u10f3\uebb4\ue373"), (Object)this.confirmationHash);
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf52d\uef08\u5c2a\ud9d6\ua8e3\u58b9\u2a84\u9efb\u8517\uc633\ue932\ufdff\ue1d5\u10f6\ueb8f\ue37a\u1d2e\ub3cf"), (Object)this.changePasswordHash);
basicDBObjectBuilder.append(Account$Payment.\u92cb("\uf53c\uef05\u5c2c\ud9d1\ua8f7\u58a8\u2aa6\u9efb\u8510\uc629\ue92a\ufdfe\ue1e3\u10f3\uebb3\ue37e"), Account.\ud0a0(this.registrationDate));
return basicDBObjectBuilder.get();
}
public XmlRpcAccount toXMLRpcObject(String string) {
XmlRpcAccount xmlRpcAccount = new XmlRpcAccount();
xmlRpcAccount.setAccountId(this.objectId);
xmlRpcAccount.setAccountName(this.accountName);
xmlRpcAccount.setEmail(this.email);
xmlRpcAccount.setFamily(this.family);
xmlRpcAccount.setCash(this.cash);
xmlRpcAccount.setPassword(this.password);
xmlRpcAccount.setAccessLevel(this.accessLvl);
xmlRpcAccount.setConfirmationCode(this.confirmationHash);
xmlRpcAccount.setChangePasswordCode(this.changePasswordHash);
xmlRpcAccount.setRegistrationDate(this.registrationDate);
return xmlRpcAccount;
}
public long getObjectId() {
return this.objectId;
}
public long getCash() {
return this.cash;
}
public String getPassword() {
return this.password;
}
public String getAccountName() {
return this.accountName;
}
public String getEmail() {
return this.email;
}
public String getHost() {
return this.host;
}
public EAccessLevel getAccessLvl() {
return this.accessLvl;
}
public String getFamily() {
return this.family;
}
public String getPin() {
return this.pin;
}
public String getConfirmationHash() {
return this.confirmationHash;
}
public String getChangePasswordHash() {
return this.changePasswordHash;
}
public long getRegistrationDate() {
return this.registrationDate;
}
public int getCharacterSlots() {
return this.characterSlots;
}
public Macros[] getMacroses() {
return this.macroses;
}
public String getGameOption() {
return this.gameOption;
}
public String getUiInfo() {
return this.uiInfo;
}
public void setCash(long l) {
this.cash = l;
}
public void setPassword(String string) {
this.password = string;
}
public void setAccountName(String string) {
this.accountName = string;
}
public void setEmail(String string) {
this.email = string;
}
public void setHost(String string) {
this.host = string;
}
public void setAccessLvl(EAccessLevel eAccessLevel) {
this.accessLvl = eAccessLevel;
}
public void setFamily(String string) {
this.family = string;
}
public void setPin(String string) {
this.pin = string;
}
public void setConfirmationHash(String string) {
this.confirmationHash = string;
}
public void setChangePasswordHash(String string) {
this.changePasswordHash = string;
}
public void setRegistrationDate(long l) {
this.registrationDate = l;
}
public void setCharacterSlots(int n) {
this.characterSlots = n;
}
public void setMacroses(Macros[] arrmacros) {
this.macroses = arrmacros;
}
public void setGameOption(String string) {
this.gameOption = string;
}
public void setUiInfo(String string) {
this.uiInfo = string;
}
public String toString() {
return Account.\u147a(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ubfa4(Account.\ua9af(Account.\u6e60(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\u6c19(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\ua9af(Account.\u6e60(Account.\ua9af(Account.\u6e60(Account.\ua9af(new StringBuilder(), Account$Account.\uc7d1("\ud1f8\u6bff\u171a\ub929\u170c\ua09d\u50c5\uac5d\udc1b\u1044\ubbfd\ud384\ude1f\ua03f\udaad\u6628\u0724")), this.getObjectId()), Account$Account.\uc7d1("\ud195\u6bbc\u171a\ub927\u170a\ua09b\u508c")), this.getCash()), Account$Account.\uc7d1("\ud195\u6bbc\u1709\ub927\u170a\ua080\u50c6\uac1a\udc06\u1042\ubbaa")), this.getPassword()), Account$Account.\uc7d1("\ud195\u6bbc\u1718\ub925\u171a\ua09c\u50c4\uac1b\udc00\u1068\ubbf6\ud38c\ude19\ua076")), this.getAccountName()), Account$Account.\uc7d1("\ud195\u6bbc\u171c\ub92b\u1718\ua09a\u50dd\uac48")), this.getEmail()), Account$Account.\uc7d1("\ud195\u6bbc\u1711\ub929\u170a\ua087\u508c")), this.getHost()), Account$Account.\uc7d1("\ud195\u6bbc\u1718\ub925\u171a\ua096\u50c2\uac06\udc38\u1050\ubbfb\ud3dc")), this.getAccessLvl()), Account$Account.\uc7d1("\ud195\u6bbc\u171f\ub927\u1714\ua09a\u50dd\uac0c\udc49")), this.getFamily()), Account$Account.\uc7d1("\ud195\u6bbc\u1709\ub92f\u1717\ua0ce")), this.getPin()), Account$Account.\uc7d1("\ud195\u6bbc\u171a\ub929\u1717\ua095\u50d8\uac07\udc19\u1047\ubbe3\ud388\ude13\ua025\udaac\u662d\u076a\uca62\ua2d8")), this.getConfirmationHash()), Account$Account.\uc7d1("\ud195\u6bbc\u171a\ub92e\u1718\ua09d\u50d6\uac10\udc24\u1047\ubbe4\ud392\ude0b\ua024\uda96\u6628\u0751\uca6b\ua296\u084b\u4a2d")), this.getChangePasswordHash()), Account$Account.\uc7d1("\ud195\u6bbc\u170b\ub923\u171e\ua09a\u50c2\uac01\udc06\u1047\ubbe3\ud388\ude13\ua025\udaa0\u662d\u076d\uca6f\ua2d8")), this.getRegistrationDate()), Account$Account.\uc7d1("\ud195\u6bbc\u171a\ub92e\u1718\ua081\u50d0\uac16\udc00\u1043\ubbe5\ud3b2\ude10\ua024\uda90\u663f\u0724")), this.getCharacterSlots()), Account$Account.\uc7d1("\ud195\u6bbc\u1714\ub927\u171a\ua081\u50de\uac06\udc11\u1055\ubbaa")), Account.\u5e7d(this.getMacroses())), Account$Account.\uc7d1("\ud195\u6bbc\u171e\ub927\u1714\ua096\u50fe\uac05\udc00\u104f\ubbf8\ud38f\ude41")), this.getGameOption()), Account$Account.\uc7d1("\ud195\u6bbc\u170c\ub92f\u1730\ua09d\u50d7\uac1a\udc49")), this.getUiInfo()), Account$Account.\uc7d1("\ud190")));
}
public boolean equals(Object object) {
if (object == this) {
return true;
}
if (!(object instanceof Account)) {
return false;
}
Account account = (Account)((Object)object);
if (!account.canEqual((Object)this)) {
return false;
}
if (this.getObjectId() != account.getObjectId()) {
return false;
}
if (this.getCash() != account.getCash()) {
return false;
}
String string = this.getPassword();
String string2 = account.getPassword();
if (string == null ? string2 != null : !string.equals(string2)) {
return false;
}
String string3 = this.getAccountName();
String string4 = account.getAccountName();
if (string3 == null ? string4 != null : !string3.equals(string4)) {
return false;
}
String string5 = this.getEmail();
String string6 = account.getEmail();
if (string5 == null ? string6 != null : !string5.equals(string6)) {
return false;
}
String string7 = this.getHost();
String string8 = account.getHost();
if (string7 == null ? string8 != null : !string7.equals(string8)) {
return false;
}
EAccessLevel eAccessLevel = this.getAccessLvl();
EAccessLevel eAccessLevel2 = account.getAccessLvl();
if (eAccessLevel == null ? eAccessLevel2 != null : !eAccessLevel.equals((Object)eAccessLevel2)) {
return false;
}
String string9 = this.getFamily();
String string10 = account.getFamily();
if (string9 == null ? string10 != null : !string9.equals(string10)) {
return false;
}
String string11 = this.getPin();
String string12 = account.getPin();
if (string11 == null ? string12 != null : !string11.equals(string12)) {
return false;
}
String string13 = this.getConfirmationHash();
String string14 = account.getConfirmationHash();
if (string13 == null ? string14 != null : !string13.equals(string14)) {
return false;
}
String string15 = this.getChangePasswordHash();
String string16 = account.getChangePasswordHash();
if (string15 == null ? string16 != null : !string15.equals(string16)) {
return false;
}
if (this.getRegistrationDate() != account.getRegistrationDate()) {
return false;
}
if (this.getCharacterSlots() != account.getCharacterSlots()) {
return false;
}
if (Account.\ubc80(this.getMacroses(), account.getMacroses()) == false) {
return false;
}
String string17 = this.getGameOption();
String string18 = account.getGameOption();
if (string17 == null ? string18 != null : !string17.equals(string18)) {
return false;
}
String string19 = this.getUiInfo();
String string20 = account.getUiInfo();
if (string19 == null ? string20 != null : !string19.equals(string20)) {
return false;
}
return true;
}
protected boolean canEqual(Object object) {
return object instanceof Account;
}
public int hashCode() {
int n = 59;
int n2 = 1;
long l = this.getObjectId();
n2 = n2 * 59 + (int)(l >>> 32 ^ l);
long l2 = this.getCash();
n2 = n2 * 59 + (int)(l2 >>> 32 ^ l2);
String string = this.getPassword();
n2 = n2 * 59 + (string == null ? 43 : string.hashCode());
String string2 = this.getAccountName();
n2 = n2 * 59 + (string2 == null ? 43 : string2.hashCode());
String string3 = this.getEmail();
n2 = n2 * 59 + (string3 == null ? 43 : string3.hashCode());
String string4 = this.getHost();
n2 = n2 * 59 + (string4 == null ? 43 : string4.hashCode());
EAccessLevel eAccessLevel = this.getAccessLvl();
n2 = n2 * 59 + (eAccessLevel == null ? 43 : eAccessLevel.hashCode());
String string5 = this.getFamily();
n2 = n2 * 59 + (string5 == null ? 43 : string5.hashCode());
String string6 = this.getPin();
n2 = n2 * 59 + (string6 == null ? 43 : string6.hashCode());
String string7 = this.getConfirmationHash();
n2 = n2 * 59 + (string7 == null ? 43 : string7.hashCode());
String string8 = this.getChangePasswordHash();
n2 = n2 * 59 + (string8 == null ? 43 : string8.hashCode());
long l3 = this.getRegistrationDate();
n2 = n2 * 59 + (int)(l3 >>> 32 ^ l3);
n2 = n2 * 59 + this.getCharacterSlots();
n2 = n2 * 59 + Account.\u7d8a(this.getMacroses());
String string9 = this.getGameOption();
n2 = n2 * 59 + (string9 == null ? 43 : string9.hashCode());
String string10 = this.getUiInfo();
n2 = n2 * 59 + (string10 == null ? 43 : string10.hashCode());
return n2;
}
private static Object \u7d8a(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[8] == null) {
Account.\u631e[8] = new ConstantCallSite(MethodHandles.lookup().findStatic(Class.forName(Account$Payment.\u92cb("\u4a7e\uafaa\u0de6\u02f2\u6086\uae7e\uc1c2\u0c57\ue068\ud4a8\u7d7e\ub9fa\ua3da\u624a\u48d4\ua21c")), Account$Payment.\u92cb("\u4a70\uafae\u0df5\u02e3\u60e0\uae6a\uc1c5\u0c56\ue047\ud4e9\u7d5b\ub9ed"), methodType).asType(methodType));
}
return \u631e[8];
}
private static Object \u147a(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[12] == null) {
Account.\u631e[12] = new ConstantCallSite(MethodHandles.lookup().findVirtual(Class.forName(Payment$Payment.\u37a9("\ue8dd\u4bd3\uce2d\u2056\u6a1d\ude7d\u19b5\u74d0\u532c\ub149\u383a\u6bac\ubafb\u4452\ub886\uc443\ue352\u783c\ue505\ua2ee\ua32a\u6314\u66ff")), Payment$Payment.\u37a9("\ue8c3\u4bdd\uce08\u2043\u6a41\ude78\u19ba\u74d9"), methodType.dropParameterTypes(0, 1)).asType(methodType));
}
return \u631e[12];
}
private static Object \ubfa4(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[4] == null) {
Account.\u631e[4] = new ConstantCallSite(MethodHandles.lookup().findVirtual(Class.forName(Account$Payment.\u92cb("\u511b\ub9b6\u4a70\u86fa\u6978\ubb4d\ubfb1\ud0d4\u3103\ud9ad\ue4f2\u1452\uaee5\ueb02\uf84b\u8aa7\u0148\ub148\u7740\ua446\u4baa\u2fc3\ud028")), Account$Payment.\u92cb("\u5110\ub9a7\u4a76\u86fe\u6938\ubb45"), methodType.dropParameterTypes(0, 1)).asType(methodType));
}
return \u631e[4];
}
private static Object \u41a3(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[5] == null) {
Account.\u631e[5] = new ConstantCallSite(MethodHandles.lookup().findStatic(Class.forName(Account$Payment.\u92cb("\u9c78\u4151\ub754\u71aa\u053f\u6668\u2530\u5dc7\u6752\u4b1f\u0dd8\u85bd\u6d0e\u74c1\u465c\uddff\uc36d")), Account$Payment.\u92cb("\u9c64\u4151\ub74e\u71be\u0574\u664b\u2537"), methodType).asType(methodType));
}
return \u631e[5];
}
private static Object \u6e60(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[10] == null) {
Account.\u631e[10] = new ConstantCallSite(MethodHandles.lookup().findVirtual(Class.forName(Account$Account.\uc7d1("\u7384\ud8ef\u68fc\u651c\u4342\u866d\u47b6\u7750\u3726\ua47f\u090c\u8cb5\u3725\u0e2b\uc29d\u78b5\u0be0\u9124\u65aa\u8847\ue16a\u1116\u7971")), Account$Account.\uc7d1("\u738f\ud8fe\u68fa\u6518\u4302\u8665"), methodType.dropParameterTypes(0, 1)).asType(methodType));
}
return \u631e[10];
}
private static Object \ud3cd(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[9] == null) {
Account.\u631e[9] = new ConstantCallSite(MethodHandles.lookup().findVirtual(Class.forName(Account$Account.\uc7d1("\u1dac\u2260\u4764\u8672\u07ce\ueb93\u2f34\uf5c3\uc146\u8439\uec3a\ufda2\uf4e7\ub898\ud7d3\u5925\u24f2\uc5b1\u4064\u4151\u369b\u4d46\u972b\uef12\u02c4\u85c2\u22fb\u4e1b\u7d1a\u7395\u536b\u5edb\ufb57\u04ef\u2d8f\u9e2b\ufdd2\ua221\u4ce8\ucd93\u1d05\ucbb4\u092d\u3c3d\u5224\ud7a7\u7f14")), Account$Account.\uc7d1("\u1da1\u226a\u4771\u8628\u07e5\ueb93"), methodType.dropParameterTypes(0, 1)).asType(methodType));
}
return \u631e[9];
}
private static Object \u5e7d(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[0] == null) {
Account.\u631e[0] = new ConstantCallSite(MethodHandles.lookup().findStatic(Class.forName(Account$Account.\uc7d1("\udc16\u6791\ub87b\u0c9a\u64c3\uf692\ue932\u4516\u0feb\u4bda\u9a8e\uc523\u6095\u36b5\u4719\u4b91")), Account$Account.\uc7d1("\udc18\u6795\ub868\u0c8b\u64b9\uf688\ue915\u450b\u0ff5\u4b9d\u9aa1\uc536"), methodType).asType(methodType));
}
return \u631e[0];
}
private static Object \ud0a0(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[3] == null) {
Account.\u631e[3] = new ConstantCallSite(MethodHandles.lookup().findStatic(Class.forName(Payment$Payment.\u37a9("\u4766\u41af\uf936\u2302\uf0ac\u18b7\u4500\u3f5f\uaebc\uc754\ub0b8\u5060\u4328\u642b")), Payment$Payment.\u37a9("\u477a\u41af\uf92c\u2316\uf0e7\u1894\u4507"), methodType).asType(methodType));
}
return \u631e[3];
}
private static Object \u76c3(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[1] == null) {
Account.\u631e[1] = new ConstantCallSite(MethodHandles.lookup().findStatic(Class.forName(Payment$Payment.\u37a9("\u6698\u19c3\ufa6d\u4690\u2cd6\uc334\u70a9\u97e8\ufa19\u8191\ucc09\u036f\ucc9d\u0671\u3e74\u1b6b")), Payment$Payment.\u37a9("\u6691\u19d7\ufa69\u4683\u2c9d\uc336\u70bc\u97d2\ufa17\u81d2\ucc3f\u035b\ucc87\u0669\u3e7d\u1b6f\u1a9e"), methodType).asType(methodType));
}
return \u631e[1];
}
private static Object \ua9af(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[11] == null) {
Account.\u631e[11] = new ConstantCallSite(MethodHandles.lookup().findVirtual(Class.forName(Account$Log.\u44e3("\udd00\ua0b5\ucc75\u81d9\u89c6\u3bcb\u7db3\udd2b\u6990\u2ba2\u6801\ud49d\u48c8\u627a\ufa45\u294b\u8184\u7f97\uec50\u6e71\uff7c\u31f0\ud66a")), Account$Log.\u44e3("\udd0b\ua0a4\ucc73\u81dd\u8986\u3bc3"), methodType.dropParameterTypes(0, 1)).asType(methodType));
}
return \u631e[11];
}
private static Object \ubc80(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[6] == null) {
Account.\u631e[6] = new ConstantCallSite(MethodHandles.lookup().findStatic(Class.forName(Account$Account.\uc7d1("\udcc2\uef83\u4e78\u3e32\u6229\uc46a\ua99d\u45d4\u8def\ua7bc\ua777\u3166\ue1cc\u020e\u4ee2\u2ab4")), Account$Account.\uc7d1("\udccc\uef87\u4e6b\u3e23\u6242\uc46e\ua99c\u45dc\u8def\ua7e1"), methodType).asType(methodType));
}
return \u631e[6];
}
private static Object \u9433(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[2] == null) {
Account.\u631e[2] = new ConstantCallSite(MethodHandles.lookup().findStatic(Class.forName(Payment$Payment.\u37a9("\ubb28\u0f62\u0536\u866f\u2ec5\uc04a\ueccb\u6c3c\ua2c3\u6f4a\uca00\u3eb4\ud512\u9ce1\uebf2\ua9e6\u973d\uf60f\u35d4\udfd2\ua506\ucc46\ub973\uc866\u1966\u0273\u9c72\u06e2\u117d\udc4e\u6057\u7767\u613e\u9307\u29fd\u52a8\ufd6f\u5971\uaaed\u9cf9\ua829\ue10a\u92d5\u5977\ua484\u5373\u65c5")), Payment$Payment.\u37a9("\ubb2c\u0f68\u052f\u8608\u2ec9\uc05d\uecd0\u6c38\ua2c0\u6f5c\uca4b"), methodType).asType(methodType));
}
return \u631e[2];
}
private static Object \u6c19(Object object, String string, MethodType methodType) {
if (\u631e == null) {
\u631e = new Object[13];
}
if (\u631e[7] == null) {
Account.\u631e[7] = new ConstantCallSite(MethodHandles.lookup().findVirtual(Class.forName(Payment$Payment.\u37a9("\u0d47\u0366\u1b17\u8962\u7a7a\ub8fc\ub599\u5e10\uf777\u9aee\ufc1d\uc6ea\u886c\u16cf\ufdd6\u87c1\u0a95\u6054\u45d5\u67be\ue404\u8ad2\uda85")), Payment$Payment.\u37a9("\u0d4c\u0377\u1b11\u8966\u7a3a\ub8f4"), methodType.dropParameterTypes(0, 1)).asType(methodType));
}
return \u631e[7];
}
}
Note:Code:private final long objectId;
private long cash;
private String password;
private String accountName;
private String email;
private String host;
private EAccessLevel accessLvl = EAccessLevel.USER;
private String family = "";
private String pin = "";
private String confirmationHash = "";
private String changePasswordHash = "";
private long registrationDate;
private int characterSlots;
private Macros[] macroses;
private String gameOption;
private String uiInfo;
private static volatile transient Object[] \u631e;
if you try to add the account manually i don't think it works since when i start login server i get an error most likely from the files trying to read the account field i added maybe i'm doing something wrong? idk if you get it working let me know lol.
interesting both are deleted xd i will upload to other place i will edit this post when ready.
@DjFerry did you manage to compile the launcher? I still get the same errors from the original launcher.
btw i posted the database structure above.
still no luck if i find something i will for sure post it, but well my knowledge is a bit limited jajaj but i will try thnx for post the database structure :) its quite similar to the old one.
Yeah did also the disable the keys ( token ) and set autoregister accounts without succes.
there is also a setting in the config folder of gameserver and loginserver where you can disable the keys (token) and set auto register accounts, but this has not worked for me but then again for this to work maybe you have to pass a specific command line through the client?
Whatever you think,but you wrong.
// Decompiled with JetBrains decompiler// Type: CrimsonDesertLauncher.ViewModels.DashboardViewModel// Assembly: CrimsonDesertLauncher, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null// MVID: 7F28607C-CFC9-48E3-89A9-FAEB0B79E7B3// Assembly location: C:\Program Files\OgreFest Launcher\CrimsonDesertLauncher.exeusing \u003CPrivateImplementationDetails\u003E\u007BD49B64D5\u002D82BA\u002D414A\u002DAD3F\u002D07FAB3390E60\u007D;
Read and you will see.Obliviusly includes should not look this way.Its completely messed up.Links and pointers completely messed up within source.Without proper structure you never compile this source.
do someone have the useful client! can share the dl link?
Long thread, and yet, not a single mirror.
Anyone out there who can add a mirror?
BTW what launcher you use?
@DjFerry
Thanks for sending the Launcher but this seems to be a lot of rework to be done and its probably just easier to make one from scratch.
Hi guys, anyone have a mirror? <3 thanks
BDO Server
There is mirror.Use it.
BTW Happy new year.
Thanks <3
And Happy new year too
there is a mess in launcher src, can't figure it out with missing references and wrong methods names
it's even inheriting from a decompiled class :(
hopping someone uploads a more clearer one or even compiled if he succeeded compiling it.
1)Download Server
2)Download Client
3)Download MongoDB
4)Install MongoDB
5)Start mongod.exe in folder MongoDB\Server\3.6\bin
5)Start MongoDB Compass and setting connection default host:localhost port:27017
6)folder data transferring in folder gameserver
7)start loginserver and gameserver
8)start mongo.exe in folder MongoDB\Server\3.6\bin and write query create account in loginserver
9)Open folder client and create label and enter the login and password of the created accountCode:use loginserver
db.createUser(
{
user: "login",
pwd: "password",
roles: [ { role: "readWrite", db: "loginserver" } ]
}
)
admin - login
123456 - pass
https://pp.userapi.com/c830409/v8304...XqLAcHOdFI.jpg
10)Start this label
11)Have a good game
if this error
https://i.imgur.com/BzZ5406.png
need create service.ini in folder gameclient
https://pp.userapi.com/c830409/v8304...MGMg7P6gnU.jpgCode:[SERVICE]
TYPE=NA
RES=_EN_
nationType=1
damageMeter=1
[NA]
AUTHENTIC_DOMAIN=127.0.0.1
AUTHENTIC_PORT=8888
PATCH_URL=http://downtest1.black.game.daumserver.com/patch/
didn't even think about simply expecting those parameters lmao
thank you man, finally... tried everything except creating a user in loginserver xDDD really thnx for this. ( well and doing wrong the parameters things... without that also will never found the way to doit )
Getting this error:
https://imgur.com/a/cfH8r
once i click ok i get this:
https://imgur.com/a/N19Wg
then it closes after i click ok again, any idea why this is happening?
you start with a direct link?
then in destination you need to add those parameters
starting it with a shortcut as you cant add parameters to the executable itself:
https://imgur.com/a/0SCSc
This is my first time using mongodb, can someone give me a tutorial on how to add the databases? I tried to create a database, but it seems that I only get the option to create new ones completely from scratch but no options to import existing ones. i tried googling but i can't figure out how to connect the database with the BDO server files. Help would be greatly appreciated!
Fu all and happy new year from hungary (currently) with palinka <3
Sent from my SM-N910F using Tapatalk
When I tried to run login.bat/gameserver.bat CMD pops up for a split second, however nothing happens after that.
Also I'm confused with one part in your tutorial, at step 6) "folder data transferring in folder gameserver", can you explain what that step is and how to do it please?
Thank you for your help.
Edit: thanks to nazgul111 I understand what step 6 means, but same thing happens, upon starting the .bat files, nothing happens besides the CMD popping up for a second.
Copy here.
https://imgur.com/a/LiGQm
Paste Here
https://imgur.com/a/5wzzt
As for the 2nd part, you need to start gameserver/loginserver first, then mongod will start up normally
@Kirito2105 is there any chance you could upload your blackdesert64.exe file mate?
I can login and all it works well now thanks Kirito, but am I the only one encountering lags ig and receiving a bunch of giath helmets xD?
(I'm not complaining btw that's a great release)
gameserver loads the CPU from 10% to 90% of the races, where is the leak??? CPU 3770k
so can anyone with ogrefest client share their .exe files from the game? as gamezbd client files wont allow me to launch the game without the launcher.
I'm currently downloading the ogrefest client through their patcher.
here's the download link: http://ogrefest.online/download/setup.exe
found a place where tcheka or mistakes when spawn_ai = false, the processor does not boot at all! any ideas? but of course the monsters then, too, no!
tks all.i got server working now.downloading ogrefest client
So we got server running well...
There is client what is working well...
There is server source around
Its looks similar like aion "progress"
So far from a dedicated section?
Sent from my SM-N910F using Tapatalk
For the email reward system, you ned to go inside gameserver / bin / configs and in event.properties change things inside.
event.auto.reward.items = 11013;0;1 // that is the giath helmet so use the default one if you want the 1000 pearls. ( change the time... )
17059 = box of 100
17072 = box of 1000
17076 = box of 10000 + 1500
- - - Updated - - -
yeah i hope this will happen...
We're missing the login server sources tho :s
Except that so far it's great :)
edit : access levels :
BANNED(-1), USER(0), TESTER(1), MODERATOR(2), GAMEMASTER(3), ADMIN(4);
https://s.put.re/NuSR5yW.JPG