All Activity

This stream auto-updates   

  1. Past hour
  2. Today
  3. open

    i believe that to upgrade spirit stones initially u had to go to tyraen or somen strange name , the blacksmith that all we know now as the npc that upgrade your epic weapon. But for all other questions i really do not know how to answer , if someone can help
  4. open

    up and up and up
  5. So basically I want to remove the hp bar text which reveals the exact HP amount of your selected target (highlighted it in yellow) ^ Here's the part I want to remove Thank you
  6. open

    Delete everything from the quest/object folder and rebuild all quests again.
  7. Yesterday
  8. open

    It's because of wait() i think.
  9. open

    sameeeeeeeeeeeeeee help please
  10. open

    I want to disable when you move your mouse on character to not show the player name and guild. I think is from source, because i haven't found anything from client. Solution is from game.py def OnRender(self): at ShowCharacterTextTail . You can create your function to return it.
  11. Wow, you removed some parentheses, very useful contribution indeed.
  12. Open input.cpp Make your Analyze function like mine: int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData) { if (bHeader == 10) return 0; if (bHeader == HEADER_CG_TEXT)// HEADER_CG_TEXT = 64 -> 64 IN HEXADECIMAL = 0x40 { ++c_pData; const char * c_pSep; if (!(c_pSep = strchr(c_pData, '\n'))) return -1; if (*(c_pSep - 1) == '\r') --c_pSep; std::string stResult; std::string stBuf; stBuf.assign(c_pData, 0, c_pSep - c_pData); sys_log(0, "SOCKET_CMD: FROM(%s) CMD(%s)", d->GetHostName(), stBuf.c_str()); if (!stBuf.compare("PLAYER_ONLINE")) { std::string risultato=""; if (!IsInList(inet_ntoa(d->GetAddr().sin_addr))) { risultato += "[Web Panel] Access Denied."; sys_err("[Web Panel] %s has tried to connect in the web panel.", inet_ntoa(d->GetAddr().sin_addr)); }else{ int iTotal; int *paiEmpireUserCount; int iLocal; DESC_MANAGER::instance().GetUserCount(iTotal, &paiEmpireUserCount, iLocal); risultato += format("Player Online: %d\nShinsoo: %d\nChunjo: %d\nJinno: %d", iTotal, paiEmpireUserCount[1], paiEmpireUserCount[2], paiEmpireUserCount[3]); } stResult += risultato; } else if (!stBuf.compare("PLAYER_RANKLIST")) { std::string risultato=""; if (!IsInList(inet_ntoa(d->GetAddr().sin_addr))) { risultato += "[Web Panel] Access Denied."; sys_err("[Web Panel] %s has tried to connect in the web panel.", inet_ntoa(d->GetAddr().sin_addr)); }else{ std::string Ranklist=""; char classifica[1024]={0}; snprintf(classifica, sizeof(classifica), "SELECT name, level FROM player.player%s WHERE account_id=(SELECT id FROM account.account%s WHERE status='OK' AND id=account_id) ORDER BY level DESC LIMIT 10;", get_table_postfix(), get_table_postfix()); SQLMsg * res = DBManager::instance().DirectQuery(classifica); if (res->Get()->uiNumRows == 0) { M2_DELETE(res); risultato += "Players not found."; } Ranklist+="<Top 10 Player>\n\n"; int pos=0; for (uint i=0; i<res->Get()->uiNumRows; i++) { MYSQL_ROW rows=mysql_fetch_row(res->Get()->pSQLResult); std::string name=std::string(rows[0]); if (name[0] != '[') { pos=i+1; std::string space=""; for (unsigned s=0; s<=(25 - (int)name.length()); s++) space+=" "; Ranklist+=format("%d | %s%s | Lv.%s\n", pos, name.c_str(), space.c_str(), rows[1]); }else{ pos=i-1; } } M2_DELETE(res); risultato += Ranklist; } stResult += risultato; } else if (stBuf.find("ACCOUNT_REGISTER") != std::string::npos) { std::string risultato=""; if (!IsInList(inet_ntoa(d->GetAddr().sin_addr))) { risultato += "[Web Panel] Access Denied."; sys_err("[Web Panel] %s has tried to connect in the web panel.", inet_ntoa(d->GetAddr().sin_addr)); }else{ std::vector<std::string> args; std::string status; boost::split(args, stBuf, boost::is_any_of(",")); if (args.size() > 0 && args[0].compare("ACCOUNT_REGISTER") == 0) { status=RegisterAccount(args[1], args[2], args[3], args[4]); }else{ status="[RegisterAccount] Syntax Error."; } risultato += status; } stResult += risultato; } stResult += "\n"; d->Packet(stResult.c_str(), stResult.length()); return (c_pSep - c_pData) + 1; } else if (bHeader == HEADER_CG_MARK_LOGIN) { if (!guild_mark_server) { sys_err("Guild Mark login requested but i'm not a mark server!"); d->SetPhase(PHASE_CLOSE); return 0; } sys_log(0, "MARK_SERVER: Login"); d->SetPhase(PHASE_LOGIN); return 0; } else if (bHeader == HEADER_CG_STATE_CHECKER) { if (d->isChannelStatusRequested()) { return 0; } d->SetChannelStatusRequested(true); db_clientdesc->DBPacket(HEADER_GD_REQUEST_CHANNELSTATUS, d->GetHandle(), NULL, 0); } else if (bHeader == HEADER_CG_PONG) Pong(d); else if (bHeader == HEADER_CG_HANDSHAKE) Handshake(d, c_pData); #ifdef _IMPROVED_PACKET_ENCRYPTION_ else if (bHeader == HEADER_CG_KEY_AGREEMENT) { d->SendKeyAgreementCompleted(); d->ProcessOutput(); TPacketKeyAgreement* p = (TPacketKeyAgreement*)c_pData; if (!d->IsCipherPrepared()) { sys_err ("Cipher isn't prepared. %s maybe a Hacker.", inet_ntoa(d->GetAddr().sin_addr)); d->DelayedDisconnect(5); return 0; } if (d->FinishHandshake(p->wAgreedLength, p->data, p->wDataLength)) { if (g_bAuthServer) { d->SetPhase(PHASE_AUTH); } else { d->SetPhase(PHASE_LOGIN); } } else { sys_log(0, "[CInputHandshake] Key agreement failed: al=%u dl=%u", p->wAgreedLength, p->wDataLength); d->SetPhase(PHASE_CLOSE); } } #endif else sys_err("Handshake phase does not handle packet %d (fd %d)", bHeader, d->GetSocket()); return 0; } NOW, THE FUNCTIONS: //REMEMBER AT THE TOP OF FILE: //#include <fstream> //#include <boost/algorithm/string.hpp> inline std::string format(const char* fmt, ...) { int size = 512; char* buffer = 0; buffer = new char[size]; va_list vl; va_start(vl, fmt); int nsize = vsnprintf(buffer, size, fmt, vl); if(size<=nsize){ delete[] buffer; buffer = 0; buffer = new char[nsize+1]; nsize = vsnprintf(buffer, size, fmt, vl); } std::string ret(buffer); va_end(vl); delete[] buffer; return ret; } inline bool IsInList(const char *ip) { bool ritorno=false; std::ifstream ifs("locale/pannello_web_ip.txt", std::ifstream::in); if (ifs.fail()) { sys_err("[Web Panel] The file [locale/pannello_web_ip.txt] was not found."); return ritorno; } char c=ifs.get(); std::string read; while (ifs.good()) { read += c; c=ifs.get(); } ifs.close(); if (strstr(read.c_str(), std::string(std::string(ip)+std::string("\n")).c_str()) != NULL) ritorno=true; return ritorno; } bool is_email(std::string const& address) { size_t at_index = address.find_first_of('@', 0); return at_index != std::string::npos && address.find_first_of('.', at_index) != std::string::npos; } std::string RegisterAccount(std::string login, std::string password, std::string email, std::string social_id) { char EscapedLogin[255]={0}; char EscapedPassword[255]={0}; char EscapedSocialID[255]={0}; char EscapedEmail[255]={0}; DBManager::instance().EscapeString(EscapedLogin, sizeof(EscapedLogin), login.c_str(), strlen(login.c_str())); DBManager::instance().EscapeString(EscapedPassword, sizeof(EscapedPassword), password.c_str(), strlen(password.c_str())); DBManager::instance().EscapeString(EscapedSocialID, sizeof(EscapedSocialID), social_id.c_str(), strlen(social_id.c_str())); DBManager::instance().EscapeString(EscapedEmail, sizeof(EscapedEmail), email.c_str(), strlen(email.c_str())); if (strlen(EscapedLogin)<2) return "[RegisterAccount] Login can't be < 2 chars."; if (strlen(EscapedPassword)<3) return "[RegisterAccount] Password can't be < 3 chars."; if (strlen(EscapedEmail)<5) return "[RegisterAccount] Email can't be < 5 chars."; if (strlen(EscapedLogin)>20) return "[RegisterAccount] Login can't be > 20 chars."; if (strlen(EscapedPassword)>30) return "[RegisterAccount] Password can't be > 30 chars."; if (strlen(EscapedEmail)>50) return "[RegisterAccount] Email can't be > 50 chars."; if (strlen(EscapedSocialID)<3) return "[RegisterAccount] Social id can't be < 3 chars."; if (strlen(EscapedSocialID)>7) return "[RegisterAccount] Social id can't be > 7 chars."; if (!is_email(std::string(EscapedEmail))) return "[RegisterAccount] Email is not valid."; char iscrizione[1024]={0}; snprintf(iscrizione, sizeof(iscrizione), "INSERT INTO account.account%s (login, password, social_id, email, create_time, status, gold_expire, silver_expire, safebox_expire, autoloot_expire, fish_mind_expire, marriage_fast_expire, money_drop_rate_expire) " "VALUES ('%s', password('%s'), '%s', '%s', NOW(), 'OK', '2025-01-01 00:00:00', '2025-01-01 00:00:00', '2025-01-01 00:00:00', '2025-01-01 00:00:00', '2025-01-01 00:00:00', '2025-01-01 00:00:00', '2025-01-01 00:00:00')", get_table_postfix(), EscapedLogin, EscapedPassword, EscapedSocialID, EscapedEmail); std::auto_ptr<SQLMsg> res(DBManager::instance().DirectQuery(iscrizione)); if (res->Get()->uiAffectedRows == 0 || res->Get()->uiAffectedRows == (uint32_t)-1) return "[RegisterAccount] The account name already exists, try with another account name."; return "[RegisterAccount] Registration done!"; } PYTHON EXAMPLE: def __Try(ip, port): try: import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, port)) s.send("\x40PLAYER_ONLINE\n") s.recv(100) s.send("\x40PLAYER_ONLINE\n") print s.recv(1024) s.send("\x40PLAYER_RANKLIST\n") print s.recv(1024) s.send("\x40ACCOUNT_REGISTER,Raffa123,pass123,hello@gmail.com,1234567\n") print s.recv(1024) s.close() except (socket.gaierror, socket.error, socket.herror, socket.timeout): print "[Server] Server is not online. [%s:%d]" % (ip, port) __Try("IP_CH1", PORT_CH1) import os os.system("pause") BE SAFE YOUR PANEL: Open packet.h find HEADER_CG_TEXT = 64, and change the 64 with another number of packet, but remember that the number must be unused by other packet. And replace in your scripts the \x40 with the other number in HEXADECIMAL, because 64 in hexadecimal is 0x40, use google to find the hexadecimal of a number and put the escape char, final RESULT: \0x40MYCOMMAND REMEMBER TO create the pannello_web_ip.txt into your locale folder. IN THAT FILE PUT THE IP ADDRESS OF YOUR HOST OF THE WEBSITE, for any errors or log, just check the syserr.txt. You can use your SOCKET API in PHP or Other languages With this you can insert your registration or ranklist or status or others and others without PUT THE "CREDENTIAL of Database".
  13. News to the current state: Game & db are both in final testing. If it works without any kinks I'll ship. Expect it very soon!
  14. open

    localeInfo.UI_DEF_FONT = "Arial:14" localeInfo.UI_DEF_FONT_LARGE = "Arial:16" //or localeInfo.UI_DEF_FONT = "Tahoma:12" localeInfo.UI_DEF_FONT_LARGE = "Tahoma:16"
  15. int _get_ranklist(lua_State* L) { std::string Ranklist=""; char classifica[1024]={0}; snprintf(classifica, sizeof(classifica), "SELECT name, level FROM player.player%s WHERE account_id=(SELECT id FROM account.account%s WHERE status='OK' AND id=account_id) ORDER BY level DESC LIMIT 10;", get_table_postfix(), get_table_postfix()); SQLMsg * res = DBManager::instance().DirectQuery(classifica); if (res->Get()->uiNumRows == 0) { M2_DELETE(res); lua_pushstring(L, "There aren't players now."); sys_err("Query: %s", classifica); return 1; } Ranklist+="<Top 10 Player>[ENTER][ENTER]"; int pos=0; for (uint i=0; i<res->Get()->uiNumRows; i++) { MYSQL_ROW rows=mysql_fetch_row(res->Get()->pSQLResult); std::string name=std::string(rows[0]); if (name[0] != '[') { pos=i+1; std::string space=""; for (unsigned s=0; s<=(25 - (int)name.length()); s++) space+=" "; Ranklist+=format("%d | %s%s | Lv.%s[ENTER]", pos, name.c_str(), space.c_str(), rows[1]); }else{ pos=i-1; } } M2_DELETE(res); lua_pushstring(L, Ranklist.c_str()); return 1; }
  16. open

    Hello community. Does anyone know how to change the font of the client? I want the font to be like the photo below. Thanks for your time.
  17. open

    hmm try change IME (config.exe), i had that problem with my old laptop once, and updating drivers (graphic card) was solved, so try it.
  18. open

    You can still let others join in using Virtual Machine from Home and not using hamachi. Are you using source files?
  19. open

    I don't think so, when it happens with me, happens with my friends... But I'll ask them to check if it's happen, since I didn't opened the server yet...
  20. open

    maybe your graphic card?
  21. open

    BUMP This bug is back... It was solved by himself, but now it's back and I don't know what is the problem...
  22. Hello I am looking for a website with an item shop with several categories so be able to add categories if necessary, one of which would put 10 item randomly, be able to recharge the account in currency via starpass and paypal, a system of voting, With the rankings players, voter, guild, a system of shop to buy items to players with currency item shop. I can put up to 200euro in a site.
  23. void CParty::UpdateOfflineState(DWORD dwPID) { TPacketGCPartyAdd p; p.header = HEADER_GC_PARTY_ADD; p.pid = dwPID; memset(p.name, 0, CHARACTER_NAME_MAX_LEN + 1); for (TMemberMap::iterator it = m_memberMap.begin(); it != m_memberMap.end(); ++it) { if (it->second.pCharacter && it->second.pCharacter->GetDesc()) { if (it->second.pCharacter->GetDungeon()) it->second.pCharacter->GetDungeon()->ExitAllToStartPosition(); else it->second.pCharacter->GetDesc()->Packet(&p, sizeof(p)); } } }
  24. Then read again what Vanilla said, he gave you the answers you need
  25. Good Job
  26. open

    Hello dev i havehave a problem. I am from greece and i have translate all quest in usr/home/game/share/locale/romania/quest and when i press on blacksmith i have some quest other language i check to object but it's not there too . Please help me its very immportant (sorry for my bad english and thank you very much)
  1. Load more activity